前言
现在对目标检测网络算法模型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四个值。
下面是几个重要的总结:
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就变成高斯概率值。其高斯概率密度公式如下所示:
在上式中, 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的不确定性的评判指标。
来源:CSDN
作者:ltshan139
链接:https://blog.csdn.net/ltshan139/article/details/103950458