在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出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

Introduction


  在自动驾驶中实时性和准确率都十分重要,论文为了增加检测算法的准确率,以及减少误判(FP)的出现,论文提出了Gaussian YOLOv3。该算法基于实时性框架YOLOv3,对bbox的预测值进行高斯建模输出不确定性(localization uncertainty),并且修改了bbox的loss函数,能够有效地提高准确率且保持实时性

  这里可能会有个比较大的疑问,YOLOv3的objectness是否就可以表示bbox的不确定性。个人认为论文的观点是objectness能表示bbox的不确定性,但又跟论文提到的预测值不确定性不一样。因为objectness为\(Pr(object) * IoU\),主要跟IoU相关,是整体的不确定性,而相同的IoU有不同的相交方法,不能准确地代表单个bbox预测值的不确定性,而文中直接使用高斯模型来表示单个预测值的不确定性,是另外一种更细的维度,可以认为是一种补充

Gaussian YOLOv3


Gaussian modeling

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

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

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

Reconstruction of loss function

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

  GT的计算如公式6和公式7,跟预测值的处理一样,\(x^G\)、\(y^G\)、\(w^G\)和\(h^G\)都为GT box的缩放比例,\(IW\)和\(IH\)为输入图片的宽高,\(A_k^w\)和\(A_k^h\)为\(k\)-th anchor的预设宽高。在YOLOv3中,中心点在grid单元中计算,而bbox的尺寸则基于预设的anchor box,

  此外,损失函数还要加上权重\(\gamma_{ijk}\),计算如公式8,GT越大,权重越小。其中,\(\omega_{scale}\)基于GT box的宽高在图中的比例由公式9计算,\(\delta_{ijk}^{obj}\)为指示函数,仅当GT对应的grid中IOU最大的anchor才为1

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

Utilization of localization uncertainty

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

Experimental Results


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

Validation in utilizing localization uncertainty

Performance evaluation of Gaussian YOLOv3

Visual and numerical evaluation of FP and TP

  置信度为0.5

CONCLUSION


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

参考内容

如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

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

  1. Emgu CV 高斯建模

    Codeprivate void button1_Click(object sender, EventArgs e) { Emgu.CV.Capture cap = new Capture(" ...

  2. 【SDOI2009】解题汇总

    又开了波专题,感觉就和炉石开冒险一样...(说的好像我有金币开冒险似的) /---------------------------------------------/ BZOJ-1226 [SDOI ...

  3. [C0] 人工智能大师访谈 by 吴恩达

    人工智能大师访谈 by 吴恩达 吴恩达采访 Geoffery Hinton Geoffery Hinton主要观点:要阅读文献,但不要读太多,绝对不要停止编程. Geoffrey Hinton:谢谢你 ...

  4. 高斯拉普拉斯算子(Laplace of Gaussian)

    高斯拉普拉斯(Laplace of Gaussian) kezunhai@gmail.com http://blog.csdn.net/kezunhai Laplace算子作为一种优秀的边缘检测算子, ...

  5. 基于图嵌入的高斯混合变分自编码器的深度聚类(Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedding, DGG)

    基于图嵌入的高斯混合变分自编码器的深度聚类 Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedd ...

  6. Gaussian Process for Regression

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  7. 目标检测网络之 YOLOv3

    本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...

  8. 目标检测算法之YOLOv3

    参考地址:https://blog.csdn.net/leviopku/article/details/82660381 YOLO v3结构图 DBL:卷积+BN+leaky relu,是v3的最小组 ...

  9. 图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb

    ()高斯理论简介 () ()代码实现 四 使用高斯滤波器进行图像的平滑 ()高斯简介 http://research.microsoft.com/en-us/um/people/kahe/eccv10 ...

  10. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

随机推荐

  1. STC12C5A56S2和DS12C887做的电子闹铃

    配件信息 控制器: STC12C5A56S2 定时芯片: DS12C887 显示: 4位0.56寸数码管 其它: 无源蜂鸣器, 三极管S9012, 电阻10K*2, 100*1, 电容30p*2, 1 ...

  2. 【Unity3D】流动雾效

    1 前言 ​ 屏幕深度和法线纹理简介中对深度和法线纹理的来源.使用及推导过程进行了讲解,激光雷达特效中讲述了一种重构屏幕像素点世界坐标的方法,本文将介绍使用深度纹理重构屏幕像素点在相机坐标系下的坐标计 ...

  3. 【Unity3D】人体模型及动画

    1 前言 ​ 2D动画 中初步了解了 Animation 和 Animator,本文将进一步学习 3D 动画,并介绍 人体模型相关内容. ​ 模型制作软件主要有:3DMax.Maya,模型存储格式主要 ...

  4. Springboot集成Swagger实战

    1.介绍 本文将通过实战介绍Springboot如何集成swagger2,以用户管理模块为例,实现项目接口文档的在线管理. 项目源码 本文只列出核心部分,详细请看源码: https://gitee.c ...

  5. 记一次 .NET某列控连锁系统 崩溃分析

    一:背景 1. 讲故事 过年喝了不少酒,脑子不灵光了,停了将近一个月没写博客,今天就当新年开工写一篇吧. 去年年初有位朋友找到我,说他们的系统会偶发性崩溃,在网上也发了不少帖子求助,没找到自己满意的答 ...

  6. C++ 时间复杂度

    看到网上一些资料的案例不全,所以自己开个来复习. O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<-<O(2^n)< ...

  7. 用Taro写一个微信小程序——渲染 HTML

    在taro小程序里面渲染一段html代码,具体可查看文档https://docs.taro.zone/docs/html 一.渲染 HTML 文档推荐使用 dangerouslySetInnerHTM ...

  8. 初始pyqt5

    开发pyqt5桌面应用 必须使用两个类:QApplication和QWidget.都在PyQt5.QtWidgets中 安装 pip install pyqt5 -i https://pypi.dou ...

  9. 【LeetCode字符串#02】替换空格+IP地址无效化,reserve和resize的区别分析

    替换空格 力扣题目链接(opens new window) 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are hap ...

  10. 回顾 2023,NebulaGraph 的这一年的变化

    一年又过去了,感谢你和 NebulaGraph 一起又走过一个春夏秋冬.在这 365 天里,我们一起见证了 214 个 commit 带来的 NebulaGraph 3 个中版本的上线,它们分别是 v ...