此步驟很簡單,在liuwei的GitHub上都有,地址是 https://github.com/weiliu89/caffe/tree/ssd
記錄下了所有遇到的問題,經過反覆多人在不同PC上配置驗證可行。如有新的error或warning,請評論,幫助改進,謝謝!
新建根目錄,以下所有$CAFFE_ROOT均表示根目錄,根據實際情況替換(我的是$Home/ssd/caffe)。
1. 獲取含有ssd的caffe
$git clone https://github.com/weiliu89/caffe.git
$cd caffe
$git checkout ssd
2. 根據需求更改caffe配置
$cp Makefile.config.example Makefile.config
再根據CPU和GPU修改Makefile.config
GPU:
去掉以下注釋
USE_CUDNN := 1
WITH_PYTHON_LAYER := 1
3. 編譯運行
$make -j8
$make py
$make test -j8
$make runtest -j8
Ø 出現問題:
/usr/bin/ld:cannot find -lopenblas
collect2: error:ld returned 1 exit status
Ø 分析原因:
是該庫的沒有裝好或者沒有鏈接好。
Ø 解決方案:
首先看是否找得到
$locate libopenblas
如果找不到
$sudo apt-get install libopenblas-dev
Ø 出現warning:
nvcc warning :The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may beremoved in a future release (Use -Wno-deprecated-gpu-targets to suppresswarning).
Ø 分析原因:
Makefile中採用了CUDA的compute capability2.0和2.1。但是從CUDA 8.0開始compute capability 2.0和2.1被棄用了。
Ø 解決方案:
刪除Makefile裏的
-gencodearch=compute_20,code=sm_20
-gencodearch=compute_20,code=sm_21
Ø 出現問題:
./include/caffe/util/cudnn.hpp:8:34:致命錯誤:caffe/proto/caffe.pb.h:沒有那個文件或目錄
Ø 分析原因:
應該是版本比較低。
Ø 解決方案:
先安裝pip
$wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
$sudo python get-pip.py
再更新
$pip install protobuf –upgrade -i http://pypi.douban.com/simple
$pip install pillow –upgrade -i http://pypi.douban.com/simple
Ø 出現問題:
/usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264:error: ‘type name’ declared as function returning an array
Ø 分析原因:
應該是gcc版本比較低,重新更新一下。
Ø 解決方案:
添加源
$sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$sudo apt-get update
安裝依賴的包(出現錯誤才需要這個)
$sudo apt-get install software-properties-common
升級更新
$sudo apt-get install gcc-5 g++-5
更新鏈接
$sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc -f
$sudo ln -s /usr/bin/g++-5 /usr/bin/g++ -f
Ø 出現問題:
python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: Nosuch file or directory
Ø 解決方案:
sudo vim Makefile.config
#找到這條語句,然後要加一個local:
PYTHON_INCLUDE:= /usr/include/python2.7 \
/usr/local/lib/python2.7/dist-packages/numpy/core/include
Ø 出現問題:
python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: Nosuch file or directory
Ø 解決方案:
sudo pip install numpy
看numpy目錄在哪裏,pip安裝的目錄在/usr/local/lib/下面
PYTHON_INCLUDE:=/usr/include/python2.7\
/usr/local/lib/python2.7/dist-packages/numpy/core/include
4. 下載fully convolutional reduced (atrous) VGGNet
放入$CAFFE_ROOT/models/VGGNet/下,CAFFE_ROOT表示根目錄,根據實際情況替代。
5. 下載VOC2007 and VOC2012 dataset至$HOME/data/(請注意目錄改變,及時更換目錄,免得後面改腳本)
# Download thedata.
cd $HOME/data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
# Extract thedata.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
6. 製作LMDB文件
根據實際的 VOCdevkit的目錄修改create_list.sh 文件中的root_dir,修改create_data.sh 文件中的data_root_dir。
create_list.sh和create_data.sh兩個文件目錄是$CAFFE_ROOT./data/VOC0712/。
我的設置是,root_dir=/data/lxy/experiment/ssd/data/VOCdevkit
注意如果是在computer(計算機)目錄下,/data前面不要加$HOME。只有在主文件夾目錄下才需要加。
cd $CAFFE_ROOT
# Create thetrainval.txt, test.txt, and test_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
# You can modifythe parameters in create_data.sh if needed.
# It will createlmdb files for trainval and test with encoded original image:
# -$HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
# -$HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
# and make softlinks at examples/VOC0712/
./data/VOC0712/create_data.sh
Ø 出現問題:
Traceback (mostrecent call last):
File"/data/lxy/experiment/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py",line 103, in <module>
label_map = caffe_pb2.LabelMap()
AttributeError:'module' object has no attribute 'LabelMap'
Traceback (mostrecent call last):
File"/data/lxy/experiment/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py",line 103, in <module>
label_map = caffe_pb2.LabelMap()
AttributeError:'module' object has no attribute 'LabelMap'
Ø 分析原因:
是caffe與Python的接口沒有配置好
Ø 解決方案:
$gedit ~/.bashrc
在彈出的文檔最後一行加入
export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH
保存退出
$source~/.bashrc
完美解決,有時需要註銷或者重啓一下。
Ø 出現問題:
Traceback (mostrecent call last):
File"/Home/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py", line7, in <module>
from caffe.proto import caffe_pb2
ImportError: Nomodule named caffe.proto
Traceback (mostrecent call last):
File"/Home/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py", line7, in <module>
from caffe.proto import caffe_pb2
ImportError: Nomodule named caffe.proto
Ø 分析原因:
是caffe與Python的接口沒有配置好
Ø 解決方案:(修改後所有用戶均修改,如果只改當前用戶,用gedit ~/.profile)
$gedit ~/.bashrc
在彈出的文檔最後一行加入
exportPYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH
保存退出
$source~/.bashrc
完美解決。有時需要註銷或重啓一下。
Ø 出現問題:
ImportError: Nomodule named skimage.io
Ø 分析原因:
Skimage庫沒有裝好
Ø 解決方案:
pip install scikit-image
Ø 出現問題:
module compiledagainst API version 0xa but this version of numpy is 0x9
Ø 分析原因:
Numpy庫沒有配置好
Ø 解決方案:
先進入python,輸入
import numpy
printnumpy.__path__
找到numpy位置,再刪去numpy,重新安裝
sudoeasy_install -U numpy
Ø 出現問題:
ImportError: Nomodule named google.protobuf.internal
Ø 分析原因:
Protobuf沒有配置好
Ø 解決方案:
sudo pip install easydict
sudo pip install protobuf
7. 訓練自己的model
訓練model:迭代120000次
#It will create model definition files and save snapshot models in:
# -$CAFFE_ROOT/models/VGGNet/VOC0712/SSD_300x300/
#and job file, log file, and the python script in:
# -$CAFFE_ROOT/jobs/VGGNet/VOC0712/SSD_300x300/
#and save temporary evaluation results in:
# -$HOME/data/VOCdevkit/results/VOC2007/SSD_300x300/
#It should reach 77.* mAP at 120k iterations.
python examples/ssd/ssd_pascal.py
8. 不想自己訓練,可以用訓練好的model
GitHub上有作者訓練好的model,但是鏈接需要翻牆,因爲都是Google網盤。
1) PASCAL VOC models:
2) COCO models:
3) ILSVRC models:
測試:
上述的model解壓後將VGGNet放入$CAFFE_ROOT/models裏,注意修改文件夾名
VGGNet裏的文件夾修改爲VOC0712
VOC0712裏的文件夾修改爲SSD_300×300
SSD_300×300裏的.caffemodel修改爲
VGG_VOC0712_SSD_300x300_iter_160000.caffemodel
ps:300×300和160000不用修改,不同model不一樣,此處只是一個例子。
python examples/ssd/score_ssd_pascal.py
Ø 出現問題:
Check failed:error == cudaSuccess (30 vs. 0) unknown error
Ø 分析原因:
是cuda沒有配置好
Ø 解決方案:
sudo apt-get install nvidia-modprobe
Ø 出現問題:
F113009:28:46.200057 10076 io.cpp:45] Check failed: fd != -1 (-1 vs. -1) File notfound: data/VOC0712/labelmap_voc.prototxt
Ø 分析原因:
labelmap_voc.prototxt路徑不對。
Ø 解決方法:
/caffe-ssd/models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt文檔的最後的
output_format: "VOC"
label_map_file: "data/VOC0712/labelmap_voc.prototxt"
把label_map_file改成絕對地址就可以了