R-FCN算法的Caffe实现

原创 2017年06月03日 10:48:58
  • 标签:
  • 算法

本博文介绍如何在Caffe上实现R-FCN,关于R-FN的算法讲解和Caffe代码详解可以参考另外一篇博客:Object Detection算法——R-FCN算法及Caffe代码详解

git地址:https://github.com/Orpine/py-R-FCN
基本上按照这个git上的readme.md的流程进行并假设你本机的Caffe本来就可以正常使用。本篇博文主要包括:搭好项目环境,运行demo,自己训练R-FCN模型。接下来详细讲解可能会遇到的坑:

一、搭好项目环境

1、先从git上拉取R-FCN

git clone https://github.com/Orpine/py-R-FCN.git
  • 1

并假设拉取后的文件名是 RFCN_ROOT

2、拉取Caffe

cd $RFCN_ROOT
git clone https://github.com/Microsoft/caffe.git
  • 1
  • 2

3、编译Cython

cd $RFCN_ROOT/lib
make
  • 1
  • 2

4、复制Makefile.config(这一步git上面漏掉了)

cd $RFCN_ROOT/caffe
cp Makefile.config.example Makefile.config
  • 1
  • 2

5、编译Caffe和pycaffe

cd $RFCN_ROOT/caffe
make -j32 && make pycaffe
  • 1
  • 2

会报这个错:

原因是在make -j32的时候找不到hdf5文件。解决办法就是修改Makefile.config文件,将Makefile.config中的下面这两行:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
  • 1
  • 2

换成:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
  • 1
  • 2

至此,环境就搭好了

二、用已经训练好的R-FCN模型跑测试图片

1、首先下载已经训练好的R-FCN模型,链接:
https://onedrive.live.com/?authkey=%21AIeljruhoLuail8&cid=10B28C0E28BF7B83&id=10B28C0E28BF7B83%215317&parId=root&action=locate

下载好的模型的目录应该类似下面这样:

$RFCN_ROOT/data/rfcn_models/resnet50_rfcn_final.caffemodel
$RFCN_ROOT/data/rfcn_models/resnet101_rfcn_final.caffemodel
  • 1
  • 2

2、运行demo

$RFCN_ROOT/tools/demo_rfcn.py
  • 1

这一步报错:

原因是找不到python相关的内容,因为在Makefile.config里面没有把python接口的注释去掉。所以打开Makefile.config,找到WITH_PYTHON_LAYER :=1这一行,然后把前面的注释符号去掉。

最后重新编译Caffe和pycaffe:

make clean
make -j32 && make pycaffe
  • 1
  • 2

再运行$RFCN_ROOT/tools/demo_rfcn.py就可以成功了。

因为这个流程除了R-FCN以外,包括Faster RCNN等都很相近,所以在一开始copy Makefile.config时就直接把上面提到的这两处修改了,这样后面的编译和运行就能一次通过。

三、自己训练模型

刚刚的demo跑的是人家训练好的R-FCN模型,接下来就试试自己来训练吧。

1、准备数据
先从网上拉取数据:

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
  • 1
  • 2
  • 3

再解压缩:

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCtrainval_11-May-2012.tar
  • 1
  • 2
  • 3

生成的目录应该类似这样:

$VOCdevkit/VOC2007
$VOCdevkit/VOC2012   
  • 1
  • 2

注:上面所用到的这些数据因为几乎所有的object detection算法都会用到,所以拉取一次就够了,不需要每个算法都拉取一次。

因为这里作者要将VOC2007和VOC2012的训练集合并作为模型训练集,所以需要新建一个文件夹VOC0712,合并后的目录应该是这样的:

$VOCdevkit/VOC2007
$VOCdevkit/VOC2012
$VOCdevkit/VOC0712
  • 1
  • 2
  • 3

这里git上还有一步是这么写的:

cd $RFCN_ROOT/data
ln -s $VOCdevkit VOCdevkit0712
  • 1
  • 2

