caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)
来源:互联网 发布:数据库服务 编辑:程序博客网 时间:2024/06/06 02:48
上一篇博客中讲了在Ubuntu下安装caffe的经验总结(各种问题,简直怀疑人生了)。博客链接:点我打开
faster-rcnn有两个版本,分别是python的和MATLAB的。这里介绍python版本的faster-rcnn的配置。
网上有很多相关的教程,起初我在配置时也被一些博客坑了,这里分享一下调试和解决问题的过程。
下载工程
输入指令:
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
由于git的速度有点慢,所以可以选择直接访问他的网址,在github上直接下载。链接:点我打开
我是直接在github上下载的,下载完后发现了caffe-faster-rcnn文件夹中是空的。所以还需要另外下载caffe-faster-rcnn文件夹,可以选择使用指令:
cd caffe-fast-rcnngit submodule update --init --recursive
或者直接点击,进入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.cuinclude/caffe/layers/cudnn_sigmoid_layer.hpp,
src/caffe/layers/cudnn_sigmoid_layer.cpp,
src/caffe/layers/cudnn_sigmoid_layer.cuinclude/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
替换为
cudnnConvolutionBackwardDatacudnnConvolutionBackwardFilter_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模型的结果:
- caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)
- caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)
- Caffe学习(八)运行py-faster-RCNN
- py-faster-rcnn配置过程(ubuntu)
- py-faster-rcnn配置运行demo.py(Ubuntu14.04)
- caffe学习(七):使用py-faster-rcnn来训练voc2007数据集(Ubuntu)
- 训练py-faster-rcnn(caffe)
- caffe+py-faster-rcnn
- ubuntu 上运行 py-faster-rcnn
- Window & ubuntu(非root用户)编译caffe并运行py-faster-rcnn
- py-faster-rcnn(caffe)配置和运行,训练自己的数据
- py-faster-rcnn配置
- py-faster-rcnn配置运行faster_rcnn_end2end—VGG_CNN_M_1024(Ubuntu14.04)
- py-faster-rcnn配置运行faster_rcnn_end2end—VGG_CNN_M_1024(Ubuntu14.04)
- py-faster-rcnn配置CPU下运行demo.py
- 深度学习框架caffe及py-faster-rcnn详细配置安装过程
- 深度学习框架caffe及py-faster-rcnn详细配置安装过程
- ubuntu16.04配置py-faster-rcnn(CPU版)
- 02期:jQuery最佳实践(包含常见优化写法)
- Android啓動其他app的Activity
- c++哥德巴赫猜想
- 从上往下打印二叉树
- JS children和childNodes的区别
- caffe学习(四):py-faster-rcnn配置,运行测试程序(Ubuntu)
- 基于注解的SpringMVC简单介绍
- js获取当前时间日期
- Windows PowerShell 实战指南-动手实验-5.7
- 凯哥
- 正则表达式
- [2]Python学习笔记---开发Python程序的Pycharm
- Git-命令行-使用 git stash 让突如其来的分支切换更加美好~
- python中的_init_的使用