fast-RCNN论文精读及问题整理

摘要

  1. Fast R-CNN方法提出:摘要首先介绍了Fast R-CNN是一种基于区域的卷积网络方法,专注于目标检测任务。这种方法建立在之前的工作之上,旨在使用深度卷积网络高效地分类目标提议。

  2. 改进的训练和测试速度:与之前的工作相比,Fast R-CNN在训练和测试阶段都实现了显著的速度提升。具体来说,Fast R-CNN能够以比R-CNN快9倍的速度训练深度VGG16网络,在测试时的速度则快了213倍。

  3. 提高检测精度:Fast R-CNN不仅在速度上有优势,还在PASCAL VOC 2012数据集上实现了更高的平均精度(mAP)。与R-CNN相比,Fast R-CNN达到了66%的mAP,而R-CNN的mAP为62%。与SPPnet相比,Fast R-CNN在训练VGG16时速度提升3倍,在测试时速度提升10倍,并且精度更高。

  4. 开源实现:Fast R-CNN的代码是用Python和C++实现的,使用了Caffe框架,并且可以在MIT许可证下从GitHub上获得。

  5. 主要贡献:摘要强调了Fast R-CNN的几个主要贡献,包括更高的检测质量、单阶段训练过程、能够更新所有网络层的能力,以及在训练过程中不需要磁盘存储来缓存特征。

1.introduction

深度卷积网络的进步:
近年来,深度卷积网络在图像分类和目标检测任务上取得了显著的改进。图像分类是指将图像分配给特定类别的任务,而目标检测则更加复杂,因为它不仅需要识别图像中的对象,还需要精确地定位这些对象的位置。

目标检测的挑战:
目标检测任务比图像分类更具挑战性,因为它要求对图像中的每个对象进行准确的定位。这种精确定位的需求导致了两个主要的挑战:
第一个挑战是处理大量的候选对象位置,这些位置通常被称为“提议”(proposals)。在目标检测的上下文中,提议是指可能包含对象的图像区域。
第二个挑战是这些提议只能提供粗略的定位信息,需要进一步精细化以实现精确的对象定位。

现有方法的局限性:
由于目标检测的复杂性,目前的方法通常采用多阶段流水线进行模型训练,这些流水线不仅速度慢,而且在设计上也不够优雅。这些方法在速度、准确性或简单性上往往需要做出妥协。

Fast R-CNN的贡献:
论文提出了一种新的训练算法,旨在简化最先进的基于卷积网络的目标检测器的训练过程。这种算法能够在单个阶段内同时学习对对象提议进行分类和精细化它们的空间位置。
这种方法能够显著提高训练速度:与R-CNN相比,Fast R-CNN能够以9倍的速度训练深度检测网络VGG16;与SPPnet相比,训练速度提高了3倍。

Fast R-CNN的性能:
在运行时,Fast R-CNN的检测网络能够在0.3秒内处理图像(不包括对象提议的时间),同时在PASCAL VOC 2012数据集上达到了66%的平均精度(mAP),相比之下,R-CNN的mAP为62%。

1.1. R-CNN and SPPnet

  1. R-CNN方法

    • R-CNN是一种流行的目标检测方法,它通过使用深度卷积网络对候选区域进行分类来实现目标检测。这些候选区域通常是通过选择性搜索(selective search)等方法生成的。
    • R-CNN在训练阶段存在几个显著的问题:
      • 训练是一个多阶段流水线过程。首先,R-CNN在候选区域上微调一个卷积网络,使用逻辑损失(log loss)进行训练。然后,它训练支持向量机(SVMs)来作为对象检测器,这些SVMs取代了通过微调学习到的softmax分类器。最后,学习边界框回归器(bounding-box regressors)。
      • 训练过程在空间和时间上都很昂贵。对于SVM和边界框回归器的训练,需要从每个图像的每个候选区域提取特征,并将这些特征写入磁盘。对于像VGG16这样的深度网络,这个过程需要大量的计算资源和存储空间。
      • 在测试时,R-CNN的速度很慢。因为对于每个测试图像中的每个候选区域,都需要进行一次完整的卷积网络前向传播。使用VGG16进行检测时,每张图像需要47秒(在GPU上)。
  2. SPPnet方法

    • SPPnet是为了解决R-CNN速度慢的问题而提出的方法。它通过空间金字塔池化(spatial pyramid pooling)来共享计算,从而加速R-CNN。
    • SPPnet的核心思想是为整个输入图像计算一个卷积特征图,然后使用这个共享的特征图来对每个候选区域进行分类。对于每个提议,通过将特征图内部的区域进行最大池化(max pooling)到一个固定大小的输出(例如6×6)来提取特征。
    • 尽管SPPnet在测试时加速了R-CNN(加速了10到100倍),但它在训练时间上也有所减少(由于更快的提议特征提取,加速了3倍),但它仍然存在一些缺点:
      • 与R-CNN一样,SPPnet的训练也是一个多阶段流水线过程,涉及特征提取、网络微调、SVM训练和边界框回归器的拟合。特征同样需要写入磁盘。
      • 与R-CNN不同,SPPnet中提出的微调算法无法更新空间金字塔池化之前的卷积层。这个限制(固定的卷积层)限制了非常深的网络的准确性。

1.2. Contributions

更高的检测质量:
Fast R-CNN通过提供一个更准确和更快速的目标检测方法,实现了比R-CNN和SPPnet更高的平均精度(mAP)。这是通过联合学习分类和边界框回归任务来实现的,从而提高了检测的准确性。

单阶段训练:
与R-CNN和SPPnet的多阶段训练过程不同,Fast R-CNN采用了一种单阶段的训练算法。这意味着所有的检测任务,包括分类和边界框回归,都在一个统一的网络中同时进行训练,简化了训练流程并减少了训练时间。

