YOLO v3

参考   YOLO v3 - 云+社区 - 腾讯云

摘要

我们对YOLO进行了一些更新!我们做了一些小的设计改变使它更好。我们还训练了这个非常棒的新网络。比上次大一点,但更准确。不过还是很快的,别担心。在320 × 320的情况下,YOLOv3在28.2 mAP下运行时间为22 ms,与SSD一样精确,但速度是SSD的3倍。当我们看旧的 0.5 IOU mAP检测指标YOLOv3是相当好的。它在Titan X上实现了57.9 AP_{50}在51毫秒内,而RetinaNet在198毫秒内实现了57.5 AP_{50},性能类似,但快了3.8倍。

1、介绍

有时候你就得憋上一年,知道吗?我今年没有做很多研究。花了很多时间在推特上。玩了一下GANs。我从去年开始有了一点动力;我设法对YOLO做了一些改进。但是,说实话,没有什么特别有趣的,只有一些小的改变让它变得更好。我也帮了别人一点忙。

事实上,这就是我们今天来到这里的原因。我们有一个拍摄截止日期,我们需要引用一些我对YOLO的随机更新,但我们没有来源。所以,准备好接受科技报道吧!

科技报告最棒的一点就是他们不需要自我介绍,你们都知道我们为什么在这里。因此,这篇介绍的结尾将会成为本文其余部分的路标。首先,我们将告诉你YOLOv3是什么。然后告诉你我们怎么做。我们也会告诉你一些我们尝试过但没有成功的方法。最后,我们将考虑这一切意味着什么。

2、The Deal

所以YOLOv3是这样的:我们主要是从别人那里获得好点子。我们还训练了一个新的分类器网络,它比其他的更好。我们会从头开始,带你了解整个系统,这样你就能完全理解了。

                      YOLO v3_第1张图片

2.1、bounding box预测

和v2版的YOLO 9000一样,在v3版中使用维度聚类预测bounding box作为anchor box。网络对每个bounding box预测四个坐标,t_xt_yt_wt_h,如果单元格与图像左上角偏移(c_x, c_y),且边界框先验具有宽度和高度p_wp_h,则预测结果为:

                             \begin{aligned} b_{x} &=\sigma\left(t_{x}\right)+c_{x} \\ b_{y} &=\sigma\left(t_{y}\right)+c_{y} \\ b_{w} &=p_{w} e^{t_{w}} \\ b_{h} &=p_{h} e^{t_{h}} \end{aligned}

在训练中,我们使用误差损失平方和。如果某些坐标预测的ground truth是\hat{t}_{*},我们的梯度是ground truth值(从ground truth框计算)减去我们的预测:\hat{t}_{*}-t_{*}。这个ground truth可以很容易地通过把上面的方程反过来计算出来。

YOLOv3使用逻辑回归来预测每个bounding box的回归分数。如果bounding box先验与ground truth目标的重叠比任何其他bounding box先验都要大,那么这个值应该是1。如果bounding box先验不是最佳的,但确实和一个ground truth目标重叠超过某一个阈值,我们应该忽略这一个预测,这篇文章中使用的阈值是0.5。和Fast R-CNN不同的是这个系统仅仅对每个ground truth目标分配一个bounding box先验。如果一个bounding box 先验没有分配给一个ground truth目标,将会造成坐标和类预测没有损失,仅仅对目标。

                YOLO v3_第2张图片

2.2、分类预测

每个box使用多标签分类来预测bounding box可能包含的类。我们没有使用softmax,因为我们发现它对于良好的性能是不必要的,而是简单地使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失进行类预测。

当我们转移到更复杂的领域,比如Open Images Dataset时,这种形式会有所帮助。在这个数据集中有许多重叠的标签(即女人和人)。使用softmax强加了这样一个假设,即每个框只有一个类,但通常不是这样。多标签方法可以更好地建模数据。

2.3、跨尺度预测

YOLOv3在3个不同的尺度上预测box。我们的系统使用与特征金字塔网络相似的概念从这些尺度中提取特征。从基本特征提取器中,我们添加了几个卷积层。最后一种方法预测了三维张量编码bounding box、对象和类预测。在用COCO进行实验的时候在每个尺度上预测3个box,因此对4个bounding box补偿,张量为N \times N \times[3 *(4+1+80)],1个目标预测和80类分类预测。

接下来,从之前的两个类中获取特征图,并且进行两倍的上采样。我们还从之前的网络获取特征图,使用连接将其与上采样特性合并。该方法可以从上采样的特征中获取更有意义的语义信息,并从早期的特征图中获取更细粒度的信息。然后,我们添加更多的卷积层来处理这个组合的特征图,并最终预测出一个类似的张量,尽管现在的张量是原来的两倍。

我们再次执行相同的设计来预测最终的比例。因此,我们对第三个尺度的预测受益于所有之前的计算以及网络早期的细粒度特性。

