一、论文相关信息
1.论文题目:YOLOv3: An Incremental Improvement
2.发表时间:2018
3.文献地址:https://arxiv.org/abs/1804.02767
4.论文源码: YOLO官网:https://pjreddie.com/darknet/yolo/
二、论文背景与简介
作者再YOLOv2的基础上做了改进,相比于YOLOv2,YOLOv3主要有下面几个改动:
YOLOv3的主干网络又变了,设计了基础网络结构Darknet-53;
YOLOv3终于加入多层分支了,一共拉取了三层;
YOLOv3选择了更多的archor box先验;
YOLOv3类别损失换了,由SoftMax换成了Logistic。
然后就是综合做了一些tricks,使性能得到提升,比如数据增强、batch normalization等。
原文很短,改进很多细节不容易理解,比如网络结构、anchor box、损失函数这些都只在YOLOv1清楚的给了图,所以这里放上一些找来的图帮助理解。
网络结构 :这里重新设计了网络结构,在Darknet-19基础上加了resnet的shortcut结构,大量使用了1×1卷积之后3×3卷积的结构,然后实验证明这个更快更好。放上作者给的图:
光是知道这个Darknet-53的网络结构还是不能理解后面的多尺度分支,需要配合下图这个
YOLOv3的结构图 来理解。图片来自博客:
https://cloud.tencent.com/developer/article/1494963
图中ResX代表着残差组内单元的个数是X,ConvBA是卷积+BN+**,BN在YOLOv2的时候就有了。YOLOv3的分支有三个,分别是第三个残差组后面的卷积输出,第四个残差组后面的卷积输出和最后的卷积输出,当输入时416时,它们的特征图尺寸分别是52×52×256,26×26×512和13×13×1024。
这样一来,分支有了,那么怎么做融合,YOLOv2采用的奇怪的reshape方式,就是维度不匹配就硬凑,这会造成特征图的空间信息被破坏掉了,所以YOLOv3使用的是Upsamlpe,不在用reshape,后面的分支输出特征图,会上采样2倍,刚好可以匹配前一层的维度,然后同样是做拼接操作。
在这以后,几层卷积进一步提取特征,然后控制通道数到255,三层分支都是255。255这个数又和之前不同了,YOLO是90,YOLOv2是125。
首先的区别是数据集换了,现在的目标检测任务主流数据集不再是VOC,而是COCO,COCO有80个类别,其次由于YOLOv3有三层,所以每一层的参考框变少了,从5个变成了3个,根据之前的计算方式:
255=3×(80+4+1)
Anchor box数量:输出三个分支,每个分支上三个每个cell预测三个archor box且每个分支的尺寸不同,那YOLOv3一共可以产生的预测个数为: 3×13×13+3×26×26+3×52×52=106473
损失函数:还是包括三部分,边框位置损失、置信度损失、类别损失,类别损失由Softmax换成了Logistic,并使用了二元交叉熵做损失函数。
YOLOv3对小目标检测效果主要是因为:
YOLOv3换了性能更强的主干网络;
YOLOv3拉取了多层分支,而且最大的特征图达到了52×52,这让小目标更容易被检测到;
YOLOv3的多层分支存在上一层的特征融合,用upsample替换了reshape,让特征在channel上没有形变;
YOLOv3的多层分支后还有多层卷积,缓解了特征图尺寸足够,但是语义信息不足的情况;
YOLOv3的archor输出达到了106747个.
以上,内容几乎转载自博客,只是想简单记录下,这样好像印象深刻些。