更新所有网络层:
在Fast R-CNN中,训练过程可以更新网络中的所有层,包括卷积层和全连接层。这与SPPnet形成对比,后者无法更新其空间金字塔池化层之前的卷积层。这种能力使得Fast R-CNN能够更有效地学习从原始图像数据到目标检测任务的映射。

无需磁盘存储特征缓存:
传统的目标检测方法,如R-CNN和SPPnet,在训练过程中需要将提取的特征写入磁盘,以便于后续的分类和回归任务。Fast R-CNN通过在训练过程中共享计算和内存,避免了这种磁盘I/O操作,从而减少了对存储的需求,并提高了训练效率。

开源实现:
Fast R-CNN的代码是用Python和C++编写的,使用了Caffe框架,并且根据MIT许可证开源。这意味着研究社区可以自由地访问、使用和修改Fast R-CNN的代码,促进了学术交流和技术发展。

性能提升:
论文声称Fast R-CNN在训练VGG16网络时比R-CNN快9倍,在测试时快213倍。这些性能提升使得Fast R-CNN在实际应用中更具吸引力,尤其是在需要快速处理大量图像的场景中。

2. Fast R-CNN architecture and training

输入:
Fast R-CNN网络的输入包括一张完整的图像和一组候选对象区域(object proposals)。候选对象区域是图像中可能包含目标的区域,通常是通过一些预处理步骤(例如选择性搜索)生成的。

卷积和池化层:
网络首先使用多个卷积层(conv layers)和最大池化层(max pooling layers)处理整个输入图像。这些层的作用是提取图像的特征,并逐渐减少数据的空间维度(即高度和宽度),同时保持重要的视觉信息。
经过这些层的处理后,网络会产生一个卷积特征图(conv feature map),这是一个包含了图像特征的中间表示。

区域兴趣池化层(RoI Pooling Layer):
对于每个候选对象区域,区域兴趣(RoI)池化层从卷积特征图中提取固定长度的特征向量。RoI池化是一种特殊的池化操作,它将每个候选区域内的特征映射到一个小的、固定大小的特征图上,从而为每个候选区域生成一个固定长度的特征表示。
这种操作使得网络能够对不同大小和形状的候选区域进行统一处理,为后续的分类和回归任务提供一致的输入。

全连接层(Fully Connected Layers):
提取的特征向量随后被送入一系列全连接层(fc layers)。这些层对特征进行进一步的组合和变换,以学习更抽象的表示。
全连接层的输出最终会分支到两个并行的输出层。

输出层:
第一个输出层是一个softmax层,它为K个对象类别(包括一个代表背景的类别)生成概率估计。这些概率表示了输入图像中候选区域属于每个类别的可能性。
第二个输出层是一个边界框回归层,它为每个类别输出四个实数值。这四个值编码了针对每个类别的候选区域的精细边界框位置,包括边界框的中心坐标和宽高尺寸。
边界框回归的目的是修正候选区域的初始位置,以更精确地定位目标。

2.1. The RoI pooling layer

RoI池化层的作用:
RoI池化层的目的是从卷积特征图中针对每个候选对象区域提取固定长度的特征向量。这一步骤是必要的,因为不同的候选区域可能具有不同的大小和比例,而RoI池化能够确保从每个区域中提取出统一长度的特征表示,以便后续的处理。

RoI池化的操作:
RoI池化通过将候选区域内的特征图划分为一个H×W的网格(例如7×7),并对每个小网格应用最大池化操作来实现。最大池化是一种减少数据维度的操作,它在每个小网格内选择最大值作为该网格的代表。
这种操作对特征图的每个通道(channel)独立进行,类似于标准的最大池化操作。通过这种方式,无论候选区域的实际大小如何,RoI池化都能生成一个固定大小的特征向量。

RoI的定义:
在Fast R-CNN中,一个RoI被定义为卷积特征图上的一个矩形窗口。每个RoI由一个四元组(r, c, h, w)定义,其中(r, c)表示RoI左上角的坐标,而h和w分别表示RoI的高度和宽度。

RoI池化的实现:
RoI池化的操作是通过计算每个RoI内部的池化子窗口(对应于H×W网格中的每个单元)的最大值来完成的。对于每个特征图通道,这些最大值被汇总到对应的输出网格单元中。
RoI池化层可以看作是SPPnet中使用的SPP(空间金字塔池化)层的一个特例,其中只有一个金字塔级别。这意味着RoI池化层专门为每个候选区域生成一个固定大小的特征向量,而不是像SPP层那样为整个图像生成多个级别的特征表示。

RoI池化的优势:
RoI池化层使得Fast R-CNN能够在单个网络中同时处理多个不同大小的候选区域,这是通过共享计算资源和内存来实现的。这种设计提高了训练和测试的效率,因为它减少了重复的特征提取操作。

2.2. Initializing from pre-trained networks

预训练网络的选择:
作者提到了三种预训练的ImageNet网络,这些网络具有不同数量的卷积层和最大池化层。预训练网络的选择对于Fast R-CNN的性能至关重要,因为预训练模型已经学习了丰富的视觉特征,这可以迁移到目标检测任务中。

预训练网络的转换:
当使用预训练网络初始化Fast R-CNN时,网络会经历三个转换步骤:
首先,最后一层最大池化被替换为RoI池化层,该层被配置为与网络的第一个全连接层兼容(例如,对于VGG16,H和W可能被设置为7)。
其次,网络的最后一个全连接层和softmax层(原本用于1000类ImageNet分类)被替换为两个新的层:一个全连接层和针对K+1类别(K个对象类别加上一个背景类别)的softmax层,以及针对每个类别的边界框回归器。
最后,网络被修改为接受两种数据输入:图像列表和这些图像中的RoI列表。

预训练网络的优势:
使用预训练网络可以显著提高Fast R-CNN的性能,因为预训练模型已经学习了丰富的特征表示,这些特征对于目标检测任务非常有用。此外,预训练模型还可以加速训练过程,因为它提供了一个更好的初始状态,使得网络能够更快地收敛。

