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

Object detection with R-CNN?

R-CNN 究竟做了什么?是不是像用CNN提取的特征在指定的window区域检测类? 是否有任何 tensorflow 实现?

R-CNN 使用以下算法:

  1. 获取用于对象检测的区域建议(使用选择性搜索)。
  2. 对于每个区域,从图像中裁剪区域并运行它通过 CNN 对对象进行分类。

有更高级的算法建立在这个基础上,如 fast-R-CNN 和更快的 R-CNN。

fast-R-CNN:

  1. 运行整个图像通过CNN
  2. 对于区域提案中的每个区域,使用 "roi polling" 层提取区域,然后对对象进行分类。

更快的 R-CNN:

  1. 运行整个图像通过CNN
  2. 使用 CNN 检测到的特征使用对象建议网络找到区域建议。
  3. 对于每个对象提案,使用 "roi polling" 层提取区域,然后对对象进行分类。

tensorflow 中有很多专门针对更快的 R-CNN 的植入,这是最新的变体 google 更快的 R-CNN 张量流。

祝你好运

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

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

R-CNN 包含 3 个简单的步骤:

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

快速 R-CNN:

Fast R-CNN紧随其后的是R-CNN。 Fast R-CNN之所以更快更好,是因为以下几点:

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

从直觉上讲,删除 2000 个卷积层,取而代之的是进行一次卷积并在其上制作框。

更快的 R-CNN:

Fast R-CNN 的缺点之一是缓慢的选择性搜索算法,Faster R-CNN 引入了一种称为区域提议网络 (RPN) 的东西。

RPN 的工作原理如下:

在初始 CNN 的最后一层,一个 3x3 滑动 window 在特征图上移动并将其映射到较低维度(例如 256-d)对于每个滑动 -window 位置, 它根据 k 个固定比例的锚框(默认边界框)生成多个可能的区域

每个区域提案包括:

  • 该区域的“客观性”分数和
  • 4个坐标表示区域的边界框 换句话说,我们查看最后一个特征图中的每个位置,并考虑以它为中心的 k 个不同的框:一个高框、一个宽框、一个大框等。

对于这些盒子中的每一个,我们输出我们是否认为它包含一个对象,以及该盒子的坐标是什么。这是在一个滑动 window 位置的样子:

这 2k 个分数表示 k 个边界框中的每一个在“对象”上的 softmax 概率。请注意,尽管 RPN 输出边界框坐标,但它不会尝试对任何潜在对象进行分类:它唯一的工作仍然是提出对象区域。如果锚框的“客观性”分数高于某个阈值,则该框的坐标将作为区域提案向前传递。

一旦我们有了区域建议,我们就将它们直接输入本质上是 Fast R-CNN 的东西。我们添加了一个池化层、一些全连接层,最后是一个 softmax 分类层和边界框回归器。从某种意义上说,Faster R-CNN = RPN + Fast R-CNN。

链接一些 Tensorflow 实现:

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

https://github.com/CharlesShang/FastMaskRCNN

你可以找到很多Github的实现。

P.S。我从Joyce Xu Medium博客借了很多material