基于 Jetson Nano 深度学习平台的学生课堂学习评估系统-----学生的人脸检测与识别外文翻译资料
2022-08-07 10:38:47
英语原文共 9 页,剩余内容已隐藏,支付完成后下载完整资料
Fsat R-CNN
Ross Girshick
摘 要:本文提出了一种基于快速区域的卷积网络方法(Fast R-CNN)用于物体检测。快速R-CNN建立在先前工作的基础上,使用深度卷积网络有效地对目标候选进行分类。和之前的工作相比,Fast R-CNN采用了多项创新点来提高训练和测试速度,同时提高了检测精度。Fast R-CNN训练VGG16网络比R-CNN快了9倍,测试时间比R-CNN快了213倍,并在PASCAL VOC 2012上取得更高的mAP。与SPPnet相比,Fast R-CNN训练VGG16快了3倍,测试快了10倍,并且精度更高。Fast R-CNN在Python和 C 中实现(使用Caffe),可在开源MIT License下获得 https://githubr/combgirshick/rcnn.
1. 引言
近年来,深度卷积网络[14,16]显著提高了图像分类[14]和目标检测的准确性[9,19]。与图像分类相比,目标检测是一项更具挑战性的任务,需要更复杂的方法来解决。由于这种复杂性,目前的方法(如[9,11,19,25])在多阶段流程中训练模型是缓慢笨拙的。
复杂性的增加是因为检测需要精确定位对象,这带来了两个主要的挑战。首先,必须处理大量候选对象位置(通常称为“提出候选区域”)。其次,这些候选区域是粗略定位,必须进行细化才能实现精确定位。这些问题的解决方案常常会牺牲速度、准确性,增加复杂性。
在本文中,我们简化了最先进的基于卷积神经网络的目标检测器的训练过程[9,11]。提出了一种单阶段联合学习的目标分类和定位的训练算法。
该方法可以训练出比R-CNN[9]快9倍、比SPPnet[11]快3倍的深度检测网络(VGG16[20])。在运行时,检测网络对图像处理时间为0.3s(不包括产生候选区域时间),同时,网络在PASCAL VOC 2012[7]上获得66%的精准度(R-CNN为62%)。
1.1. R-CNN和SPPnet
基于区域的卷积网络方法(R-CNN)[9]通过使用深度卷积网络对目标候选进行分类,获得了良好的目标检测精度。然而,R-CNN也有明显的缺点:
1. 训练是一个多阶段的过程:首先,R-CNN利用物体候选区域对卷积网络模型进行调优,损失函数采用log损失,是交叉熵(softmax)函数。然后,让支持向量机(SVMs)去适应卷积特征,训练SVM分类器。这些SVMs通过模型调优取代了softmax分类器成为物体检测器。在第三个训练阶段,边框回归器被训练学习目标定位信息。
2. 训练在空间和时间上都很昂贵:当SVM分类器和边框回归器训练时,输入的特征是所有训练图片产生的候选区域,这些特征被提取并被写入磁盘。对于比较深的网络,比如VGG16,训练模型使用VOC2017的5000余张图片需要GPU 2.5天(2.5 GPU-Days),这些特征需要数百GB的存储空间。
3. 物体检测速度很慢:在测试时,每一张测试图片中所有物体的候选区域的特征被提取出来。对于VGG16网络来说,检测一张图片花费47s(在GPU上)。
R-CNN很慢的原因是因为对于图片的每一个候选区域都需要执行一次前向传播计算(提取特征的卷积层),这没有共享卷积的计算。SPP-Net提出了共享计算来加速R-CNN算法。SPP-Net对一张完整的输入图片只计算得到一张卷积特征图,然后从共享的特征图提取每一个物体候选区域所对应的特征向量,并做分类处理。对于每一个候选区域,使用最大值池化它们的特征图并提取它们的特征向量,输出是固定的大小。多种不同大小的池化输出在空间金字塔池化层连接起来。SPP-Net测试时间比R-CNN快了10-100倍;在训练时由于加快了候选区域的特征提取,训练时间减少了3倍。
SPP-Net也存在很明显的缺点。像R-CNN一样,训练是多阶段的过程,包含特征提取,使用log损失调优网络参数,训练SVM分类器,最终训练边框回归器。这些训练需要将提取的特征存入磁盘。但是和R-CNN不同的是,在SPP-Net中的调优(fine-tuning)不会更新空间金字塔池化层前的卷积层参数。毫无疑问,这(固定的卷积层)限制了深层网络(VGG16)的精度。
1.2. 贡献
我们提出了一种新的训练算法,该算法在修复R-CNN和SPPNet缺点的同时,还提高了速度和精度。因为该方法训练和测试是比较快的,我们把这种方法叫做Fast R-CNN。Fast R-CNN的优点如下:
(1)比R-CNN和SPPNet更高的检测精度(mAP)
(2)训练是单阶段的,使用了多任务损失函数
(3)训练可以更新所有的网络层参数
(4)不需要磁盘去存储大量提取的特征
Fast R-CNN算法是使用Python和C (Caffe)来编写实现的。它可以在开源的MIT Li-cense下获得,地址是:https://github.com/rbgirshick/fast-rcnn
2. Fast R-CNN的架构和训练
图片1说明了Fast R-CNN的架构。Fast R-CNN网络将一个完整的图像和一组目标候选区域作为输入。该网络首先通过几个卷积层和最大池化层处理输入的整个图像,产生一个卷积特征图。然后,对于每一个目标候选区域,使用感兴趣区域池化层(region of interest)从特征图上提取固定维度的特征向量。每一个特征向量被输入(fed into)到一系列全连接层中,最终得到两个同级的输出:第一个输出是一个(K 1)类的softmax概率估计,它包括了k个目标类别和一个背景类;第二个输出是K个目标类中的每一类的4个实数值。K类目标中每一类的4个数字是对边界框位置的编码,以获得更精确的边界框位置。
图一. Fast R-CNN架构. 输入图像和多个感兴趣区域RoI被输入到完全卷积网络(指卷积网络的前面的所有卷积层). 每个感兴趣区域RoI被池化为固定尺寸的特征图, 然后通过全连接层映射到特征向量. 网络中每个RoI有两个输出向量:softmax概率和每个类别的边框回归偏移量. 该架构使用多任务损失函数实现了端到端的训练.
2.1 感兴趣区域池化层
RoI (region of interest)池化层使用最大池化操作将任何有效的感兴趣区域内的特征转换为一个固定空间范围H*W(例如,7*7)的较小的特征图,其中H和W是独立于任何特定RoI区域的超参数。在本文中,每一个RoI是被转换为在卷积特征图上的一个矩形窗口。每个RoI通过4元组(r,c,h,w)来定义,矩形左上角顶点是(r,c),矩形的高和宽是(h,w)。
感兴趣区域最大池化通过尺寸大约h/H * w/W 的子窗口将 h*w 的RoI窗口划分为 H*W 的网格,然后将每个子窗口中的值最大池化到相应的输出网格单元。池化操作是标准的最大池化,它独立作用于特征图的每一个通道。RoI层是SPPNet网络中的空间金字塔池化层的一个简单的特例,它是只有一个尺度的金字塔层。我们使用文献[11](SPPNet)中给出的池化窗口进行计算。
2.2 从预训练的网络初始化
我们的实验采用了三种在ImageNet数据集上预训练的网络,每一个网络拥有5个最大池化层和5-13个卷积层(可查看4.1节获取详细网络结构)。当一个预训练的网络初始化Fast R-CNN网络时,它经历了三次转换。
首先,最后一个最大池化层被RoI池化层所取代,该RoI池化层通过设置合理的H和W来和第一个全连接层兼容(例如,对于VGG16,H=W=7)。
其次,网络的最后的全连接层和softmax层(被训练1000个类别在ImageNet分类数据集上)被两个同级并列的层所取代(一个是K 1个类别的softmax分类层,另一个是指定类别的边框回归偏移量)。
第三,网络被修改为两种数据输入:一个是图像列表,另一个是这些图像的RoI(region of interest)列表。
2.3 调优网络用于目标检测
对于Fast R-CNN来说,使用反向传播算法训练网络的所有权重是一个很重要的功能。首先,让我们阐述一下为什么SPPNet不能去更新空间金字塔池化层下的卷积层权重。
根本的原因在于当每一个训练样本(即RoI)来自于不同的图像时,通过SPP层的反向传播的效率是很低的,而这正是R-CNN和SPPNet网络的训练方式。这种效率低下源自于每一个感兴趣区域ROI可能有一个非常大的感受视野,通常跨越整个输入图像。由于前向传播过程必须处理整个感受视野,因此训练需要的输入很大(通常是整幅图像)。
我们提出了一种更加有效的训练方法,它在训练期间利用特征共享。在Fast R-CNN训练时,使用随机梯度下降(SGD)优化参数的小批量采用分层抽样,首先采样N个图像,然后对于每一张图像采样R/N个RoI区域。更重要的是,来自于同一张图像的所有RoI区域在前向传播和反向传播过程中共享计算和内存。这样使得较小的N会减少mini-batch的计算量。例如,当使用N=2,R=128,这个训练方案比一个来自128张不同图片的RoI区域(R-CNN和SPP-Net的训练策略)快了大约64倍。
对于这种策略的一个担忧是它可能导致训练的收敛速度减缓,因为来自于同一张图像的RoI区域是相关的。这种担忧在实际问题中并没有出现,我们使用了比R-CNN更少的迭代步数,采用N=2,R=128这种策略反而取得了很好的结果。
除了分层抽样之外,Fast R-CNN使用单阶段调优模型同时优化softmax分类器和边框回归器来简化的训练过程,而不是单独的训练softmax分类器、SVM、边框回归器(像R-CNN和SPPNet中那样)。该程序的组成部分(损失、小批量采样策略、RoI池化层的方向传播、SGD超参)如下所示。
多任务损失
Fast R-CNN网络有两个同级并列的输出层,第一个输出层是一个离散的概率分布(对于每一个RoI区域),p=(p0,hellip;,pk),包含有 K 1 个类别。通常p是由全连接层的 k 1 个输出再经过softmax得到的。第二个同级的输出是边框回归偏移量(offsets),对于每个K对象类,有 tk =(),索引是k。我们使用了文献[9]中给出的方法对tk参数化,其中tk是相对于目标候选区域的尺度不变的转换和在对数空间的高度、宽度的偏移。
每个训练的RoI区域都标注有真实的类别u 和真实的边框回归目标 v 。我们对于每一个标注的 RoI 区域使用多任务损失函数 L 来联合训练分类和边界框回归:
第二个任务损失 Lloc 是针对类u和v=(vx,vy,vw,vh)的真实边界框回归目标的元组定义的,并且预测的元组 =()也是针对u类别。当ugt;1时,中括号的指示器函数 [u gt;= 1]的计算结果为1,否则为0。对于背景 ROI 区域没有标注框(ground-truth)的概念,因此Lloc 被忽略。对于边框回归,我们使用如下的损失函数:
SmoothL1(x)它是一种强大的L1损失,对于异常值的敏感度要低于R-CNN和SPPNet中使用的 L2 损失。当回归目标无限制时,L2 损失在训练时可能需要仔细的调整学习率以防止梯度爆炸。式子3消除了这种敏感性。
在方程1中的超参lambda;控制两个任务损失之间的平衡。我们将真实的回归目标vi标准化为零均值和单位方差。所有实验都使用lambda;=1。
我们注意到文献[6]使用相关的损失函数来训练一个与类无关的区域生产网络。与我们的方法不同,它提出了一种双网络的系统,它将定位与分类分开。OverFeat、R-CNN和SPPNet也训练分类器和边框定位器,但是这些方法属于阶段式训练,我们将在5.1节展示它们对于Fast R-CNN来说是次优的。
小批量抽样(Mini-batch sampling)
在调优模型期间,每个SGD的mini-batch是由N=2个图像构成,数据是均匀随机选择的(我们通常实际上只对数据集的排列进行了调整)。我们使用的min-batches的尺寸是R=128,每1个图像采样了64个
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[246535],资料为PDF文档或Word文档,PDF文档可免费转换为Word