预训练网络的局限性:
尽管预训练网络提供了许多优势,但它们也可能存在一些局限性。例如,预训练网络可能在某些情况下无法完全适应新的任务,可能需要进一步的微调来优化性能。此外,预训练网络可能在特定数据集上过拟合,这可能会影响其在目标检测任务中的泛化能力。

2.3. Fine-tuning for detection

SPPnet权重更新的局限性:
SPPnet无法更新空间金字塔池化层以下的权重,这是因为当每个训练样本(即RoI)来自不同图像时,通过SPP层的反向传播变得非常低效。由于每个RoI可能具有非常大的感受野,通常覆盖整个输入图像,因此在前向传播中必须处理整个感受野,导致训练输入变得很大(通常是整个图像)。

特征共享的优势:
Fast R-CNN提出了一种更高效的训练方法,该方法利用了训练过程中的特征共享。在Fast R-CNN的训练中,使用随机梯度下降(SGD)以分层的方式采样小批量数据,首先采样N个图像,然后从每个图像中采样R/N个RoI。这样做的关键点是,来自同一图像的RoI在前向和后向传播中共享计算和内存,从而减少了小批量计算的量。

分层采样的效果:
通过选择较小的N值,可以显著减少每个小批量的计算量。例如,当使用N=2和R=128时,Fast R-CNN的训练方案比从128个不同图像中采样一个RoI的传统方法(即R-CNN和SPPnet的策略)快大约64倍。

训练收敛的担忧:
一个可能的担忧是,由于来自同一图像的RoI是相关的,这种训练策略可能会导致训练收敛变慢。然而,这种担忧在实践中并没有成为实际问题。使用N=2和R=128的设置,Fast R-CNN在比R-CNN少得多的SGD迭代次数下仍然能够取得良好的结果。

简化的训练过程:
除了分层采样之外,Fast R-CNN还使用了一个简化的训练过程,其中只有一个微调阶段,该阶段联合优化softmax分类器和边界框回归器。这与R-CNN和SPPnet的训练方法不同,后者需要在三个独立的阶段分别训练softmax分类器、SVMs和回归器。

训练过程的组成部分:
论文进一步描述了这种训练过程的组成部分,包括损失函数、小批量采样策略、通过RoI池化层的反向传播以及SGD超参数。这些组成部分共同作用,使得Fast R-CNN能够有效地进行端到端的训练,提高了目标检测的性能和效率。

Multi-task loss.
多任务损失的组成:
多任务损失由两部分组成:分类损失(Lcls)和位置损失(Lloc)。这种损失函数的设计允许网络同时学习如何分类RoI(判断它属于哪个类别)和如何精确地定位RoI(调整边界框的位置)。

分类损失(Lcls):
分类损失用于计算每个RoI的类别概率分布,并使用逻辑损失(log loss)来衡量预测的类别概率分布与真实类别之间的差异。逻辑损失通常表示为交叉熵损失,对于正类(前景),它是预测概率的负对数;对于负类(背景),它是所有类别概率的负对数总和减去正类概率的负对数。

位置损失(Lloc):
位置损失用于优化预测的边界框位置。对于每个类别k,网络输出一个四元组tk = [tx, ty, tw, th],这些值表示相对于原始提议的边界框的偏移量。位置损失使用平滑的L1损失(smoothL1)来计算预测的偏移量和真实边界框偏移量之间的差异。平滑L1损失是一种鲁棒的损失函数,它在边界框回归任务中表现良好,特别是在处理异常值时。

损失函数的整合:
多任务损失函数将分类损失和位置损失结合起来,通过一个指示函数[u >= 1]来决定是否计算位置损失。这个指示函数对于前景RoI(u大于等于1)为1,对于背景RoI(u等于0)为0。这意味着对于背景RoI,位置损失被忽略,因为背景没有精确的边界框。

超参数λ:
损失函数中包含一个超参数λ,用于平衡分类损失和位置损失之间的权重。在实验中,λ被设置为1,这意味着分类损失和位置损失被赋予了相同的权重。

训练过程中的归一化:
为了稳定训练过程,真实边界框的回归目标v(即[vx, vy, vw, vh])被归一化,使得它们具有零均值和单位方差。这有助于网络更快地学习到准确的边界框位置。

Mini-batch sampling

小批量采样(Mini-batch Sampling):
在微调过程中,每个随机梯度下降(SGD)小批量是通过从数据集中均匀随机选择N=2张图像来构建的。这意味着每次迭代,网络都会处理两张图像。
每个图像中,从图像的候选区域(RoI)中采样64个RoI。这些RoI是从图像中可能包含目标的区域中选取的。

正样本和负样本的处理:
根据与真实边界框(ground-truth bounding box)的交并比(IoU)来区分正样本和负样本。正样本是指那些与真实边界框有至少0.5 IoU重叠的RoI,这些RoI被标记为前景对象类别(即类别标签u ≥ 1)。
负样本是指那些与真实边界框的最大IoU在0.1到0.5之间的RoI,这些RoI被标记为背景类别(即类别标签u = 0)。这种设置有助于网络学习区分前景和背景。

硬样本挖掘(Hard Example Mining):
通过设置IoU的下限为0.1,网络被引导去关注那些难以分类的样本,这被称为硬样本挖掘。这种方法有助于提高模型在处理困难案例时的性能。

数据增强(Data Augmentation):
在训练过程中,为了提高模型的泛化能力,图像会以0.5的概率水平翻转。这是一种简单的数据增强技术,可以通过增加训练数据的多样性来帮助模型学习更鲁棒的特征。
除了水平翻转,Fast R-CNN在训练过程中没有使用其他数据增强技术。

Back-propagation through RoI pooling layers.

反向传播的基本原理:
反向传播是一种算法,用于计算损失函数关于网络权重的梯度。这些梯度随后用于更新网络权重,以最小化损失函数,即提高模型的性能。

