YOLOV3 论文解读

论文:YOLOv3: An Incremental Improvement
地址:https://arxiv.org/abs/1804.02767
代码:Pytorch版本 官方版本(c)
来源:arxiv

Structure

这篇博客中的图片很好的解释了YOLOV3的结构,我们先从总体上进行介绍。
YOLOV3 论文解读
DBL: 如图左下角所示,DBL包含三部分组成,分别是卷积、BN、Leakely relu。在cfg文件中就是如下部分,batch_normalize=1代表了有BN,activeation=leaky就是leakely relu。
YOLOV3 论文解读
resn: n代表了数字,n为多少就代表了有几个残差块,每个resn由一个zero padding、DBL和n个残差块组成。这里的padding不是0而是1,是通过stride=2
实现的下采样。下图是通过parse_model_cfg将cfg文件解析之后的。
YOLOV3 论文解读
concat: 张量拼接,需要纬度相同的张量,因为经过resn之后进行了下采样,所以他们的张量大小是不一致的,所以通过上采样,实现了张量一致。

整个yolov3总共包含252层网络。
Add:23层,就是在23层resblock中,每个resblock一个add。
BatchNormalization:72层。在72个DBL中,每个DBL中包含一个BN。
LeakyReLU:72层,同样是在72个DBL中,每个DBL中都包含一个LeakyReLU。
Conv2D:75,72个DBL中的Conv2d+3个Conv2d(y1,y2,y3)之前的。
Concatenate:2,
UnSampling:2,concat和上采样都是2。
zeropadding:5,在cfg中是没有pad=0的,这里应该是通过stride=2实现的下采样。
YOLOV3 论文解读

tricks

Bounding box prediction

这里和v2一样,网络预测的是tx,ty,tw,th,to,然后进行loss计算,在inference的时候通过一下公式生成bx,by,bw,bh。
YOLOV3 论文解读

class prediction

YOLO v3的Bounding Box由YOLOV2又做出了更好的改进。在yolo_v2和yolo_v3中,都采用了对图像中的object采用k-means聚类。
v3这里使用的是logistic,而不是用的softmax。在训练数据集中存在person和women两类,softmax只能预测出概率最大的一类,而logistic可以预测出所属不同类别的概率,然后在选出一个概率最大的类别作为预测类别。

v3在feature map中的每一个cell都会预测3个边界框(bounding box) ,每个bounding box都会预测三个东西:(1)每个框的位置(4个值,中心坐标tx和ty,,框的高度bh和宽度bw),(2)一个objectness prediction ,(3)N个类别,coco数据集80类,voc20类。
v1中预测的是三个bounding box的 tx,ty,tw,th,to 然后再加上N个类别,一个cell预测N个类别。
三次检测,每次对应的感受野不同,32倍降采样的感受野最大,适合检测大的目标,所以在输入为416×416时,每个cell的三个anchor box为(116 ,90); (156 ,198); (373 ,326)。16倍适合一般大小的物体,anchor box为(30,61); (62,45); (59,119)。8倍的感受野最小,适合检测小目标,因此anchor box为(10,13); (16,30); (33,23)。所以当输入为416×416时,实际总共有(52×52+26×26+13×13)×3=10647个proposal box。

YOLOV3 论文解读
感受一下9种先验框的尺寸,下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。
YOLOV3 论文解读

Predictions Across Scales

每中scale中,每个cell预测三个bounding box,N ×N ×[3∗(4+1+80)]。

Feature extractor

在整个v3结构中,是没有池化层和全连接层。在前行传播的过程中,张量尺寸变换是通过改变卷积和的步长来实现的,也就是stride=2。v2中使用过5次最大池化实现的张量尺寸的变化。
YOLOV3 论文解读

参考

yolo系列之yolo v3【深度解析】
一文看懂YOLO v3