这段时间看了不少论文,回头看看,感觉还是有必要将Faster rcnn的源码理解一下,毕竟后来很多方法都和它有相近之处,同时理解该框架也有助于以后自己修改和编写自己的框架。好的开始吧~

这里我们跟着Faster rcnn的训练流程来一步一步梳理,进入tools\train_faster_rcnn_alt_opt.py中:

首先从__main__入口处进入,如下:

上图中首先对终端中的命令行进行解析,获取相关的命令参数;然后利用mp.Queue()创建一个多线程的对象,再利用get_solvers()获得solvers等信息;然后就开始了论文中的“四步训练”:

第一步,首先训练RPN网络:

上图中,先开始子进程训练RPN,训练函数是train_rpn(),那么我们就进入这个函数一探究竟:

这里首先使用cfg设置训练时的一些设置参数(cfg类是一个字典,其定义在config.py中,属于网络训练时的配置文件)(注意这里的cfg.TRAIN.PROPOSAL_METHOD = 'gt'这在后面会用到),然后是初始化caffe,这里主要是设置了随机数种子,以及使用caffe训练时的模式(gpu/cpu);之后就是第一个重头戏--获取imdb和roidb格式的训练数据:

进入get_roidb()函数,如下:

首先通过get_imdb()函数获得imdb数据,那我们就再进入get_imdb()函数一探究竟,如下:

这里其实也是调用了pascal_voc()函数来创建imdb数据,pascal_voc类见pascal_voc.py文件中,如下:

这里只截取了一部分,可以发现,pascal_voc这个类主要用来组织输入的图片数据,存储图片的相关信息,但并不存储图片;而实际上,pascal_voc类是imdb类的一个子类;好了现在imdb数据已经获得了,再回到get_roidb()中,紧接着set_proposal_method()函数设置了产生proposal的方法,实际也是向imdb中添加roidb数据,进入set_proposal_method()这个函数:

首先用eval()对这个方法进行解析,使其有效,再传入roidb_handler中,这里就要回到之前的train_rpn()函数中了,它里面设置了cfg.TRAIN.PROPOSAL_METHOD='gt'(默认值是selective search,先前用于fast rcnn的),先进入gt_roidb()函数中:

这里gt_roidb()中实际是使用_load_pascal_annotation()通过解析XML文件获得gt的roi的,进入该解析函数:

可以发现,roidb的结构是一个包含有5个key的字典,具体值见上面代码~

这个时候就从imdb获得了最初的roidb格式的数据,但这还不是训练时的roidb数据,再回到get_roidb()函数中,通过get_training()函数得到最终用于训练的roidb数据,进入该函数:

先根据cfg.TRAIN.USE_FLIPPED判断是否需要对roi进行水平镜像翻转(注意这里的镜像的对称轴是图片的中心线),然后使用append_flipped_images()添加镜像roi,作者认为这样子能提高最终网络的训练结果(这应该算是一种简单的数据增强吧),进入该函数:

添加之后还没结束呢,回到get_training_roidb()中,最后还要再经过一步prepare_roidb(),进入该函数:

向roidb中再添加一些额外的信息就可以用来进行训练了(注意这还只是第一步,训练总共四步),好了,到这儿,关于获取roidb和imdb的代码就介绍到这儿了~

(转载请注明出处)

