因为自己的电脑没有安装linux环境,显卡也不支持CUDA,所以在实现faster RCNN的demo的过程中还是很麻烦的。
完善项目文件
下图是vs2013 打开的caffe解决方案的工程目录。由于windows版本caffe的不完善,要先在其libcaffe项目中添加roi_poling层的相关支持。(Fast R-CNN的ROIPooling层需要这个源文件编译)
具体做法是对cu&include&src下的layers右键,添加现有的项,分别添加的是roi_pooling_layer对应的.cu/.hpp/.cpp文件。其中.cu和.cpp文件在caffe安装根目录src/caffe/layers下。.hpp在include/caffe/layers下。
P.s:Caffe中的.cu文件,是交给nvcc编译的c++源文件,可以编译成cpu指令或者GPU指令。
修改属性表
在commonSettings.props中修改属性。为了配置caffe的接口,需要在属性表中把python版编译接口打开,并且指出anaconda2的路径。这两行分别在属性表的13行和第48行。
好几个博客都使用的是anaconda2的python安装包,而caffe中默认的是Miniconda2(仅包含conda和 Python)。Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,anaconda2对应Python2版本。对比之下,pycharm、spyder是IDE,可以调试,代码高亮,项目管理等。因为python是解释型的语言,pycharm在新建项目的时候就需要指定interpreter,而这个解释器就可以是anaconda下的python.exe。而在anaconda之中也集成了IDE:jupyter notebook。
从清华大学镜像站下载anaconda,https://repo.continuum.io/archive/Anaconda2-4.2.0-Windows-x86_64.exe
(千万要下载支持python2.7的anaconda2,不然后面会遇到找不到python27.lib)去编译Release版本的pycaffe,好像如果编译Debug版本会出现python27_d.lib找不到什么的。
Matlab也一样,除了打开matlabsupport,还需要修改matlab.exe路径和mxGPUArray.h所在include路径。新版matlab的mxGPUArray.h位置改动了,可以将新位置放在includePath之中,也可以将头文件复制到默认的includePath处。
重新编译
在Build/x64/Release下得到pycaffe文件夹和 matcaffe文件夹。
Pycaffe:
Matcaffe:编译过程中遇到了头文件martix.h找不到的情况,把绝对路径include进去就好了。还遇到了无法打开libmx.lib的问题,在项目属性中添加库目录。
python中安装caffe包
将编译生成的pycaffe中的caffe文件夹拷贝到D:\Program Files\Anaconda2\Lib\site-packages中
在cmd中进入python命令行,然后import caffe,会出现下面问题
因为c++版本中生成的NugetPackages里面包含了依赖项opencv,protobuf等,而python版本还没有。解决办法是退出python,在cmd中conda install protobuf/pip install protobuf,安装成功之后重新import caffe,没有报错。
验证
使用的实例是Texture Synthesis with Convolutional Neural Networks这篇论文的代码,主要实现的是利用噪声生成一张真实图片。下载,解压github上的源码https://github.com/leongatys/DeepTextures
在cmd中cd到解压目录,输入jupyter notebook
可以在localhost:8888/中得到jupyter notebook,顾名思义,这是一个web型的交互式笔记本。显示当前文件夹中的文件。
点击example.ipynb,shift+enter逐步调试.
出现了python.exe停止运行等错误,中断发现应该是GPU不支持的问题,在cmd中的提示验证了这个猜想:
按照下面代码把模式改成CPU:
#if cpu mode we should not call,below 3 line of code is just for using GPU mode.
#gpu = 0
#caffe.set_mode_gpu()
#caffe.set_device(gpu)
在链接1中是将代码写在一个py文件中一次性运行,而且因为不是在解压文件目录下打开jupyter notebook,用了绝对路径。但是不管是分步运行还是一次性运行,都没有报错,都没有图像生成,理论上应该生成代码给的参考图像才对。现在还不知道怎么回事。
我怀疑是我除了anaconda2还安装了一个python,所以运行notebook的时候有两个kernels found,于是用pycharm新建了一个project,选择anaconda2下的python.exe作为interpreter,但是显示找不到caffe等:
Faster rcnn
Python版本的caffe和faster rcnn(链接3):
下载py-faster-rcnn,地址:https://github.com/rbgirshick/py-faster-rcnn
针对windows环境,替换py-faster-rcnn中的lib)https://github.com/MrGF/py-faster-rcnn-windows将其中的文件复制进py-faster-rcnn进行替换。
替换后,在py-faster-rcnn根目录—lib—rpn路径下,编辑proposal_layer.py:
将Caffe根目录—Build文件夹下,找到生成的pycaffe,将其中的caffe文件夹整体复制到py-faster-rcnn根目录—caffe-fast-rcnn—python文件夹下。如果是用Download ZIP(因为我们已经有了Caffe-Microsoft),在py-faster-rcnn的caffe-faster-rcnn下单独创建python文件夹,再将生成的pycaffe下的caffe拷贝进来。官方推荐用命令递归下载,递归的意思是initialize submodules in the clone,自动初始化并更新仓库中的每一个子模块:
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
Matlab版本的caffe+faster rcnn(链接4)
按照参考操作就可以了,需要注意的是要下载的是matlab版本的faster rcnn,解压应该在faster-rcnn-master/experiment下。
需要针对cpu-only的环境修改代码。因为不用GPU,所以还需要选择网络较小的zf-5,而不是很大的VGG-16.这两个网络的model在output文件夹下面。
我遇到的问题是:
先是出现invalid mex-file,添加了vs的dll文件在m文件目录下,将build/x64/release路径添加到系统环境变量。
然后出现了load使用错误的原因,其实是model文件和测试图片的路径错了,按照提示改一下就好了。
下面是demo自带图像的测试结果:
Reference:
1. 下载anaconda2:https://www.cnblogs.com/billyzh/p/6307716.html
2. Jupyter:https://blog.csdn.net/zb1165048017/article/details/52980102
3. Py Faster RCNN:https://blog.csdn.net/u011185952/article/details/71079038
4. Mat faster rcnn:https://blog.csdn.net/mr_curry/article/details/54745116
5. 翻墙获取faster_rcnn_models:https://blog.csdn.net/hongbin_xu/article/details/76100132
6. 修改setup.py到CPU:http://www.caffecn.cn/?/question/13