caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)

来源:互联网 发布:淘宝购物群 编辑:程序博客网 时间:2024/05/29 06:26

上一篇博客中讲了在Ubuntu下安装caffe的经验总结(各种问题,简直怀疑人生了)。博客链接:点我打开
faster-rcnn有两个版本,分别是Python的和MATLAB的。这里介绍python版本的faster-rcnn的配置。
网上有很多相关的教程,起初我在配置时也被一些博客坑了,这里分享一下调试和解决问题的过程。

下载工程

输入指令:

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
  • 1

由于Git的速度有点慢,所以可以选择直接访问他的网址,在github上直接下载。链接:点我打开
这里写图片描述
我是直接在github上下载的,下载完后发现了caffe-faster-rcnn文件夹中是空的。所以还需要另外下载caffe-faster-rcnn文件夹,可以选择使用指令:

cd caffe-fast-rcnngit submodule update --init --recursive
  • 1

或者直接点击,进入caffe-faster-rcnn,进行下载。下载后拷贝到py-faster-rcnn目录下即可。
这里写图片描述

安装Caffe依赖包

安装一些要用的依赖包,否则编译时会报错。

sudo apt-get install python-pipsudo pip install cython  sudo pip install easydict sudo apt-get install python-opencv

每个人装的都不一样,少了哪个就装哪个吧。我编译的时候少了easydict和python-OpenCV,这块问题不多,全部都会自动配置完成。
补充:有一个朋友安装easydict时发现输入指令后安装成功,但是在python shell下import easydict报错。这种情况可以重启一下,再试试能不能正常import easydict。有可能是配置还没立即生效。

编译caffe

默认用$RCNN_ROOT表示下载下来的py-faster-rcnn目录所在的路径。

cd $RCNN_ROOT/libmake -j8

-j8是使用多核编译,这样编译速度快一点。

输入指令:

先进入到caffe-fast-rcnn目录下:

cd $RCNN_ROOT/caffe-fast-rcnn

复制Makefile.config.example为Makefile.config。

cp  Makefile.config.example  Makefile.config

编辑Makefile.config。

sudo gedit Makefile.config

在Makefile.config中有两处要改。

# In your Makefile.config, make sure to have this line uncommentedWITH_PYTHON_LAYER := 1# Unrelatedly, it's also recommended that you use CUDNNUSE_CUDNN := 1

把前面的注释去掉即可。
WITH_PYTHON_LAYER必须开,否则会报错。
USE_CUDNN建议开,但是由于代码提供者的caffe版本是老版本的,没有”与时俱进“,所以只兼容CUDNN 较老版本的。我装的是v5.0版本的,开了它就会报错。
解决办法有两种:一、更换CUDNN的版本为老版本的v3.0或是v4.0的;二、注释掉CUDNN那句代码,我是直接注释掉了,使用也不影响。
推荐使用cuDNN,由于不想重新折腾CUDNN,我就没有更换为老版本的。暂时还没找到相对好的解决办法,如果找到了其他会再补充。


—————————————————2017.7.30 补充————————————————-

我使用的是cuDNN v5版本,不能支持py-faster-rcnn。今天找到了一个不需要更换cuDNN,就能使cuDNN v5也能兼容py-faster-rcnn。
参考链接:faster rcnn +cudnn V5
其中给出了两种方法:
一种是到github去下载新版的caffe并将它与py-faster-rcnn中的caffe-faster-rcnn合并,更换成新版的caffe,使其支持cuDNN v5版本;
另一种是自己手动更改一些文件,更改caffe的一些配置使其兼容cuDNN v5。
第一种方法较简单,但是一旦工程被修改过就很容易出错,不推荐;所以我采用了第二种方法。

1、用最新版本的caffe源码目录中的如下文件替换py-faster-rcnn/caffe-fast-rcnn中的对应文件。

include/caffe/layers/cudnn_relu_layer.hpp,
src/caffe/layers/cudnn_relu_layer.cpp,
src/caffe/layers/cudnn_relu_layer.cu

include/caffe/layers/cudnn_sigmoid_layer.hpp,
src/caffe/layers/cudnn_sigmoid_layer.cpp,
src/caffe/layers/cudnn_sigmoid_layer.cu

include/caffe/layers/cudnn_tanh_layer.hpp,
src/caffe/layers/cudnn_tanh_layer.cpp,
src/caffe/layers/cudnn_tanh_layer.cu

2、用caffe源码中的这个文件替换掉faster rcnn 对应文件

include/caffe/util/cudnn.hpp

3、打开 py-faster-rcnn/caffe-fast-rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu文件,并将:

cudnnConvolutionBackwardData_v3
替换为
cudnnConvolutionBackwardData

cudnnConvolutionBackwardFilter_v3
替换为
cudnnConvolutionBackwardFilter

修改之后,即使不注释USE_CUDNN := 1,在编译时也不会报错了。


修改完成之后就可以编译了:

make -j8make pycaffe -j8

编译caffe工程和caffe的python支持,要等一会儿。
make完的结果:
这里写图片描述
make pycaff完的结果:
这里写图片描述

