Fast RCNN 训练自己数据集 (1编译配置)

FastRCNN 训练自己数据集 (1编译配置)

转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/

https://github.com/YihangLou/fast-rcnn-train-another-dataset 这是我在github上修改的几个文件的链接,求星星啊,求星星啊(原谅我那么不要脸~~)

FastRCNN是Ross Girshick在RCNN的基础上增加了Multi task training整个的训练过程和测试过程比RCNN快了许多。别的一些细节不展开,过几天会上传Fast RCNN的论文笔记。FastRCNN mAP性能上略有上升。Fast RCNN中,提取OP的过程和训练过程仍然是分离的。因此我们在训练过程中,需要用OP的方法先把图像OP提取好,再送入Fast RCNN中训练,在检测过程中也是如此需要先把相应的测试图像的OP提取出来送入检测。

首先我要说的是如何安装Fast RCNN环境,具体的流程在Ross Girshick的Github上有,他里面主要是讲解了如何安装和使用。我会稍微提到这一部分内容,主要讲解,如果要训练自己的数据,应该修改那些地方,并把我自己训练的过程跟大家分享一下。

1.当然是Git clone一下Ross的工程啦

这里给出Github的链接https://github.com/rbgirshick/fast-rcnn
首先根据他的提示

Make sure to clone with --recursive
git clone --recursive https://github.com/rbgirshick/fast-rcnn.git

这里不要忘了加--recursive

2.在这里简单介绍一下工程目录

首先工程的根目录简单的称为 FRCN_ROOT,可以看到根目录下有以下几个文件夹

  • caffe-fast-rcnn

    这里是caffe框架目录

  • data

    用来存放pretrained模型 比如imagenet上的,以及读取文件的cache缓存

  • experiments

    存放配置文件以及运行的log文件,另外这个目录下有scripts 用来获取imagenet的模型,以及作者训练好的fast rcnn模型,以及相应的pascal-voc数据集

  • lib

    用来存放一些python接口文件,如其下的datasets主要负责数据库读取 config负责cnn一些训练的配置选项

  • matlab

    放置matlab与python的接口,用matlab来调用实现detection

  • models

    里面存放了三个模型文件,小型网络的CaffeNet 大型网络VGG16 中型网络VGG_CNN_M_1024

  • output

    这里存放的是训练完成后的输出目录,默认会在default文件夹下

  • tools

    里面存放的是训练和测试的Python文件

3.编译Cython module

cd $FRCN_ROOT/lib
make

进入lib目录直接make就可以了

4.编译Caffe and pycaffe

cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe

这里需要注意的是你直接make -j8 && make pycaffe是会报错的,

可以看到图中是是没有Makefile.config文件,但是作者有一个Makefile.config.example文件,你需要复制它一下然后重命名为Makefile.config

需要注意的是里面还有几个配置需要添加

  • 打开 USE_CUDNN = 1,这个选项默认情况下时关闭的,让CUDA支持DNN

  • 打开 WITH_PYTHON_LAYER = 1,这个在默认情况下也是关闭的,FastRCNN需要支持Python接口,因此需要打开

  • Fast RCNN需要hdf5的支持,这个根据自己的Linux里的库文件安装路径添加,不清楚的可以find一下,不过一般情况下,INCLUDE_DIRS 应该添加上 /usr/include/hdf5/serial LIBRARY_DIRS 添加上 /usr/lib/x86_x64-linux-gnu/hdf5/serial
  • 另外把USE_PKG_CONFIG = 1 记得打开,要不然会找不到一些库文件,PKG是linux用来管理库文件

这几个是需要在Makefile.config.example中修改的,最好直接copy一个再修改。
另外还有一个需要注意的地方是,当初楼主的linux版本太高,ubuntu这玩意更新太快了,boost库的版本太高,Fast RCNN里面用的是1.55版本的boost库,当时我电脑上是1.59,会出现接口不兼容,记得是废弃了几个接口,编译报错,装回1.55的就可以了

5.下载相应的模型文件

Ross给出的操作是这样的,其实我不推荐这么弄,因为直接用wget去下载的速度比较慢,我们可以打开里面的shell文件,把url粘贴出来,到迅雷里面下载,几分钟就好了

cd $FRCN_ROOT
./data/scripts/fetch_fast_rcnn_models.sh

这里以相应的 imagenet_model为例,你到目录下可以看到3个shell文件,分别是fetch_fast_rcnn_models.s h,fetch_imagenet_models.sh,fetch_selective_search_data.sh,第一是作者训练好的fast_rcnn模型,第二个是imagenet_model上预训练好的模型,第三个对应着的是作者基于Pascal VOC数据集提取的selective_search预选框。如果想要看一下fast rcnn的效果,可以直接加载Ross训练好的fast_rcnn模型,如果要自己训练的话,记得加载imagenet模型

