这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文。
原文:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/
翻译原文
https://www.cnblogs.com/vincent1997/p/10889171.html
以下内容有删减,推荐看原文:
在这篇文章中,我将详细描述最近引入的基于深度学习的对象检测和分类方法,R-CNN(Regions with CNN features)是如何工作的。事实证明,R-CNN在检测和分类自然图像中的物体方面非常有效,其mAP远高于之前的方法。R-CNN方法在Ross Girshick等人的以下系列论文中描述。
这篇文章描述了最后一篇论文中R-CNN方法的最终版本。我首先考虑介绍该方法从第一次引入到最终版本的演变,然而事实表明这是一项伟大的事业。我决定详细描述最终版本。
幸运的是,在TensorFlow,PyTorch和其他机器学习库中,网上有许多R-CNN算法的实现。我使用了以下实现:
https://github.com/ruotianluo/pytorch-faster-rcnn
本文中使用的大部分术语(例如,不同层的名称)遵循代码中使用的术语。
理解本文中提供的信息应该可以更容易地遵循PyTorch实现并进行自己的修改。
在将图像送入网络之前,以下预处理步骤需要应用于图像。对于训练和测试,这些步骤必须相同。平均向量(3x1,每个数值对应于每个颜色通道)不是当前图像中像素值的平均值,而是对所有训练和测试图像都相同的配置值。
RCNN用神经网络来解决两个主要的问题:
RCNN包含三种主要网络:
R-CNN使用预训练网络如ResNet50的前几层来识别输入图像的特征。在一个数据集上使用针对不同问题的网络是可能的,因为神经网络显示可以“迁移学习”(https://arxiv.org/abs/1411.1792)。
网络的前几层学习检测一般特征,如边缘和颜色斑点,这些特征在许多不同的问题上都是很好的识别特征。后一层学习到的特征是更高层次、更具体的问题特征。这些层既可以被移除,也可以在反向传播期间微调这些层的权重。从预训练网络初始化的前几层构成“head”网络。然后,由head网络生成的feature map通过Region Proposal Network(RPN),该网络使用一系列卷积和全连接层来生成可能包含前景对象的ROI(上述问题1)。然后使用这些有可能的ROI从head网络产生的feature map中裁剪出相应的区域。这称为“Crop Pooling”。然后,通过crop Pooling产生的区域通过分类网络,该分类网络学习对每个ROI中包含的对象分类。
另外,你可能会注意到ResNet的权重以奇怪的方式初始化:
如果您有兴趣了解此方法的工作原理,请阅读我关于初始化卷积和完全连接层的权重的文章。
http://www.telesens.co/2018/04/09/initializing-weights-for-the-convolutional-and-fully-connected-layers/
下图显示了上述三种网络类型的各个组件。我们展示了每个网络层的输入和输出的维度,这有助于理解网络的每个层如何转换数据。并表示输入图像的宽度和高度(在预处理之后)。
在本节中,我们将详细描述训练R-CNN所涉及的步骤。一旦了解了训练的工作原理,理解推理就会轻松得多,因为它只是简单地使用了训练中涉及的一部分步骤。训练的目标是调整RPN和分类网络中的权重并微调head网络的权重(这些权重从预训练的网络如ResNet初始化)。回想一下,RPN网络的任务是产生有前景的ROI而分类网络的任务是为每个ROI分配对象类分数。因此,为了训练这些网络,我们需要相应的ground truth,图像中对象周围bounding boxes的坐标和这些对象的类。这些ground truth来自开源的图像数据库,每个图像附带一个注释文件。此注释文件包含bounding box的坐标和图像中每个对象的对象类标签(对象类来自预定义对象类的列表)。这些图像数据库已被用于支持各种对象分类和检测挑战。两个常用的数据库是:
我使用较小的PASCAL VOC 2007数据集进行训练。R-CNN能够在同一步骤中训练region proposal网络和分类网络。
推理期间执行的步骤如下所示:
不使用anchor target layer和proposal target layer。RPN网络应该学习如何将anchor分类为背景框和前景框并生成良好的bounding box系数。proposal layer简单地将bounding box系数应用于排名靠前的anchor boxes并执行NMS以消除具有大量重叠的框。为清楚起见,下面显示了这些步骤的输出。生成的框被发送到分类层,在该分类层中生成类分数和类特定的bounding boxes回归系数。
红色框显示按分数排名的前6个anchor。绿框显示应用RPN网络计算的回归参数后的anchor boxes。绿色框似乎更紧密地贴合潜在的对象。注意,在应用回归参数之后,矩形仍然是矩形,即没有剪切。还要注意矩形之间的重要重叠。通过应用非极大值抑制来解决该冗余
红色框显示NMS前的前5个bounding boxes,绿色框显示NMS之后的前5个框。通过抑制重叠的方框,其他方框(得分列表中的较低位置)有机会向上移动
为了显示最终的分类结果,我们应用另一轮NMS并将目标检测阈值应用于类别分数。然后,我们绘制对应于满足检测阈值的ROI的所有变换的bounding box。结果如下所示。