使用 R-CNN 进行目标检测?
Object detection with R-CNN?
R-CNN 究竟做了什么?是不是像用CNN提取的特征在指定的window区域检测类?
是否有任何 tensorflow 实现?
R-CNN 使用以下算法:
- 获取用于对象检测的区域建议(使用选择性搜索)。
- 对于每个区域,从图像中裁剪区域并运行它通过 CNN 对对象进行分类。
有更高级的算法建立在这个基础上,如 fast-R-CNN 和更快的 R-CNN。
fast-R-CNN:
- 运行整个图像通过CNN
- 对于区域提案中的每个区域,使用 "roi polling" 层提取区域,然后对对象进行分类。
更快的 R-CNN:
- 运行整个图像通过CNN
- 使用 CNN 检测到的特征使用对象建议网络找到区域建议。
- 对于每个对象提案,使用 "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
R-CNN 究竟做了什么?是不是像用CNN提取的特征在指定的window区域检测类? 是否有任何 tensorflow 实现?
R-CNN 使用以下算法:
- 获取用于对象检测的区域建议(使用选择性搜索)。
- 对于每个区域,从图像中裁剪区域并运行它通过 CNN 对对象进行分类。
有更高级的算法建立在这个基础上,如 fast-R-CNN 和更快的 R-CNN。
fast-R-CNN:
- 运行整个图像通过CNN
- 对于区域提案中的每个区域,使用 "roi polling" 层提取区域,然后对对象进行分类。
更快的 R-CNN:
- 运行整个图像通过CNN
- 使用 CNN 检测到的特征使用对象建议网络找到区域建议。
- 对于每个对象提案,使用 "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