这里是imagenet_model的shell文件,看家里面的URL了没,最后的URL链接就是这个链接再加上FILE变量,链接,你直接把它链接起来,复制到迅雷中下载就可以了,速度灰常快,直接下载的话炒鸡慢啊。
下在之后记得放到data/目录下去解压哦,

6.运行网络和加载模型文件

在tools下面有个demo.py文件

cd $FRCN_ROOT
./tools/demo.py

就可以直接运行,记得看一下里面的参数,这里对显卡有一定的要求,Ross说必须是3G的显存以上才可以跑的动哦,里面有3个大小的网络caffenet是最小的,有显卡应该就能跑起来,vgg_cnn_m_1024是一个中型网络,vgg16是大型网络,后两个得看显卡的显存大小才能跑起,显存不够启动会报错的。

如果在cpu模式下的话速度是灰常慢的,GPU模式下大概0.2秒左右。

对了demo里面都是有显示的函数的,如果你是在linux终端下没有输出设备运行是会报错的

正确运行的结果如下
里面有两个图片检测效果,这里放一张

7.关于训练自己的数据样本

请等待下一篇 过两天就放上来 FastRCNN 训练自己数据集 (2接口修改训练)

评论列表

#1楼 2015-10-20 14:13 lightning16 
demo我都跑通了,现在是想用自己的道路标识进行训练,用什么工具能把这些标识提前出来在annoations呢?
支持(0)反对(0)

#2楼[楼主] 2015-10-23 00:22 楼燚航的blog 
@ lightning16
你说的应该是原始的GroundTruth,就是目标在图中的位置吧,我当时是自己写的python 和 opencv一个标注小工具
支持(0)反对(0)

#3楼 2015-11-16 16:27 Vict 
cd $FRCN_ROOT
./tools/demo.py
这之前的东西都搞定,但跑demo出问题。
Traceback (most recent call last):
File "./tools/demo.py", line 17, in <module>
from fast_rcnn.config import cfg
File "/home/zhaoyannan/fast-rcnn/tools/../lib/fast_rcnn/__init__.py", line 8, in <module>
from . import config
File "/home/zhaoyannan/fast-rcnn/tools/../lib/fast_rcnn/config.py", line 23, in <module>
from easydict import EasyDict as edict
ImportError: No module named easydict
支持(0)反对(0)

#4楼 2015-11-16 16:28 Vict 
对了我是用cpu配置的caffe,没配置cuda
支持(0)反对(0)

#5楼[楼主] 2015-11-16 19:05 楼燚航的blog 
@ Vict
我觉得你可能是easydict环境没有配或者是附加模块的路径问题,你在编译的时候Makefile.config下是否添加了相应的python附加包的路径
支持(0)反对(0)

#6楼 2015-11-17 02:17 sunjieee 
博主,我在fast rcnn编译caffe-fast-rcnn出现问题
加上WITH_PYTHON_LAYER = 1就有问题
把这句注释掉就能编译,但跑会有问题
而我尝试最新的caffe同样加上WITH_PYTHON_LAYER = 1却能够编译完成
这是哪里的问题?是boost版本问题吗?
实验室的服务器不敢改,用自己电脑gt750跑的话会要几天吗?
具体报错:
.build_release/lib/libcaffe.so: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > > const&)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
collect2: error: ld returned 1 exit status
Makefile:545: recipe for target '.build_release/tools/device_query.bin' failed
make: *** [.build_release/tools/device_query.bin] Error 1
make: *** Waiting for unfinished jobs....
支持(0)反对(0)

#7楼[楼主] 2015-11-18 18:49 楼燚航的blog 
@ sunjieee
我之前boost升级也碰到过问题,后来退回到1.55版本,就没有Boost的问题了,你可以试试
支持(0)反对(0)

#8楼 2015-12-28 19:55 野孩子1991 
楼主,可否给下你的selective search的代码,我在网上找的产生的op都不好,对比demo里的检测车辆那个,我的op只能找到两辆车。谢谢。
支持(0)反对(0)

#9楼 2016-01-27 14:52 黄豆豆是小小兵 
博主您好,参照您的博客安装了fast-rcnn,但是在编译caffe和pycaffe时出现了问题,向您请教一下~
.build_release/lib/libcaffe.so:对‘caffe::CuDNNConvolutionLayer<double>::Backward_gpu(std::vector<caffe::Blob<double>*, std::allocator<caffe::Blob<double>*> > const&, std::vector<bool, std::allocator<bool> > const&, std::vector<caffe::Blob<double>*, std::allocator<caffe::Blob<double>*> > const&)’未定义的引用
谢谢( ^_^ )
支持(0)反对(0)

