对于目标检测,大家在网络结构上,IOU上,Anchor上做了大量文章,这篇文章优秀的地方在于提出了针对于bbox可靠性的想法,想到了用高斯模型来评估bbox坐标的可靠性,提出了一种新的计算bbox的loss。

高斯模型

首先回顾一下最原始的YOLOv3:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

对于输出feature,每个点输出3×((tx, ty, tw, th)+ obj_score + class_score)个信息。其中3表示每个位置预设3个anchors,obj_score包含了是否包含目标的可靠性信息, class_score包含了类别的可靠性信息,唯独关于bbox,我们仅有关于坐标的相关信息tx, ty, tw, th,但这些坐标信息并不能表示该bbox的可靠性。基于此,文章提出了将高斯模型用到bbox的坐标预测上,通过高斯模型的标准差来估计坐标信息的可靠性。

加入高斯模型后,网络的输出变成了这样:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

bbox坐标输出变成了解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了,其中μ代表均值,∑代表标准差,但这里还不是严格意义上高斯模型要用到的均值和标准差,需要做如下变换:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

最终得到解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了,才是高斯模型的均值,这个值在计算bbox坐标的时候可以直接当做解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了来用。其中有几点需要注意的:

  • 对于解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了做了sigmoid变成了解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了,将值限定在(0,1)的范围内秉承了YOLO的一贯思想:每个grid检测的物体中心必须落在当前grid的内。
  • 解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了没有做sigmoid是因为宽高的scale变化有可能超过1,这个做法也同原YOLOv3相同。
  • 标准差解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了也通过sigmoid将值限定在(0,1)范围内,这是因为标准差表明了点坐标的可靠性,0表示非常可靠,1表示不可靠。

loss function

对bbox坐标做了这样的变换后,网络输出的每个bbox coordinate都将满足均值为μ,标准差为∑的高斯分布,因此文中采用了NLL_LOSS,即negative log likelihood loss:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

下面的内容数学预警,你可以选择不看!!

如果你对机器学习比较熟悉,那这个loss就比较好解释。如果不熟的话,我们可以定性的分析一下nll_loss。

 

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了首先这个式子表明对于box的ground_truth的某一点坐标 解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了的高斯分布下的值,高斯分布的表达式是这样子的:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

这个式子的代表的是高斯分布的概率密度函数,其中每个x对应的输出值f(x)是在该点的概率密度值,这个值可以代表概率但是并不是概率,但是总体来说我们希望的是对于网络输出的每一个均值解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了所构成的高斯分布下,groudtruth在改点的概率密度最大,即概率最大,这样表明我们输出的这个高斯分布于真实的label最相符。即:当解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了构成的分布越和真实label的分布接近,N(...)就会越大,log[N(...)]就会越大,取个负号反之loss就会越小。

至于为什么前面我们说过可以用输出的解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了当做tx来用,是因为解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了就是tx的最大似然估计。

而对于高斯分布来讲,标准差越大,可以一定程度上说明这个分布的变化比较大,即解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了这个bbox的估计结果越不可靠。

--------------预警结束分割线------------------------------------

其他的地方和YOLOv3基本一样,不同的是在阈值的计算上,criterion变成了:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

加入了坐标值可靠性因素Uncertainty_aver,这个值是bbox输出的四个标准差解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了的平均值,这也就是前面为什么对标准差做了sigmoid的结果。

结果

在KITTI和BDD上验证结果:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

可以看到Gaussian YOLOv3比YOLOv3的效果提升了很多,并且加入了Gaussian之后的YOLO效果在同等速度下达到了最优。

并且文中提到Gaussian YOLOv3有效的减少约%40的False Positive,提高了约5%的True Positive。

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了

 

相关文章:

  • 2018-03-02
  • 2021-06-25
  • 2021-10-12
  • 2021-08-18
  • 2021-11-04
  • 2021-08-29
  • 2021-10-17
猜你喜欢
  • 2021-07-25
  • 2021-05-06
  • 2021-07-17
  • 2021-12-17
  • 2021-10-21
  • 2021-12-19
  • 2021-09-12
相关资源
相似解决方案