使用R-CNN进行物体检测?

时间:2017-04-13 22:36:35

标签: tensorflow computer-vision deep-learning face-detection

R-CNN究竟做了什么?是否就像使用CNN提取的功能来检测指定窗口区域中的类一样? 是否有任何tensorflow实现?

2 个答案:

答案 0 :(得分:6)

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

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

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

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

A pictorial description of R-CNN

快速R-CNN:

快速R-CNN立即跟随R-CNN。快速R-CNN通过以下几点更快更好:

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

A pictorial description of Fast R-CNN

直观地说,删除2000转换层并使用一次卷积并在其上方制作盒子是非常有意义的。

更快的R-CNN:

快速R-CNN的一个缺点是选择性搜索速度慢,而快速R-CNN引入了一种叫做区域提议网络(RPN)的东西。

以下是RPN的工作原理:

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

每个地区提案都包含:

  • 该地区的“对象”分数和
  • 表示该区域边界框的4个坐标 换句话说,我们会查看上一个要素图中的每个位置,并考虑以它为中心的k个不同的框:一个高箱子,一个宽箱子,一个大箱子等。

对于每个框,我们输出我们是否认为它包含一个对象,以及该框的坐标是什么。这就是在一个滑动窗口位置看起来的样子:

Region Proposal Network

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

一旦我们收到了我们的地区提案,我们就会将它们直接送到基本上是快速R-CNN的地方。我们添加了一个池化层,一些完全连接的层,最后是一个softmax分类层和边界框回归器。从某种意义上说,更快的R-CNN = RPN +快速R-CNN。

Faster R-CNN

关联部分Tensorflow实施:

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

https://github.com/CharlesShang/FastMaskRCNN

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

<强> P.S。我从Joyce Xu Medium博客那里借了很多材料。

答案 1 :(得分:5)

R-CNN正在使用以下算法:

  1. 获取对象检测的区域提议(使用选择性搜索)。
  2. 对于每个区域,从图像中裁剪区域并通过CNN对其进行分类。
  3. 有更多高级算法可以像快速R-CNN和更快的R-CNN一样构建。

    快速-R-CNN:

    1. 通过CNN运行整个图像
    2. 对于区域内的每个区域,建议使用“roi polling”图层提取区域,然后对对象进行分类。
    3. 更快的R-CNN:

      1. 通过CNN运行整个图像
      2. 使用通过对象提案网络使用CNN查找区域提案检测到的功能。
      3. 对于每个对象提案,使用“roi polling”图层提取区域,然后对对象进行分类。
      4. 在tensorflow中有很多植入专门用于更快的R-CNN,这是最近的变种只是谷歌更快的R-CNN张量流。

        祝你好运