RoI池化层的角色:
RoI池化层是Fast R-CNN中的一个重要组件,它负责从卷积特征图中为每个候选区域(RoI)提取固定长度的特征向量。在反向传播过程中,需要计算损失函数关于这些特征向量的梯度。

RoI池化层的前向操作:
在前向传播中,RoI池化层接收来自卷积层的激活值xi,并为每个RoI生成输出yrj。输出yrj是通过在RoI的子窗口上执行最大池化操作得到的,其中i*(r,j)表示在RoI的子窗口中具有最大激活值的输入索引。

RoI池化层的反向操作:
在反向传播中,RoI池化层的梯度计算依赖于argmax操作,该操作为每个输出单元yrj选择了最大的输入激活值。对于每个RoI和每个池化输出单元,如果输入xi被选为yrj的最大值,则损失函数关于xi的偏导数将被计算并累加到相应的梯度上。

损失函数梯度的计算:
损失函数关于每个RoI输出yrj的偏导数∂L/∂yrj已经在RoI池化层之上的层的反向函数中计算好了。这意味着RoI池化层的反向操作可以利用这些预先计算好的梯度来更新网络中的权重。

RoI池化层的高效性:
通过这种方式,RoI池化层的反向操作能够有效地计算损失函数关于输入特征的梯度,而不需要对每个RoI进行独立的前向传播。这大大提高了训练过程的效率,特别是在处理大量RoI时。

SGD hyper-parameters.

权重和偏置的初始化:
用于softmax分类和边界框回归的全连接层的权重从均值为0的高斯分布中初始化,其标准差分别为0.01和0.001。这意味着网络的权重在训练开始时被随机设置为接近0的值,但分布有一定的差异性。
偏置则被初始化为0,这通常是为了让网络在没有任何先验知识的情况下开始学习。

学习率的设置:
每个层的权重和偏置使用不同的学习率进行更新。权重的学习率为1,而偏置的学习率为2。这种设置可能有助于平衡网络中权重和偏置的更新速度。
全局学习率设置为0.001,这是一个相对较小的学习率,有助于在训练过程中稳定地更新权重,避免在参数空间中剧烈波动。

学习率的调整策略:
在训练VOC07或VOC12训练验证集时,首先使用当前的学习率进行30,000次小批量迭代。之后,学习率被降低到0.0001,然后继续训练10,000次迭代。
当在更大的数据集上训练时,会根据具体情况增加迭代次数。这种分阶段调整学习率的策略有助于在初期快速下降并在后期细化模型参数。

动量和参数衰减:
使用动量0.9来加速SGD在相关方向上的收敛,并抑制震荡。动量是一种加速技术,它使得梯度在更新方向上具有一定的惯性,从而加快学习过程并减少训练中的波动。
参数衰减设置为0.0005,这意味着在每次更新权重和偏置时,它们的值会略微减少。这有助于防止过拟合,并可能促进模型在训练过程中找到更平滑的最优解。

2.4. Scale invariance

尺度不变性的重要性:
在目标检测任务中,目标对象可能以不同的尺寸出现在同一类别中。尺度不变性对于模型在各种尺寸下都能准确检测目标至关重要。

尺度学习的策略:
论文探索了两种实现尺度不变性的方法:一种是“蛮力”学习,另一种是使用图像金字塔。
“蛮力”学习方法意味着在训练和测试期间,每张图像都以预定义的像素尺寸处理。网络必须直接从训练数据中学习尺度不变性。
图像金字塔方法通过在测试时使用图像金字塔来近似地对每个目标提议进行尺度归一化。在多尺度训练中,每次采样图像时都会随机选择一个金字塔尺度,作为一种数据增强形式。

实验设置:
论文中的实验使用了预训练的ImageNet模型,并在PASCAL VOC数据集上进行了测试。由于GPU内存限制,多尺度训练仅在较小的网络中进行了实验。

尺度不变性的结果:
论文发现,即使是单尺度检测(即只使用一个尺度)也几乎与多尺度检测表现得一样好。这表明深度卷积网络能够有效地直接学习尺度不变性,而不需要复杂的多尺度处理。

单尺度与多尺度的比较:
尽管多尺度方法在理论上可以提供更好的尺度不变性,但在实践中,它需要更多的计算资源,并且只带来了有限的性能提升。因此,单尺度处理提供了更好的速度和准确性权衡,尤其是在处理非常大的网络时。

3. Fast R-CNN detection

前向传播与目标检测:
一旦Fast R-CNN网络经过微调,目标检测的任务就主要变成了运行一次前向传播过程。这里假设候选对象区域(object proposals)已经预先计算好了。

输入数据:
在测试时,网络接收一张图像或者一组图像金字塔(编码为图像列表)作为输入,以及一个包含R个候选对象区域的列表。这些候选对象区域是需要被评分和分类的区域。

候选数量:
通常情况下,R的值大约是2000,但也会考虑R更大的情况下(例如大约45000)。这意味着网络需要处理大量的候选对象区域。

图像金字塔的使用:
当使用图像金字塔时,每个RoI会被分配到一个尺度,使得缩放后的RoI的面积最接近于224平方像素。这是为了确保网络能够在不同尺度上有效地处理RoI。

前向传播的输出:
对于每个测试RoI,前向传播会输出一个类别后验概率分布p,以及一组相对于该RoI的预测边界框偏移量。每个类别k都会有自己的精细边界框预测。

检测置信度的计算:
对于每个对象类别k,使用估计的概率Pr(class = k | r) ∆= pk来为每个RoI r 分配一个检测置信度。这个概率表示给定RoI r 属于类别k的条件概率。

非极大值抑制(Non-maximum Suppression, NMS):
为了从大量的候选区域中选择最佳的检测结果,对每个类别独立地执行非极大值抑制。这个过程使用来自原始R-CNN的算法和设置。
非极大值抑制是一种常用的技术,用于去除重叠的检测框,确保每个对象只被检测一次。它通过选择最高置信度的检测框作为最终结果,并抑制那些与选定框重叠度较高的其他框。

