在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出Gaussian YOLOv3。该算法在保持实时性的情况下,通过高斯建模、损失函数重建来学习bbox预测值的不确定性,从而提高准确率和TP,能够显著地降低FP,在KITTI和BDD数据集上分别提升了3.09mAP和3.5mAP。整体的思路类似于添加一个不确定性分支,没有带来过多的计算,设计十分巧妙,推荐大家阅读学习

来源:晓飞的算法工程笔记 公众号

论文: Gaussian YOLOv3: An Accurate and Fast Object Detector Using Localization
Uncertainty for Autonomous Driving

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

Introduction


  在自动驾驶中实时性和准确率都十分重要,论文为了增加检测算法的准确率,以及减少误判(FP)的出现,论文提出了Gaussian YOLOv3。该算法基于实时性框架YOLOv3,对bbox的预测值进行高斯建模输出不确定性(localization uncertainty),并且修改了bbox的loss函数,能够有效地提高准确率且保持实时性
  这里可能会有个比较大的疑问,YOLOv3的objectness是否就可以表示bbox的不确定性。个人认为论文的观点是objectness能表示bbox的不确定性,但又跟论文提到的预测值不确定性不一样。因为objectness为Pr(object)IoUPr(object) * IoU,主要跟IoU相关,是整体的不确定性,而相同的IoU有不同的相交方法,不能准确地代表单个bbox预测值的不确定性,而文中直接使用高斯模型来表示单个预测值的不确定性,是另外一种更细的维度,可以认为是一种补充

Gaussian YOLOv3


Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

Gaussian modeling

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  使用单个高斯模型来分别预测txt_xtyt_ytwt_wtht_h的不确定性,高斯模型计算如公式1,μ(x)\mu(x)为均值函数,(x){\sum}(x)为标准差函数,即在当前分布下yy的值,越高越好

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  为了构建bbox(tx,ty,tw,th)(t_x,t_y,t_w,t_h)每个值的高斯模型,将每个bbox的预测值改为均值μ\mu和标准差\sum,如图2所示,为μ^x\hat{\mu}_x,^tx\hat{\sum}_{t_x},μ^y\hat{\mu}_y,^ty\hat{\sum}_{t_y},μ^w\hat{\mu}_w,^tw\hat{\sum}_{t_w},μ^h\hat{\mu}_h,^th\hat{\sum}_{t_h},使用这8个预测值构建4个分布,如图2。由于在构建的分布中,均值μ^\hat{\mu}处的值是最大的,所以取均值μ^\hat{\mu}为bbox 4个维度(xx,yy,ww,hh)的预测值,用法跟YOLOv3的值的意义一样。标准差则代表不确定性,因为标准差越大,概率分布中均值处的值会越低

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  论文没有直接使用上面提到的μ^x\hat{\mu}_x,^tx\hat{\sum}_{t_x},μ^y\hat{\mu}_y,^ty\hat{\sum}_{t_y},μ^w\hat{\mu}_w,^tw\hat{\sum}_{t_w},μ^h\hat{\mu}_h,^th\hat{\sum}_{t_h},而是根据YOLOv3的bbox计算方法,对输出各预测值前进行sigmoid函数预处理,使其值在[0,1][0,1]。处理后,μtx\mu_{t_x}μty\mu_{t_y}代表bbox的中心点在grid中的偏移坐标,由于YOLO中twt_wtht_h要过指数函数,值可以有正负,所以不进行sigmoid处理。标准差代表不确定性,直接进行sigmoid函数处理到[0,1][0,1]

Reconstruction of loss function

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  由于输出是作为高斯模型的参数,bbox的损失函数将修改为负对数似然(negative log likelihood, NLL)损失,objectness和class的损失函数不变。公式5为txt_x的NLL损失,WWHHKK分别为特征图宽高的grid数以及anchor数,μtx(xijk)\mu_{t_x}(x_{ijk})tx(xijk){\sum}_{t_x}(x_{ijk})txt_x的值和不确定性,由模型在(i,j)(i,j)grid的kk-th anchor输出。xijkGx_{ijk}^Gtxt_x的GT,公式5计算GT在当前分布下的值,均值越接近GT且标准差越小,则loss越小。为了数值计算不出差,加上ε=109\varepsilon=10^{-9}

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  GT的计算如公式6和公式7,跟预测值的处理一样,xGx^GyGy^GwGw^GhGh^G都为GT box的缩放比例,IWIWIHIH为输入图片的宽高,AkwA_k^wAkhA_k^hkk-th anchor的预设宽高。在YOLOv3中,中心点在grid单元中计算,而bbox的尺寸则基于预设的anchor box,

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  此外,损失函数还要加上权重γijk\gamma_{ijk},计算如公式8,GT越大,权重越小。其中,ωscale\omega_{scale}基于GT box的宽高在图中的比例由公式9计算,δijkobj\delta_{ijk}^{obj}为指示函数,仅当GT对应的grid中IOU最大的anchor才为1
  另外,论文提到,YOLOv3的bbox使用交叉熵损失,不能够处理噪声数据,噪声会导致很大的loss干扰训练。而论文重新设计的loss则能够对抗噪声数据。邮件咨询作者后,作者回复可以对loss进行均值偏导和标准差偏导看看,还推荐了一篇论文,不过那篇论文直接将不确定性1σ\frac{1}{\sigma}作为loss的系数,和本篇的实现还不太一样,具体大家可以去看看,文末的参考内容有该篇论文地址。强行解释的话,大概是因为一般噪声数据的预测值都会有很高的不确定性且GT远离预测值,即GT在高斯分布的两侧,当标准差越大,两侧的值会增大,使得loss会稍微减小。但是感觉在loss中加一个类似1σ\frac{1}{\sigma}的系数和一个关于σ\sigma的正则项会更直接点,不知道这样理解是否正确,如果有问题麻烦大家评论或私信讨论一下

Utilization of localization uncertainty

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  将objectness、class和Uncertainty结合作为最后的分数,计算如公式10,UncertaintyaverUncertainty_{aver}为4个预测结果的平均不确定性。由于将box的不确定性考虑到最终的分数中,因此可以大量降低FP结果

Experimental Results


Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  在不同的数据集上每个detection layer的anchor设计如表1

Validation in utilizing localization uncertainty

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

Performance evaluation of Gaussian YOLOv3

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

Visual and numerical evaluation of FP and TP

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

  置信度为0.5

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

CONCLUSION


  在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出Gaussian YOLOv3。该算法在保持实时性的情况下,通过高斯建模、损失函数重建来学习bbox预测值的不确定性,从而提高准确率和TP,能够显著地降低FP,在KITTI和BDD数据集上分别提升了3.09mAP和3.5mAP。整体的思路类似于添加一个不确定性分支,没有带来过多的计算,设计十分巧妙,推荐大家阅读学习

参考内容

  • What uncertainties do we need
    in bayesian deep learning for computer vision? - https://arxiv.org/abs/1703.04977


如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019

相关文章:

  • 2021-12-14
  • 2021-12-17
  • 2021-12-31
  • 2021-05-21
  • 2022-12-23
  • 2021-12-31
  • 2021-10-30
  • 2021-09-19
猜你喜欢
  • 2021-08-08
  • 2021-05-11
  • 2021-10-20
  • 2021-06-09
  • 2022-12-23
  • 2021-06-25
  • 2022-01-21
相关资源
相似解决方案