本文主要是介绍YOLOv3:A Incremental Improvement,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘要:
我们对YOLO做了更新。我们做了一些列的小设计来优化效果。我们训练了这个新网络。与上次相比网络变大了但准确率更高。但不用担心,速度还是很快。320×320的YOLOv3在与SSD一样28.2mAP时只需22ms,是SSD的三倍快。在YOLOv3上使用原来0.5的IoU阈值检测mAP的效果非常好。算法在TitanX上AP50达到了57.9,速度51ms,RetinaNet则用198ms达到57.5AP50,效果相似速度快了3.8倍。代码在网址https://pjreddie.com/yolo/。
- Introduction
有时候你只是打了一年的电话?今年我没有做太多的研究。在Twitter上花费了很多时间。尝试了一段时间GANS。我去年还剩了一点动力【12】【1】;我尝试对YOLO做一些改进。但是,老实说,没有什么比特别有趣,只是一些小的改变,使它更好。我也帮助别人做了一些研究。事实上,这就是写今天这篇论文的原因。我们有deadline【4】,我们需要介绍一些我对YOLO的更新,但我们没有资料的来源。所以准备开始一份技术报告吧!
技术报告的伟大之处在于它们不需要介绍,你们都知道我们为什么在这里。在介绍的结尾我们会介绍本文剩余章节的关键内容。首先,我们会介绍YOLOv3怎么回事。然后我们会介绍如何做到。我们还会介绍一些我们尝试过却没有用的方法。最后,我们将思考这一切意味着什么。
- The Deal
所以YOLOv3是这样的:我们主要从别人那里获得好思路。我们还训练了一个新的分类器网络,它比其他分类器更好。我们将从头开始介绍整个系统,这样您就能理解所有内容。
2.1 Bounding Box Prediction
按照YOLO9000,我们的系统使用dimension clusters作为anchor来预测边界框【15】。网络为每一个BBox预测4个坐标,tx,ty,tw,th。如果单元格从图像的左上角偏移,BBox有先验宽高,那么对应的预测为:
在训练中,我们使用误差损失的平方和。假设对于某些GT的预测值为我们的梯度是真实值(通过GTBox计算)减预测值:。GT值可以很容易地计算通过反推上述公式得到。
YOLOv3使用逻辑回归预测每个边界框的客观得分。如果边界框先验与地面真值对象的重叠超过任何其他边界框先验,则该值应为1。如果边界框先验不是最好的,但是重叠了超过某个阈值的地面真值对象,我们将遵循文献【17】忽略预测。阈值设置为0.5。与文献【17】不同的是,我们的系统只为每个GT真值对象预先分配一个边界框。如果一个边界框先验没有分配给一个GT真值对象,它不会导致坐标或类预测的损失,只会导致目标损失。
-
- Class Prediction
每个框使用多标签分类预测边界框可能包含的类。我们没有使用softmax,因为我们发现它对于高性能无益,相反,我们只是使用独立的logistic分类器。在训练过程中,我们使用二元交叉熵损失进行类别预测。
当我们转向更复杂的领域,比如开放图像数据集【7】时,这个方式会有所帮助。这个数据集中有许多重叠的label(例如女人与人类)。使用softmax会假定每个框只有一个类,而通常情况并非如此。多标签方法可以更好地对数据建模。
2.3 Predictions Across Scales
YOLOv3在三个不同尺度上预测边界框。我们的系统从这些尺度中提取特征,使用类似于特征金字塔网络【8】的概念。从我们的基本特征提取器,我们添加了几个卷积层。最后一个预测了一个三维张量编码的边界框、对象和类预测。自我们使用COCO的实验中,每个尺度预测三个bbox,所以四个offset的tensor尺寸为,1个是目标位置的预测,80个类别预测。
接下来,我们从之前的两层中提取特征图,并将其向上采样2倍。我们还从网络的早期获取一个feature map,并使用连接将其与我们的上采样特性合并。该方法允许我们从上采样的特征中获取更有意义的语义信息,并从早期的特征图中获取更细粒度的信息。然后,我们再添加几个卷积层来处理这个组合的特征图,并最终预测出一个类似的张量,尽管现在张量是原来的两倍。
我们再次执行相同的设计来预测最终的bbox。因此,我们对第三个尺度的预测得益于所有的先验计算以及网络早期的细粒度特性。
我们仍然使用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中使用的网络和创新的ResNet之间的组合。我们的网络使用连续的3*3和1*1卷积层,但现在也有一些shortcut,而且明显更大。网络有53层,所以我们将它称为darknet53。
这个新网络比Darknet-19强大得多,但仍然比ResNet-101或ResNet-152更高效。下面是一些ImageNet的结果:
每个网络都是以确定的设置训练,并用256*256尺寸,single crop进行准确率测试。运行时间是在Titan X上以256*256尺寸测量。因此,Darknet-53的性能与最先进的分类器相当,但浮点运算更少,速度更快。Darknet-53比ResNet-101好,并且比ResNet-101快1.5倍。Darknet-53的性能与ResNet-152相似,并且比后者快2倍。
Darknet-53还实现了每秒最高的浮点运算。这意味着网络结构更好地利用GPU,使其更有效地评估,从而更快。这主要是因为ResNets层太多,效率不高。
2.5 Training
我们仍然使用完整的图像训练,没有附加的负样本最小化或任何东西。我们使用多尺度训练,大量的数据扩充,BN以及其他标准训练方式。我们使用Darknet神经网络框架进行训练和测试【14】。
3、How We Do
YOLOv3的表现很不错。如表3所示。就COCOs怪异的平均AP指标而言,它与SSD的改进效果相当,但比SSD快3倍。不过,在这个指标上,它仍然远远落后于RetinaNet等其他模型。
但是,当我们使用IOU=:5(或图中AP50)看mAP的“旧”的度量方式时,YOLOv3非常强大。它几乎与RetinaNet相当,远远高于SSD的改进。这表明YOLOv3是一个非常强大的检测器,它擅长为目标生成BBox。然而,随着IOU阈值的增加,性能显著下降,这表明YOLOv3很难使框与目标完全对齐。
过去YOLO对小目标的效果不好。然而,现在我们看到了这种趋势的逆转。通过新的多尺度预测,我们看到YOLOv3具有相对较高的APS性能。然而,它在中、大尺寸物体上的性能相对较差。要弄清这件事的真相,还需要更多的研究。
当我们在AP50度量上绘制精度与速度的关系图时(参见图5),我们看到YOLOv3比其他检测系统具有显著的优势。也就是说,它更快更好。
4、Things We Tried That Didn’t Work
我们在YOLOv3上做了很多尝试。很多都没有成功。这是我们能记住的东西。
Anchor box x; y offset predictions。我们尝试使用普通的anchor box机制来预测x;使用线性激活将y偏移量作为框宽或框高的倍数。我们发现这个公式降低了模型的稳定性,效果不太好。
用线性x,y预测代替logic预测。我们尝试用线性激活来直接预测x;y偏移而不是逻辑推理激活。这导致了mAP的几个点下降。
Focal Loss。我们尝试使用Focal Loss。我们的mAP下降了约两个点。YOLOv3可能已经对focal loss试图解决的问题很鲁棒,因为它有独立的对象预测和条件类预测。因此,对于大多数例子来说,类预测没有损失?还是什么?我们不完全确定。
Dual IOU thresholds and truth assignment。Faster RCNN在训练中使用两个IOU阈值。如果一个预测与GT值重叠了0.7,那么它就是一个正样本,如果[:3-:7]它就被忽略了,对于所有GT对象,它都小于0.3,那么它就是一个负样本。我们尝试了类似的策略,但没有得到好的结果。
我们很喜欢我们目前的方案,它看起来至少是局部最优的。有可能这些技术中的一些最终会产生良好的效果,也许他们只是需要一些调整来稳定训练。
5、What This All Means
YOLOv3是一个很好的检测器。它快速、准确。在0.5到0.95IOU之间的COCO平均AP并没有那么好。但它在旧的0.5 IOU检测指标上非常好。
为什么我们要改变度量标准呢?最初的COCO论文只有这样一句隐晦的话:“一旦评估服务器完成,将添加对评估指标的全面讨论”。 Russakovsky等人报告说,人类很难区分IOU0.3和0.5! “训练人类视觉上检查一个IOU值为0.3的边界框,并将其与IOU值为0.5的边界框区分开来,这是非常困难的。“如果人类很难分辨出它们之间的区别,这又有多大关系呢?
但或许一个更好的问题是:“既然我们有了这些检测器,我们要拿它们做什么?”很多做这项研究的人都在谷歌和Facebook。我想,至少我们知道这项技术掌握得很好,肯定不会被用来收集你的个人信息,然后卖给……等等,你是说这就是它的用途??
其他大量资助视力研究的人是军队,他们从来没有做过什么可怕的事比如用新技术杀死很多人等等…
我非常希望大多数使用计算机视觉的人只是在快乐地用它做一些有益的事情,比如在国家公园[13]中数斑马的数量,或者在他们的猫在他们的房子[19]中漫步时跟踪它们。但是,计算机视觉已经开始受到质疑,作为研究人员,我们有责任至少考虑一下我们的工作可能造成的危害,并想办法减轻它。我们欠这个世界很多。
这篇关于YOLOv3:A Incremental Improvement的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!