YOLOV3模型优化系列(一)Gaussian YOLOV3介绍

前言

现在对目标检测网络算法模型YOLOV3优化的文章很多,有很多新的思想提出来了,比如focal loss,denseNet,anchors free以及注意力机制等。我个人比较偏好那些源代码开放,方法简单明了,可操作性强同时想法合理的papers。以这种标准来看,Gaussian-YOLOV3无疑算得上不错得优化算法模型,至少能很快看到结果。

简介

Gaussian YOLOV3算法模型是ICCV 2019得一篇paper提出来的。它对应的项目代码已经开源(https://github.com/jwchoi384/Gaussian_YOLOv3)。从代码角度来看,它只是在官方darknet框架代码的基础上添加一个新的层:Gaussian-yolo层的支持。所以如果你之前编译过darknet框架代码,那么这个项目代码下载后就可以直接编译成功了。 

如果你想对自己数据集进行Guassian yolo3模型的训练,那么只需要将cfg文件中的[yolo]改成[Gaussian-yolo],同时将前面的filters数目由(class_num+5)*3改成(class_num+9)*3即可。至于为什么变成了+9,下面会详细解释。

原理

从原理上看,Gaussian yolov3模型和官方经典YOLOV3的唯一区别就是前者对bbox的输出是x,y,w和h的均值和方差,一共有8个值,如下图红框所示;而后者直接仅仅生成x,y,w和h四个值。

YOLOV3模型优化系列(一)Gaussian YOLOV3介绍_第1张图片

下面是几个重要的总结:

1) 这样bbox生成值就构成了输出层前面的卷积filter数目为(class_num+1+8)*3。 

2)在官方YOLOV3模型中,bbox的loss值是简单的mse,即predict的tx ty tw和th分别和GT的tx,ty,tw以及th进行差的平方和。而在Gaussian YOLOV3模型中,它们的delta就变成高斯概率值。其高斯概率密度公式如下所示:

YOLOV3模型优化系列(一)Gaussian YOLOV3介绍_第2张图片

在上式中, x是GT的tx或ty或tw或th,而miu和sigma平方则是对应的Gaussian yolo层的输出。由此可见,每组miu、sigma平方值和GT对应值应用上面公式就能求得一个概率值。

根据高斯概率分布曲线,如果predict出来的miu离对GT值很近的话,那么概率密度值就越大。 当然在真正在计算delta时,用的是(x-miu)/sigma。当GT值离miu值越近的话,delta值越小。

3)实际上在基于Gaussian yolo层的输出来求真正BBOX的坐标值用的是x,y,w和h对应的miu值。 而对应sigma值时来表示这些坐标值的不确定性,sigma值越大,表示该组bbox坐标值越不靠谱。这样Gaussian yolo3模型除了object score,class score外,还多一个bbox的不确定性的评判指标。

 

 

你可能感兴趣的:(深度学习)