回顾一下R-CNN:链接
1.1 简介
Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用vGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal voc数据集上)。
Fast R-CNN是对R-CNN(Region-based Convolutional Neural Network)的一种改进,主要针对R-CNN存在的几个关键问题进行了优化,以下是两者的主要对比:
R-CNN:
- 流程复杂:R-CNN首先使用选择性搜索生成数千个候选区域(region proposals),然后对每个候选区域分别应用卷积神经网络(CNN)来提取特征。之后,这些特征被输入到支持向量机(SVM)进行分类,并使用回归器微调候选框的位置。
- 计算冗余:由于对每个候选区域独立地执行CNN特征提取,导致大量计算冗余,尤其是当候选框之间有重叠时。
- 训练分阶段:R-CNN的训练分为多个独立的阶段,包括特征提取网络的预训练、SVM分类器的训练和边框回归器的训练。
- 速度慢:整体处理速度较慢,不适合实时应用。
- 内存占用大:需要为每个候选区域存储特征,导致内存需求高。
Fast R-CNN:
- 统一的网络结构:Fast R-CNN采用一个统一的网络结构来同时处理分类和边框回归。它首先在整个图像上应用CNN来提取特征图,然后对候选区域在特征图上进行RoI(Region of Interest)池化,这样就避免了对每个候选框重复计算CNN特征。
- 训练效率提升:整个模型作为一个整体进行端到端的训练,包括分类和边框回归,消除了多阶段训练的需要。
- 计算加速:通过共享全图的卷积特征,大幅度减少了计算时间和内存消耗。
- 优化的特征复用:利用Spatial Pyramid Pooling (SPP)层或后续提出的ROI Align层,确保不同大小的候选区域可以映射到固定大小的特征向量,进一步提高了效率。
- 更快的速度与更小的内存占用:相比R-CNN,Fast R-CNN在测试时显著提高了速度并减少了内存使用,尽管在候选框生成阶段仍然依赖外部方法(如选择性搜索)。
论文的名称就叫《Fast R-CNN》下面我们来看一下这篇论文。
1.2 整体流程
-
图像输入与特征提取:Fast R-CNN首先接收一张完整图像作为输入,与R-CNN不同,它不对每个提议区域单独进行卷积操作,而是将整张图像输入到一个预训练的卷积神经网络(如VGG-16, ResNet等)中。这一步骤提取出整幅图像的特征图(Feature Map),显著减少了计算量,因为卷积运算在整个图像上共享。
-
候选区域生成(Region Proposals):在特征图生成之前,通常使用一种高效的候选区域生成方法,如选择性搜索(Selective Search),来预先确定图像中的潜在对象区域。这些候选区域称为Region of Interests (RoIs),数量通常在1000到2000之间。
-
RoI Pooling:由于候选区域的大小和形状各不相同,直接将它们输入到全连接层是不可行的。Fast R-CNN引入了RoI Pooling层来解决这个问题。该层将每个候选区域映射到特征图上的对应位置,并执行最大池化操作,从而得到固定大小(例如7x7)的特征图块。这样,无论原始RoI的尺寸如何,经过RoI Pooling后都能获得统一维度的特征表示。
-
特征向量提取与分类回归:经过RoI Pooling后的固定尺寸特征被送入一系列全连接层。在这个阶段,Fast R-CNN不仅预测每个RoI的类别,还通过一个回归器对边界框进行微调(Bounding Box Regression),以更精确地定位目标物体。这一步骤使用了一个多任务损失函数,同时优化分类和定位任务。
-
多任务损失函数:Fast R-CNN采用一个联合损失函数,该函数结合了 softmax 分类损失和边框回归的平滑L1损失。这意味着网络能够端到端地进行训练,优化分类准确率和边界框定位精度。
-
训练与优化:网络的训练是一个端到端的过程,除了候选区域生成步骤外。这意味着特征提取、分类和边界框回归都在一个单一的优化过程中完成,进一步提高了效率。
-
非极大值抑制(Non-Maximum Suppression, NMS):在预测阶段,对于每个类别,可能会有多个重叠的预测框。为了得到最终的检测结果,Fast R-CNN会应用非极大值抑制算法,去除重叠度高的预测框,只保留最有可能正确预测的框。
Fast R-CNN通过整合特征提取、候选区域处理和分类回归到一个统一的网络结构中,显著提高了目标检测的速度,并降低了内存需求,同时保持了较好的检测性能。
注意是将整张图像输入网络。
1.3 正负样本问题
对于Fast R-CNN,正负样本的定义如下:
正样本:IOU>0.5。负样本:0.1<IOU<0.5.
正负样本都是随机采样的,也就是说用不到全部的正负样本。
1.4 ROI Pooling Layer
ROI Pooling Layer(Region of Interest Pooling Layer)是Fast R-CNN算法中的一项核心创新,旨在解决如何从不同大小和比例的候选区域(Region of Interests, RoIs)中提取固定大小特征的问题。这一层的设计使得网络能够高效地处理候选区域,并为后续的全连接层提供统一尺寸的输入,进而进行目标分类和边界框回归。以下是ROI Pooling Layer的详细介绍:
功能与目的
-
适应性特征提取:在特征图上,不同的RoI可能对应着不同大小的对象。ROI Pooling Layer允许从任意大小的RoI中提取出固定大小的特征表示,使得这些特征可以直接输入到后续的全连接网络中进行分类和定位。
-
提高效率:通过在特征图级别操作,而不是针对每个RoI重新运行整个卷积网络,大大节省了计算资源和时间。
工作原理
-
映射到特征图:首先,根据候选区域在原始图像中的坐标,将其映射到经过卷积神经网络处理后的特征图上,确定每个RoI对应的特征图区域。
-
分割与池化:接下来,将映射到特征图上的RoI划分为若干个大小相等的小块(比如2x2或4x4)。对于每个小块,执行最大池化操作,即找出该小块内的最大值作为该块的代表值。这样做的目的是降低分辨率,同时保留每个小块内的最重要特征信息。
-
输出固定尺寸特征图:所有的池化结果拼接起来,形成一个固定大小的特征图(如7x7),这个特征图具有不变形的特性,不论输入的RoI大小如何,输出的尺寸都是相同的。
优势
-
统一特征表示:为不同大小的RoI提供了统一的特征表示,简化了后续处理,使得分类和回归任务能够在固定大小的输入上进行。
-
内存高效:相比R-CNN中对每个RoI独立运行CNN,ROI Pooling只需要对整张图像进行一次特征提取,显著减少了内存使用和计算成本。
-
端到端训练:与SPP-Net相比,Fast R-CNN通过整合RoI Pooling在内的所有组件,实现了端到端的训练,优化了整个检测系统的性能。
ROI Pooling Layer的引入,使得Fast R-CNN在保持较高检测精度的同时,大幅提升了检测速度,是目标检测领域的一项重要进展。后续的Faster R-CNN继续沿用了这一思想,并在此基础上引入了更高效的区域提案网络(RPN),进一步加速了目标检测流程。
1.5 并行的分类与回归
通过回归,我们可以将候选框(橙色)调整到最终预测框的位置(红色)。绿色为GT
1.6 多任务损失函数
这个[u>=1]的艾弗森括号是指,当u>=1时(属于某一类别)值为1,否则值为0(背景)。
1.7 为什么Fast R-CNN是端到端的
R-CNN(两阶段流程)
-
区域提议生成:R-CNN首先使用一个传统的计算机视觉方法(如选择性搜索)从原始图像中生成数千个候选区域(Region Proposals),这些区域可能包含感兴趣的物体。
-
特征提取:对于每个提议区域,R-CNN将其裁剪出来并缩放至固定尺寸,然后将其输入到一个预训练的卷积神经网络(CNN)中提取特征。这一步是独立进行的,意味着每个RoI都需要单独通过CNN,导致计算量巨大。
-
分类与回归:提取到的特征被馈送到一个支持向量机(SVM)进行分类,同时使用一个线性回归模型对候选框进行微调,以获得更精确的边界框位置。这两个步骤是分开训练的,即先训练特征提取,然后训练分类器和回归器。
Fast R-CNN(端到端流程)
-
整体图像特征提取:与R-CNN不同,Fast R-CNN首先将整张图像输入到CNN中提取特征,而不是对每个RoI单独处理。这样就避免了重复的特征计算,大大提高了效率。
-
RoI Pooling:提取出的特征图上,对于每个候选区域,使用RoI Pooling层将不同大小的RoI转换成固定大小的特征图块,这一步骤保持了位置信息的同时,使后续操作可以处理统一维度的输入。
-
多任务损失函数下的端到端训练:Fast R-CNN使用一个共享的全连接层同时处理分类和边界框回归任务,通过一个多任务损失函数来联合优化这两项任务。这意味着从特征提取到分类与回归,整个流程可以作为一个统一的模型进行端到端的训练,无需像R-CNN那样分阶段进行。
因此,Fast R-CNN之所以能够实现端到端的训练,是因为它摒弃了R-CNN中分离的特征提取、分类器训练和回归器训练过程,而是通过共享特征表示和联合优化策略,将整个检测流程整合在一个连续可微的模型中,从而能够在训练时同时更新所有参数,显著提高了效率和性能。