Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)

在目标检测的落地项目中,实时性和精确性的trade-off至关重要,而YOLOv3是目前为止在这方面做得最好的算法。本文通过高斯分布的特性,改进YOLOv3使得网络能够输出每个检测框的不确定性,从而提升了网络的精度。

论文:Gaussian YOLOv3: An Accurate and Fast Object Detector Using Localization
Uncertainty for Autonomous Driving

论文翻译(在我的百度云盘里,大家可以直接下载,额,就是有点color,本人太懒,不想改,哈哈哈~~~)
源码

YOLOv3
Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)
如上图(a)所示,为YOLOv3的网络架构。

YOLOv3使用了skip shotcut的操作方式网络过深而引起的梯度消散。

YOLOv3使用了up-sample操作,并将大特征图和小特征图upsample后的特征图进行concat,使网络能够拥有既包含丰富的高层抽象特征和精确的位置信息特征的融合特征层。

YOLOv3使用了特征金字塔结构,使得网络能够在三个不同的尺度特征下做目标检测,能够适应与多种不同大小的目标检测任务。

如上图(b)所示,为利用YOLOv3进行目标检测时的网络输出。

RGB3通道图像作为YOLOv3网络的输入,检测结果会在三个不同的尺度分别输出,包含了目标的坐标位置,目标是正样本还是负样本的概率,目标属于某个类别的置信度。对于每个尺度分支而言,在每个grid cell中会预测出三个结果(每个尺度下会有三个anchor)。将三个尺度的结果合并,进行非极大值抑制(NMS)后,输出最终的检测结果。

正如YOLOv3的输出结果所述,目标类别是有概率值的,但目标框只有位置而没有概率值,也就是从结果中无法预知当前目标框的可靠性。基于此,本文利用Gaussian模型来对网络输出进行建模,在基本不改变YOLOv3结构和计算量的情况下,能够输出每个预测框的可靠性,并且在算法总体性能上提升了3个点的MAP。

Gaussian YOLOv3

如图所示,Gaussian YOLOv3通过增加网络的输出,和改进网络的损失函数,实现了对预测框可靠性的输出。

Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)
下图为源代码对比,从中我们可以看出,与原始的YOLOv3在坐标预测时输出4个维度不同,Gaussian YOLOv3在bounding box的坐标预测输出中包含了8个维度。
Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)
这八个维度相当于是预测框中心坐标和长宽,以及对应预测框的不确定性。作者将这些指建模为四个高斯分布,目标框的位置作为高斯分布的均值,对应的不确定性作为方差。如下图的比对代码所示,Gaussian YOLOv3通过预测每个坐标位置的不确定性,从而提升最终预测prob值的精确性。
Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)
由于Gaussian YOLOv3的输出进行了调整,与之对应的损失函数的计算也会做相应的调整。与原始的YOLOv3相比,仅仅调整了预测框坐标位置的回归策略。如下代码对比所示,原始的YOLOv3进行box回归时,由于网络预测输出就是坐标本身,因此计算梯度时就利用了均方误差的方式。而由于Gaussian YOLOv3输出的是均值和方差,因此在计算梯度时就结合了高斯分布的策略。
Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)
Gaussian YOLOv3的损失函数如下:
Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)
Gaussian YOLOv3与其他算法的结果参照
Gaussian YOLOv3 | ICCV2019,Stronger YOLOv3(有论文翻译)

下面这篇文章,有兴趣可以看下
目标检测Anchor-free分支:基于关键点的目标检测(最新网络全面超越YOLOv3)