文章目录
Absstract
本文为YOLO
提供了一系列更新!它包含一堆小设计,可以使系统的性能得到更新;也包含一个新训练的、非常棒的神经网络,虽然比上一版更大一些,但精度也提高了。不用担心,虽然体量大了点,它的速度还是有保障的。在输入320×320
的图片后,YOLOv3
能在22毫秒内完成处理,并取得28.2mAP的成绩。它的精度和SSD
相当,但速度要快上3倍。和旧版数据相比,v3
版进步明显。在Titan X环境下,YOLOv3
的检测精度为57.9AP50,用时51ms;而RetinaNe
t的精度只有57.5AP50,但却需要198ms,相当于YOLOv3
的3.8倍。
1.引言
首先,我们会告诉你YOLOv3
的处理是什么。然后我们会告诉你我们是怎么做的。我们还将告诉您一些我们尝试过但没有成功的事情。最后,我们将思考这一切意味着什么。
2.The Deal
YOLOv3
的处理是这样的:
我们大多从别人那里得到好的想法。我们还训练了一个比其他分类器更好的新分类器网络。我们将带您从头开始浏览整个系统,以便您能够理解所有内容。
2.1.边界框预测(Bounding Box Prediction)
按照YOLO9000
,我们的系统使用维度聚类作为定位框来预测边界框。网络预测每个边界框的4个坐标 tx、ty、tw、th 。如果单元格相对于图像左上角的偏移量为(cx,cy),且之前的边界框具有宽度和高度 pw,ph,则预测对应于:
bx = σ(tx) + cx
by = σ(ty) + cy
bw = pwetw
bh = pheth
在训练期间,我们使用误差损失平方和。如果某个坐标预测的真实值为tˆ*,我们的梯度是真实值(从真实值框计算得到)减去我们的预测值:tˆ*− t*。该真实值可以通过上述方程计算得到。
YOLOv3
使用逻辑回归预测每个边界框的检测分数。如果当前预测的边界框与真实值目标的重叠超过任何其他之前的边界框,则该值应为1
。如果当前边界框预测不是最佳的,但确实与真实值目标重叠超过某个阈值,我们将忽略该预测。我们使用0.5
的阈值。我们的系统只为每个真实值对象指定一个边界框。如果没有将之前的边界框指定给真实值目标,则不会导致坐标或类预测损失,只会导致目标损失。
2.2.分类预测(Class Prediction)
每个框使用多标签分类预测边界框可能包含的类。我们不使用softmax
,因为我们发现它对于良好的性能是不必要的,相反,我们只是使用独立的逻辑分类器。在训练过程中,我们使用**二元交叉熵损失(对数损失)**进行分类预测。
当我们移动到更复杂的领域,如Open Images
数据集时,这个公式(引用[7]
)会有所帮助。在这个数据集中有许多重叠的标签(即女性和个人)。使用softmax
需假设每个框只有一个类,但通常情况并非如此。多标签方法可以更好地建模数据。
2.3.跨尺度预测(Predictions Across Scales)
YOLOv3
以3种不同的尺度预测边框。我们的系统使用类似于金字塔网络的概念从这些尺度中提取特征。从我们的基本特征提取器中,我们添加了几个卷积层。最后一个预测是三维张量编码的边界框、目标和类预测。在COCO
的实验中,我们预测每个尺度上有3个边框,因此张量为N×N×[3∗(4+1+80)]
,用于4个边界框偏移量、1个目标预测和80个类预测。
接下来,我们从前面的两层中提取特征图,并通过2x
将其上采样。我们还从网络早期获取一个特征映射,并使用concatenation
将其与上采样特征合并。这种方法使我们能够从上采样的特征中获得更有意义的语义信息,并从早期的特征映射中获得更细粒度的信息。然后,我们再添加一些卷积层来处理这个组合特征图,并最终预测一个类似的张量,尽管现在的大小是原来的两倍。
我们再执行一次相同的设计,以预测最终比例的边框。因此,我们对第三尺度的预测得益于所有先前的计算以及网络早期的细粒度特征。
我们仍然使用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.特征提取器(Feature Extractor)
我们使用一个新的网络来进行特征提取。我们的新网络是YOLOv2
,Darknet-19
中使用的网络和新的残差网络之间的混合方法。我们的网络使用连续的3×3
和1×1
卷积层,但现在也有一些快捷连接,而且更大了。它有53个卷积层,所以我们称之为Darknet-53
!
此新网络比Darknet-19
强大得多,但仍比ResNet-101
或ResNet-152
更高效。以下是一些ImageNet
结果:
每个网络使用相同的设置进行训练,并以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.训练
我们仍然在完整的图像上训练,没有硬性的负面挖掘或任何类似的东西。我们使用多尺度训练、大量数据扩充、批量标准化等所有标准工具。我们使用Darknet
神经网络框架进行训练和测试。
3.如何做
YOLOv3
相当不错!见Table 3
。在COCOs
平均mAP
度量方面,它与SSD
变体是一致的,但是快3倍。不过,在这一指标上,它仍然落后于其他型号,如RetinaNet
。
然而,当我们在IOU=.5
(或图表中的AP50)查看mAP
的“旧”检测指标时,YOLOv3
非常强大。它几乎等同于RetinaNet
,远高于SSD
变体。这表明YOLOv3
是一个非常强大的检测器,擅长为物体产生像样的边框。但是,随着IOU
阈值的增加,性能显著下降,这表明YOLOv3
难以使框与目标完全对齐。
在过去,YOLO
致力于对小型目标进行检测。然而,现在我们看到了这一趋势的逆转。通过新的多尺度预测,我们看到YOLOv3
具有相对较高的APS性能。然而,在中型和大型目标上的性能相对较差。要弄清这一点,还需要进行更多的调查。
当我们在AP50指标上绘制精度与速度(见图5)时,我们发现YOLOv3
比其他检测系统具有显著的优势。也就是说,它更快更好。
4.我们试过但没用的东西(Things We Tried That Didn’t Work)
我们在制作YOLOv3
时尝试了很多东西。很多都没用。这是我们能记住的东西。
Anchor box坐标的偏移预测。我们尝试了常规的Anchor box预测方法,比如利用线性激活将坐标x、y的偏移程度预测为边界框宽度或高度的倍数。但我们发现这种做法降低了模型的稳定性,且效果不佳。
用线性方法预测x,y,而不是使用逻辑方法。我们尝试使用线性激活来直接预测x,y的offset,而不是逻辑激活。这降低了mAP成绩。
focal loss。我们尝试使用focal loss,但它使我们的mAP降低了2点。 对于focal loss函数试图解决的问题,YOLOv3
从理论上来说已经很强大了,因为它具有单独的对象预测和条件类别预测。因此,对于大多数例子来说,类别预测没有损失?或者其他的东西?我们并不完全确定。
双IOU阈值和真值分配。在训练期间,Faster RCNN
用了两个IOU阈值,如果预测的边框与.7的ground truth重合,那它是个正面的结果;如果在 [.3—.7] 之间,则忽略;如果和.3的ground truth重合,那它就是个负面的结果。我们尝试了这种思路,但效果并不好。我们对现在的更新状况很满意,它看起来已经是最佳状态。有些技术可能会产生更好的结果,但我们还需要对它们做一些调整来稳定训练。