Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录

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文件

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第1张图片

作者使用了cuda,python接口,所以对他们进行了设置,修改部分如图中红色框所示。

接下来,需要修改一些文件。

1.  进入libcaffe-include-layers中,进入detection_output_layer.hpp文件,将与regex相关头文件注释掉。


2.  进入libcaffe-src-layers中,进入detection_output_layer.cpp文件,将所有出现regex和rv的语句注释掉。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第2张图片

3.  进入libcaffe-cu-layers中,进入detection_output_layer.cu文件,将所有出现regex和rv的语句注释掉。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第3张图片

4.  进入libcaffe-cu-util中,修改bbox_util.cu,注释掉所有带thrust的语句;


5.  进入caffe-ssd-microsoft\src\caffe\proto,找到caffe.proto对里面的内容进行如下修改。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第4张图片

需要修改的文件都在上面进行了修改,还要注意一点,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不报错就表明安装成功。显示如下: 

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第5张图片

然后再进行编译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" };

 其次

 Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第6张图片

编译ssd_detect。


 

接下来就是编译整个解决方案。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第7张图片

生成这些可执行文件。


训练和预测


训练部分


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路径的名称:

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第8张图片

双击运行。

同样,复制data\VOC0712下的create_data.bat到根目录下,修改正确的路径后执行,得到lmdb格式的数据。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第9张图片

  训练有两种方式:一个用python接口调用VOC0712下ssd_pascal.py和score_ssd_pascal.py来生成相应的训练和测试网络文件,及是否采用GPU计算等参数的设置。另一个就是类似常用windows下实现minst的方法直接调用caffe.exe或者bat文件调用。不过都要准备两个东西:训练的prototxt和一个预训练的VGGNet的网络。 

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第10张图片

按照作者这种方式创建各种文件夹然后添加文件,因为这样会更改路径什么的比较方便=。=

在根目录下新建ssd_pascal_new.bat文件:


在实际中不要换行,尽量卸载一行,避免出错,作者这样做是为了方便截图=。=

在训练之前记得更改solver.prototxt,deploy.prototxt,train.prototxt,test.prototxt中的各种路径,不要出错就好了。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第11张图片

 


测试部分


之前编译了ssd_detect项目,会有ssd_detect.exe出现,这里就使用使用这个可执行文件,同样是在根目录下新建ssd_predect_new.bat文件,内容如下:

text.txt的内容就是你要测试图片绝对路径。

Caffe-SSD(single-shot-multiboox)在Windows+GPU平台下的配置与训练记录_第12张图片

可以看到检测结果还是不错的。


总结


作者搞这个搞了三遍才成功,走了不少弯路,也看了网上一些神犇写的方法,最后搭配成功后总结了自己的实践过程,希望能对读者有帮助。


你可能感兴趣的:(caffe学习笔记,win-caffe)