YOLOv3论文阅读记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shiheyingzhe/article/details/84031421

 YOLOv3:An Incremental Improvement
论文的链接:https://arxiv.org/pdf/1804.02767.pdf

这个版本的更新有很多改动尤其是网络方面的,网络变得更大也更准确。320 * 320的图片作为YOLOv3的输入,每张图片的平均运行时间是22ms,有28.2mAP,和SSD相同的准确率但比SSD快3倍。在某些评价标准中表现比RetinaNet要好。

The Deal

本文从其他人文章那里拿到好的主意想法,就是参考其他网络的设计。还训练一个新的分类网络。

包围盒预测
和YOLO9000相同仍然使用尺寸簇作为anchor boxes来预测包围盒。网络对每个包围盒预测5个值,其中有包围盒的坐标t_x,t_y,t_w,t_h,以及objectness。YOLOv3使用逻辑回归对每个包围盒预测一个objectness分数。这里使用的是平方和误差。如果一个包围盒与ground truth的IOU值比覆盖这个ground truth的其他包围盒要大,那么这个包围盒的objectness应该等于1。如果某些包围盒覆盖了ground truth且IOU大于某个阈值,但不是最大的,会忽略这些包围盒的预测结果,这里设置的阈值是0.5。不像Faster R-CNN,可能给gt分配多个包围盒,本系统仅给每个ground truth分配一个包围盒。如果一个包围盒没有被分配给ground truth,就不用计算它的坐标损失和分类损失,仅仅需要计算objectness损失。
b_x=\sigma(t_x)+c_x \par b_y=\sigma(t_y)+c_y \par b_w=p_we^{t_w} \par b_h=p_he^{t_h} \par Pr(object)\ * \ IOU(b,object)=\sigma(t_o)

其中t_x,t_y,t_w,t_h,t_o是预测值
\sigmasigmoid函数的简写,将输入缩放到(0,1)之间。
c_x,c_y是anchor的左上角(相对于特征图),p_w,p_h是anchor的宽和高,这里说的都是在最后一层特征图上的,不是原图。
b_x,b_y,b_w,b_h是通过预测值求得的包围盒,由于特征图很小,特征图的每个网格值小于1,所以b_x\in\left [ c_x, c_x+1\right ],b_y\in\left[c_y,c_y+1 \right ],其中1代表网格的范围。所以预测的中心点(b_x,b_y)在网格内,不会跑到网格外面去。
图中蓝色框是预测的框,蓝色点是预测框的中心点。虚线框是anchor。图中的网格指的是特征图,不是原图。

查看Darknet中YOLOv3的配置文件yolov3.cfg
[region] anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
这里的anchor都很大的,可见这里的anchor指的是原图中的。上面的公式指的是特征图中的。配置文件中的anchor指的是原图。文中没有写具体,如果将这张图和代码中的配置联系起来,是有问题的,代码中的和图中的不对应,图中是指特征图,不然结论就不对。

分类预测
每个盒子都会使用多标签分类来预测包围盒可能的包含的类。这里不使用softmax,简单地使用独立的逻辑回归分类器。在训练分类时使用交叉熵损失。
这有助于处理更复杂的数据集,这些数据集有很多重叠的标签(例:黄种人和人)。使用softmax的假设是每个盒子只有一个类标签,但通常情况不是这样的。多标签的方法有助于对这样的数据建模。

多尺度预测
YOLOv3在3中不同尺度scales分别预测包围盒。像FPN(特征金字塔网络)那样,系统从这些尺度中提取特征。在基础特征提取器上增加几个卷积层。最后预测3维向量,包括包围盒、objectness和分类预测。在COCO实验中每个尺度预测3个盒子所以输出的向量为N x N x[3 * (4 + 1 + 90)],其中4代表包围盒偏移量,1代表objectness预测,90代表类标签预测。

图中先对最后一层输出,经过加入的卷积层convs然后预测;然后上采样2倍,与减少通道数量以后的“上层”输出拼接起来,经过加入的卷积层convs然后预测;接着再上采样2倍,与减少通道数量以后的“上上层”输出拼接起来,经过卷积层convs然后预测得到输出结果。
这种方法能从上采样的特征图上获得更有意义的语义信息,从“上层”、“上上层”的特征图中得到细粒度的信息。增加新的卷积层convs去处理拼接起来的特征图,最终得到预测的多维向量。
同样对最终的尺度Scales 3预测包围盒。因此对第3个尺度Scales 3的预测得益于所有之前的计算以及网络早期的细粒度特征。
这里仍然使用k-means聚类决定包围盒的尺寸,YOLOv2、v3使用K-means聚类计算anchor boxes的具体方法,选择k=9,就有9个尺寸大小以及3个尺度,在COCO数据集中簇的设定为:(10× 13); (16× 30); (33× 23); (30× 61); (62× 45); (59×119); (116 × 90); (156 × 198); (373 × 326).

特征提取器
特征提取使用新的网络Darknet-53,有连续的3 x 3和1 x 1卷积层,共有53个卷积层所以就叫Darknet-53。新网络比之前的Darknet-19强大很多,仍然比ResNet-101或者ResNet-152更有效率。图中网络以相同的设置训练并且在256 x 256的图片上测试。可以看到Darknet-53网络很快准确率也高。ResNet慢的原因可能是因为网络层数过多。

训练
仍然使用全图训练,不使用困难样本。使用多尺度输入训练,大量的数据增强,BN,以及所有标准的处理。

表格中可以看到和SSD的准确率齐平,但是它的3倍快。但还是远远落后于其他模型像RetinaNet。然而,当关注旧的mAP检测标准AP_{50}(或IOU=0.5)时,YOLOv3很强,几乎和RetinaNet齐平,远远大于SSD。这意味着YOLOv3擅长生成适合物体的包围盒。然后当IOU阈值到达0.75以后,表现下降很多,意味着YOLOv3很难生成与物体完全对齐的包围盒。
以前的版本YOLO不擅长检测小物体。然而现在反过来的。用多尺度预测YOLOv3有很好的AP_S表现,然而YOLOv3在预测中等、更大尺寸的物体时表现很糟糕。

图中表现的是在AP_{50}标准中的准确率vs速度曲线,可以看到YOLOv3既快又好

本文还记录尝试过但没有效果的方法

YOLOv3是又快又准确的检测器。尽管在COCO数据集的测试中,当AP在0.5到0.95之间时,表现不是那么好,但在旧的检测标准中表现很好。
为什么要改变指标?最初的COCO文中有句话是“一旦评估服务完成,将加入关于评判指标的全面讨论”。Russakovsky et al报告称人类在区分IOU0.3和0.5时是有困难的。“通过训练让人们区分IOU等于0.3的包围盒和IOU等于0.5的包围盒是相当困难的”。既然人类很难区分不同之处,这么做有什么意义呢?




 

猜你喜欢

转载自blog.csdn.net/shiheyingzhe/article/details/84031421