这个命令是什么意思呢?其实就是你把下载好的数据放在:

$VOCdevkit
  • 1

这个目录,这个目录一般而言是个公共目录,这样其他算法才能比较方便地使用这个数据集,但是该算法的默认数据集存放位置是:

$RFCN_ROOT/data
  • 1

下面,那怎么办呢?那就在$RFCN_ROOT/data目录下建立$VOCdevkit的索引,运行这个命令后就可以看到在$RFCN_ROOT/data目录下有数据集了,名字为VOCdevkit0712。因此这种做法就是为了避免重复拷贝数据占用空间。

2、下载预训练好的模型
这里下载的模型是指在ImageNet数据集上预训练的ResNet模型,自己训练VOC数据时是在这个预训练的模型上进行fine-tuning的。

下载好了以后目录应该类似这样:

$RFCN_ROOT/data/imagenet_models/ResNet-50-model.caffemodel
$RFCN_ROOT/data/imagenet_models/ResNet-101-model.caffemodel
  • 1
  • 2

3、开始训练

cd $RFCN_ROOT
./experiments/scripts/rfcn_end2end.sh 0 ResNet-50 pascal_voc
  • 1
  • 2

这个命令表示采用end2end的方式训练,剩下的参数表示GPU的id是0,模型采用ResNet-50,数据集采用pascal_voc,详情可以看rfcn_end2end.sh

运行报错:

解决:因为R-FCN用到Fast RCNN相关内容,报错显示找不到text_format,所以在$RFCN_ROOT/lib/fast_rcnn/train.py文件里面添加一行:

import google.protobuf.text_format
  • 1

再运行

./experiments/scripts/rfcn_end2end.sh 0 ResNet-50 pascal_voc
  • 1

就成功了!如下图:

其实rfcn_end2end.sh文件里面包含了很多东西,大概来看一下。
这部分就是命令行运行时候的几个输入对应的内容:

这部分主要是数据集的选择,包括数据集名称,模型迭代次数等等:

后面这一部分是比较重要的,首先第一行是保存的日志,这个日志就是训练过程中的一些记录,可以根据这个画出训练loss曲线等。然后就是训练部分和测试部分。训练部分用./tools/train_net.py来训练,这个train_net.py里面还是调用了Fast RCNN的train方法,solver的地址也给出了,预训练的模型的地址也就是weights也给出了,imdb是数据集,iter是最大迭代次数,cfg是配置文件,注意这里是用rfcan_end2end.yml里面的一些设置覆盖原来设置文件中的一些参数默认值。原来的设置文件的路径是:

$RFCN_ROOT/lib/fast_rcnn/config.py
  • 1

rfcan_end2end.yml的文件内容如下:这里面对一些参数进行了新的设置,比如HAS_RPN: True表示采用RPN网络。

欢迎交流讨论,相互学习!

版权声明:本文为博主原创文章,未经博主允许不得转载。

