本文最后更新于:2020年11月13日 上午

摘要

我们给YOLO提供一些更新! 我们做了一些小的设计更改以使其更好。 我们也训练了这个非常庞大的新网络。它比上次(YOLOv2)稍大一些,但更准确。它仍然很快,所以不用担心。在320×320的输入下,YOLOv3只需运行22.2ms,获得28.2的mAP,像SSD一样准确,但速度快三倍。当我们看看老的0.5 IOU mAP检测指标时,YOLOv3是相当不错的。在Titan X上,它在51 ms内实现了57.9的AP50,与RetinaNet在198 ms内实现的57.5 AP50对比,性能相似但速度快3.8倍。与往常一样,所有代码均在https://pjreddie.com/yolo/。

1.介绍

有时候,一年你主要只是在打电话,你知道吗?今年我没有做很多研究。我在Twitter上花了很多时间。玩了一下GAN。去年我留下了一点点的动力[10] [1];我设法对YOLO进行了一些改进。但是诚然,没有什么比这超级有趣的了,只是一小堆(bunch)改变使它变得更好。我也帮助了其他人的做一些研究。

实际上,这就是今天把我们带到这里的原因。我们有一个付印截止日期,我们需要引用我对YOLO所做的一些随机更新,但我们没有源头。因此,为技术报告做准备!

关于技术报告的好处是他们不需要介绍,你们都知道我们为什么来到这里。因此,介绍部分的结尾将为论文剩余部分进行导引。首先我们会告诉你YOLOv3做了什么。然后我们会告诉你我们是怎么做的。我们还会告诉你我们尝试过的一些没有奏效的事情。最后,我们将考虑这一切意味着什么。

2.详细内容

这里是YOLOv3的详细内容:我们主要从其他人那里获得好点子。我们也训练了一个比其他人更好的新分类器网络。我们将带您从头开始学习整个系统,以便您完全理解所有内容。

2.1 边界框预测

遵循YOLO9000,我们的系统使用维度聚类(dimension clusters )作为锚盒(anchor boxes)来预测边界框[13]。网络为每个边界框预测4个坐标,tx,ty,tw,th。 如果单元格从图像的左上角偏移了(cx,cy)并且先验边界框的宽度和高度为pw,ph,则预测对应于:

image-20200719213048979

在训练期间,我们使用平方误差损失的总和。如果一些坐标预测的真值是t^*,则我们的梯度是用真值(由ground box计算得到)减去我们的预测:t^*-t*。 通过反转上面的方程可以很容易地计算出这个真值。

YOLOv3使用逻辑回归预测每个边界框的objectness score。如果某个边界框的先验与真值的重合率比其他先验边界框高,那么该边界框的objectness score分值为1。如果某个边界框的先验不是最好的,但是确实与真值重叠了一定的阈值以上,我们会和[17]R-CNN一样,忽略该预测。我们将这个阈值设为0.5。与[17]R-CNN不同,我们的系统为每个真值对象分配一个先验边界框。如果没有将边界框先验分配给真值对象,则不会对坐标或类预测造成任何损失,而只会引起objectness score损失。

YOLO V3 模型里有个objectness标签,开始我也是一脸懵逼。查阅资料后总结如下: objectness可以具象化理解为“置信度”;objectness对应的是布尔值类型的二分类标签通常是1和0(也有-1),理解成对应True和false逻辑值。 由于每个真实框只对应一个objectness标签为正的预测框,如果有些预测框跟真实框之间的IoU很大,但并不是最大的那个,那么直接将其objectness标签设置为0当作负样本,可能并不妥当。为了避免这种情况,YOLO-V3算法设置了一个IoU阈值iou_thresh,当预测框的objectness不为1,但是其与某个真实框的IoU大于iou_thresh时,就将其objectness标签设置为-1,不参与损失函数的计算。

2.2 类别预测

每个框使用多标签分类来预测边界框可能包含的类。我们不使用softmax,因为我们发现它对于高性能没有必要,相反,我们只是使用独立的逻辑分类器。 在训练过程中,我们使用二元交叉熵损失来进行类别预测。这个公式有助于我们转向更复杂的领域,如Open Image Dataset[5]。在这个数据集中有许多重叠的标签(如女性和人物)。使用softmax会强加了一个假设,即每个框中只有一个类别,但通常情况并非如此。多标签方法更好地对数据建模。

2.3 跨尺度预测

YOLOv3在3种不同尺度上预测边界框。我们的系统使用与特征金字塔网络相同的概念,来从这些尺度中提取特征。从我们的基本特征提取器中,我们添加了几个卷积层。其中最后一个卷积层预测了一个三维张量,编码了:边界框预测,objectness分值,和类别预测。在COCO上的实验中,在每个尺度上预测三个框,因此张量为NxNx[3x(4+1+80)],4个边界框偏移量,1个objectness prediction,和80个类别预测。

接下来,我们从先前的2层中获取特征图,并将其上采样2倍。再使用级联对原来网络的特征图和上采样后的特征图进行合并。这种方法使我们能够从上采样的特征中获得更有意义的语义信息,并从较早的特征图中获得更细粒度的信息。然后,我们再添加一些卷积层以处理这种组合的特征图,并最终预测相似的张量,尽管现在的大小是原来的两倍。

我们再次执行相同的设计来预测最终尺度的方框。因此,我们对第三种尺度的预测将从所有先前的计算中获益,并从早期的网络中获得细粒度的特征

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

2.4 特征提取

我们使用新的网络来实现特征提取。我们的新网络是YOLOv2,Darknet-19中使用的网络与新的残差网络内容之间的混合方法。我们的网络使用了连续的3×3和1×1卷积层,但现在也有了一些捷径(shortcut)连接,并且明显更大。它有53个卷积层,所以我们称之为Darknet-53!

