原论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
概念
目标检测的任务就是不仅要对图片中的物体进行定位,而且还要将物体进行分类,同时还要输出分为此类的置信度概率。如下图:
整体架构
- Dataset:数据,提供符合要求的数据格式(目前常用数据集是VOC和COCO)
- Extractor(有的文章也称为Backbone): 利用CNN提取图片特征features(原始论文用的是ZF和VGG16,后来人们又用ResNet101)
- RPN(Region Proposal Network): 负责提供候选区域rois(每张图给出大概2000个候选框)
- RoIHead: 负责对rois分类和微调。对RPN找出的rois,判断它是否包含目标,并修正框的位置和座标
Faster R-CNN整体的流程可以分为三步:
- 提特征: 图片(img)经过预训练的网络(Extractor),提取到了图片的特征(feature)
- Region Proposal: 利用提取的特征(feature),经过RPN网络,找出一定数量的rois(region of interests)。
- 分类与回归:将rois和图像特征features,输入到RoIHead,对这些rois进行分类,判断都属于什么类别,同时对这些rois的位置进行微调。
RPN
Faster R-CNN最突出的贡献就在于提出了Region Proposal Network(RPN)代替了Selective Search,从而将候选区域提取的时间开销几乎降为0(2s -> 0.01s)。RPN架构图如下:
Anchor
在RPN中,作者提出了anchor。Anchor是大小和尺寸固定的候选框。论文中用到的anchor有三种尺寸和三种比例,如下图所示,三种尺寸分别是小(蓝128)中(红256)大(绿512),三个比例分别是1:1,1:2,2:1。3×3的组合总共有9种anchor。
然后用这9种anchor在特征图(feature)左右上下移动,每一个特征图上的点都有9个anchor,最终生成了 (H/16)× (W/16)×9个anchor. 对于一个512×62×37的feature map,有 62×37×9~ 20000个anchor。 也就是对一张图片,有20000个左右的anchor。这种做法很像是暴力穷举,20000多个anchor,哪怕是蒙也能够把绝大多数的ground truth bounding boxes蒙中。
anchor的数量和feature map相关,不同的feature map对应的anchor数量也不一样。RPN在Extractor输出的feature maps的基础之上,先增加了一个卷积,然后利用两个1x1的卷积分别进行二分类(是否为正样本)和位置回归。进行分类的卷积核通道数为9×2(9个anchor,每个anchor二分类,使用交叉熵损失),进行回归的卷积核通道数为9×4(9个anchor,每个anchor有4个位置参数)。RPN是一个全卷积网络(fully convolutional network),这样对输入图片的尺寸就没有要求了。
但进行RPN网络训练时,会利用(AnchorTargetCreator)将20000多个候选的anchor选出256个anchor进行分类和回归位置。
RPN在自身训练的同时,还会提供RoIs(region of interests)给Fast RCNN(RoIHead)作为训练样本 。
Anchor的生成过程:
假设图像高h,宽为w。以每个像素为中心,大小s∈(0,1](s为scale,经过缩放归一化后),宽高比r>0。那么锚框的宽为 w s r ws\sqrt{r} wsr