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接口修改训练)
Fast RCNN 训练自己数据集 (1编译配置)的更多相关文章
- Fast RCNN 训练自己数据集 (2修改数据读取接口)
Fast RCNN训练自己的数据集 (2修改读写接口) 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ http ...
- FastRCNN 训练自己数据集 (1编译配置)
http://www.cnblogs.com/louyihang-loves-baiyan/p/4885659.html 按照博客的教程配置,但自己在服务器上配置时,USE_CUDNN = 1会报错, ...
- Fast RCNN 训练自己的数据集(3训练和检测)
转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ https://github.com/YihangLou/fas ...
- Fast R-CNN训练自己的数据集时遇到的报错及解决方案
最近使用Fast R-CNN训练了实验室的数据集,期间遇到一些报错,主要还是在配置环境上比较麻烦,但可以根据提示在网上找到解决这些错误的办法.这里我只记录一些难改的报错,以后再遇见这些时希望能尽快解决 ...
- 【目标检测】用Fast R-CNN训练自己的数据集超详细全过程
目录: 一.环境准备 二.训练步骤 三.测试过程 四.计算mAP 寒假在家下载了Fast R-CNN的源码进行学习,于是使用自己的数据集对这个算法进行实验,下面介绍训练的全过程. 一.环境准备 我这里 ...
- fast rcnn训练自己数据小结
1.http://blog.csdn.net/hao529good/article/details/46544163 我用的训练好的模型参数是data/fast_rcnn__models/vgg_ ...
- Fast RCNN 学习
因为项目需要,之前没有接触过深度学习的东西,现在需要学习Fast RCNN这个方法. 一步步来,先跟着做,然后再学习理论 Fast RCNN 训练自己数据集 (1编译配置) Fast RCNN 训练自 ...
- Fast RCNN论文学习
Fast RCNN建立在以前使用深度卷积网络有效分类目标proposals的工作的基础上.使用了几个创新点来改善训练和测试的速度,同时还能增加检测的精确度.Fast RCNN训练VGG16网络的速度是 ...
- 深度学习论文翻译解析(十二):Fast R-CNN
论文标题:Fast R-CNN 论文作者:Ross Girshick 论文地址:https://www.cv-foundation.org/openaccess/content_iccv_2015/p ...
随机推荐
- Fluent NHibernate example
http://www.codeproject.com/Articles/26466/Dependency-Injection-using-Spring-NET http://stackoverflow ...
- ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表
本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 ...
- Spring核心概念之AOP
一.AOP 的概念 AOP(Aspect Oriented Programming)的缩写,面向切面编程,主要作用就是对代码进行增强处理. 理解面向切面编程的含义:就是在不改变原有程序的基础上为代码增 ...
- Python正则表达式模块(re模块)
Python是我接触到的第一门编程语言,虽然它足够简单,但是对于当时刚刚接触编程语言的我来说还是有些难度的,于是只是了解了一些Python的基本语法,稍微深入一点的地方都没怎么了解.不过,到现在为止, ...
- 如何选择RabbitMQ的消息保存方式?
RabbitMQ对于queue中的message的保存方式有两种方式:disc和ram.如果采用disc,则需要对exchange/queue/delivery mode都要设置成durable模式. ...
- mysql存储过程性能监控和分析
公司当前版本的系统大量的使用了存储过程,有些复杂的过程套过程,一个主调用者可能最多调用其它几十个小的业务逻辑和判断,不要说这么做很不合理,在大陆,目前至少30%的证券交易系统代码都是用存储过程写业务逻 ...
- 关于使用ResultSet ---结果集没有当前行
Resultset返回的结果集是从结果的前一句开始的,也就是说一开始的resultset是没有的,所以,一般使用的时候,需要这样子写: while( resultSet.next() ){ ...
- Jsoup解析Html中文文档
jsoup 简介Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTM ...
- Android 之 Intent(意图)
Intent是 Android中重要的桥梁之一,它分为显式意图和隐式意图.接下来分别针对这两种意图进行讲解. 显式意图:通过指定一组数据或动作,激活应用内部的 activity:(相比隐式意图,此做法 ...
- iOS开发之网络编程--小文件下载
文件下载方式: 如果下载的文件比较小,下载方式: 直接用NSData的 +(id)dataWithContentsOfURL:(NSURL*)url; 利用NSURLConnection发送一个HTT ...