Faster RCNN详解结构介绍
从RCNN到Mask-RCNN
像玩乐高一样拆解Faster R-CNN:详解目标检测的实现过程
Anchors
Region Proposal Network
ROI Pooling
理解R-CNN
(1).选择性搜索(Selective Search)一些区域提案(region proposal).
(2).使用AlexNet(ImageNet 2012 的冠军版本)进行特征提取,在 CNN 的最后一层,R-CNN 添加了一个支持向量机(SVM)进行分类。
(3).R-CNN 在区域提案上运行简单的线性回归,以生成更紧密的边界框坐标从而获得最终结果。
问题:如何进行产生region proposal? 如何具体的进行线性回归?
理解Fast R-CNN
R-CNN 性能很棒,但是因为下述原因运行很慢:
1. 它需要 CNN(AlexNet)针对每个单图像的每个区域提案进行前向传递(每个图像大约 2000 次向前传递)。
2. 它必须分别训练三个不同的模型 - CNN 生成图像特征,预测类别的分类器和收紧边界框的回归模型。pipeline复杂难以训练。
改进:
(1). ROI(兴趣区域)池化
让每个图像只运行一次 CNN,然后找到一种在 2000 个提案中共享计算. RoIPool 分享了 CNN 在图像子区域的前向传递, 从 CNN 的特征映射选择相应的区域来获取每个区域的 CNN 特征.
(2).将所有模型并入一个网络
在单一模型中联合训练卷积神经网络(CNN)、分类器(Softmax)和边界框回归器(线性回归层)。
理解Faster R-CNN
存在一个瓶颈问题——区域提案器(region proposer),这个过程相当缓慢。
提出使用CNN提取的特征映射用于生成区域提案:
Faster R-CNN 在 CNN 特征的顶部添加了一个简单的完全卷积网络,创建了所谓的区域提案网络。区域提案网络在 CNN 的特征上滑动一个窗口。在每个窗口位置,网络在每个锚点输出一个分值和一个边界框**(因此,4k 个框坐标,其中 k 是锚点的数量)。
区域提案网络的输入和输出:
- 输入:CNN 特征图。
- 输出:每个锚点的边界框。分值表征边界框中的图像作为目标的可能性。
理解Mask R-CNN
在 Mask R-CNN 中,在 Faster R-CNN 的 CNN 特征的顶部添加了一个简单的完全卷积网络(FCN),以生成 mask(分割输出)。
Faster R-CNN 的 RoIPool 选择的特征图的区域与原始图像的区域略不对齐:
对于一个尺寸大小为 128x128 的图像和大小为 25x25 的特征图。想要得到的是与原始图像中左上方 15x15 像素对应的区域(见上文)。
我们知道原始图像中的每个像素对应于原始图像中的〜25/128 像素。要从原始图像中选择 15 像素,我们只需选择 15 25/128〜=2.93 像素。
在 RoIPool,我们会舍弃一些,只选择 2 个像素,导致轻微的错位。然而,在 RoIAlign,我们避免了这样的舍弃。相反,*我们使用双线性插值来准确得到 2.93 像素的内容。这很大程度上,让我们避免了由 RoIPool 造成的错位。