R-FCN算法的Caffe实现相关推荐

  1. DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之FCN:FCN算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 目录 FCN算法的简介(论文介绍) 0.FCN性能-实验结果 1.全卷积神经网络的特点.局限性.缺点 FCN算法的架 ...

  2. 语义分割--FCN 算法中的一些细节--特征怎么融合

    Fully Convolutional Networks for Semantic Segmentation 语义分割 FCN 算法 这里主要说一下 FCN-32s .FCN-16s .FCN-8s ...

  3. R语言算法丨批量查找SNP位点连锁区内对应的QTL以及基因

    批量查找SNP位点连锁区内对应的QTL以及基因 如果已知SNP位点的物理位置和其LDblock区间的端点,想要快速找到该区间内的QTL,之后根据参考基因组找到与连锁区域存在交集的基因,最终得到与SNP ...

  4. R语言实战应用精讲50篇(二十九)-R语言算法应用案例:路径路网轨迹绘图分析(英国自行车数据库)

    本文主要介绍R包 PCT , 其目标是提高 Propensity to Cycle Too (PCT) 生成的数据的可访问性和可重复性,托管在 www.pct.bike 上. 英格兰和威尔士的自行车使 ...

  5. FCN制作自己的数据集、训练和测试 caffe

    原文:http://blog.csdn.net/zoro_lov3/article/details/74550735 FCN制作自己的数据集.训练和测试全流程 花了两三周的时间,在导师的催促下,把FC ...

  6. caffe FCN网络的训练——以SIFT-Flow 数据集为例

    原文:http://www.cnblogs.com/xuanxufeng/p/6243342.html 我在练习中根据操作稍微修改了一些内容, caffe fcn学习资料收集: 可以参考这个训练: h ...

  7. 【计算机视觉】图像分割中FCN、DeepLab、SegNet、U-Net、Mask R-CNN等算法的讲解(图文解释 超详细)

    觉得有帮助请点赞关注收藏~~~ 一.FCN分割算法 全卷积神经网络目标分割算法能够端到端的得到每个像素的目标分类结果,与传统的卷积神经网络只能输入固定大小图像和在网络的末端使用几个全连接层得到固定长度 ...

  8. 一文掌握语义分割PSPNet——证件照制作、抠图(算法原理、Pytorch实现)

    目录 一. 语义分割概述 二.  PSPNet语义分割原理和Pytorch实现 1. PSPNet算法原理 2. 环境配置 3.  训练数据集处理 4.数据预处理和加载 5. 模型构建 5. 训练 三 ...

  9. 检测模型改进—OHEM与Focal-Loss算法总结

    1. 概述 论文名称:Training Region-based Object Detectors with Online Hard Example Mining 代码地址:OHEM OHEM(onl ...

  10. 目标检测中的Two-stage的检测算法

    比较详细,作个备份 什么是目标检测(object detection): 目标检测(object detection),就是在给定的一张图片中精确找到物体所在的位置,并标注出物体的类别.所以,目标检测 ...

最新文章

  1. UIView旋转角度
  2. C# WinForm 技巧四:COMBOBOX搜索提示
  3. Windows 2000和WindowsXP中神秘的数字签名
  4. C语言scanf()函数格式化输入和printf()格式化输出。
  5. 后台获取前台runat=server的select的值
  6. poi 默认2位小数_odoo小数精确度
  7. 使用 Autofac 进行依赖注入
  8. hive插件 ranger_Apache Ranger及Hive权限控制
  9. 使用onclick跳转到其他页面/跳转到指定url
  10. PHP如何解决网站大流量与高并发
  11. (转)uml 静态视图关系和关联
  12. 使用svm 对参数寻优的时候出现错误
  13. LNMP环境下压力测试时的主要调试参数
  14. 《.NET应用架构设计:原则、模式与实践》新书博客-2.1.1-设计原则简述
  15. 2018年华为网络技术大赛总结
  16. Linux压缩与解压缩文件或文件夹命令
  17. Fractional Fourier Image Transformer forMultimodal Remote Sensing Data Classification
  18. Android集合之SparseArray、ArrayMap详解
  19. 企业IT管理岗的首选认证:ITIL®4 Foundation
  20. STM32 GD32 CAN调试调试调试

热门文章

  1. 算法笔记_101:蓝桥杯练习 算法提高 身份证号码升级(Java)
  2. apache tuscany(一)
  3. Android自定义ViewGroup、自定义属性及自定义View
  4. Codeforces Round #296 (Div. 1) E. Triangles 3000
  5. 从KRE到XRE:ASP.NET 5中正在消失的那些K
  6. memcached全面剖析–memcached的删除机制和发展方向
  7. net helpmsg get error message for error id in cmd script
  8. 洛谷 P2804 神秘数字
  9. [3]java1.8线程池—ThreadPoolExecutor
  10. springcloud(第三篇)springcloud eureka 服务注册与发现 *****