3.1. Truncated SVD for faster detection
全连接层的计算负担:
在图像分类任务中,全连接层的计算时间相比于卷积层来说是较小的。然而,在目标检测任务中,由于需要处理大量的区域兴趣(RoIs),全连接层的计算时间占据了前向传播的近一半。

截断SVD的加速作用:
为了加速全连接层的计算,可以使用截断SVD技术。这种方法通过近似分解全连接层的权重矩阵W来减少模型的参数数量,从而提高计算速度。

SVD分解过程:
在SVD分解中,权重矩阵W被近似分解为W ≈ UΣtV^T。其中,U是一个u×t的矩阵,包含了W的前t个左奇异向量;Σt是一个t×t的对角矩阵,包含了W的前t个最大奇异值;V是一个v×t的矩阵,包含了W的前t个右奇异向量。

参数数量的减少:
通过截断SVD,参数数量从原来的u×v减少到t(u + v)。当t远小于u和v的较小值时,这种参数的减少尤其显著,有助于减少模型的复杂性和计算负担。

网络压缩的具体操作:
为了实现网络压缩,原本对应的单个全连接层被替换为两个全连接层,这两个层之间没有非线性激活函数。第一个层使用权重矩阵ΣtV^T(不包含偏置项),第二个层使用U(包含原来与W相关的偏置项)。

加速效果:
这种简单的压缩方法在处理大量RoIs时能够带来显著的速度提升。通过减少参数数量和计算复杂度,模型能够在保持性能的同时,提高处理速度。

4. Main results
4.1. Experimental setup
预训练模型的来源:
实验中使用的三种模型都是在线可用的,并且它们都是在ImageNet大规模视觉识别挑战赛(ILSVRC)上预训练的。这些模型通过在庞大的ImageNet数据集上进行训练,学习到了丰富的视觉特征,这些特征对于目标检测任务非常有价值。

CaffeNet(模型S,“small”):
第一个模型是CaffeNet,它本质上是AlexNet架构。这个模型在R-CNN论文中被使用,并且在Fast R-CNN的实验中被称为模型S(“small”),因为它相对较小,具有较少的参数和较浅的网络深度。

VGG CNN M 1024(模型M,“medium”):
第二个模型是VGG CNN M 1024,它与模型S有相同的深度,但网络的宽度更大。这意味着模型M有更多的卷积层和全连接层,从而能够捕捉更复杂的特征。在实验中,这个模型被称为模型M(“medium”),表示它的规模和复杂性介于模型S和模型L之间。

VGG16(模型L,“large”):
第三个模型是VGG16,这是一个非常深的网络模型,具有更多的卷积层。由于其庞大的规模和深度,这个模型被称为模型L(“large”)。VGG16在目标检测任务中表现出色,但同时也需要更多的计算资源。

单尺度训练和测试:
在这一节中,所有的实验都使用单尺度训练和测试,即图像在输入网络之前被缩放到固定的尺寸(s = 600像素)。这种设置简化了训练和测试过程,因为它避免了处理不同尺度的图像所需的额外计算。
单尺度训练和测试的选择可能基于GPU内存限制或为了与先前工作(如SPPnet)的比较。此外,这种设置也有助于在不同模型之间进行公平的比较。

实验细节:
这一节可能还会提到其他实验细节,如数据增强技术的使用、损失函数的选择、以及如何评估模型性能等。
4.2. VOC 2010 and 2012 results
性能比较:
在这些数据集上,Fast R-CNN(简称FRCN)与其他在公共排行榜(comp4 track)上表现最好的方法进行了比较。这些排行榜通常列出了参加PASCAL VOC挑战赛的各个团队的方法和它们的性能指标。

NUS NIN c2000和BabyLearning方法:
NUS NIN c2000和BabyLearning是两种在排行榜上表现良好的方法,但它们没有相关的公开出版物,因此具体的卷积网络(ConvNet)架构信息不详。尽管如此,这些方法被认为是基于Network-in-Network设计的变体。

预训练VGG16网络:
除了NUS NIN c2000和BabyLearning之外,所有其他比较的方法都是从同一个预训练的VGG16网络初始化的。VGG16是一个在当时非常流行的深度卷积网络架构,它在ImageNet上取得了优异的性能。

Fast R-CNN在VOC12上的表现:
Fast R-CNN在VOC2012数据集上取得了最高的平均精度(mAP)为65.7%,并且当使用额外数据时,mAP可以提高到68.4%。这表明Fast R-CNN在目标检测任务上具有很高的准确性。

速度优势:
除了准确性之外,Fast R-CNN还比其他基于“慢速”R-CNN流水线的方法快两个数量级。这意味着Fast R-CNN在保持高准确性的同时,还能显著提高目标检测的速度。

SegDeepM方法:
在VOC2010数据集上,SegDeepM方法的mAP比Fast R-CNN高(67.2%对比66.1%)。SegDeepM利用了VOC2012的训练验证集和分割注释,并通过马尔可夫随机场(Markov random field)来提高R-CNN的检测和分割精度。

Fast R-CNN的潜力:
论文提到,如果将Fast R-CNN替换SegDeepM中的R-CNN,可能会得到更好的结果。这表明Fast R-CNN在集成到其他系统中时具有很大的潜力。

扩大训练集的效果:
当使用扩大的训练集(07++12)时,Fast R-CNN的mAP进一步提高到68.8%,超过了SegDeepM。这显示了使用更多训练数据可以显著提高模型性能。

4.3. VOC 2007 results
比较背景:
在VOC07数据集上,Fast R-CNN与R-CNN和SPPnet进行了性能比较。这些是比较早期的目标检测方法,它们为Fast R-CNN的发展提供了基础。

预训练模型:
所有参与比较的方法都是从同一个预训练的VGG16网络开始的。VGG16是一个深度卷积网络,它在ImageNet上进行了预训练,以学习丰富的视觉特征。

