之前有篇关于原理的文章(Faster R-CNN文章详细解读),该文章讲述了网络的设计原理,但是具体实现还有很多细节,比如RPN层在推断的时候选了多少候选框,怎么将得到的候选框分配给FPN层的各个层进行特征的提取,Faster R-CNN的正负样本选择方式等等细节,下面来给出一些记录。

下面是根据detectron2中带FPN结构的Faster R-CNN来解释的,FPN规定的层中都会跟一个RPN,具体结构如下图所示。

1. RPN层的ground truth中正负样本怎么定义的?

生成的所有的anchor框与标注框计算iou,如果iou小于0.3则将anchor定义为负样本,如果大于0.7则定义为正样本,在[0.3, 0.7]之间的不参与rpn层的loss计算

2. RPN层的ground truth中正负样本的占比怎么分配?

预先设定RPN层参与训练的anchor框为256个,其中正样本最多为256 * 0.5 = 128个,256减去正样本个数为参与训练的负样本个数

3. R-CNN部分的ground truth是什么?

不同于RPN需要自己根据标注框生成ground truth,R-CNN部分的ground truth就是标注框

4. RPN采用的是哪几层作为提取候选区域的feature输出层?

RPN提取的特征是[“p2”, “p3”, “p4”, “p5”, “p6”],对应的stride(也就是输出的feature相对于原始输入的缩小尺度)为(4, 8, 16, 32, 64),这里"p2", “p3”, “p4”, "p5"都是根据backbone输出的feature获得的,只有"p6"是直接通过"p5"下采样得到的。

5. RPN阶段,每层输出多少个候选框,最终总共输出多少个候选框?

这个问题分为训练阶段和推断阶段

训练阶段,每层feature(“p2”, “p3”, “p4”, “p5”, “p6”),先从RPN层输出中最多2000个框,这些框是根据置信度从大到小排序选出,然后将所有层的候选合并(合并后有2000*6=12000个候选)经过NMS操作选出最多1000个候选框作为最终的输出

测试阶段逻辑同训练阶段,只是从每层的RPN输出中选出最多1000个框,合并后有1000 * 6 = 6000个候选,然后经过NMS操作选出最多1000个候选框

6. RPN选出的候选后,提取FPN中的那些feature用于之后的R-CNN训练和推断中?

训练时,RPN提出了1000个候选框,这些框的大小都是不一样的,需要根据候选框的大小分配给FPN中的五层featuremap(“p2”, “p3”, “p4”, “p5”)中去,分配的公式如下:
floor(4+log2(area224))floor(4 + log_2(\sqrt{\frac{\sqrt{area}}{224}}))floor(4+log2​(224area​​​))
上式中area为候选框的面积,floor为向下取整操作。上式求出的值小于等于2则分配个p2,等于3分配给p3,等于4分配各p4,大于等于5则分配给p5。举个例子,当area=224*224时,就将该候选框分配到p4层中,去使用ROIPooling操作获取roi特征。

这里要注意是分配给五层,而不是使用用于提出候选框的六层feature

7. 训练时,经过RPN后选出了最多1000个框用于R-CNN的训练,怎么平衡正负样本数?

将候选框与R-CNN的ground truth(也就是标注框)计算iou,大于0.5的作为正样本,其余的为负样本。预设R-CNN部分参与选了的样本总数为512个,为了平衡正负样本,先从上述的正样本中选出最多512 * 0.25 = 128个,剩下的为负样本的个数,即尽量控制参与训练的正负样本数为1:3。

8. 推断时,经过RPN后选出了最多1000个框用于R-CNN的推断,最终怎么输出?

将候选框提取相应的feature后,输入R-CNN的输出结构中,得到输出的1000个框,将这些框经过NMS操作后,选择置信度最高的100个框作为最终的输出

