The Single Shot Detector(SSD)是 UNC Chapel Hill(北卡罗来纳大学教堂山分校) 的 Wei Liu 大神在2016的ECCV上面提出的,论文题目《SSD:Single Shot MultiBox Detector》,项目代码地址:https://github.com/weiliu89/caffe/tree/ssd
网址里面有详细的配置运行步骤,这里简单的做下整理,本人环境ubuntu 16.04 LTS,显卡GTX 760,中间出现过一些问题,但是通过百度基本都解决了,后面会给出可能出现问题以及解决方案:
(1)安装
假设你下载了源代码并解压到文件夹$caffe-ssd,注意$caffe-ssd是你的caffe-ssd绝对路径,因人而异,依次执行以下命令:
#进入到你源码的文件夹下,因人而异
cd $caffe-ssd
cp Makefile.config.example Makefile.config
make -j8
#这里非常重要,就是將$caffe-ssd/python路径添加到PYTHONPATH
#注意这里需要永久添加,不然下次你重启后,这个设置就失效了,参考方法如下:
#在ubuntu终端下输入下列命令
gedit /etc/profile
#在打开的文件后面添加下面一行代码,特别注意$caffe-ssd是你的caffe-ssd绝对路径,因人而异:
export PYTHONPATH=$caffe-ssd/python:$PYTHONPATH
#然后在ubuntu终端输入以下命令,目的是使刚才的修改立即生效,而不用重启电脑
source /etc/profile
#然后在ubuntu终端下回到$caffe-ssd目录,执行以下命令:
make py
make test -j8
#下面这一条命令可选
make runtest -j8
(2)准备
1、下载VGGNet,地址:fully convolutional reduced (atrous) VGGNet,如果下载地址进不去,就去最上面的源码网站下载,比较容易找到的,假设你存放在目录$caffe-ssd/models/VGGNet下。
2、下载VOC2007和VOC2012数据集,默认情况下存放在$HOME/data/,这里是特别重要的,本人没有存放在这里,所以下面的步骤(3)操作就不是很方便,需要自己在相应的脚本文件中修改路径,所以建议存在默认的$HOME/data/下,这个也比较容易找到。
# 下载压缩包数据
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
# 解压数据
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
(3)创建LMDB文件
cd $caffe-ssd
#在data/VOC0712下创建trainval.txt,test.txt与test_name_size.txt
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh
(4)训练和验证
# 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.
#如果你只是想看看SSD的效果,下面这条命令可以先不执行
python examples/ssd/ssd_pascal.py
# 当然上述这条命令可能出现一些问题,要学会看错误,找到最早报错的地方,然后一个一个的解决,一般来说,你遇到的问题大多网上都能查得到,你需要的是组织好的你语言,然后百度搜索,比如:
1.找不到“VGG_ILSVRC_16_layers_fc_reduced.caffemodel”,下载地址VGG_ILSVRC_16_layers_fc_reduced.caffemodel 然后将其放到你的$caffe-ssd/models/VGGNet目录下。
2.报类似“Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal”的错误
解决方法:将ssd_pascal.py文件中第332行gpus = "0,1,2,3"的GPU选择改为gpus = "0",后面的1,2,3都删掉即可。再次训练即可。
3.报类似“Check failed: error == cudaSuccess (2 vs. 0) invalid ...”的错误
解决方法:将ssd_pascal.py文件中第338行batch_size=32和accum_batch_size=32改小一倍或两倍,本人改成了batch_size=8和accum_batch_size=8好像才可以运行,不然会报错。
如果你没有时间训练,你可以在源代码那个网页下载预训练模型,地址:
如果你想测试你训练的模型
python example/ssd/score_ssd_pascal.py
如果上面都没有问题的话,可以通过网络摄像头或者已有的视频进行测试了。
# webcam
python examples/ssd/ssd_pascal_webcam.py
效果如下(实验室自己的摄像头随便拍的):
# 已有视频
python examples/ssd/ssd_pascal_video.py
效果如下:
当然这里只是大概介绍了下,具体细节可以参考源代码给出的网站。本人只是个菜鸟,自己动手尝试配置了下玩一玩,在这之后也把yolo3配置了下,也比较容易配置,感兴趣的可以试试。地址:https://github.com/pjreddie/darknet
安装步骤可以参考上述网址最下面的第二行,里面有详细的操作步骤。