該來的還是要來
之前為了偷懶想到使用 Docker 迴避 Caffe SSD 編譯的難題。結果,「天道好輪迴,蒼天饒過誰」。Docker 映象內無法呼叫 GUI 顯示以及攝像頭,沒法跑 ssd_pascal_webcam.py 做實時 Object Detection。所以沒辦法又得重新嘗試編譯 Caffe SSD。現在就記錄一下,我在編譯 Caffe SSD 時候遇到的坑。
如果你僅需要訓練出 model 而後移植到別的機器上做推斷的話,你可以直接使用我前一篇文章的方法安裝 Docker,簡單而便捷。「傳送門」
下載原始碼
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd # 這一步很重要,不要忘記
# 如果你沒有 git 的話就使用 「sudo apt-get install git」安裝 git
複製程式碼
依賴安裝
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install cmake build-essential
複製程式碼
# 修改 Makefile.config 檔案
cp Makefile.config.example Makefile.config
vim Makefile.config
複製程式碼
# 修改內容如下
# 第5行,開啟 cuDNN 如果你不想用 GPU 就別改這個,去掉第8行的 # 以開啟 CPU_ONLY
USE_CUDNN := 1
# 我沒有選擇開啟 OpenCV
# 如果你 CUDA 版本為 9.0 及以上,35 行開始修改如下
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
# 57 行
BLAS := open
# 101 行
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
# 102 行
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
# 修改好後 :wq 退出並儲存
複製程式碼
# 修改 Makefile
vim Makefile
複製程式碼
# 改動如下
# 181 行
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
# 266 行
LIBRARIES += boost_thread stdc++ boost_regex
# 修改好後 :wq 儲存並退出
複製程式碼
開始編譯
開始編譯之前一定要保證你的 protobuf 版本低於3.0。 我使用的版本為 2.6.1
# 使用下面命令檢視版本
protoc --version
複製程式碼
如果你的版本很高,降級過程如下: 首先在這裡下載 protobuf 2.6.1。下載完成後放在你想放的任何目錄,然後終端中進入該目錄並執行
tar -zxvf protobuf-2.6.1.tar.gz
cd protobuf-2.6.1
./configure
make
make check
sudo make install
# 如果以上 make 命令提示沒有許可權,則命令前加 sudo
# 完成後檢查 protobuf 版本
protoc --verison
# libprotoc 2.6.1
複製程式碼
# 編譯過程在 Caffe 根目錄下進行 ~/caffe/
make all -j8
make py
make test -j8
# 如果提示許可權不足,上述命令前均加 sudo
# 如果 make py 過程中提示錯誤,嘗試 sudo apt-get install python-numpy 解決
# 驗證是否成功
cd python
python
import caffe
# 若未報錯則成功,下一步是新增環境變數
vim ~/.bashrc
# 在檔案末尾新增如下內容
export PYTHONPATH=/home/ubuntu/work/caffe_ssd/caffe/python:$PYTHONPATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
# :wq 儲存退出
source ~/.bashrc
複製程式碼
結語
大功告成,如何訓練自己的資料集請看我另一篇文章。「傳送門」 如果你有任何疑問,歡迎留言詢問。
參考
blog.csdn.net/yhaolpz/art… github.com/rbgirshick/… stackoverflow.com/questions/3… stackoverflow.com/questions/4… github.com/weiliu89/ca…