Faster R-CNN的参数设计细节相关推荐

  1. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  2. mlp 参数调优_积神经网络(CNN)的参数优化方法

    积神经网络(CNN)的参数优化方法 from:http://blog.csdn.net/u010900574/article/details/51992156 著名: 本文是从 Michael Nie ...

  3. 卷积神经网络(CNN)的参数优化方法

    积神经网络的参数优化方法--调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 著名: 本文是从 Michael Nielsen的电子书Neural Network and Deep L ...

  4. AI:IPPR的数学表示-CNN结构/参数分析

    前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...

  5. 【 C++ 技术】 C++ 高性能服务器网络框架设计细节

    作者:范蠡  原文:C++ 高性能服务器网络框架设计细节 前言 这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序.需要注意的是一般大型服务器,其复杂程度在于其业务, ...

  6. HFSS设计双脊喇叭天线之路——天线结构与参数设计

    超宽带双脊喇叭天线设计--天线结构与参数设计   这是本人在闲时,结合以往设计经验和参考前人的工作,设计了超宽带的双脊喇叭天线,这篇文章不是进行知识补充,而是主要针对设计时的流程以及可能遇到的问题进行 ...

  7. BUCK电路工作原理以及参数设计

    转自萌萌老师的帖子 什么是Buck电路? BUCK电路是一种降压斩波器,降压变换器输出电压平均值Uo总是小于输出电压UD. 通常电感中的电流是否连续,取决于开关频率.滤波电感L和电容C的数值. BUC ...

  8. LM358运放电路参数设计-运算放大器-单位增益带宽及反馈并联电容

    [电路笔记]LM358运放电路参数设计 实验目的:利用LM358放大电路对电流取样信号进行放大,且模拟浪涌状态,外加300K的干扰信号,分析运放输出波形的变化,选取合适的参数. 一.对仅使用电阻反馈放 ...

  9. [龙讯6号]龙芯2E首次公布设计细节

    LSLSLSLSLSLSLSLSLSLSLSLSLSLSLSLS                                                === 龙讯 ===           ...

最新文章

  1. java/jsp/sql server项目 字符编码统一_JSP开发过程遇到的中文乱码问题及解决方案...
  2. 57 第一个Celery程序
  3. bring your mac everywhere you go
  4. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - F. 寒假作业
  5. Linux 串口 gprs at,linux下GPRS模块使用AT命令实现拨接电话,发中英文短信
  6. Wicket模型的干净方法
  7. elaseticsearch 配置ik分词器的热更新_Elasticsearch从入门到放弃:分词器初印象
  8. 统一资源管理与调度平台(系统)介绍
  9. “公益AI之星”挑战赛-新冠疫情相似句对判定大赛
  10. matlab 电力系统分析 毕设,基于Labview的“电力系统分析”课程仿真:电力系统分析matlab仿真实例...
  11. 机器学习10-信用卡反欺诈模型
  12. 学习html+css+js笔记
  13. 怎样找到优质的APP推广渠道
  14. 2021年少儿编程未来趋势分析
  15. latexkatex@常用符号@符号手写识别
  16. 第一章 概率论的基本概念 1.6 独立性
  17. 正多边形的滚动与旋轮线下的面积
  18. c语言除法留小数点两位小数,高精度除法小数点位数
  19. 阿里巴巴/招行信用卡中心21届实习面试知识点汇总
  20. SEPM执行LiveUpdate 失败,错误“磁盘空间不足...”

热门文章

  1. 波澜壮阔的科技“大出海时代”,创业邦送出一张船票
  2. 震惊!被这样开发的P2P分发下载技术
  3. win10连接共享打印机报错问题如0x00000709/0x0000011b/0x00000040等
  4. java校院导游程序课程设计_数据结构课程设计之校园导游系统
  5. 6054. 逃离火灾
  6. 新西兰发明新型传感器,电子产品不再需要充电器
  7. 第三章 线程局部存储 windows程序设计 王艳平版
  8. 编曲软件-作曲大师向导功能讲解
  9. 示波器显示读取串口数据
  10. 使用Anaconda创建虚拟环境,并通过Pycharm使用虚拟环境