论文题目:《YOLOv3: An Incremental Improvement
》
论文地址:/media/files/papers/YOLOv3.pdf
一文读懂YOLOv1:YOLOv1
一文读懂YOLOv2:YOLOv2
一文读懂YOLOv4:YOLOv4
前言
针对YOLOv2的缺陷,Joseph“大神”又推出了YOLOv3版本,将当今一些较好的检测思想融入到了YOLO中,在保持速度优势的前提下,进一步提升了检测精度,尤其是对小物体的检测能力。
具体来说,YOLOv3主要改进了网络结构、网络特征及后续计算三个部分。
1. 新网络结构:DarkNet53
YOLOv3继续吸收了当前优秀的检测框架的思想,如残差网络和特征融合等,提出了如图下图所示的网络结构,称之为DarkNet-53。作者在ImageNet上实验发现darknet-53相对于ResNet-152和ResNet101,不仅在分类精度上差不多,计算速度还比ResNet-152和ResNet-101强多了,网络层数也比它们少。
这里默认采用416×416×3的输入,图中的各模块意义如下:
● DBL:代表卷积、BN及Leaky ReLU三层的组合,在YOLOv3中卷积都是以这样的组合出现的,构成了DarkNet的基本单元。DBL后面的数字代表有几个DBL模块。
● res:res代表残差模块,res后面的数字代表有几个串联的残差模块。
● 上采样:上采样使用的方式为上池化,即元素复制扩充的方法使得特征图尺寸扩大,没有学习参数。
● Concat:上采样后将深层与浅层的特征图进行Concat操作,即通道的拼接,类似于FPN,但FPN使用的是逐元素相加。
● 残差思想:DarkNet-53借鉴了ResNet的残差思想,在基础网络中大量使用了残差连接,因此网络结构可以设计的很深,并且缓解了训练中梯度消失的问题,使得模型更容易收敛。
● 多层特征图:通过上采样与Concat操作,融合了深、浅层的特征,最终输出了3种尺寸的特征图,用于后续检测。多层特征图对于多尺度物体及小物体检测是有利的。
● 无池化层:之前的YOLO网络有5个最大池化层,用来缩小特征图的尺寸,下采样率为32,而DarkNet-53并没有采用池化的做法,而是通过步长为2的卷积核来达到缩小尺寸的效果,下采样次数同样是5次,总体下采样率为32。
下图为论文中给出的DarkNet分类网络结构:
下图是更为细致的网络结构:
每层的输出情况:
layerfilters size inputoutput0 conv32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BF1 conv64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BF2 conv32 1 x 1 / 1 208 x 208 x 64 -> 208 x 208 x 32 0.177 BF3 conv64 3 x 3 / 1 208 x 208 x 32 -> 208 x 208 x 64 1.595 BF4 Shortcut Layer: 15 conv 128 3 x 3 / 2 208 x 208 x 64 -> 104 x 104 x 128 1.595 BF6 conv64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64 0.177 BF7 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128 1.595 BF8 Shortcut Layer: 59 conv64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64 0.177 BF10 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128 1.595 BF11 Shortcut Layer: 812 conv 256 3 x 3 / 2 104 x 104 x 128 -> 52 x 52 x 256 1.595 BF13 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF14 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF15 Shortcut Layer: 1216 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF17 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF18 Shortcut Layer: 1519 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF20 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF21 Shortcut Layer: 1822 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF23 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF24 Shortcut Layer: 2125 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF26 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF27 Shortcut Layer: 2428 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF29 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF30 Shortcut Layer: 2731 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF32 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF33 Shortcut Layer: 3034 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF35 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF36 Shortcut Layer: 3337 conv 512 3 x 3 / 2 52 x 52 x 256 -> 26 x 26 x 512 1.595 BF38 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF39 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF40 Shortcut Layer: 3741 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF42 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF43 Shortcut Layer: 4044 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF45 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF46 Shortcut Layer: 4347 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF48 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF49 Shortcut Layer: 4650 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF51 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF52 Shortcut Layer: 4953 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF54 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF55 Shortcut Layer: 5256 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF57 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF58 Shortcut Layer: 5559 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF60 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF61 Shortcut Layer: 5862 conv 1024 3 x 3 / 2 26 x 26 x 512 -> 13 x 13 x1024 1.595 BF63 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF64 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF65 Shortcut Layer: 6266 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF67 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF68 Shortcut Layer: 6569 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF70 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF71 Shortcut Layer: 6872 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF73 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF74 Shortcut Layer: 7175 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF76 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF77 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF78 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF79 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512 0.177 BF80 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024 1.595 BF81 conv18 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 18 0.006 BF82 yolo83 route 7984 conv 256 1 x 1 / 1 13 x 13 x 512 -> 13 x 13 x 256 0.044 BF85 upsample 2x 13 x 13 x 256 -> 26 x 26 x 25686 route 85 6187 conv 256 1 x 1 / 1 26 x 26 x 768 -> 26 x 26 x 256 0.266 BF88 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF89 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF90 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF91 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256 0.177 BF92 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512 1.595 BF93 conv18 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 18 0.012 BF94 yolo95 route 9196 conv 128 1 x 1 / 1 26 x 26 x 256 -> 26 x 26 x 128 0.044 BF97 upsample 2x 26 x 26 x 128 -> 52 x 52 x 12898 route 97 3699 conv 128 1 x 1 / 1 52 x 52 x 384 -> 52 x 52 x 128 0.266 BF100 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF101 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF102 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF103 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128 0.177 BF104 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256 1.595 BF105 conv18 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 18 0.025 BF106 yolo
2. 多尺度预测
从网络结构中可以看出,YOLOv3输出了3个不同大小的特征图,从上到下分别对应深层、中层与浅层的特征。深层的特征尺寸小,感受野大,有利于检测大尺度物体,而浅层的特征图则与之相反,更便于检测小尺度物体,这一点类似于FPN结构。
YOLOv3依然沿用了预选框Anchor,由于特征图数量不再是一个,因此匹配方法也要相应地进行改变。具体做法是:依然使用聚类算法得到9中不同大小宽高的先验框,然后按照下图所示的方法进行先验框的分配,这样,每一个特征图上的一个点只需要3个先验框,而不是YOLOv2中的5个。
YOLOv3使用的方法有别于SSD,虽然都利用了多个特征图的信息,但SSD的特征是从浅到深地分别预测,没有深浅的融合,而YOLOv3的基础网络更像是SSD与FPN的结合。
YOLOv3默认使用了COCO数据集,一共80个物体类别,因此一个Anchor需要80维的类别预测值,4个位置预测及一个置信度预测。每个cell有三个Anchor,因此一共需要3×(80+5)=255,也就是每一个特征图的预测通道数。
3. Softmax改为Logistic
YOLOv3的另一个改进是使用了Logistic函数代替Softmax函数,以处理类别的预测得分。原因在于,Softmax函数输出的多个类别预测之间会相互抑制,只能预测出一个类别,而Logistic分类器相互独立,可以实现多类别的预测。
实验证明,Softmax可以被多个独立的Logistic分类器取代,并且准确率不会下降,这样的设计可以实现物体的多标签分类,例如一个物体如果是Women的同时,同时 也属于Person。
值得注意的是,Logistic类别预测方法在Mask R-CNN中也被采用,可以实现类别间的解耦。预测之后使用Binary的交叉熵函数可以进一步求得类别损失。
4. 总结
到为止,YOLO历经了3个版本的演变,在物体检测领域做出了卓越的成绩,以最先进的YOLOv3为例,其主要优缺点如下:
● 优点:速度快是YOLO系列最重要的特质,同时YOLO系列的通用性很强,由于其正样本生成过程较为严格,因此背景的误检率也较低。
● 缺点:位置的准确性较差,召回率也并不高,尤其是对遮挡与拥挤这种较难处理的情况,难以做到高精度。
注:YOLO比SSD更常用一些。具体表现在:实际应用中YOLO效果可能要更好一点,另一个就是YOLO的生态好于SSD。
如果觉得《【目标检测】单阶段算法--YOLOv3详解》对你有帮助,请点赞、收藏,并留下你的观点哦!