在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出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. 初探富文本之文档diff算法

    初探富文本之文档diff算法 当我们实现在线文档的系统时,通常需要考虑到文档的版本控制与审核能力,并且这是这是整个文档管理流程中的重要环节,那么在这个环节中通常就需要文档的diff能力,这样我们就可以 ...

  2. Spring Cloud Gateway微服务网关快速入门

    介绍 Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring C ...

  3. virtualbox中给redhat安装增强功能

    关于虚拟机中安装redhat请参考其他教程: 1.点击虚拟机菜单:设备--安装增强功能.... 2.ssh连接到redhat,执行以下操作: [root@rhel-server ~]# mount / ...

  4. win32-GetActiveWindow和GetForegroundWindow

    最近被这两个api搞得有点晕,故查阅了相关的资料. 这篇文章解释的很好:https://devblogs.microsoft.com/oldnewthing/20081006-00/?p=20643 ...

  5. ASCII编码的影响与作用:数字化时代的不可或缺之物

    一.ASCII编码的起源 ASCII(American Standard Code for Information Interchange)编码是一种最早用于将字符转换为数字的编码系统.它诞生于20世 ...

  6. ASP.NET XML序列化

    整理一下ASP.NET里面如何序列化实体为XML,获取解析XML内容为实体. 第一步要添加程序集引用,项目-->引用-->鼠标右键-->添加引用-->选择程序集-->Sy ...

  7. 【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端,在请求中携带Token访问后报401的错误

    问题描述 在 Azure API 管理中使用 OAuth 2.0 授权和 Azure AD 保护 Web API 后端的文档中操作 "在开发人员门户中启用 OAuth 2.0 用户授权&qu ...

  8. 使用 RKE 方式搭建 K8s 集群并部署 NebulaGraph

    本文由社区用户 Albert 贡献,首发于 NebulaGraph 论坛,旨在提供多一种的部署方式使用 NebulaGraph. 在本文,我将会详细地记录下我用 K8s 部署分布式图数据库 Nebul ...

  9. 使用 Abp.Zero 搭建第三方登录模块(二):服务端开发

    ​ 微信SDK库的集成 微信SDK库是针对微信相关 API 进行封装的模块 ,目前开源社区中微信SDK库数量真是太多了,我选了一个比较好用的EasyAbp WeChat库. EasyAbp/Abp.W ...

  10. Spring与微服务

    Spring与微服务 微服务论文 Melvyn Conway 的意识是,像下图所展示的,设计一个系统时,将人员划分为 UI 团队,中间件团队,DBA 团队,那么相应地,软件系统也就会自然地被划分为 U ...