此步骤很简单,在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改成绝对地址就可以了