SSD(Single Shot MultiBox Detector)算是一个比较不错的目标检测算法,主攻方向是速度,当然精度也比Yolo提高了一些,最近在ubuntu16.04下实现了代码运行,此博文主要内容来自原作者的github,加上了一些个人理解,欢迎探讨。

PS:SSD代码和模型常常在更新,我给的链接可能不是最新版,如运行出错请参看官方github。

准备工作:linux+cuda+caffe是标配,我就不详述了,推荐博客:

下面正式开始:

1. 获取源码

git clone https://github.com/weiliu89/caffe.git  

cd caffe  

git checkout ssd  

说明:SSD采用的是在caffe文件夹中内嵌例程的方式,作者改动了原版caffe,所以你需要把原来的caffe文件夹移除,git命令会新建一个带有SSD程序的caffe文件夹,当然,这个新的caffe要重新编译一次。

2. 编译caffe

cd /home/mx/caffe

cp Makefile.config.example Makefile.config  
运行时报错不断,事后总结,需要修改配置文件,用gedit或者vim打开配置文件进行修改:

1)Makefile.config文件中

将USE_CUDNN :=1取消注释

2)Makefile.config文件中

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include后面打上一个空格,

然后添加/usr/include/hdf5/serial, 如果没有这一句会报一个找不到hdf5.h的错误

3)makefile文件中

替换NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

保存退出。

继续输入命令

make -j8 #8线程

make py

make test -j8

make runtest -j8 #貌似不是必须的,跑一遍用了10多分钟

3.训练模型

节省时间的做法是,直接下载原作者最终弄好的模型:

http://www.cs.unc.edu/~wliu/projects/SSD/models_VGGNet_VOC0712_SSD_300x300.tar.gz

解压后将voc0712文件夹放入/home/mx/caffe/models/VGGNet/之下

OR:条件较好的同学可以下载图片数据和预训练模型,进行finetuning,得到最终可用的模型,步骤如下:

1)下载预训练模型

https://gist.github.com/weiliu89/2ed6e13bfd5b57cf81d6

将其放入新建的文件夹/home/mx/caffe/models/VGGNet/

  • 下载voc2007和voc2012数据集

cd /home/mx/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

如果终端下载太慢,那就按照地址手动下载文件,依然放入文件夹/home/mx/data/

解压文件,按照顺序来

cd /home/mx/data

tar -xvf VOCtrainval_11-May-2012.tar

tar -xvf VOCtrainval_06-Nov-2007.tar

tar -xvf VOCtest_06-Nov-2007.tar

  • 将图片转化为LMDB文件,用于训练

cd /home/mx/caffe

./data/VOC0712/create_list.sh

./data/VOC0712/create_data.sh

这里用的脚本实现批处理,可能会出现错误:no module named caffe或者no module named caffe-proto,那是caffe的Python环境变量未配置好,解决方法: echo “export PYTHONPATH=/home/username/caffe/python:$PYTHONPATH” >> ~/.profile

source ~/.profile

echo $PYTHONPATH #检查环境变量的值

设好环境变量后,重新运行命令就不会出错了