依然使用k-means来决定bounding box来决定最终的先验,仅仅选择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卷积层但nowhas一些快捷方式连接,明显增大。有53个卷积层,作者称之为Darknet-53。

YOLO v3_第3张图片

这个新的网络比Darknet-19更强力,依然比ResNet-101和ResNet-152更有效率。下面是ImageNet的一些结果:

YOLO v3_第4张图片

每个网络训练使用相同的设置和测试在256×256,单一的crop准确性。在Titan X运行时间测量X 256×256。因此,Darknet-53与最先进的分类器性能相当,但浮点运算更少,速度更快。Darknet-53比resnet - 101更好,并且快1.5倍。Darknet-53和resnet - 152性能类似,并且快两倍。

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

2.5、训练

我们仍然在训练完整的图像,没有硬负面挖掘或任何类似的东西。我们使用多尺度训练,大量的数据增强,批处理归一化,所有的标准的东西。我们使用Darknet神经网络框架对[14]进行训练和测试。

3、我们的做法

YOLOv3很棒! 见表3。 从COCOs怪异的平均AP指标来看,它与SSD版本相当,但速度是SSD版本的3倍。 但在这个指标上,它仍然落后于其他模型,如RetinaNet。  

然而,当我们看看“旧”的地图检测指标IOU=:5(或图表中的AP50)时,YOLOv3是非常强大的。 它几乎与视网膜网相当,远远高于SSD的变体。 这表明YOLOv3是一个非常强的检测器,擅长为对象生成像样的盒子。 然而,当IOU阈值增加时,性能会显著下降,这表明YOLOv3很难使盒子与对象完全对齐。  

在过去,YOLO与小物件斗争。 然而,现在我们看到了这一趋势的逆转。 根据新的多尺度预测,我们可以看到YOLOv3具有相对较高的AP_S性能。 但是,它在中型和大型对象上的性能相对较差。 需要进行更多的调查才能弄清这件事的真相。 

当我们在AP_{50}度量上绘制精度与速度(见图5)时,我们看到YOLOv3比其他检测系统有显著的优势。 也就是说,它更快更好。  

4、我们尝试过的失败的事情

在开发YOLO v3时,我们尝试了很多东西。 很多都没起作用。 这是我们能记住的东西。  

锚框x,y补偿预测:我们尝试使用常规锚框预测机制来预测x;使用线性激活的方框宽度或高度的倍数的Y偏移量。 我们发现这种配方降低了模型的稳定性,并没有很好地工作。  

线性x,y预测替代逻辑:我们试着用线性激活来直接预测x,y补偿,而不是物流激活。 这导致mAP下降了几个点。  

Focal loss:我们尝试使用Focal Loss。 它让我们的地图下降了2个点。 YOLOv3对于试图解决的焦点丢失问题可能已经很健壮了,因为它有独立的对象预测和条件类预测。 因此,对于大多数例子来说,类预测没有损失? 还是什么? 我们不完全确定。  

YOLO v3_第5张图片

 YOLO v3_第6张图片

双重欠条阈值和真相分配:

Faster RCNN在训练期间使用两个IOU阈值。 如果一种预测与ground truth重叠了0.7,那么它就作为一个正的例子,如果与ground truth重叠了0.3,那么它就被忽略了,目标是一个负样本。 我们尝试了类似的策略,但没有得到好的结果。  

我们很喜欢我们目前的公式,它似乎至少在局部最优。 有可能这些技术最终会产生好的结果,也许它们只是需要一些调整来稳定训练。  

5、这一切意味着什么

YOLOv3是一个很好的检测器。 它快速,准确。 在0.5到0.95 IOU指标之间的COCO平均AP上就没那么好了。 但它很好,在旧的检测指标有0.5的IOU。

我们为什么要改变参数? 原来的COCO论文中只有这句晦涩的句子:“一旦评估服务器完成,将添加对评估指标的完整讨论”。 Russakovsky等人报告说,人类很难区分0.3和0.5的IOU! “训练人类目视检查欠条为0.3的边界框,并将其与欠条为0.5的边界框区分开来,是非常困难的。 “[18]如果人类很难区分两者,那又有什么关系呢?”    

但也许一个更好的问题是:“现在我们有了这些检测器,我们要用它们做什么?” 很多做这项研究的人都在谷歌和Facebook。 我想,至少我们知道这项技术掌握得很好,肯定不会被用来收集你的个人信息,然后卖给.... 等等,你是说这就是它的用途?? 哦。  

其他大量资助视觉研究的人是军方,他们从来没有做过什么可怕的事情,比如用新技术杀死很多人,哦,等等.....  

我非常希望大多数使用计算机视觉的人只是在用它做快乐的、有益的事情,比如数国家公园里斑马的数量[13],或者当他们的猫在家里闲逛时跟踪它[19]。 但是,计算机视觉已经被用于可疑的用途,作为研究人员,我们有责任至少考虑我们的工作可能造成的危害,并想办法减轻它。 我们欠世界这么多。  

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

你可能感兴趣的:(计算机视觉,python,算法)