近几天心烦意乱,坑一个接着一个,不过最终还是成功跑完VOC数据集。事实证明caffe的配置让人烦躁。
P.S. 如果觉得有用欢迎赞我表扬我~
配置环境:
Windows 7
vs2013
Anaconda2
Caffe-SSD-microsoft
[References]:
https://blog.csdn.net/gxb0505/article/details/73702451
https://blog.csdn.net/muwu5635/article/details/60874721
https://blog.csdn.net/a8039974/article/details/79836440
https://blog.csdn.net/weixin_37621229/article/details/80547934
Thx ;)
准备
因为是windows平台,所以我使用的caffe源是https://github.com/conner99/caffe。
如果使用以上源,请一定使用vs2013来进行之后的编译。
如果使用以上源,请一定使用vs2013来进行之后的编译。
如果使用以上源,请一定使用vs2013来进行之后的编译。
我在一开始使用的是vs2015,编译出现很多问题,所以重要的事情说了三遍。
下载安装git,然后在git输入下面指令获取caffe:
git clone https://github.com/conner99/caffe.git
cd caffe
git checkout ssd
打开caffe\windows文件夹,看到里面的CommonSettings.props.example文件,复制出来一份,并改名字为CommonSettings.props,修改它成为下面这样(因为只用CPU跑):
之后,在caffe\src\caffe下新建3rdparty文件夹,里面添加hungarian.cpp;在caffe\include\caffe下新建3rdparty文件夹,里面添加hungarian.hpp。这两个文件的下载地址:链接: https://pan.baidu.com/s/1jfi_t0fjDh630OMl8Q7AWQ 提取码: 5piq (如果失效请评论我,会很快看到~)
然后,为防止编译的时候出现regex相关的报错,而在项目中我们不需要正则表达式,所以将相关语句注释掉:
进入项libcaffe中,进入detection_output_layer.hpp中,将与regex相关头文件注释掉:
进入detection_output_layer.cpp文件,将所有出现regex和rv的语句注释掉:
进入detection_output_layer.cu文件,将所有出现regex和rv的语句注释掉:
编译
编译libcaffe模块
设置libcaffe为启动项,设置libcaffe的属性页如下:
由于这个caffe源是windows的,在一开始编译的时候会通过NuGet下载很多caffe的依赖包,需要一段时间。下载下来之后这些包都位于NugetPackages文件夹下,这个文件夹在caffe的平行目录下。
libcaffe编译成功之后,在我们的caffe路径下就会自动出现一个名叫Build的文件夹,进入Build\x64\Release,以后编译成功和运行需要的文件都会存放在这个Build\x64\Release下里面。
编译caffe模块
和编译libcaffe模块同样的方式编译caffe模块。
编译pycaffe模块
由于pycaffe基于python2.7,所以安装anaconda2。
请一定注意anaconda2的安装路径不能有空格。
请一定注意anaconda2的安装路径不能有空格。
请一定注意anaconda2的安装路径不能有空格。
要不然之后import caffe的时候会报错。
然后再次修改配置文件CommonSettings.props:
<PythonSupport>true</PythonSupport>
<PythonDir>D:\ProgramData\Anaconda2</PythonDir>(中间修改成你自己的python路径)
和上面libcaffe同样的设置编译pycaffe,编译成功后将Build/x64/Release/pycaffe下的caffe文件夹拷贝到Anancoda下面的Lib\site-packages下。
之后就要配置protobuf,要不然import caffe会报错。
先下载protobuf.3.0.0: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-python-3.0.0\protobuf-3.0.0\src。
打开cmd,切换到protobuf-python-3.0.0\protobuf-3.0.0\python目录,运行如下指令,生成大量*.py:
python setup.py build
然后运行指令:
python setup.py test
python setup.py install
之后进入python:
python
import caffe
不报错的话就编译成功啦。
编译get_image_size和convert_annoset模块
跟前面一样,目的是为了之后VOC数据的训练准备工具。
SSD模型的训练和检测
先准备VOC0712数据集。
下载地址:链接: https://pan.baidu.com/s/14jzcv9fHe0RzlP3-hz0NPg 提取码: 1weg (如果失效请评论我,会很快看到~)
在data\VOC0712下按照上述的顺序依次解压VOC文件,得到当前目录下的VOC2007和VOC2012两个文件夹。
从data\VOC0712下复制get_image_size.bat到caffe根目录下,打开get_image_size.bat看一下路径是否是对的,由于我下载caffe的时候直接放在D:\路径下,所以不需要改动.bat里面的路径。
修改之后运行get_image_size.bat,出现如下结果:
这会生成test_name_size.txt文件。
之后复制data/VOC0712下的create_data.bat文件到caffe的根目录,打开看是否需要修改路径,运行得到:
之后就可以训练了。
这里需要准备训练的prototxt和一个预训练的VGGNet的网络。
下载deploy.prototxt、solver.prototxt、train.prototxt和test.prototxt,下载地址和前面的hungarian.cpp下载地址一样。将下载下来的四个文件放入一个新建文件夹SSD_300x300内。
下载预训练的VGGNet的网络:链接: https://pan.baidu.com/s/1Gq-2E0gzVjp6YuElVl1itA 提取码: gvw3(如果失效请评论我,会很快看到~)
在models\VGGNet下新建文件夹VOC0712,将SSD_300x300文件夹和预训练的VGGNet的网络放进去:
然后在caffe目录下新建一个ssd_pascal.bat文件,内容如下:
Build\x64\Release\caffe.exe train --solver=models\VGGNet\VOC0712\SSD_300x300\solver.prototxt -weights=model\VGGNet\VOC0712\VGG_ILSVRC_16_layers_fc_reduced.caffemodel
pause
注意里面的地址。
还有记得看一看train和test两个prototxt里面的source路径是否需要修改。
运行ssd_pascal.bat文件,即开始训练~