#10楼[楼主] 2016-02-19 13:08 楼燚航的blog 
@ 野孩子1991
你可以直接到Fast或者FasterRCNN的Github主页上有相应的链接,跳过去下载就可以了
支持(0)反对(0)

#11楼[楼主] 2016-02-19 13:09 楼燚航的blog 
@ 黄豆豆是小小兵
你那个cuDNN的编译选项要确保打开哦
支持(0)反对(0)

#12楼 2016-03-09 13:40 keran 
唔,我刚才没编译,但是现在编译出现了大bug呀,求帮助!
In file included from src/caffe/util/cudnn.cpp:2:0:
./include/caffe/util/cudnn.hpp:64:32: 错误: 变量或字段‘createTensor4dDesc’声明为 void
./include/caffe/util/cudnn.hpp:64:32: 错误: ‘cudnnTensorDescriptor_t’在此作用域中尚未声明
./include/caffe/util/cudnn.hpp:64:57: 错误: ‘desc’在此作用域中尚未声明
。。。。。太多了放不下
./include/caffe/util/cudnn.hpp: 在函数‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, int, cudnnFilterDescriptor_t, int, int, int, int)’中:
./include/caffe/util/cudnn.hpp:104:3: 错误: ‘cudnnSetConvolution2dDescriptor’的实参不依赖模板参数,所以‘cudnnSetConvolution2dDescriptor’的声明必须可用 [-fpermissive]
./include/caffe/util/cudnn.hpp:104:3: 附注: (如果您使用‘-fpermissive’,G++ 会接受您的代码,但是允许使用未定义的名称是不建议使用的风格)
./include/caffe/util/cudnn.hpp: 在函数‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’中:
./include/caffe/util/cudnn.hpp:117:13: 错误: ‘CUDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING’在此作用域中尚未声明
./include/caffe/util/cudnn.hpp:123:3: 错误: ‘cudnnSetPooling2dDescriptor’的实参不依赖模板参数,所以‘cudnnSetPooling2dDescriptor’的声明必须可用 [-fpermissive]
make: *** [.build_release/src/caffe/util/math_functions.o] 错误 1

谢谢!

支持(0)反对(0)

#13楼 2016-03-30 15:31 雪花扇子 
楼主你好,为什么会出现cannot import name symbol_database
支持(0)反对(0)

#14楼 2016-04-01 18:46 JustJay 
@ 野孩子1991
selective-search提取OP的坐标是[top left bottom right]形式,并且从1开始,demo.py里面OP坐标形式为[left top right bottom],并且从0开始。
所以你需要进行坐标变换:all_proposals=all_proposals[ : , (1,0,3,2)]-1。
我当时也是只能检测出两辆车,后来发现是坐标的问题
支持(0)反对(0)

#15楼 2016-04-01 18:51 JustJay 
@ 雪花扇子
我建议你在make -j8 && make pycaffe 之后从上到下依次查找error。很多问题是没有安装库文件。google相应error之后 sudo apt-get install 相应的库 就好啦!
支持(0)反对(0)

#16楼 2016-04-01 18:58 雪花扇子 
@ JustJay
谢谢!那个问题以及解决了。我看了demo发现不仅有图片还有.mat的数据文件,那在在测试的时候是不是还得准备测试图片的.mat文件。这样我随便拿一张图片来做测试不就不能测试吗?
支持(0)反对(0)

#17楼 2016-04-01 19:04 JustJay 
@ 雪花扇子
是这样的,如果你需要测试自己的图片就要提取Object Proposal,也就是那个生成的.mat文件。我目前用的是selective-search提取的,Edge-Boxes还没有调好。不过你要非常注意坐标问题,正如博主提到的一样。
支持(0)反对(0)

#18楼 2016-04-01 19:10 雪花扇子 
@ JustJay
那我如果是实际用呢?就比如像博主那样要对道路上的车辆进行检测,那是不是要把视频每帧经过 selective-search 提取出 Object Proposal生成.mat文件然后和每帧图片本身传到模型做检测啊。这样的话有点麻烦
支持(0)反对(0)

