YOLO v3网络结构分析

1.Darknet-53 模型结构

在论文中虽然有给网络的图,但我还是简单说一下。这个网络主要是由一系列的1x1和3x3的卷积层组成(每个卷积层后都会跟一个BN层和一个LeakyReLU)层,作者说因为网络中有53个convolutional layers,所以叫做Darknet-53(2 + 1*2 + 1 + 2*2 + 1 + 8*2 + 1 + 8*2 + 1 + 4*2 + 1 = 53 按照顺序数,不包括Residual中的卷积层,最后的Connected是全连接层也算卷积层,一共53个)。

说明:卷积的strides默认为(1,1),padding默认为same,当strides为(2,2)时padding为valid。

下图就是Darknet-53的结构图,在右侧标注了一些信息方便理解。

YOLO v3网络结构分析

上图是以输入图像256 x 256进行预训练来进行介绍的,常用的尺寸是416 x 416,都是32的倍数。下面我们再来分析下YOLOv3的特征提取器,看看究竟是在哪几层Features上做的预测。

2.YOLOv3 模型结构

作者在论文中提到利用三个特征层进行边框的预测,具体在哪三层我感觉作者在论文中表述的并不清楚(例如文中有“添加几个卷积层”这样的表述),同样根据代码我将这部分更加详细的分析展示在下图中。

注意:原Darknet53中的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是256x256,下图是以YOLO v3 416模型进行绘制的,所以输入的尺寸是416x416,预测的三个特征层大小分别是52,26,13。

YOLO v3网络结构分析

在上图中我们能够很清晰的看到三个预测层分别来自的什么地方,以及Concatenate层与哪个层进行拼接。

注意:Convolutional是指Conv2d+BN+LeakyReLU,和Darknet53图中的一样,而生成预测结果的最后三层都只是Conv2d。通过上图小伙伴们就能更加容易地搭建出YOLOv3的网络框架了。


3.目标边界框的预测

YOLOv3网络在三个特征图中分别通过(4+1+c) k个大小为11的卷积核进行卷积预测,k为预设边界框(bounding box prior)的个数(k默认取3),其中 c表示为预测目标的类别数对应的概率(默认为20),4表示负责预测目标边界框的偏移量(x,y, w, h),1表示预测目标边界框内包含目标的概率。

下图展示了目标边界框的预测过程(该图是本人重新绘制的,与论文中的示意图有些不同,个人感觉自己绘制的更便于理解)。图中虚线矩形框为预设边界框,实线矩形框为通过网络预测的偏移量计算得到的预测边界框。其中为预设边界框在特征图上的中心坐标,为预设边界框在特征图上的宽和高,分别为网络预测的边界框中心偏移量以及宽高缩放比,为最终预测的目标边界框,从预设边界框到最终预测边界框的转换过程如图右侧公式所示,其中函数是sigmoid函数其目的是将预测偏移量缩放到0到1之间(这样能够将预设边界框的中心坐标固定在一个cell当中,作者说这样能够加快网络收敛)。

YOLO v3网络结构分析

下图给出了三个预测层的特征图大小以及每个特征图上预设边界框的尺寸(这些预设边界框尺寸都是作者根据COCO数据集聚类得到的):

YOLO v3网络结构分析

4.损失函数的计算

关于YOLOv3的损失函数文章中写的很粗略,比如坐标损失采用的是误差的平方和,类别损失采用的是二值交叉熵,本人在github上也找了很多YOLO v3的公开代码,有的采用的是YOLOv1或者YOLOv2的损失函数,下面给出本人认为正确的损失函数

YOLOv3的损失函数主要分为三个部分:目标定位偏移量损失YOLO v3网络结构分析, 目标置信度损失YOLO v3网络结构分析,以及目标分类损失YOLO v3网络结构分析,其中YOLO v3网络结构分析是平衡系数。

YOLO v3网络结构分析

4.1目标置信度损失

目标置信度可以理解为预测目标矩形框内存在目标的概率,目标置信度损失YOLO v3网络结构分析采用的是二值交叉熵损失(Binary Cross Entropy),其中YOLO v3网络结构分析,表示预测目标边界框i中是否真实存在目标,0表示不存在,1表示存在。YOLO v3网络结构分析表示预测目标矩形框i内是否存在目标的Sigmoid概率(将预测值通过sigmoid函数得到)。

YOLO v3网络结构分析

4.2目标类别损失

        目标类别损失YOLO v3网络结构分析同样采用的是二值交叉熵损失(采用二值交叉熵损失的原因是,作者认为同一目标可同时归为多类,比如猫可归为猫类以及动物类,这样能够应对更加复杂的场景。但在本人实践过程中发现使用原始的多类别交叉熵损失函数效果会更好一点,原因是本人针对识别的目标都是固定归于哪一类的,并没有可同时归于多类的情况),其中YOLO v3网络结构分析,表示预测目标边界框i中是否真实存在第j类目标,0表示不存在,1表示存在。YOLO v3网络结构分析表示网络预测目标边界框i内存在第j类目标的Sigmoid概率(将预测值YOLO v3网络结构分析通过sigmoid函数得到)。

YOLO v3网络结构分析

4.3目标定位损失

目标定位损失YOLO v3网络结构分析采用的是真实偏差值与预测偏差值差的平方和,其中YOLO v3网络结构分析表示预测矩形框坐标偏移量(注意网络预测的是偏移量,不是直接预测坐标),YOLO v3网络结构分析表示与之匹配的GTbox与默认框之间的坐标偏移量,(YOLO v3网络结构分析YOLO v3网络结构分析)为预测的目标矩形框参数,(YOLO v3网络结构分析)为默认矩形框参数, (YOLO v3网络结构分析)为与之匹配的真实目标矩形框参数,这些参数都是映射在预测特征图上的。

YOLO v3网络结构分析