YOLOv3 论文全篇完整翻译
摘要
本文介绍了YOLO
的一些更新内容!我们进行了一系列小的设计改进,以使其更好。我们还训练了一个相当不错的新网络。它比上一版稍微大一些,但更加准确。不过不用担心,它依然保持了快速性能。在320×320
像素的情况下,YOLOv3
以22
毫秒的速度运行,mAP
达到28.2
,与SSD
的准确度相当,但快三倍。在旧的0.5 IOU mAP
检测指标下,YOLOv3
表现出色。在Titan X
上,它在51
毫秒内实现了57.9 AP50
,而RetinaNet
在198
毫秒内只能达到57.5 AP50
,两者性能相似,但YOLOv3
速度快3.8
倍。一如既往,所有代码都可以在https://pjreddie.com/yolo/上在线获取。
1. Introduction
有时候你只是在一年中稍微偷懒,你懂的吧?今年我没有进行太多的研究工作。在Twitter上花费了很多时间。稍微玩了一下生成对抗网络(GANs)。我还保留了去年的一些动力[12] [1];我成功地对YOLO进行了一些改进。但说实话,没有什么特别有趣的东西,只是一些小的改变使其更好。我还在其他人的研究中给予了一些帮助。实际上,这正是我们今天在这里的原因。我们有一个截稿日期[4],需要引用我对YOLO进行的一些随机更新,但我们没有来源。因此,准备好迎接一篇技术报告吧!技术报告的好处在于它们不需要引言,大家都知道我们为什么在这里。因此,这个引言的结束将为本文的其余部分指明方向。首先,我们将告诉您YOLOv3的情况。然后,我们将告诉您我们的方法。我们还将告诉您一些我们尝试过但没有成功的事情。最后,我们将思考这一切的意义。
图1. 我们从Focal Loss论文[9]中改编了这个图。YOLOv3的运行速度比其他具有相似性能的检测方法要快得多。时间是基于M40或Titan X,它们实际上是相同的GPU。
2. The Deal
关于YOLOv3的情况如下:我们主要借鉴了其他人的好点子。我们还训练了一个比其他网络更好的新分类器网络。我们将从头开始介绍整个系统,以便您能够全面了解它。
2.1. Bounding Box Prediction
在YOLO9000之后,我们的系统使用维度聚类作为锚框来预测边界框[15]。该网络为每个边界框预测4个坐标,即 t x t_x tx、 t y t_y ty、 t w t_w tw、 t h t_h th。如果单元格相对于图像的左上角偏移了( c x c_x cx, c y c_y cy),而边界框的先验宽度和高度为 p w p_w pw、 p h p_h ph,则预测对应如下:
在训练过程中,我们使用平方误差损失(sum of squared error loss)。如果某个坐标预测的真值为 ˆ t ∗ ˆt* ˆt∗,我们的梯度是真值(根据真实边界框计算)减去我们的预测值: ˆ t ∗ − t ∗ ˆt * − t * ˆt∗−t∗。这个真值可以通过反转上述方程轻松计算得出。
YOLOv3使用逻辑回归来为每个边界框预测一个目标得分(objectness score)。如果边界框先验与某个真实目标的重叠面积大于其他边界框先验,则该得分应为1。如果边界框先验虽然不是最佳匹配,但与某个真实目标的重叠面积超过一定阈值(我们使用0.5),我们将忽略该预测,遵循[17]的方法。与[17]不同,我们的系统每个真实目标只分配一个边界框先验。如果某个边界框先验未分配给任何真实目标,那么在坐标或类别预测方面,它不会产生任何损失,只会影响目标得分的预测。
图2. 具有维度先验和位置预测的边界框。我们将盒子的宽度和高度预测为与聚类中心的偏移量。我们使用sigmoid函数预测相对于滤波器应用位置的盒子中心坐标。这个图明显是从[15]中抄袭的。
2.2. Class Prediction
每个边界框使用多标签分类来预测可能包含的类别。我们不使用softmax,因为我们发现对于良好的性能来说它是不必要的,而是简单地使用独立的逻辑分类器。在训练过程中,我们对类别预测使用二元交叉熵损失。这种形式在我们转向更复杂的领域(如Open Images数据集[7])时非常有帮助。在这个数据集中,存在许多重叠的标签(例如Woman和Person)。使用softmax会假设每个边界框只有一个类别,但这往往不是实际情况。多标签方法更好地对数据进行建模。
2.3. Predictions Across Scales
YOLOv3在3个不同的尺度上预测边界框。我们的系统使用类似于特征金字塔网络(feature pyramid networks)[8]的概念从这些尺度上提取特征。从基础特征提取器中,我们添加了几个卷积层。其中最后一个卷积层预测一个3维张量,编码了边界框、目标得分和类别预测。在我们对COCO数据集[10]的实验中,我们在每个尺度上预测了 3 3 3 个边界框,因此张量的大小为 N × N × [ 3 ∗ ( 4 + 1 + 80 ) ] N × N × [3 ∗ (4 + 1 + 80)] N×N×[3∗(4+1+80)],其中 4 4 4 表示边界框的偏移量, 1 1 1 表示目标得分预测, 80 80 80 表示类别预测。接下来,我们从之前的两层中获取特征图,并将其上采样 2 2 2 倍。我们还从网络中较早的位置获取一个特征图,并使用连接(concatenation)将其与上采样后的特征图合并。这种方法使我们能够从上采样后的特征图中获得更有意义的语义信息,以及从较早的特征图中获取更细粒度的信息。然后,我们添加了几个额外的卷积层来处理这个合并的特征图,并最终预测一个类似的张量,尺寸是之前的两倍。我们再次使用相同的设计来预测最终尺度的边界框。因此,我们对第三个尺度的预测可以受益于之前所有的计算,以及网络中较早阶段的细粒度特征。我们仍然使用k-means聚类来确定我们的边界框先验。我们只是随意选择了 9 9 9 个聚类中心和 3 3 3 个尺度,然后在各个尺度上均匀划分这些聚类中心。在COCO数据集上,这 9 9 9 个聚类中心分别是: ( 10 × 13 ) (10 × 13) (10×13), ( 16 × 30 ) (16 × 30) (16×30), ( 33 × 23 ) (33 × 23) (33×23), ( 30 × 61 ) (30 × 61) (30×61), ( 62 × 45 ) (62 × 45) (62×45), ( 59 × 119 ) (59 × 119) (59×119), ( 116 × 90 ) (116 × 90) (116×90), ( 156 × 198 ) (156 × 198) (156×198), ( 373 × 326 ) (373 × 326) (373×326)。
2.4. Feature Extractor
我们使用了一个新的网络来进行特征提取。我们的新网络是YOLOv2中使用的Darknet-19网络和新型残差网络的混合方法。我们的网络使用连续的 3 × 3 3×3 3×3 和 1 × 1 1×1 1×1 卷积层,并引入了一些捷径连接,网络规模也显著增大。它有 53 53 53 个卷积层,所以我们将其称为……等待一下……Darknet-53!
这个新网络比Darknet19更强大,但仍比ResNet-101或ResNet-152更高效。以下是一些ImageNet结果:
表2. 骨干网络比较。各种网络的准确率、十亿次运算、每秒十亿次浮点运算和每秒帧数对比。
每个网络都在相同的设置下进行训练,并在256×256的单一裁剪准确率下进行测试。运行时间是在256×256的条件下使用Titan X进行测量。因此,Darknet-53在与最先进的分类器相媲美的准确率下,所需的浮点运算更少,速度更快。Darknet-53优于ResNet-101并且快1.5倍。Darknet-53与ResNet-152具有类似的性能,并且快2倍。Darknet-53还实现了最高的测得每秒浮点运算次数。这意味着网络结构更好地利用了GPU,使其在评估时更高效,因此更快。这主要是因为ResNet的层数太多,效率不高。
2.5. Training
我们仍然使用完整图像进行训练,没有进行严格的负样本挖掘或其他相关操作。我们采用多尺度训练、大量数据增强、批归一化等标准方法。我们使用Darknet神经网络框架进行训练和测试[14]。
3. How We Do
YOLOv3确实非常出色!可以参考表3。就COCO的奇怪的平均精确度(AP)指标而言,它与SSD变体相媲美,但速度快3倍。不过,在这个指标上,与RetinaNet等其他模型相比,仍然有一些差距。然而,当我们观察"旧"的检测指标,即IOU=0.5时的平均精确度(mAP)(或图表中的AP50),YOLOv3非常强大。它几乎与RetinaNet相媲美,并远远超过了SSD变体。这表明YOLOv3是一个非常强大的检测器,擅长为物体生成良好的边界框。然而,随着IOU阈值的增加,性能显著下降,这表明YOLOv3在完全对齐物体的边界框方面存在困难。过去,YOLO在处理小物体时存在问题。然而,现在我们看到这个趋势有所逆转。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APs性能。然而,在中等和较大尺寸的物体上,其性能相对较差。需要进行更多的研究来深入了解这一点。当我们在AP50指标上绘制准确度与速度的图表(见图5)时,我们发现YOLOv3在其他检测系统上具有显著的优势。也就是说,它更快且更好。
表3. 我只是从[9]中偷了所有这些表,因为从头开始制作它们太耗时了。好的,YOLOv3表现还不错。请记住,RetinaNet处理一张图像需要大约3.8倍的时间。YOLOv3比SSD变体要好得多,并且在AP50指标上与最先进的模型相媲美。
4. Things We Tried That Didn’t Work
在我们开发YOLOv3的过程中,我们尝试了很多方法,但其中很多并不起作用。以下是我们记得的一些尝试:
- Anchor box的x、y偏移预测:我们尝试使用传统的anchor box预测机制,其中通过线性激活函数以盒子的宽度或高度的倍数来预测x、y的偏移量。我们发现这种方法会降低模型的稳定性,并且效果并不好。
- 使用线性激活函数的x、y预测:我们尝试使用线性激活函数直接预测x、y的偏移量,而不是使用逻辑激活函数。这导致mAP下降了几个点。
- Focal Loss:我们尝试使用Focal Loss,但它使我们的mAP下降了大约2个点。YOLOv3可能已经对Focal Loss试图解决的问题具有很好的鲁棒性,因为它具有独立的目标性预测和条件类别预测。因此,对于大多数示例来说,类别预测并不会导致损失。或者还有其他原因?我们并不完全确定。
- 双IOU阈值和真值分配。Faster RCNN在训练过程中使用了两个IOU阈值。如果一个预测与真实值的重叠度达到0.7,则被视为正样本;在[0.3-0.7]之间的重叠度被忽略;对于与所有真实物体的重叠度小于0.3的预测,被视为负样本。我们尝试了类似的策略,但未能取得良好的结果。我们相当喜欢我们目前的公式,至少它似乎处于局部最优解。这些技术可能最终会产生良好的结果,也许只需要一些调整来稳定训练过程。
5. What This All Means
YOLOv3是一个出色的检测器。它快速且准确。它在COCO的0.5到0.95 IOU之间的平均精确度上表现并不出色,但在0.5 IOU的旧检测指标上表现非常好。不过,我们为什么要切换指标呢?原始的COCO论文中只有这样一个神秘的句子:“一旦评估服务器完成,将提供对评估指标的全面讨论。”Russakovsky等人的研究报告中指出,人类很难区分0.3和0.5的IOU!“训练人类视觉检查IOU为0.3的边界框,并将其与IOU为0.5的边界框区分开来是非常困难的。”[18]如果人类很难区分这两者的差异,那么这真的很重要吗?但也许一个更好的问题是:“既然我们已经有了这些检测器,我们打算用它们做什么呢?”很多从事这项研究的人都在Google和Facebook工作。至少我们知道这项技术掌握在可靠的人手中,绝对不会被用于收集你的个人信息并出售给……等等,你是说它确实会被用于那个目的?哦。那么,另外一些资助视觉研究的人是军方,他们从来没有用新技术做过像大规模杀戮这样可怕的事情,哦等等……我非常希望大多数使用计算机视觉的人只是用它来做快乐和有益的事情,比如在国家公园中计数斑马的数量[13],或者追踪自己家里四处游荡的猫咪[19]。但是,计算机视觉已经被用于一些值得质疑的用途,作为研究人员,我们有责任至少考虑我们的工作可能带来的伤害,并思考如何减轻它。我们对世界至少应尽到这样的责任。
图3。再次从[9]进行了适应,这次显示的是在0.5 IOU指标下的速度/准确性权衡。你可以看出YOLOv3非常出色,因为它的值非常高且靠左。你能引用自己的论文吗?猜猜是谁要试试,就是这个人 → [16]。哦,我忘了,我们还修复了YOLOv2中的一个数据加载错误,这帮助提高了大约2个mAP。只是为了不破坏布局,悄悄地加进来。
图4。零轴图可能更加诚实…而且我们仍然可以调整变量,使自己看起来很棒!
我们要感谢Reddit的评论者、实验室同事、邮件发送者和过道中的路过者,感谢他们美好而真挚的话语。如果你和我一样正在审查ICCV的论文,那么我们知道你可能还有其他37篇论文可以阅读,而你肯定会一拖再拖,直到最后一周才开始,并且会有一位该领域的传奇人物给你发邮件,告诉你应该完成那些评审,虽然他们说的话可能并不完全清楚,也许他们来自未来?不管怎样,这篇论文要变成它将来会成为的样子,离不开你们过去的努力,也离不开你们过去稍微前进了一点点,而不是一直到现在。如果你在推特上提到了它,我就不会知道。只是说一下。评审人2号,即丹·格罗斯曼(哈哈,谁遮蔽身份啊),坚持要我在这里指出,我们的图表不仅有一个非零起点,而是有两个非零起点。你完全正确,丹,因为这样看起来比承认我们只是在争夺2-3%的mAP要好得多。但这是你要求的图表。我还加了一个带有FPS的图表,因为当我们按照FPS绘制时,看起来就像非常棒。评审人4号,即Reddit上的JudasAdventus写道:“很有趣的阅读,但对MSCOCO指标的批评似乎有点薄弱。”嗯,我一直知道你会背叛我,犹大。你知道当你做一个项目,结果只是一般般,所以你必须找出一些方法来证明你所做的事实上相当酷吗?
我基本上是在试图做那样的事情,我对COCO指标有点冲动。但既然我已经选择了这个立场,那我也只能死在这上面了。你看,问题在于mAP本来就有点问题,所以对它进行更新可能应该解决其中一些问题,或者至少要证明更新版本在某种程度上更好。而我对此有意见的主要问题就是缺乏理由。对于PASCAL VOC,IOU阈值被“故意设定得很低,以考虑到地面真实数据中边界框的不准确性”[2]。COCO的标注是否比VOC更好?这是有可能的,因为COCO有分割掩模,也许标签更可靠,因此我们不太担心准确性。但再次强调,我的问题在于缺乏理由。COCO指标强调更好的边界框,但这种强调必然意味着它会减弱其他方面,比如分类准确性。有没有充分的理由认为更精确的边界框比更好的分类更重要?一个分类错误的例子比一个稍微偏移的边界框要明显得多。mAP已经混乱了,因为唯一重要的是每个类别的排名顺序。例如,如果你的测试集只有这两张图片,那么根据mAP,产生这些结果的两个检测器是一样好的:
图5。根据这两张图片上的mAP,这两个假设的检测器是完美的。它们都是完美的。完全相等。
显然,这对mAP的问题进行了夸大,但我猜我的新修正观点是,人们在“真实世界”关心的事情和我们当前的指标之间存在如此明显的差异,我认为如果我们要提出新的指标,我们应该关注这些差异。另外,已经有了均值平均精度,我们应该如何称呼COCO指标,均值均值平均精度吗?我提个建议,人们真正关心的是,在给定一张图片和一个检测器的情况下,检测器在图像中能够多好地找到和分类物体。要不要去掉每个类别的平均精度,只做一个全局平均精度?或者在每张图片上进行平均精度计算,然后再取平均?不过,边界框本来就有点愚蠢,我可能是个面具的真正信徒,只是我无法让YOLO学习它们。