深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构
Posted 刘润森!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构相关的知识,希望对你有一定的参考价值。
@Author:Runsen
使用 R-CNN 进行对象检测存在一些缺点。
- R-CNN 消耗了大量的时间、存储和计算能力。
- R-CNN 有一个复杂的多阶段训练管道(3 阶段——对数损失、SVM 和 BBox 回归器的 L2 损失)
上一篇论文的同一作者(R-CNN)解决了 R-CNN 的一些缺点,构建了一个更快的对象检测算法,被称为 Fast R-CNN。
Fast R-CNN模型不是将区域候选框提供给 CNN,而是将输入图像提供给 CNN 以生成 特征向量。
将它们聚合到整个图像的一个 CNN 前向传递中,并且区域提议共享此特征矩阵。然后将相同的特征矩阵用于学习对象分类器和边界框回归器。总之,计算共享加速了 R-CNN。
在 Fast R-CNN 中,图像只被送入底层 CNN 一次,而选择性搜索则像往常一样运行。这些由选择性搜索生成的区域提议然后被投影到由 CNN 生成的特征图上。这个过程称为ROI Projection(感兴趣区域)。
RoI Pooling
RoI Pooling一种最大池化,将任意大小的图像投影区域h x w
中的特征转换为一个小的H x W
固定窗口。
让我们考虑一个小例子来看看RoI Pooling
是如何工作的。我们将在单个 8×8 特征图、一个感兴趣区域和 2×2 的输出大小上执行感兴趣区域池化。输入特征图如下所示:
假设我们还有一个区域候选框(左上角,右下角坐标):(0, 3), (7, 8)。在图片中它看起来像这样:
通常情况下,每个图片都会有多个特征图和多个候选框,在示例中认为输出大小为 2×2,因此将其分成 (2×2) 个部分。
请注意,感兴趣区域的大小不必完全被池化部分的数量整除(在这种情况下,RoI 是 7×5,有 2×2 个池化部分)。
每个部分的最大值是:
这就是区域候选框RoI Pooling的输出。
上面实例代码:https://github.com/deepsense-ai/roi-pooling
工作原理
Fast R-CNN 的工作原理总结如下:许多步骤与 R-CNN 相同:
- 首先,在图像分类任务上预训练卷积神经网络。
- 通过选择性搜索提出区域(每张图像约 2k 个候选)。
- 改变预训练的 CNN:
- 用 RoI 池化层替换预训练 CNN 的最后一个最大池化层。RoI 池化层输出区域提议的固定长度特征向量。共享 CNN 计算很有意义,因为相同图像的许多区域提议高度重叠。
- 用全连接层和 K+1 类上的 softmax 替换最后一个全连接层和最后一个 softmax 层(K 个类别)。
- 最后,模型分支为两个输出层:
- K + 1 个类别的 softmax 估计器,输出每个 RoI 的离散概率分布。
- 一个边界框回归模型,它预测相对于 K 个类别中每个类别的原始 RoI 的偏移量。
“Fast R-CNN”之所以比 R-CNN 快,是因为不必每次都向卷积神经网络输入 2000 个区域候选框。相反,每个图像只进行一次卷积操作,并从中生成一个特征图。
附上Fast-RCNN 相关Github代码:
- https://github.com/rbgirshick/fast-rcnn
以上是关于深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构的主要内容,如果未能解决你的问题,请参考以下文章
深度学习和目标检测系列教程 3-300:了解常见的目标检测的开源数据集
深度学习和目标检测系列教程 4-300:目标检测入门之目标变量和损失函数
深度学习和目标检测系列教程 5-300:早期的目标检测RCNN架构
深度学习和目标检测系列教程 19-300:关于目标检测APIoU和mAP简介