论文地址:https://arxiv.org/pdf/1805.06361.pdf
发表时间:2018年
CSDN简述地址:https://blog.csdn.net/u014380165/article/details/80467007
paddledetection具体实现代码:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.5/ppdet/slim/distill.py 【未实现FM-NMS,仅含本文的loss,仅支持yolov3】
在本文中,我们提出了一种高效和快速的目标检测器,可以处理数百帧每秒。为了实现这一目标,我们研究了目标检测框架的三个主要方面:网络架构、损失函数和训练数据(有标记和未标记)。为了获得紧凑的网络体系结构,我们在最近的工作基础上引入了各种改进,开发了一种计算量轻、具有合理性能的体系结构。为了进一步提高性能,在保持复杂性不变的同时,我们利用了蒸馏损失函数。利用蒸馏损失,我们将一个更准确的教师网络的知识转移到所提出的轻量级学生网络中。对于所提出的单级检测器pipeline,我们提出了各种创新的蒸馏效率:objectness scaled distillation loss、feature map non-maximal suppression和单一统一的蒸馏损失函数进行检测。最后,在蒸馏损失的基础上,我们探索了利用未标记的数据可以在多大程度上推动性能。我们使用教师网络的软标签,用未标记的数据来训练我们的模型。我们最终的网络参数比基于VGG的目标检测网络少10倍,它实现了超过200 FPS的速度,提出的变化比Pascal数据集上的基线提高了14 mAP。
1. Introduction
目标检测是计算机视觉中的一个基本问题。近年来,由于深度卷积网络[19]的成功,目标探测器[25,27,22,26,7,10,21]的精度有了显著的提高。研究表明,现代基于深度学习的目标探测器可以以相当高的精度和合理的速度[22,26]检测出一些通用目标。这些发展已经引发了物体检测在各种工业应用中的使用,如监视、自动驾驶和机器人技术。在这一领域的大多数研究都是专注于在公共基准测试[21,10]上取得最先进的表现。为了实现这些进步,研究主要依赖于更深层次的架构(Inception[33],VGG [32],Resnet [11]),这些架构以牺牲更高的计算复杂度和额外的内存需求为代价。虽然这些结果已经证明了目标检测对一些问题的适用性,但可伸缩性仍然是全规模工业部署的一个开放的问题。例如,一个有50个摄像头和30帧/秒速率的安全系统,将需要一个有60个gpu的专用服务器,即使我们使用最快的探测器SSD(22FPS,512分辨率)[22]。这些数字可以快速增长,例如在大型建筑中的安全应用程序。在这些场景中,速度和内存需求变得至关重要,因为它需要在单个GPU上处理多个流。令人惊讶的是,研究人员很少重视设计快速高效的物体探测器,具有低内存要求[17]。在这项工作中,我们试图弥合这一差距,我们专注于开发一种高效的对象检测器,具有低内存需求,并高速在单个GPU上处理多流。
为了设计一种快速、高效的目标探测器,我们首先问自己一个基本问题:深度学习对象检测器的基本要素是什么?我们如何调整它们来开发所设想的检测器?基于相关的工作[25,27,22,26,7],我们广泛地确定了基于深度学习的目标检测框架的关键组件为:(1)网络架构,(2)损失函数和(3)训练数据。我们分别研究这些组件,并引入一套广泛的定制,包括新颖的和相关的工作,并研究哪些在实现速度-准确性的权衡中发挥最关键的作用。
网络架构是决定检测器的速度和精度的关键因素。最近的探测器[15]往往基于更深层次的架构(VGG [32],Resnet [11]),这使得它们更准确,但增加了计算复杂度的复杂性。网络压缩和剪枝[9,5,13]方法已经取得了一些成功,使检测架构更紧凑。然而,这些方法仍然难以提高速度,例如,具有17M参数的[31]的紧凑架构达到了17 FPS的速度。在这项工作中,我们发展了某些设计原则,不仅为紧凑的架构,而且为一个高速探测器,因为速度对我们是最重要的。我们从Densenet[14]、Yolo-v2 [26]和单镜头探测器(SSD)[22]最近的工作中获得灵感,设计了一个深而狭窄的架构。更深层次的架构允许我们获得更高的精度,而狭窄的层使我们能够控制网络的复杂性。可以观察到,体系结构的变化本身可以导致比选定的基线增加5 mAP。在这些工作的基础上,我们在架构设计方面的主要贡献是开发了一个简单而高效的网络架构,它可以处理超过200 FPS,使其成为最快的基于深度学习的对象检测器。此外,我们的模型仅包含15M参数,而在VGG-16模型[3]中仅包含138M参数,因此形成了最紧凑的网络之一。与最先进的探测器相比,所提出的探测器的速度如图1所示。
考虑到简单和快速的体系结构的限制,我们研究了有效的训练方法来提高性能。从一个合理精确的轻量级检测器开始,我们利用具有更好性能的更深层次的网络来进一步改进训练策略。为此,我们考虑网络蒸馏[12,2,1],其中利用较大网络的知识来有效地学习较小网络的表示。虽然这个想法最近被应用于目标检测的[3,20],但我们的工作在我们应用蒸馏的方式上有关键的贡献。
- (1)我们是第一个在单通探测器(Yolo)上应用蒸馏的人,这使得这项工作不同于之前将其应用于区域提案网络的工作。
- (2)我们的方法的关键是基于观察到的目标检测涉及的非最大抑制(NMS)步骤,这是在端到端学习之外的。在NMS步骤之前,检测网络的最后一层由检测区域的密集激活组成,如果直接转移到学生网络,就会导致过拟合和性能下降。因此,为了应用蒸馏法进行检测,我们提出了特征图-NMS(FM-NMS),它可以抑制与重叠检测对应的激活。
- (3)通过强调在教师检测中具有较高客观性值的检测,我们将这个问题表述为客观性尺度的蒸馏损失。我们的结果表明,蒸馏是一种有效的方法来提高性能,同时保持低复杂性。
最后,我们研究了“数据有效性”[8]在目标检测中的有效性。标注数据是有限的,但由于高精度的目标探测器的可用性和无限数量的未标记数据,我们探索了我们可以在多大程度上推动所提出的轻量级探测器的性能。我们的思想遵循了半监督学习[29,35,4]的路线,这在深度学习对象检测器中尚未得到彻底的探索。与我们的方法密切相关的是拉多萨沃维奇等人最近的工作。al. [23],其中使用检测器的集成生成标注。我们的思想主要有两个不同之处: (1)我们从教师网络的卷积特征图中转移软标签,这在网络蒸馏[28]中更有效。(2)我们的损失公式,通过客观缩放和蒸馏权重,允许我们控制给给教师标签的权重。这个公式提供了灵活性,给予高度重视的GT检测,而相对较少的不准确的教师预测。此外,我们的训练损失公式无缝地集成了检测损失和蒸馏损失,这使网络能够从标记数据和未标记数据的混合物中学习。据我们所知,这是第一个通过联合使用已标记和未标记的数据来训练深度学习目标检测器的工作
2. Architecture customizations
最近大多数成功的对象探测器都依赖于底层架构的深度来实现良好的性能。它们取得了良好的性能,然而,速度限制在20-60F/S,即使是最快的探测器[22,26]。为了开发一个更快的探测器,我们选择了一个中等精确但非常高速的探测器,Tiny-Yolo [26],作为我们的基线。它是Yolo-v2的简化版本,具有更少的卷积层,但具有相同的损失函数和优化策略,如批处理归一化[16]、锚盒聚类等。在此基础上,我们引入了一些架构定制,以使其更加准确,更快。
dense feature map堆叠 从最近的工作中获得灵感,我们观察到合并前一层的特征图可以提高性能。我们从最后一个主要卷积层中的前一个层合并了特征映射。早期层的尺寸与更高级层的尺寸不同。之前的工作[22]利用最大池化来调整连接的特征映射的大小。然而,我们观察到最大池会导致信息丢失,因此,我们使用特征堆叠,其中较大的特征图被resize,使它们的激活值沿不同的特征图[26]分布。
瓶颈层压缩信息 此外,我们在合并特性时广泛使用了瓶颈层。使用瓶颈层[14,34]背后的想法是将信息压缩到更少的层中。瓶颈中的1x1卷积层提供了表示压缩比的灵活性,同时也增加了深度。可以观察到,合并高级层的特征图可以提供更多的改进,因此,我们对初始层使用较高的压缩比,对更高级的层使用较低的压缩比。
更深且更窄 基线Tiny-Yolo架构由其最后几个卷积层中的大量(1024个)特征通道组成。通过与先前各层的特征图的连接,我们发现这些大量的卷积特征图是不必要的。因此,在我们的设计中减少了滤波器的数量,这有助于提高速度。
1x1的卷积层 与其他最先进的探测器相比,我们的架构缺乏深度。通过添加更多的卷积层来增加深度会导致计算开销,为了限制复杂性,我们使用了1x1的卷积层。在最后一个主要的卷积层之后,添加1x1的卷积层可增加模型深度而不增加计算复杂度。
在这些简单概念的基础上,我们开发了用于目标检测的轻量级体系结构。这些修改使模型比基线的Tiny-Yolo架构改进了5 mAP,此外,我们的架构比Tiny-Yolo快20%,因为我们在设计中使用了更少的卷积核。基线Tiny-Yolo在Pascal数据集上获得了54.2的mAP,而所提出的架构获得了59.4的mAP。整体架构如图2所示。我们把这个网络称为F-Yolo。
3. Distillation loss for Training
由于我们将自己限制在一个简单的架构来实现高速模型,我们探索网络蒸馏[28,12]方法来提高性能,因为它不影响检测器的计算复杂度。网络蒸馏的思想是利用一个大型精确网络(教师)的知识来训练一个轻量级(学生)网络。知识以教师网络的软标签的形式传递。
在描述我们的蒸馏方法之前,我们将简要概述Yolo损失函数和网络的最后一个卷积层。Yolo是基于一个阶段的架构,因此,与RCNN探测器家族不同,边界框坐标和分类概率同时被预测为最后一层的输出。最后一层特征图中的每个单元格位置预测N个边界框,其中N是锚定框的数量。因此,最后一层中的特征映射的数量被设置为 N × ( K + 5 ) N\times(K+5) N×(K+5),其中K为预测的类别数,5为边界包围框(xywh)和objectness值(obj概率)。因此,对于每个锚定框和每个单元中,网络学习预测:类概率、目标值和边界框坐标。总体目标可分解为回归损失、objectness损失和分类损失三部分。
- 回归损失:用于预测boxes的大小和位置
- objectness loss:用于预测boxes与真实框的iou(也用于表示包含目标的概率)
- 分类损失:用于预测boxes所对应的目标类别
为了应用知识蒸馏,我们可以简单地取教师网络的最后一层的输出,并将其替换为真实值(boxes、iou、和class信息)。这个损失将把教师网络的输出值传播到学生网络中。然而,单级检测器的密集采样(网格中的预测框太多)引入了一些问题,使直接应用蒸馏效果不好。我们将在下面讨论这些问题,并提供了在单级探测器中应用蒸馏的简单解决方案。
3.1. Objectness scaled Distillation
目前的检测器蒸馏方法(应用于RCNN家族)[20,3]使用教师网络的最后一个卷积层的输出,将知识转移到学生网络。在Yolo中采用类似的方法,我们遇到了一个问题,因为它是单阶段的探测器,并且对密集的候选对象集进行了预测。Yolo老师预测了一个图像的背景区域中的边界框。在推理过程中,通过考虑候选对象的objectness(阈值iou、objectness值、包含目标的概率)来忽略这些背景框。然而,标准的蒸馏方法将这些背景检测转移给学生模型。它影响了边界框回归训练,因为学生网络学习了教师网络预测的背景区域中的错误边界框。基于RCNN的目标检测器通过使用区域建议网络来预测相对较少的区域建议。为了避免“学习”教师对背景区域的预测,我们将蒸馏损失表示为objectness scaled函数。其思想是只有在教师预测的客观值(阈值iou、objectness值、包含目标的概率)较高时,才学习边界框坐标和类概率
。函数的客观性部分不需要客观性尺度化,因为有噪声的候选项的客观性值较低,因此客观性部分为:
f
o
b
j
C
o
m
b
(
o
i
g
t
,
o
^
i
,
o
i
T
)
=
f
o
b
j
(
o
i
g
t
,
o
^
i
)
⏟
Detection loss
+
λ
D
⋅
f
o
b
j
(
o
i
T
,
o
^
i
)
⏟
Distillation loss
f_{o b j}^{C o m b}\left(o_{i}^{g t}, \hat{o}_{i}, o_{i}^{T}\right)=\underbrace{f_{o b j}\left(o_{i}^{g t}, \hat{o}_{i}\right)}_{\text {Detection loss }}+\underbrace{\lambda_{D} \cdot f_{o b j}\left(o_{i}^{T}, \hat{o}_{i}\right)}_{\text {Distillation loss }}
fobjComb(oigt,o^i,oiT)=Detection loss
fobj(oigt,o^i)+Distillation loss
λD⋅fobj(oiT,o^i)
学生网络的客观尺度分类函数为:
f
c
l
C
o
m
b
(
p
i
g
t
,
p
^
i
,
p
i
T
,
o
^
i
T
)
=
f
c
l
(
p
i
g
t
,
p
^
i
)
+
o
^
i
T
⋅
λ
D
⋅
f
c
l
(
p
i
T
,
p
^
i
)
f_{c l}^{C o m b}\left(p_{i}^{g t}, \hat{p}_{i}, p_{i}^{T}, \hat{o}_{i}^{T}\right)=f_{c l}\left(p_{i}^{g t}, \hat{p}_{i}\right)+\hat{o}_{i}^{T} \cdot \lambda_{D} \cdot f_{c l}\left(p_{i}^{T}, \hat{p}_{i}\right)
fclComb(pigt,p^i,piT,o^iT)=fcl(pigt,p^i)+o^iT⋅λD⋅fcl(piT,p^i)
其中,函数的第一部分对应于原始检测函数,而第二部分是目标比例蒸馏部分。按照类似的想法,学生网络的边界框坐标也使用目标性进行了缩放:
f
c
l
C
o
m
b
(
p
i
g
t
,
p
^
i
,
p
i
T
,
o
^
i
T
)
=
f
c
l
(
p
i
g
t
,
p
^
i
)
+
o
^
i
T
⋅
λ
D
⋅
f
c
l
(
p
i
T
,
p
^
i
)
f_{c l}^{C o m b}\left(p_{i}^{g t}, \hat{p}_{i}, p_{i}^{T}, \hat{o}_{i}^{T}\right)=f_{c l}\left(p_{i}^{g t}, \hat{p}_{i}\right)+\hat{o}_{i}^{T} \cdot \lambda_{D} \cdot f_{c l}\left(p_{i}^{T}, \hat{p}_{i}\right)
fclComb(pigt,p^i,piT,o^iT)=fcl(pigt,p^i)+o^iT⋅λD⋅fcl(piT,p^i)
一个大容量的教师网络为与背景对应的大多数候选框分配非常低的客观性值。基于客观性的缩放在单级检测器中作为蒸馏的过滤器,因为它为背景单元分配了一个非常低的权重。在教师网络中,像物体的前景区域具有较高的客观值,制定的蒸馏损失利用了教师对这些区域的知识。需要注意的是,损失函数保持不变,但对于蒸馏,我们只添加了教师的输出,而不是GT。训练时的损失函数为:
L
final
=
f
b
b
C
o
m
b
(
b
i
g
t
,
b
^
i
,
b
i
T
,
o
^
i
T
)
+
f
c
l
C
o
m
b
(
p
i
g
t
,
p
^
i
,
p
i
T
,
o
^
i
T
)
+
f
o
b
j
C
o
m
b
(
o
i
g
t
,
o
^
i
,
o
i
T
)
它考虑了分类化、边界盒回归和客观性的检测和精馏损失。它在所有的锚定盒和最后一个卷积特征映射的所有单元格位置上被最小化。
该loss设计下对应的实现代码如下所示
3.2 Feature Map-NMS
我们所面临的另一个挑战来自于单级物体探测器的固有设计。该网络被训练成从一个网格的单个锚盒中预测一个盒子,但在实践中,许多网格和锚盒最终会预测出图像中的同一物体。因此,NMS作为对象检测器架构中的后处理步骤。然而,NMS步骤应用于端到端网络架构之外,并在目标检测器的最后一个卷积层中表示了高度重叠的预测。当这些预测从教师网络转移到学生网络时,它会产生一个冗余的信息。因此,我们观察到,随着教师网络最终传递信息,上述蒸馏损失会导致高度重叠检测的性能损失。高度重叠检测对应的特征映射最终在相同的对象类和维度上传播大梯度,从而导致网络过拟合。
为了克服重叠检测引起的问题,我们提出了特征Map-NMS(FMNMS)。FM-NMS背后的思想是,如果KxK网格附近的多个候选对象对应于同一个类,那么它们很有可能对应于图像中的同一个对象。因此,我们只选择一个具有最高客观价值的候选框。在实践中,我们检查最后一层特征映射中类概率对应的激活,将同一类对应的激活设置为零。这个想法如图3所示,其中我们以检测的形式显示了教师网络的软标签。教师网络的最后一层预测了狗周围区域内的一些边界框。为了抑制重叠检测,我们选择了客观性值最高的检测框。在重叠的候选框中,最强的候选框被转移到学生网络中。使用两个单元格的想法如图4所示。在我们的实验中,我们使用了3×3的网格邻居。
教师网络在最后一层同时预测边界框坐标和类的概率。用蓝色和绿色表示的每一列对应N个检测,其中N是锚盒的数量。相邻的列通常会导致具有相同类标签的边界框高度重叠。所提出的FM-NMS只保留了相邻cell中最强的候选cell。这个候选框被作为软标签转移到学生网络中。
4. Effectiveness of data
最后,在本文中,我们研究了我们可以通过使用更多的训练数据来提高多少性能。
Labeled data 最简单的方法是为训练添加更多的带标注的训练数据。研究表明,在[37,22]中增加标注数据可以提高模型的性能。然而,早期的研究实验并没有对模型容量有限的限制。在这项工作中,我们将自己限制在一个简单的模型中,并分析是否通过添加添加更多的数据可以提高性能。
Unlabeled data 由于标注数据的可用性有限,我们利用未标记数据结合蒸馏损失。我们的方法背后的主要想法是在软标签和GT标签可用时同时使用它们。当GT不可用时,只使用教师网络的软标签。在实践中,当GT不存在时,我们只传播教师的部分损失,以及(2)-(4)中描述的损失的组合。由于目标函数无缝地集成了软标签和GT,它允许我们用标记数据和未标记数据的混合来训练一个网络。
5. Experiments on Object detection
我们在Pascal VOC 2007数据集[6]上进行了实验。该数据集由20个对象类和16K个训练图像组成。
5.1. Implementation Details
我们使用Darket框架[24]进行评估。在ImageNet [30]上训练的分类任务用于初始化。我们删除了预训练网络的最后两层,并在最后添加了额外的卷积层。为了进行检测,使用SGD对网络进行训练,前120个epoch的初始学习速率为10−3,后20个epoch的初始学习速率为10−4,最后20个epoch的初始学习速率为10−5。我们使用标准的训练策略,如0.9和0.0005权重衰减。在我们所有的实验中,批量大小都被设置为32。我们实验中输入图像的大小设置为416×416。在网络蒸馏实验中,我们将λD设为1,从而使蒸馏和检测损失的权重相等,但由于蒸馏部分按目标值的比例排列,蒸馏部分的最终权重总是小于检测损失。
5.2. Architecture
在本节中,我们将介绍不同体系结构配置的结果。首先,我们评估了feature map合并对基础架构的影响。不同图层组合的结果如表1所示。可以观察到,随着来自更多层的特征映射合并在一起,精度会提高。我们可以从这些结果中得出的另一个重要推论是,合并更高级的层会带来更大的改进,而不是网络的初始层。当前几个卷积层与最终的组合合并时,性能略有下降,这表明初始层捕获了相当基本的信息。表中的Conv11列对应于最后增加的1×1个卷积层,以增加网络的深度。这些层导致了0.5 mAP的增益,并提供了一种计算上高效的增加深度的方法。
我们还比较了两种不同的特征图合并方法的方法。在之前的大多数工作[22,17]中使用了max pool,而特征堆叠是一种不太常见的方法[26]。我们发现,特征叠加比最大池化可以获得更好的结果。它可以观察到所有组合的合并叠加获得更好的精度。
表2显示了对基线检测器的各种改进的速度。速度显示了一个Nvidia GTX 1080 GPU与8 GPU内存和16 GB CPU内存。实验是分批进行的,网络的小规模使我们有更大的批规模,也允许并行处理。鉴于GTX 1080并不是目前最强大的GPU,我们相信这些型号在更先进的GPU上会更快,比如Nvidia Titan X等。对于基线Tiny-Yolo,我们能够实现超过200 FPS的速度,正如原始作者所声称的那样,使用并行处理和批处理实现的DarkNet库。所有的速度测量都是在Pascal VOC 2007测试图像上进行的,我们显示了4952张图像的平均时间,它还包括在文件中写入检测结果的时间。从结果中可以看出,合并操作降低了检测器的速度,因为它产生了一个具有相当大量特征映射的层。在组合特征映射层上的卷积操作降低了检测器的速度。因此,可以观察到,减少特征图的数量对探测器的速度有很大的影响。我们可以通过将过滤器降低到512而不是1024来推动速度超过200。最后,在架构的最后添加更多的1×1层也需要相当低的计算开销。这些简单的修改导致的体系结构比可用的流行体系结构快一个数量级。
5.3. Distillation with labeled data
首先,我们描述了我们的老师和学生的网络。由于我们使用教师网络的软标签进行训练,因此我们只能使用基于Yolo的教师网络,该网络密集地预测检测作为最后一个卷积层的输出。对选择教师/学生网络的另一个限制因素是,它们应该具有相同的输入图像分辨率,因为软标签的转移需要相同大小的特征图。因此,我们选择具有Darknet-19基础架构的Yolo-v2作为教师。我们使用所提出的F-Yolo作为学生网络,因为它的计算量量很轻,而且非常快。为了研究更多标记数据的影响,我们只使用Pascal数据和Pascal和COCO数据的组合进行训练。对于Pascal,我们考虑2007年和2012年挑战的训练和验证集,对于COCO,我们选择至少有一个Pascal类别对象的训练图像。我们发现在COCO训练数据集中有65K个这样的图像。
为了研究教师网络对蒸馏训练的影响,我们还用两个不同的数据集来训练我们的教师模型: Pascal数据和COCO和Pascal的组合。这些教师网络的基线表现如表3所示。可以看出,简单地用COCO训练数据训练Yolov2,性能可以提高3.5分。有了这两位老师,我们想了解一个更准确的老师对学生表现的影响。
在我们的第一个实验中,我们比较了不同的策略来证明我们所提出的方法的有效性。我们介绍了单级探测器的两个主要创新:
-
客观尺度和FM-NMS。我们进行蒸馏,没有FM-NMS和目标缩放步骤。结果如表3所示。可以观察到,在没有FM-NMS步长的蒸馏过程中,蒸馏后的学生检测器的性能低于基线检测器。对于这两个教师网络,该网络的表现都有一个显著的下降。通过这些实验,我们发现FM-NMS是单级探测器蒸馏工作的关键因素。在没有客观尺度的实验中,我们再次观察到性能的下降,尽管性能的下降不是很高。
-
使用附加标注数据(COCO训练图像)的实验也显示出类似的趋势,从而验证了FM-NMS和对象缩放的重要性。然而,有趣的是,在较大的训练数据下,全蒸馏实验的性能有了显著的提高。利用COCO训练数据集获得2.7 mAP。随着更大的训练数据,软标签可以捕获更多关于对象的信息,如图像中出现的部分。
我们还可以观察到,随着训练数据的增加,基线检测器的性能显著提高。这表明,我们的轻量级模型有能力学习更多的信息,并提供了更多的训练样本。通过蒸馏损失和额外的标注数据,提出的检测器在超过200 FPS的速度下达到67 mAP。
令人惊讶的是,对于一个固定的学生来说,教师探测器在训练中并没有起到至关重要的作用。当结合使用VOC和COCO数据时,COCO老师的表现比VOC老师更差。我们怀疑很难评价教师质量的影响,因为教师表现的差异并不大(4mAP)。
我们在表4中展示了不同类别的Pascal VOC 2007测试集的检测器性能。将提出的F-Yolo(仅经过结构修改)和D-Yolo(结构改变蒸馏损失)的性能与原来的Yolo和Yolov2进行了比较。有趣的是,随着蒸馏损失和更多的数据,对于瓶子和鸟等小物体有一个显著的改善(10 AP)。在图5中所示的一些样本图像中,Tiny-Yolo和所提出的方法之间的性能差异显然是接近的。
5.4. Unlabeled data
以往将COCO和VOC数据相结合的实验表明,F-Yolo具有具有更多训练数据的学习能力。在本节中,我们将研究我们的模型可以从未标记的数据中学到多少东西。在本实验中,我们通过增加训练集中的未标记数据来评估检测器的准确性。我们只使用来自VOC数据集的标记数据,并使用来自COCO的没有标签的图像作为附加数据。有标记的图像和未标记的图像被组合在一起用于训练,对于未标记的图像,我们只传播从教师软标签评估的损失。我们用不同数量的未标记图像(16K、32K、48K和65K)训练网络,以评估未标记数据对学生网络的影响。结果如表5所示。可以观察到,有了额外的数据,基线检测器的性能显著提高(3-4 mAP)。随着更多的未标记数据的加入,检测器的性能有所提高。
将未标注数据和COCO标注数据的性能变化分别进行比较,以理解训练中标注的重要性是很有趣的。使用完整的COCO数据,我们的模型获得64.2mAP(表3学生基线),使用Yolo-v2作为教师网络和未标记的COCO图像,模型获得62.3 mAP。这些结果表明,虽然注释很重要,但我们可以通过添加更多的未标记训练数据,通过使用准确的教师网络来显著提高性能。
最后,我们比较了所提的蒸馏方法与竞争的蒸馏方法[3]的性能。蒸馏的竞争方法采用了Faster-RCNN框架,这是一个两级检测器,而我们的方法是专门为一个单阶段检测器设计的。结果如表6所示。并将其性能与以下架构进行了比较:
Alexnet [19],Tuckernet[18],VGG-M [32],使用VGG-16网络[32]蒸馏。可以观察到,所提出的蒸馏网络比基于RCNN的探测器快一个数量级。在参数数量方面,所提出的方法与,Tuckernet网络相当,然而,它比这里显示的所有基于Faster-RCNN的网络要快得多。这些方法的加速可以归因于单级检测器的高效设计和为速度而优化的底层网络以及用于训练的额外数据。结果表明,这些修改导致增加约9 mAP,同时比它快得多。
6. Conclusions
在本文中,我们开发了一种高效和快速的目标检测架构。我们研究了网络架构、损失函数和训练数据的作用,以平衡速度性能的权衡。对于网络设计,基于之前的工作,我们确定了一些简单的想法来保持计算的简单性,并遵循这些想法。我们开发一个轻量级网络。对于训练,我们展示了蒸馏是一个强大的想法,通过精心设计的组件(FM-NMS和目标尺度损失),它提高了轻量级单级目标检测器的性能。最后,在蒸馏损失的基础上,我们探索了可进行训练的未标记数据。实验表明,本文提出的设计原理可以用于开发比最先进的目标检测器快一个数量级的目标检测器,同时实现了合理的性能。
评论记录:
回复评论: