該來的還是要來
之前為了偷懶想到使用 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-compilersudo apt-get install --no-install-recommends libboost-all-devsudo apt-get install libopenblas-dev liblapack-dev libatlas-base-devsudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-devsudo 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…