EfficientDet
现行构建目标检测模型的思路
随着迁移学习概念的兴起和普及,目标检测和图像分类这两个任务具有一定的相似性,因为可以将分类的网络,比如VGG、ResNet等,用来做特征提取器。这一部分,我们就称其为backbone。
所谓的backbone,直接翻译过来就是“骨干网络”,非整体网络。因为分类与检测非等价。OD(Object Detection)需要对物体进行定位和分类,仅仅是微调网络是无法完成OD任务的,在后面加一些网络层,让这些额外加进来的网络层去弥补分类网络无法定位的先天缺陷。
具体做法就是在检测任务的数据集对分类网络进行微调。
脉络就非常清晰了:分类网络迁移过来,用作特征提取器(通过在OD数据集上进行微调,并且与后续的网络的共同训练,使得它提取出来的特征更适合OD任务),后续的网络负责从这些特征中,检测目标的位置和类别。那么,我们就将分类网络所在的环节称之为“Backbone”,后续连接的网络层称之为“Detection head”。
为了更地检测各种大小的物体,一些多尺度技术提了出来,最经典的,莫过于《Feature Pyramid Networks for Object Detection》提出的FPN结构,在不同的尺度(实际上就是不同大小的feature map)上去提取不同尺度的信息,并进行融合,充分利用好backbone提取的所有的特征信息,从而让网络能够更好地检测物体。
建模背景
目标检测模型越来越大,计算量也越来越大,而一些模型提高了效率但同时也降低了精度。EfficientDet的目的就是为了同时满足高精度和高效率,达到了低参数量,模型小。
高效目标检测算法设计的两个主要挑战就是:(1)多尺度特征融合;(2)模型缩放。
前者是为了更有效的检测,后者是为了让模型更小更便于落地应用。
EfficientDet的结构
特征提取使用EfficientNet,以此为backbone。
图像的特征有很多,作用也不相同,因此应该对不同的特征赋权。使用BiFPN作为为多尺度特征融合的解决方案。对分类层的分类特征进行加权融合,作为类别预测网络和锚框定位网络的输入。
具体的框架如下图:
多尺度特征融合
传统的top-down FPN只有自顶向下单向信息流,PANet增加了自底向上的信息流,NAS-FPN通过大量计算和搜索有更复杂的信息流。本文对不同FPN实验发现,PANet的效果最佳,但参数量计算量也较大(见后文Ablation实验)。本文在PANet的基础上提出三步优化[2]:1)去掉没有进行融合的单一特征图参数学习(这里感觉本文对PANet是不是有些误解,个人理解PANet提出的就是简化的版本);2)同一层中增加从原始节点到输出节点的短接;3)堆叠FPN结构。 =>BiFPN
模型缩放
模型缩放,即模型复杂度调整。
【需补充】 EfficientNet 时间不足,未去深度了解,只知道是需要在三个维度进行同一缩放,效果较好,提出了一个同一缩放的复合参数$\Phi$。
在EfficientDet基础上,提出了OD模型复杂度联合调整方法,联合调整了backbone、FPN、prediction网络的depth、width、resolution。
scaling 是什么意思?
对CNN模型做三种缩放维度:depth, width, and resolution. 直观的说,depth scaling是调整网络的深度,width scaling是调整卷积层中feature map的数量,resolution scaling是调整输入图像分辨率的大小。
与EfficientNet不同,由于参数多采用网格搜索计算量大,EfficientDet采用启发式的调整策略。通过不同的backbone选取,对模型参数量进行比对。
训练细节
采用SGD,momentum=0.9,weight decay=4e-5,学习率采用5%步数来warmup从0到0.08,然后cosine decay(cosine式衰减学习率)。每层卷积后加batch normalization,batch norm decay 0.997 and epsilon 1e-4。batch size=128在32个TPU。采用focal loss,参数α=0.25,γ=1.5。anchor ratio是{1/2,1,2}。
参考
weight decay(权值衰减):可以防止过拟合,在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。
momentum是梯度下降法中一种常用的加速技术,加速参数收敛的过程。
batch normalization批标准化是指在神经网络中激活函数的前面,将按照特征进行normalization。因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0、方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。所以BN的好处有三点:
- 提高梯度在网络中的流动。Normalization能够使特征全部缩放到[0,1],这样在反向传播时候的梯度都是在1左右,避免了梯度消失现象。
- 提升学习速率。归一化后的数据能够快速的达到收敛。
- 减少模型训练对初始化的依赖。
深入理解Batch Normalization批标准化
什么是批标准化 (Batch Normalization)
【未弄懂,需细看】参考
learning rate warm up:训练初期由于离目标较远,一般需要选择大的学习率,但是使用过大的学习率容易导致不稳定性。所以可以做一个学习率热身阶段,在开始的时候先使用一个较小的学习率,然后当训练过程稳定的时候再把学习率调回去。比如说在热身阶段,将学习率从0调到初始学习率。举个例子,如果我们准备用m个batches来热身,准备的初始学习率是n,然后在每个$batch_i,i<=i<=m$
,将每次的学习率设为$in/m$
。
- 有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳
- 有助于保持模型深层的稳定性
cosine learning decay CNN训练分类任务的优化策略
Focal Loss 就是一个解决分类问题中类别不平衡、分类难度差异的一个 loss
讨论链接
如何更好地理解「Focal Loss」
实验
用不同的EfficientNet为backbone生成的EfficientDet与其他网络进行对比。小网络EfficientDet-D0和YOLOv3差不多精度,计算量少28倍;EfficientDet-D1和RetinaNet、MaskRCNN差不多精度,参数量少8倍,计算量少25倍。总的来说,EfficientDet精度速度双丰收,最高精度达到51.0 mAP,登顶COCO检测榜单。
Ablation experiment
Ablation experiment, 消融实验就是用来告诉读者整个模型里面的关键部分到底起了多大作用,用更直观的数据来说明算法的有效性。
分别替换EfficientNet和BiFPN,结果看出两者都显著提升mAP。(BiFPN结构比FPN要更复杂,参数量少应该是因为采用了depthwise conv)
将各种FPN分别进行五次实验,对比看出设计的BiFPN和PANet效果相当,使用更少的参数量和计算量,使用学习的加权和会有一点提升。
w/o=without,w/=with
权重归一化时采用线性比Softmax速度更快,达到同等精度。
联合调整策略明显优于所有单独调整的策略。
亮点总结
最大的亮点在于提出了目标检测网络联合调整复杂度的策略,从而在COCO上达到51.0 mAP的最优成绩。一部分原因是EfficientNet,而EfficientNet的Baseline是通过NAS得到的。
第二亮点,堆叠FPN,通过堆叠FPN,BiFPN的设计有效,增加短接以及学习加权和,能达到很好效果。
Benchmark vs. Baseline 参考
benchmark一般是和同行中比较牛的算法比较。benchmark的性能已经被广泛研究,人们对它性能的表现形式、测量方法都非常熟悉,因此可以作为标准方法来衡量其他方法的好坏。state-of-the-art(SOTA)的算法表明其性能在当前属于最佳性能。baseline一般是自己算法优化和调参过程中自己和自己比较,目标是越来越好。baseline有一个自带的含义就是“性能起点”,指的是对照组,基准线,就是你这个实验有提升,那么你的提升是对比于什么的提升,被对比的就是baseline。
NAS (Neural Architecture Search) 神经架构搜索
自己设计,代价昂贵,也有可能非当前最先进。NAS是一种自动设计神经网络的技术,可以通过算法根据样本集自动设计出高性能的网络结构,可以有效的降低神经网络的使用和实现成本。NAS的原理是给定一个称为搜索空间的候选神经网络结构集合,用某种策略从中搜索出最优网络结构。神经网络结构的优劣即性能用某些指标如精度、速度来度量,称为性能评估。
搜索空间,搜索策略,性能评估策略是NAS算法的核心要素。搜索空间定义了可以搜索的神经网络结构的集合,即解的空间。搜索策略定义了如何在搜索空间中寻找最优网络结构。性能评估策略定义了如何评估搜索出的网络结构的性能。
在搜索过程的每次迭代中,从搜索空间产生“样本”即得到一个神经网络结构,称为“子网络”。在训练样本集上训练子网络,然后在验证集上评估其性能。逐步优化网络结构,直至找到最优的子网络。
![]()
mAP的具体解释可见本站【目标检测评价指标.md】这篇文章。
更近一步
[1]目标检测实战资料贴https://zhuanlan.zhihu.com/c_1178388040400302080
HOG全称histogram of oriented gradients。如果翻译成中文就是方向梯度直方图。它可以用来表示图像的物体特征,因此能够检测出这类物体。参考