Tx1安裝執行Caffe-SSD
https://blog.csdn.net/jesse_mx/article/details/53404563
安裝caffe-ssd前,要先安裝CUDA和CUDNN
安裝CUDA包,下載的版本要與TK1的CUDA Driver版本一致,否則後面的samples無法執行.
TX1,2.4 cuda-repo-l4t-8-0-local_8.0.34-1_arm64.deb
https://blog.csdn.net/zyazky/article/details/52388605
1.安裝CUDA包
sudo dpkg -i cuda-repo-l4t-8-0-local_8.0.34-1_arm64.deb
2.更新apt-get
sudo apt-get update
3.安裝samples和toolkit
sudo apt-get install cuda-samples-8-0
sudo apt-get install cuda-toolkit-8-0
4.設定當前使用者下可以訪問GPU
sudo usermod -a -G video $USER
5.修改環境變數
cd ~
vim .bashrc
在最後一行加上:
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib:$LD_LIBRARY_PATH
source .bashrc
6.檢視編譯環境是否安裝成功
cd /usr/local/cuda
nvcc -V
7.編譯與執行例程
檢視當前目錄中是否有samples:ll
複製samples:cuda-install-samples-6.0.sh /home/ubuntu/
cd NVIDIA_CUDA-8.0_Samples/
ls
make
https://blog.csdn.net/lengconglin/article/details/77506386
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#axzz4qYJp45J2
unzip cuDNN-v5.1.zip
cd cuDNN
2.3.2. Installing from a Debian File
Navigate to your <cudnnpath> directory containing cuDNN Debian file.
Install the runtime library, for example:
sudo dpkg -i libcudnn5_5.1.5-1+cuda8.0_arm64.deb
Install the developer library, for example:
sudo dpkg -i libcudnn5-dev_5.1.5-1+cuda8.0_arm64.deb
Install the code samples and the cuDNN Library User Guide, for example:
sudo dpkg -i libcudnn5-doc_5.1.5-1+cuda8.0_arm64.deb
2.4. Verifying
Copy the cuDNN sample to a writable path.
$cp -r /usr/src/cudnn_samples_v5/ $HOME
Go to the writable path.
$ cd $HOME/cudnn_samples_v5/mnistCUDNN
Compile the mnistCUDNN sample.
$make clean && make
Run the mnistCUDNN sample.
$ ./mnistCUDNN
If cuDNN is properly installed and running on your Linux system, you will see a message similar to the following:
Test passed!
安裝依賴包
依次安裝以下依賴項,如果不想每一次install都出現yes or no的提示項,可以在命令末尾加上“-y”。
$ sudo apt-get install build-essential -y #必要的編譯工具依賴
- 1
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
- 1
$ sudo apt-get install --no-install-recommends libboost-all-dev
- 1
$ sudo apt-get install libatlas-base-dev
- 1
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
- 1
PS.畢竟不是膝上型電腦,下載安裝過程可能極為緩慢,需要有充足的時間和耐心。
安裝easy_install和pip
pip和easy_install的作用是方便以後安裝python軟體包。
下載安裝easy_install
$ wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
- 1
也可以使用博主上傳的py檔案:ez_setup.py
$ sudo python ez_setup.py --insecure
- 1
下載安裝pip
$ wget https://bootstrap.pypa.io/get-pip.py
- 1
也給出下載地址:get-pip.py
$ sudo python get-pip.py
- 1
PS.如果以上都兩個包都很難安裝上,也沒關係。不過,至少要安裝python-pip,使用如下命令:sudo apt-get install python-pip
安裝python常用庫
$ sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran python-numpy
- 1
克隆ssd原始碼
$ git clone https://github.com/weiliu89/caffe.git
$ cd caffe/
$ git checkout ssd # 切換至分支ssd
- 1
- 2
- 3
安裝pycaffe所需依賴包
$ cd ~/caffe/python
$ sudo su # 使用超級許可權
$ for req in $(cat "requirements.txt"); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done
- 1
- 2
- 3
PS.終端輸入Ctrl+Shift+d退出sudo su模式
編譯caffe-ssd
這裡建議先把能改的都改了,最後進行編譯,一次就可以成功,可以節省不少時間。
修改Makefile.config
$ cd ~/caffe
$ cp Makefile.config.example Makefile.config
$ gedit Makefile.config
- 1
- 2
- 3
- 將
USE_CUDNN := 1
取消註釋 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
後面打上一個空格 然後新增/usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
後面打上一個空格,然後新增/usr/lib/aarch64-linux-gnu/hdf5/serial/
- 在
CUDA_ARCH :=
後面加一句-gencode arch=compute_53,code=sm_53
,最好同時刪除sm_35以下以及sm_53以上的條目
說明:第1步的作用是使用cudnn編譯,第2、3步是新增hdf5的路徑,這個路徑和x86的PC是不一樣的,沒有的話會出現找不到hdf5.h的錯誤,第4步是為了匹配TX1的GPU計算能力,因為查到其計算能力為5.3,加上之後使得GPU加速發揮得更好。
如有需要,可參考博主的配置檔案:Makefile.config for SSD
修改Makefile
$ cd ~/caffe
$ gedit Makefile
- 1
- 2
進入檔案,修改NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
為 NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
說明:修改這一步是為了避免出現string.h ‘memcy’ was not declared in this scope
這樣的錯誤,這種錯誤通常是由於gcc版本太新而導致的。
建立hdf5軟連線
$ cd /usr/lib/aarch64-linux-gnu
$ sudo ln libhdf5_serial.so.10.1.0 libhdf5.so
$ sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
$ sudo ldconfig # 使連線生效
- 1
- 2
- 3
- 4
說明:這一步是為了建立軟連線,避免出現找不到lhdf5_hl和lhdf5的錯誤。
make caffe-ssd
$ cd ~/caffe
$ make all -j4
$ make test -j4
$ make runtest -j4 # 如果能執行demo,make test & runtest非必須
$ make pycaffe -j4
$ make matcaffe -j4 # 可選,但要修改其他選項,參看底部文獻
- 1
- 2
- 3
- 4
- 5
- 6
PS.編譯過程中可能會出現nvcc warning: The 'compute_20'and 'sm_21' architectures are ......
這種警告,原因是TX1的計算能力是5.3,管不到2.0的情況,可以在Makefile.config中刪除“compute_20”所在條目;也可能會提示找不到openblas庫,那就繼續安裝openblas:sudo apt-get install libopenblas-dev
,然後重新編譯。
$ cd ~/caffe/python
$ python
$ import caffe
- 1
- 2
- 3
上面是在測試Python環境,只要沒報錯,就可以說明編譯成功了。也有可能會出警告:UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment
這種情況也不要緊,可用下面命令消除之(終端Python環境下):
$ import matplotlib
$ matplotlib.use('TkAgg')
- 1
- 2
PS.make runtest -j4
居然運行了一個多小時,已經無力吐槽。。。
測試AlexNet
$ cd ~/caffe
$ ./build/tools/caffe time --gpu 0 --model
$ ./models/bvlc_alexnet/deploy.prototxt
- 1
- 2
- 3
測試結果為total time:10687.4ms
執行caffe-ssd
在Jetson TX1上執行ssd的過程和電腦上基本一樣,詳細的步驟可以參考博主的文章:
SSD:Single Shot MultiBox Detector的安裝配置和執行
這裡,仍然簡要說下步驟:
下載使用已有模型
想直接看看ssd效果的話,可以下載作者訓練好的模型:下載地址
得到了一個壓縮包:models_VGGNet_VOC0712_SSD_300x300.tar.gz ,將其解壓,把其中的VGGNet資料夾放到/home/ubuntu/caffe/models/目錄之下。
增加pycaffe環境變數
$ cd
$ echo "export PYTHONPATH=/home/ubuntu/caffe/python:$PYTHONPATH" >> ~/.profile
$ source ~/.profile
$ echo $PYTHONPATH #檢查環境變數的值
- 1
- 2
- 3
- 4
說明:如果沒有這一步的話,可能會出現no module named caffe
或者no module named caffe-proto
這種錯誤。
進行webcam檢測
$ cd ~/caffe
$ python examples/ssd/ssd_pascal_webcam.py
- 1
- 2
按理說過一會應該會出現檢測視窗,但非常不幸的是,視窗全黑,只看到幀率,看不見畫面。原因推測是Jetson TX1的CSI攝像頭介面不支援這種程式呼叫,沒辦法,只得外接USB攝像頭來看演示效果。首先在.profile檔案中新增環境變數export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libv4l/v4l1compat.so
,然後在py檔案中修改”webcam_id”為1即可。
進行video檢測
$ cd ~/caffe
$ python examples/ssd/ssd_pascal_video.py
- 1
- 2
這裡會對內建的演示視訊進行檢測,這次沒有出問題,可以執行成功,我就不放圖了,效果和電腦比較有一定差距,幀率比較低,看以後能不能想辦法加速一下。
PS.esc鍵可以退出視窗,在終端鍵入Ctrl+Shift+c可強制退出。
進行image檢測
參看博主之前的博文:SSD: Single Shot MultiBox Detector檢測單張圖片
TX1開發板也研究一週了,ssd也還算能跑的通,看來下一步就得訓練自己的資料模型了。