Faster rcnn代码理解(1)的更多相关文章

  1. Faster RCNN代码理解(Python)

    转自http://www.infocool.net/kb/Python/201611/209696.html#原文地址 第一步,准备 从train_faster_rcnn_alt_opt.py入: 初 ...

  2. Faster rcnn代码理解(4)

    上一篇我们说完了AnchorTargetLayer层,然后我将Faster rcnn中的其他层看了,这里把ROIPoolingLayer层说一下: 我先说一下它的实现原理:RPN生成的roi区域大小是 ...

  3. Faster rcnn代码理解(2)

    接着上篇的博客,咱们继续看一下Faster RCNN的代码- 上次大致讲完了Faster rcnn在训练时是如何获取imdb和roidb文件的,主要都在train_rpn()的get_roidb()函 ...

  4. Faster rcnn代码理解(3)

    紧接着之前的博客,我们继续来看faster rcnn中的AnchorTargetLayer层: 该层定义在lib>rpn>中,见该层定义: 首先说一下这一层的目的是输出在特征图上所有点的a ...

  5. 原 CNN--卷积神经网络从R-CNN到Faster R-CNN的理解(CIFAR10分类代码)

    1. 什么是CNN 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Netwo ...

  6. Faster R-CNN代码例子

    主要参考文章:1,从编程实现角度学习Faster R-CNN(附极简实现) 经常是做到一半发现收敛情况不理想,然后又回去看看这篇文章的细节. 另外两篇: 2,Faster R-CNN学习总结      ...

  7. 对Faster R-CNN的理解(1)

    目标检测是一种基于目标几何和统计特征的图像分割,最新的进展一般是通过R-CNN(基于区域的卷积神经网络)来实现的,其中最重要的方法之一是Faster R-CNN. 1. 总体结构 Faster R-C ...

  8. Rcnn/Faster Rcnn/Faster Rcnn的理解

    基于候选区域的目标检测器 1.  滑动窗口检测器 根据滑动窗口从图像中剪切图像块-->将剪切的图像块warp成固定大小-->cnn网络提取特征-->SVM和regressor进行分类 ...

  9. Faster RCNN代码解析

    1.faster_rcnn_end2end训练 1.1训练入口及配置 def train(): cfg.GPU_ID = 0 cfg_file = "../experiments/cfgs/ ...

随机推荐

  1. 洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)

    洛谷题目传送门 来个正常的有证明的题解 我们不好来表示某时刻某一个位置是哪一张牌,但我们可以表示某时刻某一张牌在哪个位置. 设数列\(\{a_{i_j}\}\)表示\(i\)号牌经过\(j\)次洗牌后 ...

  2. EXTRACT FILES AND IMAGES FROM A SHAREPOINT CONTENT DATABASE

    If you ever had the problem where you need to extract files from a SharePoint Content Database or no ...

  3. SharePoint 2013 APP 开发示例 系列

    SharePoint 2013 APP 安全: SharePoint 2013 APP 开发示例 (一)List 读写 SharePoint 2013 APP 开发示例 (二)获取用户信息 Share ...

  4. 牛客练习赛 小D的剑阵 解题报告

    小D的剑阵 题意链接: https://ac.nowcoder.com/acm/contest/369/F 来源:牛客网 现在你有 \(n\) 把灵剑,其中选择第i把灵剑会得到的 \(w_i\) 攻击 ...

  5. 洛谷 P2057 [SHOI2007]善意的投票 解题报告

    P2057 [SHOI2007]善意的投票 题目描述 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照 ...

  6. wechat 网页版通信全过程

    想要记录总结一下自己在这个小项目中所遇到的坑,以及解决问题的思路. 首先我觉得这个小项目挺有实际市场的,市场上有一定的需求量,这个就是驱动力吧.这个小项目的关键点是wechat网页版通信全过程,讲真挺 ...

  7. IDEA集成有道翻译插件/maven帮助插件/mybatis插件

    (一)IDEA集成有道翻译插件:https://www.cnblogs.com/a8457013/p/7814335.html 插件下载地址:http://plugins.jetbrains.com/ ...

  8. 用矩阵和待定系数法求数列的分析(复杂度log(n))

    下载地址:http://pan.baidu.com/s/1nuVew6d

  9. POJ1185 状压dp(二进制//三进制)解法

    很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...

  10. UML类关系(依赖,关联,聚合,组合,泛化,实现)

    转自https://blog.csdn.net/k346k346/article/details/59582926   在学习面向对象设计时,类关系涉及依赖.关联.聚合.组合和泛化这五种关系,耦合度依 ...