R-CNN、Fast R-CNN、Faster R-CNN快速了解
近日读视频目标检测的论文时,发现自己对图片目标检测的经典模型和算法的理解还不够深入。于是找出目标检测的经典论文来巩固自己对目标检测模型和算法的理解,以及梳理整个目标检测的发展历程。
一、 论文1:R-CNN
1.1 论文信息
标题 | Rich feature hierarchies for accurate object detection and semantic segmentation |
---|---|
会议 | CVPR 2014 |
原文链接 | Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation (thecvf.com) |
领域 | 图片目标检测 |
此论文可以算是目标检测领域起到奠基性工作的论文,是目标检测领域最早的模型。
1.2 主要思想
本篇论文的基本思路是:
- 使用启发式搜索算法来选择锚框;
- 使用预训练模型来对每个锚框抽取特征;
- 训练一个支持向量机(SVM)来对类别分类;
- 训练一个线性回归模型来预测边缘框偏移(offset)。
1.3 实现算法步骤
R-CNN包括以下四个步骤:
- 对输入图像使用***选择性搜索***来选取多个高质量的提议区域。这些提议区域通常是在多个尺度下选取的,并具有不同的形状和大小。每个提议区域都将被标注类别和真实边界框。
- 选择一个预训练的卷积神经网络,并将其在输出层之前截断。将每个提议区域变形为网络需要的输入尺寸,并通过前向传播输出抽取的提议区域特征。
- 将每个提议区域的特征连同其标注的类别作为一个样本。训练多个支持向量机对目标分类,其中每个支持向量机用来判断样本是否属于某一个类别。
- 将每个提议区域的特征连同其标注的边界框作为一个样本,训练线性回归模型来预测真实边界框。
1.4 总结与思考
尽管R-CNN模型通过预训练的卷积神经网络有效地抽取了图像特征,但它的速度很慢。 想象一下,我们可能从一张图像中选出上千个提议区域,这需要上千次的卷积神经网络的前向传播来执行目标检测。 这种庞大的计算量使得R-CNN在现实世界中难以被广泛应用。
R-CNN提出的时代,基于神经网络的深度学习还没兴起。虽然采用SVM进行分类在现今听起来多少有点过时,但其所提的目标检测算法步骤和思想却一直贯穿到现在。
二、 论文2:Fast R-CNN
2.1 论文信息
标题 | Fast R-CNN |
---|---|
会议 | ICCV 2015 |
原文链接 | Fast R-CNN (cv-foundation.org) |
领域 | 图片目标检测 |
此论文是对 R-CNN 模型进一步改进,为了解决R-CNN速度慢的问题 。
2.2 主要思想
本篇论文的基本思路是:
- 使用CNN对整张图片抽取特征,而不是每个锚框抽取特征;
- 使用启发式搜索算法,在原始图片上来选择锚框;
- 搜到锚框之后,把原始图片上的锚框映射到CNN的输出特征图上;
- 在CNN输出的特征图上,使用RoI (Region of Interest) 池化层对每个锚框生成固定长度的特征。
- 把这些特征输入到全连接层,进行分类和预测边界框。
2.3 实现算法步骤
Fast R-CNN 的主要算法步骤如下:
- 与R-CNN相比,Fast R-CNN用来提取特征的卷积神经网络的输入是整个图像,而不是各个锚框。此外,这个网络通常会参与训练。设输入为一张图像,将卷积神经网络的输出的形状记为 1 × c × h 1 × w 1 1×c×h_1×w_1 1×c×h1×w1。
- 假设选择性搜索生成了 n n n个提议区域。这些形状各异的提议区域在卷积神经网络的输出上分别标出了形状各异的兴趣区域 (RoI)。然后,这些感兴趣的区域需要进一步抽取出形状相同的特征(比如指定高度 h 2 h_2 h2和宽度 w 2 w_2 w2),以便于连结后输出。为了实现这一目标,Fast R-CNN引入了***兴趣区域汇聚层***(RoI pooling):将卷积神经网络的输出和提议区域作为输入,输出连结后的各个提议区域抽取的特征,形状为 n × c × h 2 × w 2 n×c×h_2×w_2 n×c×h2×w2。
- 通过全连接层将输出形状变换为 n × d n×d n×d,其中超参数 d d d 取决于模型设计。
- 预测 n n n 个提议区域中每个区域的类别和边界框。更具体地说,在预测类别和边界框时,将全连接层的输出分别转换为形状为 n × q n×q n×q( q q q是类别的数量)的输出和形状为 n × 4 n×4 n×4 的输出。其中预测类别时使用 softmax 回归。
2.4 总结与思考
Fast R-CNN 相比 RNN 提升的主要是不再对原始图片中的每个锚框都进行CNN抽取特征,而是对整幅图片进行一次CNN特征抽取。这样做的好处是,大量生成的锚框之间会有大量重叠区域,能够避免重复计算这些重叠区域,从而使计算变得更高效。
三、 论文3:Faster R-CNN
3.1 论文信息
标题 | Faster R-CNN: towards real-time object detection with region proposal networks |
---|---|
期刊 | Neural Information Processing Systems (2015) |
原文链接 | Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (neurips.cc) |
领域 | 图片目标检测 |
此论文是对 Fast R-CNN 模型进一步改进,再一次提升 Fast R-CNN 的速度 。
3.2 主要思想
- 本篇论文相比 Fast R-CNN的改进之处是:使用一个***区域提议网络*** (Region Proposal Network, RPN) 来替代启发式搜索来获得更好的锚框。其他部分与 Fast R-CNN 模型一致。如下图所示:
- 使用CNN对整张图片抽取特征;
- 把CNN输出的特征图输入到 RPN 中,RPN 输出一堆比较高质量的锚框。 RPN 本质上其实是粗糙的目标检测。而不再用 Fast R-CNN 中的启发式搜索来获得锚框;
- 搜到锚框之后,把原始图片上的锚框映射到CNN的输出特征图上;
- 在CNN输出的特征图上,使用RoI (Region of Interest) 池化层对每个锚框生成固定长度的特征。
- 把这些特征输入到全连接层,进行分类和预测边界框。
3.3 RPN实现算法步骤
区域提议网络 (RPN) 的计算步骤如下:
- 使用填充为 1 1 1 的 3 × 3 3×3 3×3 的卷积层变换卷积神经网络的输出,并将输出通道数记为 c c c。这样,卷积神经网络为图像抽取的特征图中的每个单元均得到一个长度为 c c c 的新特征。
- 以特征图的每个像素为中心,生成多个不同大小和宽高比的锚框并标注它们。
- 使用锚框中心单元长度为 c c c 的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框的偏移。
- 使用非极大值抑制 (NMS),从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是兴趣区域汇聚层所需的提议区域。
3.4 总结与思考
Faster R-CNN 把原 Fast R-CNN 网络中的启发式搜索替换成 RPN 。在 RPN 中训练一个二分类问题:预测这个锚框是否框中了真实的目标物体,或者说还是框住了背景,并预测该锚框到边界框的偏移。
我个人理解, RPN 网络的作用就是粗糙的目标检测:给一堆质量很差的锚框,去输出质量好的锚框给后面的大网络用。
从此以后,诞生了目标检测里著名的一种流派—— two-stage检测。一块就是 RPN 小网络,另一块就是后面的主网络,先粗糙预测再精细预测,共做两次预测。
虽然叫 Faster R-CNN,但按今天目标检测领域的发展来看,其速度已经远远称不上快速。如下图所示:YOLO系列、CenterNet模型等算法的在精度还不错的情况下,其速度远远比 Faster R-CNN 快。