YOLOV3整体运行流程整理
1.网络输入:
YOLO V3依然采用YOLOV2中Multi-Scale Training的思想,每隔几次迭代后就会微调网络的输入尺寸。
训练时每迭代10次就会随机选择新的输入图像尺寸,因为YOLOV3的网络使用的下采样倍率为32,所以使用32的倍数调整输入图像尺寸{320,352,…,608},训练使用的最小的图像尺寸为320 x 320,最大的图像尺寸为608 x 608,这使得网络可以适应多种不同尺度的输入。
2.网络结构Darknet-53:
作者首先训练了一个Darknet-53,YOLO V3网络就是使用了Darknet-53去除全连接层的前面52层。主要目的为:
1)这个网络结构能在ImageNet上有好的分类结果,从而说明这个网路能学习到好的特征;
2)Darknet-53相对于ResNet-152和ResNet-101,不仅在分类精度上相差不大,计算速度优于ResNet-152和ResNet-101,网络结构也更加简洁。
Darknet-53采用了残差网络的跳层连接方式,性能优于ResNet-152和ResNet-101这两种深层网络可能的原因为:
a.网络的基本单元的差异;
b.网络层数越少,参数少,需要的计算量少。
基础网络结构如下所示,可见这个网络大量使用残差的跳层连接,并去除池化层,使用的是步长为2的卷积来进行降采样。
3.多尺度预测:
如下图所示,在Darknet-53的基础上通过上采样和concat操作,输出了三个大小不同的特征图,从上到下分别对应深层/中层/浅层特征,实现了深浅层特征的融合。
1)尺度1: 在基础网络之后添加一些卷积层再输出box信息;
2)尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍;
3)尺度3: 与尺度2类似,使用了32x32大小的特征图。
4.Anchors:
YOLO V3使用聚类算法得到9种不同宽高的先验框,前面输出的三种不同尺寸的特征图,每个特征图上的一个点只需要预测三个先验框。如COCO数据集在特征图上的anchors分布如下所示(默认输入为416*416*3):
特征图大小 | 感受野 | 先验框 |
13*13 | 大 | (116*90)(156*198)(373*326) |
26*26 | 中 | (30*61)(62*45)(59*119) |
52*52 | 小 | (10*13)(16*30)(33*23) |
因此在默认输入为416*416时,实际总共有(13*13+26*26+52*52)*3=10647个推荐框。
5.网络输出:
以COCO数据集为例,COCO数据集共有80个物体类别,因此每个先验框需要预测85维(80维类别预测值/4个位置预测值/1个置信度预测值);由于特征图中的每一个cell都会预测3个边界框,因此每一个特征图的预测通道数为:3*85=255维。
关于分类预测值,YOLO V3采用Logistic函数代替了Softmax函数,使得各个分类相互独立,实现了类别解耦。
关于位置预测值,YOLO V3通常不会预测边界框中心的确切坐标,它预测的是与预测目标的网格单元左上角相关的偏移,并且使用特征图中的cell大小进行了归一化。
当输入图像为416*416时,假设边框中心偏移预测值是 (0.4, 0.7),则实际边框在 13 x 13 特征图上预测所得的相对坐标是 (1.4, 1.7),具体的位置x坐标还需要1.4乘以cell的宽,y坐标为1.7乘以cell的高。
YOLO V3得出的宽/高偏移预测值使用图像的高和宽进行了归一化,假设预测值为(0.3, 0.8)则13 x 13 特征图的实际宽和高是 (13 x 0.3, 13 x 0.8)。
6.参考文献:
(1)https://www.cnblogs.com/xbit/p/10036981.html
(2)https://blog.csdn.net/chandanyan8568/article/details/81089083
(3)《深度学习之pytorch物体检测实战》