#19楼 2016-04-01 19:16 JustJay 
@ 雪花扇子
我是初学caffe,现在还只是进行到检测自己的图片阶段,甚至还没有开始训练自己的数据集:(,不过你说的这个问题我不久会着手研究,如果你有什么进展,希望可以互相交流切磋!!!
支持(0)反对(0)

#20楼 2016-04-01 19:21 雪花扇子 
@ JustJay
我也是出学,只是在跑demo的时候发现这个问题,多多交流
支持(0)反对(0)

#21楼 2016-04-05 10:33 野孩子1991 
@ JustJay
非常感谢,我现在着手正在搞别的,等过段时间再搞一下试试。
支持(0)反对(0)

Fast RCNN 训练自己数据集 (1编译配置)相关推荐

  1. Fast RCNN 训练自己数据集 (2修改数据读取接口)

    Fast RCNN 训练自己数据集 (2修改数据读取接口) Fast RCNN训练自己的数据集 (2修改读写接口) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.co ...

  2. FastRCNN 训练自己数据集 (1编译配置)

    http://www.cnblogs.com/louyihang-loves-baiyan/p/4885659.html 按照博客的教程配置,但自己在服务器上配置时,USE_CUDNN = 1会报错, ...

  3. Fast RCNN 训练自己的数据集(3训练和检测)

    Fast RCNN 训练自己的数据集(3训练和检测) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ https ...

  4. Faster RCNN训练自己数据集报错记录及解决

    Faster R-CNN源码网址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5点击打开链接 环境:python3.6 tenso ...

  5. 目标检测系列(四)——Fast R-CNN译文

    文章目录 摘要 1. 引言 1.1 R-CNN和SPPnet 1.2 本文贡献点 2. Fast R-CNN的框架和训练过程 2.1 RoI pooling层 2.2 从预训练网络初始化 2.3 针对 ...

  6. 目标检测经典论文——Fast R-CNN论文翻译(中英文对照版):Fast R-CNN(Ross Girshick, Microsoft Research(微软研究院))

    目标检测经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[Fast R-CNN纯中文版] Fast R-CNN Ross Girshick Mic ...

  7. 【论文翻译】Fast R-CNN

    Fast R-CNN Ross Girshick Microsoft Research rbg@microsoft.com 摘要 本文提出了一种快速的基于区域的卷积网络方法(fast R-CNN)用于 ...

  8. Fast R-CNN 论文翻译

    Fast R-CNN: 1)优点: 1.Fast R-CNN采用了多项创新提高训练和测试速度来提高检测精度. ①特征共享与分层采样,提高卷积层训练速度 ②截断的SVD:提高全连接层训练速度 ③&quo ...

  9. Fast RCNN论文学习

    Fast RCNN建立在以前使用深度卷积网络有效分类目标proposals的工作的基础上.使用了几个创新点来改善训练和测试的速度,同时还能增加检测的精确度.Fast RCNN训练VGG16网络的速度是 ...

最新文章

  1. 最短路-SPAF模板
  2. LeetCode 5 最长回文子串
  3. SEO网络优化的三个博客优化技巧
  4. 使用NHibernate绑定页面数据时,出现未能加载视图状态,正在向其中加载视图状态。。。。的Bug...
  5. 16 大常考算法知识点,你掌握了吗?
  6. 福特打造自动驾驶汽车,你的专属安全智能护卫
  7. 阿里巴巴和印度最大移动支付和商务平台Paytm
  8. struts2开发action 的三种方法以及通配符、路径匹配原则、常量
  9. dcdc芯片效率不高的原因_研学丨燃料电池车的典型效率及能耗
  10. pythonread读取怎么是乱码_python中如何读写文件不乱码
  11. Codeforces Round #198 (Div. 2)A,B题解
  12. python实现文件编码转换_Python实现批量转换文件编码的方法
  13. Mantis1.2.19 在Windows 平台上的安装配置详解
  14. 屏幕录像专家的使用说明
  15. 某商店规定,某商品一次购买5件以上(包含5件)打九折,一次购买10件以上(包含10件)打八折,请根据单价和数量球总价
  16. 一位ML工程师构建深度神经网络的实用技巧
  17. 文治者必有武备不然长大了挨欺负_有文事者必有武备,有武备者必有文事。
  18. rabbitmq操作报错
  19. 什么是响应式布局?原理是什么?
  20. powerbi无法将修改保存到服务器,对 Power BI 报表服务器中的计划刷新进行故障排除...

热门文章

  1. Golang 判断key是否在map中
  2. linux搭建--DISPLAY环境变量问题(一)
  3. Radio Button的使用
  4. jQuery插件simplePagination的使用-踩坑记_03
  5. 多备份cloud 5技术:传统数据备份思路的完美移植
  6. tableview逆时针旋转90度。
  7. 分享自己整理的《UIT备份容灾解决方案培训稿》
  8. c# char unsigned_dll 中含有unsigned char数组,被C#调用 -
  9. python 二维数组元素返回二维坐标_python – 从二维数组中返回生成器而不是位置列表...
  10. shell脚本——调试(-n / -x /-c)