前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >把Faster-RCNN的原理和实现阐述得非常清楚

把Faster-RCNN的原理和实现阐述得非常清楚

作者头像
机器学习AI算法工程
发布2019-10-28 19:20:05
1.2K0
发布2019-10-28 19:20:05
举报

这篇文章把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等人的以下系列论文中描述。

  1. R-CNN(https://arxiv.org/abs/1311.2524)
  2. Fast R-CNN(https://arxiv.org/abs/1504.08083)
  3. Faster R-CNN(https://arxiv.org/abs/1506.01497)

这篇文章描述了最后一篇论文中R-CNN方法的最终版本。我首先考虑介绍该方法从第一次引入到最终版本的演变,然而事实表明这是一项伟大的事业。我决定详细描述最终版本。

幸运的是,在TensorFlow,PyTorch和其他机器学习库中,网上有许多R-CNN算法的实现。我使用了以下实现:

https://github.com/ruotianluo/pytorch-faster-rcnn

本文中使用的大部分术语(例如,不同层的名称)遵循代码中使用的术语。

理解本文中提供的信息应该可以更容易地遵循PyTorch实现并进行自己的修改。

1. 文章组织

  • 第1部分 - 图像预处理:在本节中,我们将描述应用于输入图像的预处理步骤。这些步骤包括减去平均像素值和缩放图像。训练和推理之间的预处理步骤必须相同。
  • 第2节 - 网络组织:在本节中,我们将描述网络的三个主要组成部分 — “head”network,region proposal network(RPN)和分类网络。
  • 第3节 - 实现细节(训练):这是该文章最长的部分,详细描述了训练R-CNN网络所涉及的步骤。
  • 第4节 - 实现细节(推理):在本节中,我们将描述在推理过程涉及的步骤,使用训练好的R-CNN网络来识别有希望的区域并对这些区域中的对象进行分类。
  • 附录:这里我们将介绍R-CNN运行过程中一些常用算法的细节,如非极大值抑制和Resnet50架构的细节。

2. 图像预处理

在将图像送入网络之前,以下预处理步骤需要应用于图像。对于训练和测试,这些步骤必须相同。平均向量(3x1,每个数值对应于每个颜色通道)不是当前图像中像素值的平均值,而是对所有训练和测试图像都相同的配置值。

3. 网络组织

RCNN用神经网络来解决两个主要的问题:

  • 在输入图像中识别可能包含前景对象的区域(Region of Interest—RoI)。
  • 计算每个RoI的对象类概率分布—如计算RoI包含特定类对象的概率,然后用户可以选择概率最高的对象类作为分类结果。

RCNN包含三种主要网络:

  1. Head
  2. Region Proposal Network(RPN)
  3. Classification Network

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/

3.1. 网络架构

下图显示了上述三种网络类型的各个组件。我们展示了每个网络层的输入和输出的维度,这有助于理解网络的每个层如何转换数据。并表示输入图像的宽度和高度(在预处理之后)。

4. 实现细节:Training

在本节中,我们将详细描述训练R-CNN所涉及的步骤。一旦了解了训练的工作原理,理解推理就会轻松得多,因为它只是简单地使用了训练中涉及的一部分步骤。训练的目标是调整RPN和分类网络中的权重并微调head网络的权重(这些权重从预训练的网络如ResNet初始化)。回想一下,RPN网络的任务是产生有前景的ROI而分类网络的任务是为每个ROI分配对象类分数。因此,为了训练这些网络,我们需要相应的ground truth,图像中对象周围bounding boxes的坐标和这些对象的类。这些ground truth来自开源的图像数据库,每个图像附带一个注释文件。此注释文件包含bounding box的坐标和图像中每个对象的对象类标签(对象类来自预定义对象类的列表)。这些图像数据库已被用于支持各种对象分类和检测挑战。两个常用的数据库是:

  • PASCAL VOC:VOC 2007数据库包含9963张训练/验证/测试图像,包含20个对象类别的24,640个注释。
    • :人
    • 动物:鸟,猫,牛,狗,马,羊
    • 交通工具:飞机,自行车,船,巴士,汽车,摩托车,火车
    • 室内:瓶,椅子,餐桌,盆栽,沙发,电视/显示器
  • COCO(Common Objects in Context):COCO数据集要大得多。它包含> 200K标记图像,包含90个对象类别。

我使用较小的PASCAL VOC 2007数据集进行训练。R-CNN能够在同一步骤中训练region proposal网络和分类网络。

5. 实现细节:Inference

推理期间执行的步骤如下所示:

不使用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。结果如下所示。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 文章组织
  • 2. 图像预处理
  • 3. 网络组织
    • 3.1. 网络架构
    • 4. 实现细节:Training
    • 5. 实现细节:Inference
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档