@(Aaron) [深度学习, 目标检测]
主要内容包括:
- 网络结构
- 预测细节
- 损失函数
针对YOLO v1的不足,2016年诞生了YOLO v2。相比起第一个版本,YOLO v2预测更加精准(Better)、速度更快(Faster)、识别的物体类别也更多(Stronger),在VOC 2007数据集上可以得到mAP 10%以上的提升效果。
YOLO v2从很多方面对YOLO做出了改进,大体可以分为网络结构的改善、先验框的设计及训练技巧3个方面。
1、网络结构的改善
YOLO v2对于基础网络结构进行了多种优化,提出了一个全新的网络结构,称之为DarkNet。原始的DarkNet拥有19个卷积层与5个池化层,在增加了一个Passthrough层后一共拥有22个卷积层,精度与VGGNet相当,但浮点运算量只有VGGNet的1/5左右,因此速度极快,具体结构如图1所示。
相比起v1版本的基础网络,DarkNet进行了以下几点改进:
- BN层:DarkNet使用了BN层,这一点带来了2%以上的性能提升。BN层有助于解决反向传播中的梯度消失与爆炸问题,可以加速模型的收敛,同时起到一定的正则化作用。BN层的具体位置是在每一个卷积之后,**函数LeakyReLU之前。
- 用连续3×3卷积替代了v1版本中的7×7卷积,这样既减少了计算量,又增加了网络深度。此外,DarkNet去掉了全连接层与Dropout层。
- Passthrough层:DarkNet还进行了深浅层特征的融合,具体方法是将浅层26×26×512的特征变换为13×13×2048,这样就可以直接与深层13×13×1024的特征进行通道拼接。这种特征融合有利于小物体的检测,也为模型带来了1%的性能提升。
- 由于YOLO v2在每一个区域预测5个边框,每个边框有25个预测值,因此最后输出的特征图通道数为125。其中,一个边框的25个预测值分别是20个类别预测、4个位置预测及1个置信度预测值。这里与v1有很大区别,v1是一个区域内的边框共享类别预测,而这里则是相互独立的类别预测值。
2、先验框的设计
YOLO v2吸收了Faster RCNN的优点,设置了一定数量的预选框,使得模型不需要直接预测物体尺度与坐标,只需要预测先验框到真实物体的偏移,降低了预测难度。关于先验框,YOLO v2首先使用了聚类的算法来确定先验框的尺度,并且优化了后续的偏移计算方法,下面详细介绍这两部分。先验框的设计为YOLO v2带来了7%的召回率提升。
2.1 聚类提取先验框尺度
Faster RCNN中预选框(即Anchor)的大小与宽高是由人手工设计的,因此很难确定设计出的一组预选框是最贴合数据集的,也就有可能为模型性能带来负面影响。
针对此问题,YOLO v2通过在训练集上聚类来获得预选框,只需要设定预选框的数量k,就可以利用聚类算法得到最适合的k个框。在聚类时,两个边框之间的距离使用式(2.1)计算,即IoU越大,边框距离越近。
在衡量一组预选框的好坏时,使用真实物体与这一组预选框的平均IoU作为标准。值得一提的是,这一判断标准在手工设计预选框的方法中也可以使用。
至于预选框的数量选取,显然数量k越多,平均IoU会越大,效果会更好,但相应的也会带来计算量的提升,YOLO v2在速度与精度的权衡中选择了预选框数量为5。
2.2 优化偏移公式
有了先验框后,YOLO v2不再直接预测边框的位置坐标,而是预测先验框与真实物体的偏移量。在Faster RCNN中,中心坐标的偏移公式
如式(2-2)所示。
公式中、、及代表Anchor的宽高与中心坐标,与是模型预测的Anchor相对于真实物体的偏移量,经过计算后得到预测的物体中心坐标x和y。
YOLO v2认为这种预测方式没有对预测偏移进行限制,导致预测的边框中心可以出现在图像的任何位置,尤其是在训练初始阶段,模型参数还相对不稳定。例如是1与-1时,预测的物体中心点会有两个宽度的差距。
因此,YOLO v2提出了式(2-3)所示的预测公式:
公式中参数的意义可以与图2.1结合进行理解,图中实线框代表预
测框,虚线框代表先验框。
3、损失函数与正负样本的选取
关于正、负样本的选取,YOLO v2基本保持了之前的方法,其基本流程如下:
- 首先利用式(2-3),将预测的位置偏移量作用到先验框上,得到预测框的真实位置。
- 如果一个预测框与所有真实物体的最大IoU小于一定阈值(默认为0.6)时,该预测框视为负样本。
- 每一个真实物体的中心点落在了某个区域内,该区域就负责检测该物体。具体做法是将与该物体有最大IoU的预测框视为正样本。
确定了正样本与负样本后,最后是网络损失的计算。由于利用了先验框,YOLO v2的损失函数也相应的进行了改变,公式如式(3-1)所示。
损失一共有5项组成,意义分别如下:
- 第一项为负样本的置信度损失,公式中表示最大IoU小于阈值,即负样本的边框,是负样本损失的重,为置信度。
- 第二项为先验框与预测框的损失,只存在于前12800次迭代中,目的是使预测框先收敛于先验框,模型更稳定。
- 第三项为正样本的位置损失,表示筛选出的正样本,为权重。
- 后两项分别为正样本的置信度损失与类别损失,为置信度的真值。
在计算正、负样本的过程中,虽然有些预测框的最大IoU可能小于0.6,即被赋予了负样本,但如果后续是某一个真实物体对应的最大IoU的框时,该预测框会被最终赋予成正样本,以保证recall。
有些预测框的最大IoU大于0.6,但是在一个区域内又不是与真实物体有最大IoU,这种预测框会被舍弃掉不参与损失计算,既不是正样本也不是负样本。
4、训练技巧
除了模型上的改进,YOLO v2也是一个充满工程技巧的检测模型,下面从两个方面介绍其工程上的特点。
4.1 多尺度训练
由于移除了全连接层,因此YOLO v2可以接受任意尺寸的输入图片。在训练阶段,为了使模型对于不同尺度的物体鲁棒,YOLO v2采取了多种尺度的图片作为训练的输入。
由于下采样率为32,为了满足整除的需求,YOLO v2选取的输入尺度集合为{320,352,384,…,608},这样训练出的模型可以预测多个尺度的物体。并且,输入图片的尺度越大则精度越高,尺度越低则速度越快,因YOLO v2多尺度训练出的模型可以适应多种不同的场景要求。
4.2 多阶段训练
由于物体检测数据标注成本较高,因此大多数物体检测模型都是先利用分类数据集来训练卷积层,然后再在物体检测数据集上训练。例如,YOLO v1先利用ImageNet上224×224大小的图像预训练,然后在448×448的尺度上进行物体检测的训练。这种转变使得模型要适应突变的图像尺度,增加了训练难度。
YOLO v2针对以上问题,优化了训练过程,采用如图4.1所示的训练方式。
总结
总体上来看,YOLO v2相较于之前的版本有了质的飞跃,主要体现在吸收了其他算法的优点,使用了先验框、特征融合等方法,同时利用了多种训练技巧,使得模型在保持极快速度的同时大幅度提升了检测的精度。YOLO v2已经达到了较高的检测水平,但如果要分析其不足的话,大体有以下3点:
- 单层特征图:虽然采用了Passthrough层来融合浅层的特征,增强多尺度检测性能,但仅仅采用一层特征图做预测,细粒度仍然不够,对小物体等检测提升有限,并且没有使用残差这种较为简单、有效的结构。
- 受限于其整体结构,依然没有很好地解决小物体的检测问题。
- 太工程化:YOLO v2的整体实现有较多工程化调参的过程,尤其是后续损失计算有些复杂,不是特别“优雅”,导致后续改进与扩展空间不足。