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

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

高斯模型

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

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第1张图片

对于输出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的可靠性做文章了_第2张图片

bbox坐标输出变成了,其中μ代表均值,∑代表标准差,但这里还不是严格意义上高斯模型要用到的均值和标准差,需要做如下变换:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第3张图片

最终得到\mu_t_x,\mu_t_y,\mu_t_w,\mu_t_h,才是高斯模型的均值,这个值在计算bbox坐标的时候可以直接当做t_x, t_y, t_w, t_h来用。其中有几点需要注意的:

  • 对于\widehat{\mu}_t_x, \widehat{\mu}_t_y做了sigmoid变成了\mu_t_x,\mu_t_y,将值限定在(0,1)的范围内秉承了YOLO的一贯思想:每个grid检测的物体中心必须落在当前grid的内。
  • \widehat{\mu}_t_w, \widehat{\mu}_t_h没有做sigmoid是因为宽高的scale变化有可能超过1,这个做法也同原YOLOv3相同。
  • 标准差\widehat{\sigma }_t_x, \widehat{\sigma}_t_y, \widehat{\sigma }_t_w, \widehat{\sigma}_t_h也通过sigmoid将值限定在(0,1)范围内,这是因为标准差表明了点坐标的可靠性,0表示非常可靠,1表示不可靠。

loss function

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

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第4张图片

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

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

 

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第5张图片首先这个式子表明对于box的ground_truth的某一点坐标 x^G_i_j_k\mu_t_x\sigma_t_x的高斯分布下的值,高斯分布的表达式是这样子的:

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

至于为什么前面我们说过可以用输出的\mu_t_x当做tx来用,是因为\mu_t_x就是tx的最大似然估计。

而对于高斯分布来讲,标准差越大,可以一定程度上说明这个分布的变化比较大,即\mu_t_x这个bbox的估计结果越不可靠。

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

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

加入了坐标值可靠性因素Uncertainty_aver,这个值是bbox输出的四个标准差\sigma _t_x, \sigma _t_y, \sigma _t_w, \sigma _t_h的平均值,这也就是前面为什么对标准差做了sigmoid的结果。

结果

在KITTI和BDD上验证结果:

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第6张图片

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第7张图片

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

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

解读Gaussian YOLOv3:终于有人对bbox的可靠性做文章了_第8张图片

 

你可能感兴趣的:(计算机视觉,深度学习)