使用 R-CNN 进行目标检测?

5
R-CNN实际上是做什么的?它是否使用由CNN提取的特征来检测指定窗口区域中的类别?是否有适用于此的TensorFlow实现?
2个回答

8
R-CNN使用以下算法:
1.获取用于目标检测的区域建议(使用选择性搜索)。 2.针对每个区域,从图像中裁剪该区域并通过CNN运行,以对对象进行分类。
还有一些更先进的算法,如fast-R-CNN和faster R-CNN。
fast-R-CNN: 1.将整个图像通过CNN运行 2.针对区域建议中的每个区域,使用“ROI池化”层提取区域,然后对对象进行分类。
faster R-CNN: 1.将整个图像通过CNN运行 2.利用CNN检测到的特征,使用对象建议网络找到区域建议 3.针对每个对象建议,使用“ROI池化”层提取区域,然后对对象进行分类。
在tensorflow中有很多实现特别针对faster R-CNN,这是最近的变种,只需在谷歌上搜索更快的R-CNN tensorflow即可。
祝好运!

谢谢。那么如何提取这些区域建议呢?有没有自动提取区域建议的方法? - Shamane Siriwardhana
2
Faster-rcnn自动化提取区域建议。https://github.com/endernewton/tf-faster-rcnn 是TensorFlow的实现。 - Bharat
完美,非常感谢。 - Shamane Siriwardhana

7

R-CNN是所有提到的算法的“父算法”,它为研究人员构建更复杂、更好的算法提供了路径。我正在尝试解释R-CNN及其变体。

R-CNN或基于区域的卷积神经网络

R-CNN由以下3个简单步骤组成:

  • 使用称为Selective Search的算法扫描输入图像以查找可能的对象,并生成约2000个区域提议
  • 在每个这些区域提议上运行卷积神经网络(CNN)
  • 获取每个CNN的输出,并将其馈入a) SVM对区域进行分类,b)线性回归器来收紧对象的边界框(如果存在这样的对象)。

A pictorial description of R-CNN

快速 R-CNN:

快速 R-CNN 紧随 R-CNN 之后。由于以下几点原因,快速 R-CNN 更快更好:

  • 在提出区域之前对图像进行特征提取,因此只需在整个图像上运行一个 CNN,而不是在 2000 个重叠区域上运行 2000 个 CNN。
  • 用 softmax 层替换 SVM,从而扩展神经网络以进行预测,而不是创建新模型。

A pictorial description of Fast R-CNN

直觉上,删除2000个卷积层并取代一个卷积层,在其之上制作框,这个想法非常有道理。
更快的R-CNN:
Fast R-CNN 的缺点之一是慢速选择性搜索算法,而 Faster R-CNN 引入了称为区域建议网络(RPN)的东西。
以下是 RPN 的工作原理:
在初始 CNN 的最后一层,一个 3x3 的滑动窗口沿着特征图移动并将其映射到较低的维度(例如 256-d)。对于每个滑动窗口位置,它基于 k 个固定比例的锚定框(默认边界框)生成多个可能的区域。
每个区域提案包括:
- 那个区域的“目标度”得分 - 表示该区域边界框的 4 个坐标
换句话说,我们查看最后特征图中的每个位置,并考虑围绕它的 k 个不同的框:一个高框,一个宽框,一个大框等等。
对于这些框中的每一个,我们输出我们是否认为它包含对象以及该框的坐标。在一个滑动窗口位置上看起来像这样:

Region Proposal Network

2k分数代表k个边界框被认为是“物体”的softmax概率。请注意,尽管RPN输出边界框坐标,但它不会尝试对任何潜在的对象进行分类:它的唯一工作仍然是提出对象区域。如果一个锚点框具有高于某个阈值的“物体性”得分,则该框的坐标将作为区域建议向前传递。

一旦我们有了区域建议,我们直接将它们馈送到基本上是Fast R-CNN的模型中。我们添加了一个池化层,一些完全连接的层,最后是一个softmax分类层和边界框回归器。在某种意义上,Faster R-CNN = RPN + Fast R-CNN。

Faster R-CNN

链接一些Tensorflow实现:

https://github.com/smallcorgi/Faster-RCNN_TF

https://github.com/CharlesShang/FastMaskRCNN

你可以在Github上找到很多实现。
P.S. 我从Joyce Xu的Medium博客中借用了很多材料。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接