边界框回归的使用:
这些方法在训练和测试过程中都使用了边界框回归技术,这是一种常用的目标检测后处理技术,用于改善检测到的边界框的精度。

SPPnet的尺度使用:
SPPnet在其训练和测试过程中使用了五个不同的尺度。这种方法旨在通过在不同尺度上处理图像来提高模型对目标尺寸变化的适应性。

Fast R-CNN的性能提升:
即使Fast R-CNN只使用了单尺度训练和测试,通过微调卷积层,它在平均精度(mAP)上相较于SPPnet显示出显著的提升,从63.1%提升到66.9%。

R-CNN的性能:
R-CNN在VOC07数据集上达到了66.0%的mAP。这表明R-CNN是一个强大的基准,Fast R-CNN在其基础上进行了改进。

“困难”样本的处理:
在PASCAL VOC数据集中,一些样本被标记为“困难”(difficult),这意味着它们难以被正确检测和分类。SPPnet在训练时没有使用这些“困难”样本。
当从训练集中移除这些“困难”样本时,Fast R-CNN的mAP可以进一步提升到68.1%。这表明在没有这些挑战性样本的情况下,Fast R-CNN能够更好地学习目标检测任务。

实验的一致性:
除了移除“困难”样本的实验外,所有其他实验都包括了这些样本。这确保了Fast R-CNN的性能评估是在与R-CNN和SPPnet相同的条件下进行的,从而保证了实验结果的公平性和可比性。

4.4. Training and testing time

训练和测试时间的比较:
表4(可能在论文的后续部分提供)比较了Fast R-CNN、R-CNN和SPPnet在VOC07数据集上的训练时间和测试速度,以及它们在平均精度(mAP)上的表现。
Fast R-CNN在处理图像的速度上比R-CNN快了146倍(不使用截断SVD的情况下),如果使用截断SVD,速度可以提高到213倍。这意味着Fast R-CNN可以在极短的时间内处理大量图像。

训练时间的显著减少:
Fast R-CNN将训练VGG16网络的时间从84小时减少到了9.5小时,这是一个显著的改进。与SPPnet相比,Fast R-CNN在训练VGG16时快了2.7倍,测试时快了7倍(不使用截断SVD),或者快了10倍(使用截断SVD)。

磁盘存储的节省:
Fast R-CNN不需要像R-CNN和SPPnet那样将特征缓存到磁盘上,这消除了数百GB的磁盘存储需求。这不仅节省了存储空间,还可能加快了训练和测试过程,因为磁盘I/O操作通常比内存操作慢得多。

截断奇异值分解(Truncated SVD):
截断SVD是一种压缩技术,可以用来减少模型的参数数量和计算复杂度,从而加速模型的前向传播和反向传播。
使用截断SVD可以减少检测时间超过30%,并且只会导致非常小的mAP损失(0.3个百分点)。这意味着模型在加速的同时几乎不损失准确性。

截断SVD的效果示例:
图2(可能在论文的后续部分提供)展示了在VGG16的全连接层(fc6和fc7)使用截断SVD的效果。通过仅使用顶部的1024个奇异值和256个奇异值,可以显著减少运行时间,而对mAP的影响很小。

进一步的加速和微调:
如果在应用截断SVD之后再次进行微调,可以获得更快的速度和更小的mAP损失。这表明通过适当的技术,可以在保持高准确性的同时进一步提高Fast R-CNN的检测速度。

4.5. Which layers to fine-tune?
SPPnet论文中的观察:
在SPPnet论文中,对于相对较浅的网络,仅微调整连接层(fully connected layers)似乎已经足够获得良好的准确性。这表明对于这些较浅的网络,特征提取部分(卷积层)可能已经足够强大,不需要进一步的微调。

深度网络的假设:
作者提出了一个假设,即对于非常深的网络,如VGG16,仅微调整连接层可能不足以达到最佳性能。为了验证这一点,作者进行了实验,冻结了VGG16的13个卷积层,只让整连接层学习,这种设置模拟了单尺度SPPnet训练。

实验验证:
实验结果显示,通过RoI池化层进行训练对于非常深的网络非常重要。当仅微调整连接层时,VGG16的mAP从66.9%下降到61.4%,这验证了作者的假设。

微调策略:
实验表明,并不需要微调所有的卷积层。在较小的网络(S和M)中,第一层卷积(conv1)是通用的,与任务无关,因此是否让conv1层学习对mAP没有显著影响。

VGG16的微调实践:
对于VGG16,作者发现只需要从第三层卷积(conv3 1)开始更新网络层。这是一种实用的观察,因为从更早的层开始更新会导致训练速度减慢(从9.5小时增加到12.5小时),并且从第一层开始更新会导致GPU内存不足。

微调的效果:
从第二层卷积(conv2 1)开始更新与从第三层开始更新相比,mAP的增加仅为0.3个百分点。这表明对于VGG16,从conv3 1开始微调是一个有效的策略。

论文中的实验结果:
论文中使用VGG16的所有实验都是从conv3 1层开始微调的,而对于较小的模型S和M,则是从conv2层开始微调的。
5. Design evaluation
5.1. Does multi-task training help?

多任务训练的便利性:
多任务训练通过避免管理一系列顺序训练的任务管道,使得训练过程更加方便。在Fast R-CNN中,多任务训练同时学习分类和边界框回归,这允许任务之间通过共享的卷积网络表示相互影响。

多任务训练的效果:
为了测试多任务训练是否能够提高目标检测的准确性,作者训练了基线网络,这些网络仅使用分类损失(Lcls),即在损失函数中设置λ=0。这些基线模型没有边界框回归器。

比较多任务训练和单任务训练:
接下来,作者使用多任务损失函数(Eq. 1,λ=1)训练了网络,但在测试时禁用了边界框回归。这样做可以隔离网络的分类准确性,并与仅训练分类的基线网络进行直接比较。