获取faster_rcnn_models

输入指令:

cd $RCNN_ROOT./data/scripts/fetch_faster_rcnn_models.sh

执行脚本,实质是访问http://www.cs.berkeley.edu/%7Erbg/faster-rcnn-data/faster_rcnn_models.tgz 下载文件,但是我们这边访问总是被拒绝。

好了,这里给出一个翻墙下载的方法,速度也还可以。
用https://mm.ww.rrjs.pw/翻墙下载,这是一个网页代理,在网页输入你想要访问的地址,它会帮你跳转到国外的网站去。
在网页下输入:
https://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0
这个url可以在fetch_faster_rcnn_models.sh中查到。
这里写图片描述
点击开始浏览,即可进行下载了。我下载下来有728.6MB。
这里写图片描述
把这个文件移到$RCNN_ROOT/data下,将其解压。
指令和结果截图:
这里写图片描述

获取imagenet_models

方法同faster_rcnn_models。
网上通用的方法是:

cd $RCNN_ROOT./data/scripts/fetch_imagenet_models.sh

很有可能,你看到的是半天没反应。
这里写图片描述
所以还是使用https://mm.ww.rrjs.pw/翻墙下载。
输入网址:
https://dl.dropbox.com/s/gstw7122padlf0l/imagenet_models.tgz?dl=0
此URL可以在fetch_imagenet_models.sh中找到。
这种方法翻墙的网速还算挺快的。
这里写图片描述

如果有别的较快的翻墙手段的,或者自己买了vpn的,都可以直接输入指令下载。
这里写图片描述
文件有1.1GB。把它复制到$RCNN_ROOT/data下,解压。
指令和结果截图:
这里写图片描述

测试demo.py文件

先直接运行demo.py看看吧:

cd $RCNN_ROOT./tools/demo.py

我运行后出现了错误:

Loaded network /home/xhb/Study/Caffe_Study/py-faster-rcnn-master/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodelF0726 11:58:39.877975  3897 syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0)  out of memory*** Check failure stack trace: ***已放弃

意思是,在载入VGG16_faster_rcnn_final.caffemodel时出错。查阅资料,发现这是因为gpu的显存不够。
如果是自己训练和测试模型,可以去更改配置文件中的batch_size,将test和train的batch_size都改为1。我们只是测试别人训练的模型也没法更改了。
起初我也很困惑,明明我的gpu显存有4G,而这个要求的应该是3G,应该是可以的。试了很多方法,但是还是会报错。

下面是官方给出的说明:

  • For training smaller networks (ZF, VGG_CNN_M_1024) a good GPU (e.g., Titan, K20, K40, …) with at least 3G of memory suffices
  • For training Fast R-CNN with VGG16, you’ll need a K40 (~11G of memory)
  • For training the end-to-end version of Faster R-CNN with VGG16, 3G of GPU memory is sufficient (using CUDNN)

退一步考虑,我们下载下来的faster_rcnn_models模型中有两个:

VGG16_faster_rcnn_final.caffemodel  ZF_faster_rcnn_final.caffemodel

VGG16是大型模型,而ZF模型则是较小的模型。
所以我们换成使用ZF模型进行测试。
方法一:
使用如下指令:

 ./tools/demo.py --net zf

方法二:
由于默认使用VGG16模型,所以修改为使用ZF模型。
打开demo.py:
这里写图片描述
定义了一个字典,有两个模型,VGG16和ZF。
这里写图片描述
修改vgg16为zf,这样默认载入的就是zf的模型而不是vgg16的了。
这里写图片描述
保存一下,可以开始测试了。
输入指令:

cd $RCNN_ROOT./tools/demo.py

测试结果:
自动载入图片进行测试,识别出的东西会用红框标出。
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这次只是跑了一个faste-rcnn,依然还有很多问题,后面解决了还会补上解决方案。
我使用的是gpu版本的caffe,如果要使用CPU版本的caffe,可以参考这篇博客:ubuntu16.04+py-faster-rcnn+ZF运行demo.py。 修改一些东西,使用步骤大致一样。

下面这几篇博客给出了一些常见报错及解决办法:
为了caffe(四)学习人家的文章
caffe跑试验遇到错误:Check failed: error == cudaSuccess (2 vs. 0) out of memory


—————————————————2017.7.30 补充————————————————-

今天我在文章中补充了cuDNN v5不兼容的解决办法。
之前我跑vgg16的模型总是说显存不够,最后选择了使用zf模型,在我今天开启了cuDNN后重新编译了caffe,重新运行发现能够正常使用vgg16的模型了。
总结一下:
我的笔记本带的gpu内存是4G。
只有开启了cuDNN支持后,要求gpu至少有3G的显存,可以正常使用vgg16、zf等模型;
若不开启cuDNN支持,编译也可以正常通过,但是只有zf可以使用,使用vgg16模型会报错,提示显存不够。
运行VGG16模型的结果:
这里写图片描述

阅读全文
0 0
原创粉丝点击