这一节讲述roi-data层,和这一层有关的结构图如下:

roi-data层的prototxt定义如下:

layer {
name: 'roi-data'
type: 'Python'
bottom: 'rpn_rois'
bottom: 'gt_boxes'
top: 'rois'
top: 'labels'
top: 'bbox_targets'
top: 'bbox_inside_weights'
top: 'bbox_outside_weights'
python_param {
module: 'rpn.proposal_target_layer'
layer: 'ProposalTargetLayer'
param_str: "'num_classes': 2"
}
}

这一层接着上一节的proposal层,主要的操作是对RPN阶段输出的proposal做进一步的筛选,从中选出背景和前景,得到rois,然后计算rois的回归目标。因为第二阶段的rois回归是和类别一一对应的,第二阶段全连接网络预测出的回归目标值bbox_pred的shape为(num_rois, 4*num_classes),所以最后需要将计算出的rois的回归目标值放入与其类别相对应的位置。这一层的详细操作如下:

1、取gt的x1, y1, x2, y2列,再补个全是0的第一列(表示batch_inds),然后将前面proposal层得到的rpn_rois和这样一个新的矩阵在第一个维度上合并,得到all_rois;

2、用于训练的rois的BATCH_SIZE=128,其中前景rois占比为0.25,有32个,背景rois有96个,因此,需要从all_rois中采样;

3、在all_rois中,若某个rois和任意一个gt的overlap大于或等于0.5,则该rois为前景,其类别为与之overlap最大的那个gt的类别。若某个rois和所有gt的overlap的最大值大于或等于0.1,并且小于0.5,则该rois为背景。这样便筛选出了前景和背景rois,每个rois都和一个gt对应(和它overlap最大的那个gt);

4、计算每个rois相对于它的gt的偏移量(回归目标targets),这个过程和rpn-data层中计算RPN阶段的回归目标一样。然后还需要将targets减去事先设定的均值,除以事先设定的标准差,最后将rois的类别添加在targets的第一列,得到bbox_target_data;

5、将rois的回归目标值放入与rois的类别相对应的位置,得到bbox_targets,并将bbox_inside_weights对应位置的4个值赋为1,而bbox_targets, bbox_inside_weights其他位置的值都为0,bbox_outside_weights在bbox_inside_weights大于0的位置值为1,其他位置值为0。

总结一下,这一层的输出有rois, labels, bbox_targets, bbox_inside_weights, bbox_outside_weights。第二阶段全连接网络的输出bbox_pred将和其中的bbox_targets, bbox_inside_weights, bbox_outside_weights作为第二阶段loss_bbox的输入。roi-data层的代码链接见这里

faster-rcnn代码阅读-roi-data层的更多相关文章

  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代码理解(1)

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

  5. Faster RCNN代码解析

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

  6. Faster R-CNN论文阅读摘要

    论文链接: https://arxiv.org/pdf/1506.01497.pdf 代码下载: https://github.com/ShaoqingRen/faster_rcnn (MATLAB) ...

  7. Faster R-CNN代码例子

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

  8. Faster rcnn代码理解(3)

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

  9. tensorflow faster rcnn 代码分析一 demo.py

    os.environ["CUDA_VISIBLE_DEVICES"]=2 # 设置使用的GPU tfconfig=tf.ConfigProto(allow_soft_placeme ...

  10. 对faster rcnn代码讲解的很好的一个

    http://www.cnblogs.com/houkai/p/6824455.html http://blog.csdn.net/u014696921/article/details/6032142 ...

随机推荐

  1. 6371. 【NOIP2019模拟2019.9.28】基础图论练习题

    题目 题目大意 维护一个无向图的割边条数,支持加边和删边. 正解 (PS:这是我很久之前在OJ上打出来的题解,现在直接copy过来) 题解只有一句话,估计没多少人可以看得懂.感觉出题人偷懒不想写题解- ...

  2. Unity Download

    { https://unity.cn/releases }

  3. Python与JAVA的异同

    --效率: 作为静态语言的JAVA执行效率比动态型语言的Python高 --语法: Python语句更精简. JAVA中的所有变量需要先声明(类型),才能使用,Python不需要声明变量类型 Pyth ...

  4. 构造——cf1202d

    和以前有一题构造01串的很像,固定住一个7,求出3的个数,对1的位置进行贪心 /* 1337 1 13337 3 133337 6 1333337 10 */ #include<bits/std ...

  5. 性能超过DRUID的最强数据库连接池——HikariCP相关配置及简单示例

    在配置application.yml时,对hikari的配置会有这样一个字段validationQuery. validationQuery是用来验证数据库连接的查询语句,这个查询语句必须是至少返回一 ...

  6. Hbase的读写流程

    HBase读写流程 1.HBase读数据流程 HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在 ...

  7. phpmyadmin利用的多种方式

    关于phpmyadmin的利用方式大佬们已经总结的很好了,这里只是造轮子(便于记录学习) 确认版本 渗透测试信息搜集永远是首位(也是最重要的一步).     默认目录/doc/html/index ...

  8. yum 快速LAMP/LNMP 安装(centos7+mysql5.7+apache+php5.6 (缺点:好多模块没有加载)

    1.安装Apache 安装centos7默认自带(Apache2.4.6)版本 yum -y install httpd 2.开启apache服务 systemctl start httpd.serv ...

  9. 装nginx遇到的坑 未完待续

    首装nginx时 server { listen 8066;  监听端口号 server_name localhost;   监听地址 location / goldwind{   root /roo ...

  10. 网络数据包最大长度 MTU 分片 转发https://blog.csdn.net/singular2611/article/details/52513406

    1.数据链路层对数据帧的长度都有一个限制,也就是链路层所能承受的最大数据长度,这个值称为最大传输单元,即MTU.以以太网为例,这个值通常是1500字节. 2.对于IP数据包来讲,也有一个长度,在IP包 ...