多任务训练的优势:
在所有三个网络(可能指不同大小或深度的网络模型)上,观察到多任务训练相对于仅训练分类的准确性有所提高。这种提高的范围在0.8到1.1 mAP点之间,显示出多任务学习一致的正面效果。

阶段性训练的比较:
最后,作者将基线模型(仅训练分类损失)加上边界框回归层,并使用Lloc进行训练,同时保持所有其他网络参数不变。这种阶段性训练方案的结果显示,在第一列的基础上mAP有所提高,但整体性能仍然不如多任务训练。

多任务训练的优越性:
第四列每个组中显示了多任务训练的结果。与阶段性训练相比,多任务训练在所有网络中都表现出更好的性能,这进一步证实了多任务学习在目标检测中的有效性。

5.2. Scale invariance: to brute force or finesse?
尺度定义:
在实验中,图像的尺度(s)被定义为其最短边的长度。这是为了在处理不同尺寸的图像时保持一致性。

单尺度实验:
所有单尺度实验都将图像的尺度设置为600像素。对于某些图像,如果它们的最短边小于600像素,那么它们的最长边将被限制在1000像素以内,并保持图像的宽高比。
这些值的选择是为了确保在微调过程中VGG16模型能够适应GPU的内存限制。

多尺度实验:
在多尺度设置中,使用了与SPPnet论文中指定的相同的五个尺度(s ∈ {480, 576, 688, 864, 1200})。这样做是为了与SPPnet的结果进行比较。然而,最长边被限制在2000像素以内,以避免超出GPU内存。

尺度对性能的影响:
实验结果表明,单尺度检测的性能几乎与多尺度检测相当。这证实了深度卷积网络(deep ConvNets)能够有效地直接学习尺度不变性。
多尺度方法虽然在mAP上有轻微的提升,但计算成本显著增加。

VGG16模型的限制:
对于VGG16(模型L),由于实现细节的限制,只能使用单尺度。尽管如此,VGG16在单尺度上达到了66.9%的mAP,略高于R-CNN报告的66.0%。

R-CNN的“无限”尺度:
尽管R-CNN使用了“无限”尺度,即将每个提议都变换到一个标准尺寸,但VGG16在单尺度上的表现仍然略胜一筹。

单尺度处理的优势:
单尺度处理在速度和准确性之间提供了最佳的折衷方案,特别是对于非常深的模型。因此,在本小节之外的所有实验都使用单尺度训练和测试,尺度设置为600像素。

5.3. Do we need more training data?
训练数据的重要性:
一个好的目标检测器在提供更多训练数据时应该能够提高其性能。这是因为更多的数据可以提供更丰富的样本,帮助模型学习到更泛化的特征。

DPM的性能饱和:
文献[24]中的研究指出,DPM(Deformable Part Models)在仅有几百到一千个训练样本后,其平均精度(mAP)就达到了饱和点,不再随着数据量的增加而提高。

扩大VOC07训练集:
为了评估Fast R-CNN,作者将VOC07训练验证集与VOC12训练验证集合并,使得图像数量大约增加了三倍,达到16.5k张。这种数据集的扩大显著提高了在VOC07测试集上的性能,mAP从66.9%提高到了70.0%。

训练迭代次数的调整:
在使用扩大后的数据集进行训练时,作者将随机梯度下降(SGD)的迭代次数从40k增加到60k。

VOC10和2012的实验:
对于VOC10和2012数据集,作者构建了一个包含21.5k张图像的数据集,这个数据集包括了VOC07的训练验证集、测试集和VOC12的训练验证集的并集。
在这个更大的数据集上,作者使用了100k次SGD迭代,并在每40k次迭代后将学习率降低10倍,而不是之前的每30k次迭代降低一次。

性能提升的结果:
在VOC10和2012数据集上,通过扩大训练集和调整学习率策略,mAP分别从66.1%提高到了68.8%和从65.7%提高到了68.4%。

5.4. Do SVMs outperform softmax?
Softmax分类器与SVM的对比:
Fast R-CNN在微调阶段学习了softmax分类器,并在检测时使用它进行分类。这与R-CNN和SPPnet采用的方法不同,后者在后期通过训练一对一的线性SVM来进行分类。

后期SVM训练的实现:
为了理解使用softmax分类器的影响,作者在Fast R-CNN中实现了后期的SVM训练,并结合了困难负样本挖掘(hard negative mining)技术。这是一种在训练过程中选择困难样本进行重点学习的技术,旨在提高分类器的性能。

训练算法和超参数的一致性:
在实现后期SVM训练时,作者使用了与R-CNN相同的训练算法和超参数设置,以确保实验的公平性和结果的可比性。

性能比较:
表8(可能在论文的后续部分提供)显示了在所有三个网络(可能指不同大小或深度的网络模型)上,softmax分类器在mAP上略微超过了SVM,提升范围在0.1到0.8个百分点之间。

“一次性”微调的充分性:
尽管softmax分类器相对于SVM的性能提升较小,但这一结果表明,与之前的多阶段训练方法相比,“一次性”微调是足够的。这意味着Fast R-CNN可以在单个训练阶段中同时学习分类和边界框回归,而不需要额外的SVM训练步骤。

Softmax与SVM的区别:
Softmax分类器在对区域兴趣(RoI)进行评分时引入了类别间的竞争,这与一对一的SVM不同。在softmax分类器中,当评估一个RoI时,它会考虑所有类别的概率,并选择概率最高的类别作为预测结果。
5.5. Are more proposals always better?

对象提议的类型:
目标检测器主要有两种类型:使用稀疏对象提议的方法(例如,选择性搜索 selective search)和使用密集对象提议的方法(例如,DPM)。
稀疏提议方法通过提议机制首先排除大量候选区域,留下较少的区域供分类器评估,这种级联(cascade)方式在应用于DPM检测时可以提高检测精度。

提议-分类器级联对Fast R-CNN的影响:
作者发现,在使用选择性搜索的高质量模式时,随着每张图像的提议数量从1k增加到10k,Fast R-CNN的mAP先上升然后略微下降。这表明简单地增加提议数量并不会提高检测精度。

