YOLO系列目标检测算法-YOLOv3

YOLO系列目标检测算法目录 - 文章链接


本文总结:

  1. 相比于YOLOv2改动很小,模型稍微变大但准确率更高;
  2. 类别预测改用逻辑回归,不再使用softmax,也就是说,YOLOv2预测的类别之间是相斥的,YOLOv3中各类别之间互不相关,例如同一个目标可以同时分类为“女人”和“人”,损失函数使用BCE loss;
  3. 多尺度预测,使用3个不同尺度的特征图,分别预测3种检测结果,能够更好的检测各种尺度的目标;
  4. 特征提取网络新增残差连接,层数扩大到53层,命名为Darknet-53;
  5. 尝试添加其他几种方法技巧到YOLOv2中,发现并不work,这些方法包括,直接预测anchor偏移量、线性函数预测x,y坐标而不使用逻辑回归、使用Focal loss、双重IoU阈值和真值分配方法;
  6. 使用AP0.5评价指标,YOLOv3比其他检测系统有显著的优势,它更快更好;
  7. 分析了评价指标IoU阈值的选取,“人类很难区分0.3和0.5的差距!如果人类很难分辨出差异,使用AP0.5-0.95这又有什么重要的呢?”

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。



**YOLO系列目标检测算法-YOLOv3**

2018.4.8 YOLOv3:《YOLOv3: An Incremental Improvement》

1. 简介

  YOLOv3在YOLOv2基础上做了一点小小的改动,网络变得稍大了一点但更加准确。

2. 主要idea

2.1 边界框预测

在这里插入图片描述

  在YOLOv2中,网络预测4个框的坐标 t x , t y , t w , t h t_x,t_y,t_w,t_h tx,ty,tw,th,如果单元格与图像左上角的偏移量为 c x , c y c_x,c_y cx,cy,先验框的宽度和高度是 p w , p h p_w,p_h pw,ph,则预测值对应于:
在这里插入图片描述
  训练的使用的是平法差loss,如果某个坐标的真值为 t ∗ ^ \hat{t_*} t^,则梯度为真值(从GT框计算得到)减去我们的预测值: t ∗ ^ − t ∗ \hat{t_*}-t_* t^t。通过转换上述方程,可以很容易地计算出该真值。

  YOLOv3使用逻辑回归预测每个边界框的objectness分数。如果先验框与GT目标的重叠度大于之前的任何其他边界框,则该值应为1。如果先验框不是最好的,但与GT目标的重叠度超过了设定的阈值(像Faster R-CNN一样),则忽略该预测结果,本文设置的阈值为0.5。 与Faster R-CNN不同,我们的系统只为每个GT目标分配一个先验框。如果先验框未指定给GT目标,则坐标或类预测没有loss,只有objectness有loss。

2.2 类别预测

  每个框使用多标签分类预测可能包含的类。YOLOv3没有使用softmax,因为我们发现它是不必要的,而只是使用独立的逻辑分类器。在训练期间,我们使用binary cross-entropy loss (BCE Loss)进行类别预测。

  当我们转向更复杂的领域,如Open Images Datasets时,此公式会有所帮助。在这个数据集中,有许多重叠的标签(即女性和人)。使用softmax强加了一个假设,即每个框都只有一个类,但通常情况并非如此。多标签方法可以更好地建模数据。

2.3 跨尺度预测

