在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出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. 【OpenGL ES】FBO离屏渲染

    1 前言 ​ OpenGL 默认把 framebuffer 当作渲染目的地,它由窗口系统创建并管理.应用程序也可以创建额外非可显示的 framebuffer object(FBO),以区别窗口系统提供 ...

  2. ORA-31655,ORA-39154 Objects from foreign schemas have been removed from import

    问题说明 在执行数据泵导入时提示错误: 问题原因 执行导入的用户缺少导入数据库的权限. 解决问题 给用户赋予导入数据库权限: grant imp_full_database to 用户; 然后重新执行 ...

  3. Java Socket编程系列(三)开发支持单客户端访问的Server

    例子来自Java官方教程,稍作调整. 实现的是单个客户端请求服务端,根据服务端提示进行一系列操作. 协议类: package com.dylan.socket; /** * @author xusuc ...

  4. 高并发时为什么推荐ReentrantLock而不是synchronized

    目录 1.最初的 synchronized 2.synchronized 的优化 3.但是,JAVA的最终答案 JDK 21 LTS 来了 1.最初的 synchronized 它默认对临界资源添加重 ...

  5. win32 - 创建子线程中的窗口

    跟创建普通的win32窗口一样,线程中的窗口也需要注册和窗口处理过程 // Test_WM_CLOSE.cpp : Defines the entry point for the applicatio ...

  6. Go语言并发编程(3):sync包介绍和使用(上)-Mutex,RWMutex,WaitGroup,sync.Map

    一.sync 包简介 在并发编程中,为了解决竞争条件问题,Go 语言提供了 sync 标准包,它提供了基本的同步原语,例如互斥锁.读写锁等. sync 包使用建议: 除了 Once 和 WaitGro ...

  7. 工作中django的应用路径配置

    1.通常工作中都会把所有的应用放在一个主目录中 比如:主项目文件夹为luffyapi 在luffyapi下创建一个apps文件夹,用来存放所有的app应用 2.创建应用 先创建一个应用,需要cd到ap ...

  8. 【Azure 应用服务】Azure App Service多实例中,出现某一个实例CPU居高不下的情况,如何重启单个实例呢?

    问题描述 在使用App Service服务中,当多实例中,其中一个实例出现高CPU,高Memory的情况,为了尽可能少的影响正在运行的应用,需要单独重启某一个实例的情况下,如何手动操作呢? 问题解答 ...

  9. 【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?

    问题描述 中国区Azure B2C 是否支持手机验证码登录呢? 问题回答 在没有原生 Phone sign-up and sign-in for user flows (中国区不支持,Global A ...

  10. GitHUb上渗透测试工具

    来自GitHub的系列渗透测试工具渗透测试 Kali - GNU / Linux发行版,专为数字取证和渗透测试而设计.(https://www.kali.org/)ArchStrike - 为安全专业 ...