提议数量与mAP的关系:
实验结果显示,当提议数量增加时,mAP并不会持续提高,反而可能会损害精度。这一结果在没有实际进行实验的情况下是难以预测的。

对象提议质量的衡量:
平均召回率(Average Recall, AR)是衡量对象提议质量的最新指标。在使用R-CNN时,AR与mAP有很好的相关性,但这种相关性在提议数量变化时会减弱。

稀疏提议与密集提议的比较:
作者还探讨了Fast R-CNN在处理密集生成的边界框时的性能。即使用约45k个边界框/图像的密集集,当选择性搜索框被最近的密集框替换时,mAP仅下降1个百分点。

密集提议的统计特性:
密集提议的统计特性与选择性搜索框不同。当向2k个选择性搜索框中添加随机样本的密集提议时,mAP的下降比添加更多选择性搜索框时更为显著。

仅使用密集提议的性能:
当仅使用密集提议时(45k个/图像),Fast R-CNN的mAP为52.9%。这表明密集提议在一定程度上影响了检测性能。

困难负样本挖掘的SVM性能:
最后,作者检查了是否需要使用带有困难负样本挖掘的SVM来处理密集提议分布。结果显示,SVM的性能甚至更差,mAP仅为49.3%。

5.6. Preliminary MS COCO results
MS COCO数据集:
MS COCO(Microsoft Common Objects in Context)是一个大规模的目标检测、分割和标注数据集,包含了大量日常场景中的图像,每张图像中都有多个对象实例。

Fast R-CNN的应用于MS COCO:
作者将Fast R-CNN与VGG16网络结合,应用于MS COCO数据集,以建立一个初步的基线模型。这表明Fast R-CNN不仅适用于PASCAL VOC数据集,也可以扩展到其他目标检测任务。

训练过程:
在训练阶段,Fast R-CNN在包含80,000张图像的训练集上进行了240,000次迭代。这是一个相对较长的迭代过程,旨在使模型充分学习数据集中的对象检测任务。

评估方法:
评估是在MS COCO的“test-dev”集上进行的,这是一个官方的评估服务器,用于计算模型的性能指标。

性能指标:
作者报告了两种不同的平均精度(AP)指标:PASCAL风格的mAP和COCO风格的AP。
PASCAL风格的mAP是按照PASCAL VOC挑战赛的标准计算的,它不考虑交并比(IoU)的阈值,而COCO风格的AP则在多个IoU阈值上进行平均,这使得评估更加严格。

实验结果:
在MS COCO数据集上,Fast R-CNN达到了35.9%的PASCAL风格mAP和19.7%的COCO风格AP。
这些结果表明,尽管Fast R-CNN在PASCAL VOC数据集上表现出色,但在更具挑战性的MS COCO数据集上,其性能还有提升空间。

6. Conclusion
Fast R-CNN的提出:
本文提出了Fast R-CNN,这是对原有的R-CNN和SPPnet方法的一次重要更新。Fast R-CNN旨在提供一个更清洁、更快速的目标检测框架。

最先进的检测结果:
论文报告了使用Fast R-CNN所达到的最先进的目标检测结果,这表明了其在目标检测领域的有效性和优越性。

详细的实验:
除了性能结果,论文还提供了一系列详细的实验,旨在提供新的见解和理解。这些实验可能涉及不同的网络结构、训练策略和数据集。

稀疏对象提议的优势:
特别值得注意的发现是,稀疏对象提议(sparse object proposals)似乎能够提高检测器的质量。这可能是因为稀疏提议减少了需要处理的候选区域的数量,从而提高了检测的准确性和效率。

过去研究的局限性:
作者指出,在过去,由于时间成本过高,研究稀疏提议的影响是不切实际的。但是,随着Fast R-CNN的出现,这种研究变得可行,因为它能够快速处理大量的图像和提议。

未来研究的可能性:
尽管稀疏提议在当前研究中表现出了优势,但作者也提到可能存在尚未发现的技术,这些技术可以使密集提议(dense boxes)达到与稀疏提议相同的性能水平。
如果未来能够开发出这样的方法,它们可能会进一步加速目标检测过程,提高检测器的性能。

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于 Faster R-CNN 的代码精读,你可以参考以下步骤: 1. 阅读主要的文件结构:Faster R-CNN 通常包括几个主要的文件,包括模型定义文件、数据加载文件、训练和测试脚本等。首先,了解代码的整体结构和文件之间的关系是很重要的。 2. 理解模型架构:查看模型定义文件,通常是一个包含网络结构的类或函数。在这个文件中,你可以找到网络的主要组件,如卷积层、池化层、全连接层等。仔细阅读这些组件的定义和参数设置,对整个网络的结构和运作方式有一个清晰的理解。 3. 研究损失函数:Faster R-CNN 使用一种特定的损失函数来衡量模型预测与真实标签之间的差异。阅读训练脚本中的损失函数实现部分,了解如何计算损失以及如何反向传播梯度更新模型参数。 4. 数据加载与处理:Faster R-CNN 在训练和测试过程中需要加载和处理数据。查看数据加载文件,了解如何从数据集中读取图像和标签,并进行预处理操作,如缩放、裁剪、归一化等。 5. 推断与预测过程:Faster R-CNN 的目标是在图像中检测和定位物体。了解测试脚本中的推断和预测过程,包括如何对输入图像进行前向传播,并根据预测结果生成检测框和类别。 6. 调试和修改:在阅读代码的过程中,你可能会遇到一些问题或有一些想法来改进模型。尝试调试代码并进行一些修改,看看是否能够改善模型的性能或加入新的功能。 请记住,Faster R-CNN 是一个相对复杂的模型,可能需要花费一些时间来理解和熟悉代码。阅读官方的文档和参考资料,以及查找其他人的实现和解释,都是学习和理解代码的有用资源。祝你成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值