在这里插入图片描述

  YOLOv3以3种不同的比例预测框。使用类似于特征金字塔网络的概念从这些尺度中提取特征。从基本特征提取器中,添加了几个卷积层,最后一个预测了三维张量编码的边界框、objectness和class。在对COCO的实验中,在每个尺度上预测了3个box,因此张量是N×N×[3∗(4+1+80),用于4个边界框偏移量、1个objectness预测和80个类别预测。

  接下来,从前面的两层中提取特征图,并将其上采样放大2倍。还从网络早期层中获取了一个特征图,并使用串联将其与上采样特征图合并。 这种方法使得从上采样的特征中获取更有意义的语义信息,并从早期的特征映射中获取更细粒度的信息。然后,再添加一些卷积层来处理这个组合的特征图,并最终预测出一个类似的张量。

  YOLOv3再次进行相同的设计,以预测另一尺度的box。 因此,对第三尺度的预测得益于所有先前的计算以及网络早期的细粒度特征。

  仍然使用k-means聚类来确定的先验框。只是随意选择了9个簇和3个尺度,然后在尺度上平均划分簇。在COCO数据集上,9个簇为:(10×13); (16×30); (33×23); (30×61); (62×45); (59×119); (116 × 90); (156 × 198); (373 × 326).

  下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。
在这里插入图片描述

2.4 特征提取网络

  新设计了特征提取网络,结合YOLOv2的Darknet19和残差网络结构,新的网络使用连续的3×3和1×1卷积层,现在新增一些shortcut连接,并且模型增大了,共有53个卷积层,所以称之为Darknet-53!
在这里插入图片描述
  这个新网络比Darknet-19强大得多,但仍比ResNet-101或ResNet-152更高效。以下是在ImageNet上的一些结果:
在这里插入图片描述
  Darknet-53还实现了每秒最高的浮点运算。这意味着网络结构可以更好地利用GPU,使其评估更高效,从而更快。这主要是因为ResNets的层太多,效率不高

2.5 训练策略

  仍然使用完整的图像训练,没有使用硬负样本采用或任何其他东西。使用多尺度训练、大量的数据增强、BN以及所有标准的方法。

3. YOLOv3

  YOLOv3整体的网络结构如下图所示:
在这里插入图片描述

  YOLOv3表现,对比结果见表3。就COCO的奇怪平均AP度量方法而言,它与SSD变体相当,但速度快了3倍。但在这种评价指标下,它仍然落后于其他像RetinaNet这样的模型。
在这里插入图片描述
  然而,当使用“旧”的检测指标IOU=0.5(或图表中的AP50)时,YOLOv3非常强大。它几乎与RetinaNet不相上下,远远高于SSD变体。这表明YOLOv3是一种非常强大的检测器,擅长为物体制作适当的框。然而,随着IOU阈值的增加,性能显著下降,这表明YOLOv3很难使框与目标完全对齐。

  过去,YOLO检测小目标表现太好。然而,现在我们看到了这一趋势的逆转。通过新的多尺度预测,可以看到YOLOv3具有相对较高的APs性能。然而,它在中型和大型目标上的性能相对较差。还需要更多的调查来弄清真相。

  当在AP50度量上绘制精度与速度的关系图时(见图3),可以看到YOLOv3比其他检测系统有显著的优势。也就是说,它更快更好。
在这里插入图片描述

4. 没有work的技术

  除了以上技术之外,还在YOLOv3上尝试了很多方法,很多都不起作用,这也是很重要的。

  • 预测anchor box的x,y偏移量
    尝试使用正常的anchor box预测机制来预测x,y偏移,即使用线性激活预测框宽度或高度的倍数。发现这种方法降低了模型的稳定性,并且效果不佳。
  • 线性预测x,y而不是使用逻辑回归
    尝试使用线性函数直接预测x,y偏移而不是逻辑回归,这会导致mAP下降几个点。
  • Focal loss
    尝试使用Focal loss,但它使mAP下降了约2%。YOLOv3可能已经对Focal loss试图解决的问题具有了鲁棒性,因为它有单独的objectness预测和类别预测。因此,对于大多数例子来说,类别预测没有损失?还是什么?不能完全确定。
  • 双重IoU阈值和真值分配
    Faster R-CNN在训练期间使用两个IOU阈值。如果预测与GT重叠大于0.7,这就是一个正样本,在[0.3−0.7]之间,就被忽略了,对于小于0.3的,就是一个负样本。尝试了类似的策略,但没有取得好的结果。

目前来说YOLOv3方案非常不错,至少看起来是局部最优的。这些技术中的一些可能最终会产生好的结果,也许它们只是需要一些调整来稳定训练。

5. 评估指标的分析

  YOLOv3是一个很好的检测器,快、准确,虽然在AP0.5-AP0.95这种评价指标上不是最优的,但是在AP0.5指标上是非常好的。
  为什么要改变指标呢? 最初的COCO论文只有一句话:“评估服务器完成后,将添加评估指标的完整讨论”。Russakovsky等人报告说,人类很难区分0.3和0.5的差距!“训练人类目视检查差别为0.3的边界框,并将其与差别为0.5的边界框区分开来是特别困难的”。如果人类很难分辨出差异,这又有什么重要的呢?

猜你喜欢

转载自blog.csdn.net/qq_39707285/article/details/127070870