高斯YoloV3目标检测(文中供源码链接)

2020-07-16 12:11:31 浏览数 (1)

概述

这个高斯yolov3是一个老的技术,最近看到了,就和大家分享一下!

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

主要是在yolov3中,bbox的回归没有对边界框概率的评估,因此为bbox的四个坐标值分别拟合一个高斯分布。

模型

高斯yolov3是yolov3的改进版,它利用高斯分布的特性(也叫正态分布,详见参考资料),改进yolov3,使得网络能够输出每个检测框的不确定性,从而提升了网络的精度。

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

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

The provided example weight file ("Gaussian_yolov3_BDD.weights") is not the weight file used in the paper, but newly trained weight for release code validation. Because this weight file is more accurate than the weight used in the paper, we provide this file in the repository.

输出Bounding box的四个坐标、Objectness score和Class scores。为bounding box输出的四个坐标分别添加一个高斯分布,得到对应输出为:

Guassian YOLOv3介绍

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

  • 新的预测输出

下图为源代码对比,从中我们可以看出,与原始的YOLOv3在坐标预测时输出4个维度不同,Guassian YOLOv3在bounding box的坐标预测输出中包含了8个维度。

  • 新的损失函数

由于Gaussian YOLOv3的输出进行了调整,与之对应的损失函数的计算也会做相应的调整。与原始的YOLOv3相比,仅仅调整了预测框坐标位置的回归策略。如下代码对比所示,原始的YOLOv3进行box回归时,由于网络预测输出就是坐标本身,因此计算梯度时就利用了均方误差的方式。而由于Gaussian YOLOv3输出的是均值和方差,因此在计算梯度时就结合了高斯分布的策略。

  • GT值的计算
  • 最终的预测输出

其实为两个方差取平均后的值,最终对conf值进行修改,其他的得分例如class score和location score并未发生改变,因此实际进行的改动并不大。

对比结果

可视化结果:

0 人点赞