image-20200720152518167

这个新的网络比Darknet-19更强大,而且比ResNet-101、ResNet-152更有效。以下是在ImageNet上的结果。

image-20200720152801106

表2 骨干对比。精度,数十亿次操作,每秒十亿次浮点操作以及各种网络的FPS。

每个网络都使用相同的设置进行训练,并以256×256的单精度测试进行测试。运行时间是在Titan X上以256×256进行测量的。因此Darknet-53可与最先进的分类器媲美,但浮点运算更少,速度更快。Darknet-53比ResNet-101更好,速度提高了1.5倍。Darknet-53具有与ResNet-152相似的性能,并且快2倍。

Darknet-53还实现了每秒最高的测量浮点运算。这意味着网络结构可以更好地利用GPU,从而使其评估效率更高,速度更快。这主要是因为ResNets层太多了,效率不高。

2.5 训练

我们仍然会训练完整的图像,没有使用难例挖掘(hard negative mining)和其他任何方法。我们使用多尺度训练,大量的数据增强方法,批量规范化,以及所有标准的东西。 使用Darknet神经网络框架进行训练和测试。

3. 我们如何做

YOLOv3性能很好,见表3。在COCO数据集上,它的mAP与SSD及其变体相当,但比它快三倍。尽管如此,与其它模型如RetinaNet相比还是稍显落后。

image-20200720155245562

表3 认真地说,我是从[9]中偷走了所有这些表,他们花了很长时间才从头开始制作。好的,YOLOv3一切正常。请记住,RetinaNet的图像处理时间要长3.8倍。YOLOv3比SSD变体好得多,可与最先进的模型在AP50指标上相媲美。

但是,当我们以IOU = 0.5(或图表中的AP50)查看mAP的“旧”检测指标时,YOLOv3非常强大。它几乎与RetinaNet相当,并且远远超过SSD变体。这表明YOLOv3是一个非常强大的检测器,擅长于为目标生成像样的边界框。但是,随着IOU阈值的增加,性能会显着下降,这表明YOLOv3难以使框与目标完美对齐。

过去,YOLO在小目标检测上表现一直不好。但是,现在我们看到了这种趋势的逆转。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APS性能。但是,它在中型和大型目标上的性能相对较差。要深入了解这一点,还需要进行更多调查。

当我们在AP50指标上绘制精度与速度的关系图(参见图3)时,我们看到YOLOv3比其他检测系统具有明显优势。即更快,更好。

image-20200720174254282

图3.再次根据[9]进行改编,这显示了在mAP上以0.5 IOU指标的速度/精度折衷。您可以说YOLOv3很好,因为它很高而且非常靠左。你可以引用自己的论文吗?猜猜谁要尝试,这个人→[16]。哦,我忘了,我们还修复了YOLOv2中的数据加载错误,该错误通过2 mAP的帮助而得以解决。只是潜入这里不放弃布局。

4. 我们尝试了但无效的事情

在研究YOLOv3时,我们尝试了很多东西。很多都行不通。这是我们能记住的东西。

锚框x,y偏移量预测。我们尝试使用标准锚框预测机制,在该机制中,您可以使用线性激活将x,y偏移量预测为框宽度或高度的倍数。我们发现此公式降低了模型的稳定性,并且效果不佳。

线性x,y预测而不是逻辑预测。我们尝试使用线性激活直接预测x,y偏移,而不是逻辑激活。这导致mAP下降了两点。

Focal Loss 我们尝试使用焦点损失(focal loss)。它使我们的AP下降了约2点。YOLOv3可能已经对解决焦点损失正在尝试解决的问题具有鲁棒性,因为YOLOv3具有objectness预测和条件类预测。因此,对于大多数示例而言,分类预测不会带来损失吗?或者其他的东西?我们不确定。

双IOU阈值和真值分配。Faster R-CNN在训练期间使用两个IOU阈值。如果预测值与真值的重叠率为0.7,则它是一个正例;如果在0.3-0.7之间则被忽略,小于0.3为负例。我们尝试了类似的策略,但收效不佳。

我们非常喜欢我们当前的公式,似乎至少是局部最优。这些技术中的某些可能最终会产生良好的结果,也许它们只需要进行一些调整即可稳定训练。

5. 这一切意味着什么

YOLOv3是一个好的检测器,它又快又准。在COCO数据集上,使用IOU在0.5到0.95上的AP作为度量时,它并不是太好。但采用旧的0.5IOU的度量时,它的性能非常好。

为什么我们无论如何要转换指标?原始的COCO论文只是含糊不清的句子:”评估服务器完成后,将添加对评估指标的完整讨论”。Russakovsky等人说,人类很难区分.3和.5的IOU!令人惊讶的是,训练人员以视觉方式检查IOU为0.3的边界框并将其与IOU为0.5的边界框区分开来是非常困难的。人类很难分辨出差异,这有多重要?

但是也许更好的问题是:“既然有了探测器,我们将如何处理这些探测器?从事这项研究的许多人都在Google和Facebook。我想至少我们知道这项技术掌握得很好,而且绝对不会被用来收集您的个人信息并将其出售给…。等等,您是说这就是它的用途?

好吧,那些为视觉研究投入大量资金的人是军队,他们从来没有做过任何可怕的事情,例如用新技术杀死许多人,等等。

我非常希望大多数使用计算机视觉的人都在用它来做快乐,好事,例如统计国家公园中斑马的数量[13],或者当猫徘徊在屋子里时追踪它们的踪迹。但是计算机视觉已经被质疑使用,并且作为研究人员,我们有责任至少考虑到我们的工作可能造成的危害,并想出减轻它的方法。我们非常感激这个世界。

最后,不要@我。(因为我终于退出了Twitter)。