Object detection at 200 Frames Per Second
F-YOLO
Title
Object detection at 200 Frames Per Second
Link
https://arxiv.org/pdf/1805.06361.pdf
Introduction
Inception、VGG、Resnet,高计算复杂度和额外空间。
为了设计一个速度快且高效的目标检测器,我们开始思考:深度学习目标检测的本质单元是什么?我们怎样才能定做开发一个网络结构,实现需求?
- 网络结构
- 损失函数
- 训练集
网络结构是影响速度和准确率的一个重要因素。最近的网络趋向于更深的结构(VGG、Resnet),可以提升准确率,但也提高了计算复杂度。对网络进行压缩剪枝,可以获得较好的效果。
改进训练方案
我们考虑了网络蒸馏,训练一个小型网络学习大型网络的知识。
尽管最近已经有将这种思想运用到目标检测的先例,但我们的工作仍然有重要贡献。
- 首先,我们蒸馏思想运用到,单阶段检测器YOLO。
- 目标检测涉及了NMS,在NMS之前,网络最后一层由探测区域的稠密**信息组成。如果直接将蒸馏应用到探测器,会导致过拟合和性能降低。因此,为了将蒸馏思想应用到探测器,我们设计了FeatureMap-NMS,抑制了重叠检测对应的**数据。
- 通过强调teacher detection中具有较高客观价值的检测方法,将问题转化为一个客观尺度的蒸馏损失问题。
实验结果表明,该方法在保持低复杂度的同时,有效地提高了系统的性能。
最后我们研究了,在目标检测上下文中“数据的效用”。
不同点:
- 从教师模型的卷积输出的feature map提取soft label
- 客观尺度和蒸馏权重,允许控制教师模型标签的权重
此外,我们的训练损失公式无缝地集成了蒸馏损失的检测,使网络能够从标记和未标记数据的混合中学习。
据我们所知,这是第一项通过联合使用现有和未标记的数据来训练“深度学习”探测器的工作
Architecturecustomizations
最近很多模型都依赖于基础结构的深度来实现更好效果。
为了发展一个更快的探测器,我们选择一个有适当的准确率的高速探测器,Tiny-Yolo,as our baseline。它是一个简化版的YOLO v2,相对于YOLO v2减少了卷积层,沿用损失函数和优化策略比如batch normalization,dimension cluster和anchor box。
Dense feature map with stacking,堆叠稠密的特征图
concat前几层的feature map到最后一个主要卷积层。
Deep but narrow,有深度但很狭窄
减少卷积核数量,在最后一个主要卷积层之后,添加一些1×1的卷积,用于降维
Overall architecture,整体架构
设计了轻量级目标检测网络架构,对比tiny-YOLO,提升了5%的mAP,速度较tiny-YOLO有20%的提升。
命名为F-YOLO
Distillation loss for Training
通过训练小网络,学习大网络的知识的过程,就是蒸馏的过程。
Objectness scaled Distillation
直接在Yolo算法中引入distillation loss会有一些问题,因为目前的network distillation算法主要针对的是RCNN系列算法。对于two stage的object detection算法而言,其最后送给检测网络的ROI数量是很少的,而且大部分都是包含object的bbox,因此针对这些bbox引入distillation loss不会有太大问题。但是对于Yolo这类one stage算法而言,假设feature map大小是13×13,每个grid cell预测5个bbox,那么一共就会生成13×13×5=845个bbox,而且大部分都是背景(background)。如果将大量的背景区域传递给student network,就会导致网络不断去回归这些背景区域的坐标以及对这些背景区域做分类,这样训练起来模型很难收敛。
因此,作者利用Yolo网络输出的objectness对distillation loss做一定限定,换句话说,只有teacher network的输出objectness较高的bbox才会对student network的最终损失函数产生贡献,这就是objectness scaled distillation。
Feature Map-NMS
NMS是object detection算法中常用的后处理算法,用来去除重复预测框,传统的NMS算法和网络结构的训练是独立的。如果不做NMS,直接将teacher network的预测框输出给student network,则会导致student network接收到的object相关的loss会非常大,这样训练几轮以后就会对这些object过拟合了。因此这里采取了类似NMS算法的feature map NMS进行重复框进行去除。
首先在Yolo算法中,最后的输出层中每个grid cell的维度是1×1×(N×(K + 5)),也就是图中的蓝色或绿色三维矩形条,矩形条的长度就是N×(K + 5),其中N表示bbox的数量,K表示分类的类别数,5表示4个坐标值和1个objectness score。grid cell的数量就是输出层的feature map的宽高乘积。FM-NMS算法的假设是假如几个相邻的grid cell所预测bbox的类别一样,那么这些bbox极有可能预测的是同一个object。基于这样的假设或者说是观察到的现象,FM-NMS算法的做法是:每次取3×3个相邻的grid cell,对这9个grid cell中预测类别相同的bbox的得分(objectness value)进行排序,最后只选择得分最高的那个bbox传给后续的student network。Figure4是对2个grid cell做FM-NMS的示意图。