Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录
JLU-IPVR
听笙
写本篇文章旨在让使用windows-ssd的小伙伴们少走弯路。毕竟作者搞了三遍才成功=。=
首先说一下作者电脑的配置:
1. Windows:10;
2. GPU:NVIDIA GeForce GTX745;
3. CUDA:7.5;
4. Caffe:caffe-ssd-microsoft;
5. Python:anaconda2;
caffe-ssd-microsoft下载地址:
https://github.com/conner99/caffe.git选择ssd-microsoft分支.
个人推荐这个版本的,因为作者尝试了其他版本的,但是配置到最后总会有各种各样的问题,所以推荐这个版本的。
编译libcaffe
在caffe-ssd-microsoft\src\caffe文件夹下新建3rdparty文件夹里面添加hungarian.cpp。
在caffe-ssd-microsoft\include\caffe文件夹下新建3rdparty文件夹里面添加hungarian.hpp。
修改CommonSettings.props文件
作者使用了cuda,python接口,所以对他们进行了设置,修改部分如图中红色框所示。
接下来,需要修改一些文件。
1. 进入libcaffe-include-layers中,进入detection_output_layer.hpp文件,将与regex相关头文件注释掉。
2. 进入libcaffe-src-layers中,进入detection_output_layer.cpp文件,将所有出现regex和rv的语句注释掉。
3. 进入libcaffe-cu-layers中,进入detection_output_layer.cu文件,将所有出现regex和rv的语句注释掉。
4. 进入libcaffe-cu-util中,修改bbox_util.cu,注释掉所有带thrust的语句;
5. 进入caffe-ssd-microsoft\src\caffe\proto,找到caffe.proto对里面的内容进行如下修改。
需要修改的文件都在上面进行了修改,还要注意一点,C/C++ ->常规 里的将警告提示为错误修改为 否。
编译libcaffe.
编译pycaffe
对于pycaffe的使用可有可无,作者使用了这个接口,所以在这里就介绍一下。
首先,要配置protobuf,作者是用的anaconda2的环境,下载protobuf:
https://github.com/google/protobuf/releases/tag/v3.0.0
下载两个包:protobuf-python-3.0.0.zip 以及 protoc-3.0.0-win32.zip
protobuf-python-3.0.0为protobuf的安装包;
protoc-3.0.0-win32包含protobuf的编译器protoc的win32版本,用以编译*.proto文件。
下载后将protoc-3.0.0-win32\bin\protoc.exe 复制到protobuf-3.0.0\src\
用cmd进入到protoc-3.0.0\python目录,接下来执行如下命令:
1) python setup.py build
2) python setup.py test
3) python setup.py install
最后在python环境下,importcaffe不报错就表明安装成功。显示如下:
然后再进行编译pycaffe,编译成功后将Build/x64/Release/pycaffe下的caffe文件夹拷贝到Anancoda下面的Lib\site-packages下即可。
编译ssd_detect
进入ssd_detect工程下的ssd_detect.cpp文件,进行如下修改。
首先在const string&model_file = argv[1];前添加char *labelname[] = {"background", "aeroplane", "bicycle","bird", "boat", "bottle", "bus","car", "cat", "chair", "cow","diningtable", "dog", "horse","motorbike", "person", "pottedplant", "sheep","sofa", "train", "tvmonitor" };
其次
编译ssd_detect。
接下来就是编译整个解决方案。
生成这些可执行文件。
训练和预测
训练部分
VOC0712数据下载:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
在data\VOC0712下按照上述这顺序解压VOC文件,变成VOC2007和VOC2012两个文件夹。
从data\VOC0712下复制get_image_size.bat到caffe-ssd-micrpsoft根目录下,这里要修改对应的caffe路径的名称:
双击运行。
同样,复制data\VOC0712下的create_data.bat到根目录下,修改正确的路径后执行,得到lmdb格式的数据。
训练有两种方式:一个用python接口调用VOC0712下ssd_pascal.py和score_ssd_pascal.py来生成相应的训练和测试网络文件,及是否采用GPU计算等参数的设置。另一个就是类似常用windows下实现minst的方法直接调用caffe.exe或者bat文件调用。不过都要准备两个东西:训练的prototxt和一个预训练的VGGNet的网络。
按照作者这种方式创建各种文件夹然后添加文件,因为这样会更改路径什么的比较方便=。=
在根目录下新建ssd_pascal_new.bat文件:
在实际中不要换行,尽量卸载一行,避免出错,作者这样做是为了方便截图=。=
在训练之前记得更改solver.prototxt,deploy.prototxt,train.prototxt,test.prototxt中的各种路径,不要出错就好了。
测试部分
之前编译了ssd_detect项目,会有ssd_detect.exe出现,这里就使用使用这个可执行文件,同样是在根目录下新建ssd_predect_new.bat文件,内容如下:
text.txt的内容就是你要测试图片绝对路径。
可以看到检测结果还是不错的。
总结
作者搞这个搞了三遍才成功,走了不少弯路,也看了网上一些神犇写的方法,最后搭配成功后总结了自己的实践过程,希望能对读者有帮助。