目标检测论文中的ROI | 各种方法横向学习

包含的论文一览

  • 【Fast R-CNN】 RoI pooling(未施工)
  • 【Faster RCNN】Region Proposal Network
  • 【Mask RCNN】 ROI Align

Faster R-CNN

Faster RCNN的 最大亮点就是提出了网络RPN(大名Region Proposal Network) ,在检测中的 作用等价于之前论文(如Fast R-CNN, R-CNN)用来提取候选区域的Selective Search方法

RPN的示意图


RPN是一个相对于backbone较小的网络(small network)作用于最后一层卷积网络输出的特征图:

目标检测论文中的ROI | 各种方法横向学习

; 生成regions

RPN被形象的图解为n × n n×n n ×n大小的滑动窗口,中心定位于特征图上的每个像素,而这个滑动窗口实际上由k k k个 _anchor boxes_组成,也就是说围绕在中心点的滑动窗口是有k k k中变换形状的,不仅有n × n n×n n ×n的正方形的样子,还有不同尺度,不同面积的另外k − 1 k-1 k −1个。
(文章中以k = 9 k=9 k =9 ,有三种面积大小的 anchor boxes ,同一面积大小的 anchor boxes 又有三种不同的长宽比。)

标选可用的regions

给region添加信息:位置坐标和类别标签

用两个前向网络实现:

  1. 1 × 1 1×1 1 ×1卷积核将特征图通道数变为2 × k 2×k 2 ×k,2是有无目标的意思(这里不进行判断具体生成什么类别)
  2. 1 × 1 1×1 1 ×1卷积核将特征图通道数变为4 × k 4×k 4 ×k,对每个锚检测的区域中所含目标的位置信息进行预测

这样就对每个像素位置所包含的区域信息进行了一个处理,要注意的是:如今的每个像素是属于 对原图像下采样后的特征图的,是存留着局部信息的。

Proposal layer

回顾上阶段:经过上一步逐像素生成9个regions。

我们现在有:M × N × K M×N×K M ×N ×K个 regions(M × N M×N M ×N为RPN作用的特征图的尺寸), 总数量是巨大的

而我们再回到任务本身: 目标只在图像中的某个或某几个区域

那么显然我们要筛去没有包含很多目标信息的regions,如何用网络来表示包含信息的情况?——最后用一个proposal layer来衔接提出regions和送入检测器检测这两个过程

  1. 首先​对含有目标的regions(也就是类别标签属于positive的)的分数进行排序,在网络实现过程中,分类输出的是softmax的结果
  2. 提取前N个最大的
  3. 再将超出边界的region限定边界为图像的边界,剔除尺寸非常小的,NMS处理

RPN训练

首先RPN的训练需要 制作标签

对于常用的数据集如VOC是有真值框的,那么我们判断anchors所圈住区域是否为真,还是用老方法IoU来度量。

从这一步我们也能明白一点,其实锚所选定的区域,应该是对原图像的一个操作

Mask RCNN

先引入Faster R-CNN

回顾Faster R-CNN对每一个候选目标都有两个输出:类别标签(class label)和一个边界框偏移量(bounding-box offset)。在此基础上,Mask R-CNN添加第三个输出分支:输出the object mask

有两种接入形式,分别对应两种backbone

  1. 用ResNet作为backbone,RPN(源自Faster R-CNN中)输出ROI经过ROI pooling后,得到7 × 7 × 1024 7×7×1024 7 ×7 ×1 0 2 4的特征,再进行一次反卷积,得到7 × 7 × 2048 7×7×2048 7 ×7 ×2 0 4 8的特征,与三个头相接(即做分类,回归和mask分支)
  2. 用FPN作为backbone,在mask分支直接输入RoI

mask的概念

对输入目标的空间布局进行编码,可以通过点对点的卷积实现

为什么使用mask

在Faster R-CNN结构中,最终输出的class labels和box offsets都是由全连接层输出的向量,而为了得到短的输出向量,信息一定存在collapsed

mask则是对于空间结构的一个检测,保留了空间信息

ROI的对齐问题

在Faster R-CNN中,对于RoI特征的提取,有两处存在着误差。

下采样过程导致的对不准

在backbone中会有对原图进行下采样,下采样的倍数取决于max pooling,当ground truth boxes不能被下采样倍数所整除时,出现了第一次对不准的情况

RoIpooling的信息不准问题

在Fast R-CNN中,提出了RoIPool这个方法,用于提取RoI的在特征图上的特征(7×7),操作过程为:找到RoI在特征图上的对应位置,并将其池化成统一7×7大小。这就衍生出一个问题:在划分每一个bin时,产生坐标位置的量化,这样就会导致提取到的特征和RoI之间的不准, 虽然对分类可能没有太大的影响,但会很大影响到基于像素的mask的预测

为了保持像素在空间上的正确对应,文中提出了RoI的改进方法RoIAlign

本文的创新点:ROI Aligh

对于bin边界的划定,只使用x/16而不取整

在每个RoI bin里,使用bilinear interpolation的方法计算输入特征在四个固定采样点的准确值,然后融合结果(max或average),方法示意图为:

实验测试,结果对采样点的位置,数量并不敏感,但量化会。

这一步对于结果有很大的提升

Original: https://blog.csdn.net/weixin_45581089/article/details/125617672
Author: 我去喝咖啡了
Title: 目标检测论文中的ROI | 各种方法横向学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529991/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球