RPN定位模块细节回顾
一、主干网络与FPN多尺度特征提取
将一张高宽为H*W的图像输入深度网络,经过主干网络与FPN结构后输出不同级别的特定分辨率特征。
P2:torch.size(1,256,H/4, W/4)
P3:torch.size(1,256,H/8, W/8)
P4:torch.size(1,256,H/16,W/16)
P5:torch.size(1,256,H/32,W/32)
P6:torch.size(1,256,H/64,W/64)
不同级别的特征都是经过了不同尺度的下采样,对应着不同的目标感受野,可适用于不同尺度的目标定位。
二、RPN Head
RPN Head是一个极简神经网络,主要由一个256通道的3x3卷积与两个独立的分别用于前景分类与目标框偏差回归的1x1卷积组成。
其中分类分支的1x1卷积通道数为一个特征点设置的anchor数量K(3)
其中回归分支的1x1卷积通道数为4*K(每个anchor都要回归4个坐标参数)
前面得到的5种级别的特征会依次分别作为RPN Head的输入,并得到对应级别特征的预测输出;
其中分类分支的输出1x3xHixWi对应着三个通道(对应3个不同形状的anchor)的目标存在概率特征图,再经sigmoid函数激活后,每个位置的分数都可以表示此位置感受野中存在前景目标的概率值。
其中回归分支的输出1x12xHixWi的每个位置都对应着3个不同形状anchor的4个坐标回归参数(纠正偏离以接近对应标注框)。
三、正负样本选择与采样
假定输入图像中存在一个前景目标,训练中,我们需要从所有预设的anchor中根据IoU阈值选择对应数量的正样本与负样本,其中正负样本用于前景、背景分类,只有正样本需要进行坐标参数回归。
(1)Anchor生成
首先根据多级特征图的大小与anchor预设参数,使用anchor_generator函数生成对应级别特征上的anchor,然后torch.cat函数将不同级别特征上的anchor按顺序拼接组合,得到此图对应的所有可用anchor。
(2)正负样本选择
在获取到anchor后,先对此图前景目标的标注框gt_bboxes与所有anchor进行IoU重叠率计算得到一个IoU矩阵,然后为每一个anchor匹配一个重叠率最大的标注框,进而根据负样本阈值neg_iou_thr将低于阈值的anchor设定为负样本(标签为0),将大于正样本设定阈值pos_iou_thr的anchor设定为正样本(标签为1),其它anchor(标签为-1)不参与训练。此外,为了避免某些标注框没有超过阈值的正样本匹配anchor,可以考虑与标注匹配的低质量anchor,具体就是为每一个标注框匹配一个具有最大重叠率的anchor,然后将重叠率大于设定阈值min_pos_iou的设置为正样本。
(3)正负样本采样
在经过前面的正负样本选择过程,我们得到了一定数量的正样本与大量的负样本,为了避免正负样本在数量上严重失衡,需要进一步对样本数量与样本比例进行限制。FasterRCNN论文中默认设置共采样256个样本,其中正负样本的比例为1:1。
具体就是如果正样本的数量m少于128个,就全部作为正样本,如果超过128个,就随机选择128个作为正样本,其它设置为-1标签不参与训练;
在采样完所需正样本后,将所需的256个样本中除去正样本数量,得到所需的负样本数量,如果负样本总数量n大于所需数量,随机采样所需数量后,其余设置标签为-1不参与训练,否则全部作为负样本。
通常情况下,传统采样方法得到的正样本数量相对较少,尤其对于小目标来说。
三、训练目标设定
在获取到所需数量的正负样本之后,我们会为对应正负样本的每个anchor设定对应的正负标签(1与0),然后将正负样本重新映射回到对应的不同级别特征上,通过对应特征级别上的分类分支进行判别学习。
同时,基于标注框与正样本anchor,计算出对应anchor的回归目标偏差,然后将正负样本重新映射回到对应的不同级别特征上,通过对应特征级别上的回归分支进行做坐标偏差的回归学习。
由于FPN多尺度融合特征的使用,我们知道在训练过程中,不同尺度的目标通常会在对应级别特征上进行前景分类与坐标回归的学习,很大程度上缓解了单一尺度级别上多尺度目标学习的困难。
参考资料:
1 Digging into Detectron 2 — part 4 | by Hiroto Honda | Medium
2 MMDetection源码
RPN定位模块细节回顾相关推荐
- Spring4 全细节回顾
spring细节回顾 1.IOC/DI ApplicationContext接口是BeanFactory接口的子接口,Spring所有的东西都扔到了这里边. 1.Beans:Spring负责创建类对象 ...
- 50天10万行代码,一号专车系统重构细节回顾
2013年底,我关闭当时的创业项目,无所事事之时,打电话向快的CEO Dexter请教,当时快的和大黄蜂刚刚合并,他建议我可以先和大黄蜂CEO李祖闽(Joe)聊聊. 和Joe第一次见面是在虹桥火车站的 ...
- 面试必备,Java线程状态之细节回顾
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/vYqjShos Java线程有6种状态 在某个给定时间点 ...
- 【进阶版】机器学习之支持向量机细节回顾及原理完善(09)
目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 支持向量机 函数间隔与几何间隔 函数间隔 几何间隔 最大间隔与 ...
- 也许是东半球直接底气的分库分表实践了
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 背景 前不久发过两篇关于分表的文章: 一次分表踩坑实践的探讨 分表后需要注意的二三事 从标题可 ...
- 史上最详细 Linux 用户与用户组知识
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:CU技术社区 ID:ChinaUnix2013 1.用户和用户组文件 在 linux 中 ...
- 咱们从头到尾说一次 Java 垃圾回收
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 ⬆️ 图片来源于网络 之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C ...
- ELK教程1:ElasticSearch集群的部署
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 在分布式系统中,应用数量众多,应用调用链复杂,常常使用ELK作为日志收集.分析和展示的组件.本 ...
- ELK教程3:logstash的部署、SpringBoot整合ELK+Filebeat
本篇文章主要讲解如下安装Logstash,logstash依赖于Java环境,首先安装Java,安装脚本如下: yum install java logstash安装 Logstash的安装脚本如下: ...
最新文章
- 刻意练习:Python基础 -- Task05. 函数与Lambda表达式
- 中文速读微生物组(宏基因组)前沿文献——这个可以有
- 智源论坛 | 人工智能的数理基础(系列报告)
- java静态方法和非静态方法内存区别_static方法和非static方法的区别(java)
- python学习路线-2020年 Python学习路线及学习目标规划 拿走不谢!
- 教你认识H3C的设备
- centos6.2下安装samba服务器
- axios的数据请求方式及跨域
- ZZULIOJ 1124: 两个有序数组合并
- 最近很火的人生重开模拟器HTML网页源码
- 只要32万8,国产特斯拉带回家,官方:月供低至1100
- window.parent.document jquery
- mysql找出最大的天数_mysql 计算连续登录最大天数
- 苹果vs剪辑下载_适合mac的视频剪辑软件
- 电磁波谱与通讯技术,5G特点
- 茶 与 茶道 之 人生如茶
- 不会做动画的程序猿不是好的动画师(如何用css3动画做动画)
- 利用AI强化学习训练50级比卡超单挑70级超梦!
- 9款好用的bi数据可视化工具
- 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER