Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019
在自动驾驶中,检测模型的速度和准确率都很重要,出于这个原因,论文提出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。整体的思路类似于添加一个不确定性分支,没有带来过多的计算,设计十分巧妙,推荐大家阅读学习
参考内容
- What uncertainties do we need
in bayesian deep learning for computer vision? - https://arxiv.org/abs/1703.04977
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
Gaussian YOLOv3 : 对bbox预测值进行高斯建模输出不确定性,效果拔群 | ICCV 2019的更多相关文章
- Emgu CV 高斯建模
Codeprivate void button1_Click(object sender, EventArgs e) { Emgu.CV.Capture cap = new Capture(" ...
- 【SDOI2009】解题汇总
又开了波专题,感觉就和炉石开冒险一样...(说的好像我有金币开冒险似的) /---------------------------------------------/ BZOJ-1226 [SDOI ...
- [C0] 人工智能大师访谈 by 吴恩达
人工智能大师访谈 by 吴恩达 吴恩达采访 Geoffery Hinton Geoffery Hinton主要观点:要阅读文献,但不要读太多,绝对不要停止编程. Geoffrey Hinton:谢谢你 ...
- 高斯拉普拉斯算子(Laplace of Gaussian)
高斯拉普拉斯(Laplace of Gaussian) kezunhai@gmail.com http://blog.csdn.net/kezunhai Laplace算子作为一种优秀的边缘检测算子, ...
- 基于图嵌入的高斯混合变分自编码器的深度聚类(Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedding, DGG)
基于图嵌入的高斯混合变分自编码器的深度聚类 Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedd ...
- Gaussian Process for Regression
python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...
- 目标检测网络之 YOLOv3
本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...
- 目标检测算法之YOLOv3
参考地址:https://blog.csdn.net/leviopku/article/details/82660381 YOLO v3结构图 DBL:卷积+BN+leaky relu,是v3的最小组 ...
- 图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb
()高斯理论简介 () ()代码实现 四 使用高斯滤波器进行图像的平滑 ()高斯简介 http://research.microsoft.com/en-us/um/people/kahe/eccv10 ...
- AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3
1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...
随机推荐
- VuePress + Github Pages 搭建文档博客
说明 最近想把常用的一些干货知识点都集中起来,方便发布和查找.相当于创建一个自己的知识库,我就叫它Java技术文档.虽然博客写文档也挺方便,但是在于文档的集中阅读和管理方面还是不够简洁和快速.此处就以 ...
- spring boot 2.0集成并使用redis
项目地址:https://gitee.com/indexman/spring_boot_in_action 前面一章介绍了spring boot自带的缓存,下面讲一下如何在2.0版本中集成并使用red ...
- C++ std::move 的一些问题
看 SO 上有一个比较奇怪的问题, When does an rvalue reference result in a move vs copy constructor and why? 问题代码: ...
- 【Android 逆向】r0zapataNative.apk 破解
1. apk 安装到手机,需要输入内容,随便输入,提示fail... 2. apk 导入到jadx中查看一下 MainActivity.java String textData = "b2F ...
- 国内无法下载k8s镜像的解决办法
关于通过各种方法下载k8s相关镜像的方法总结如下: 1.使用Azure中国镜像站,目前限制只能"Azure China IP"可用,不再对外提供服务,此路不通. 2.直接使用mir ...
- linux下MariaDB安装
一条命令安装Mariadb 首先在/etc/yum.repos.d下创建一个MariaDB.repo文件 vim /etc/yum.repos.d/MariaDB.repo 添加以下配置 [maria ...
- Flask学习(三)
数据库操作 数据库驱动(drivers)模块:pymysql.MySQLDB ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库 ...
- sql组合索引怎样使用?怎样命中?
一.联合索引的使用 本文中联合索引的定义为(MySQL): ALTER TABLE table_name ADD INDEX (col1,col2,col3); 二.联合索引的本质 当创建(col1, ...
- 【Azure APIM】APIM self-host 部署在K8S中,如何更换证书呢?
问题描述 APIM self-host(自建网关)部署在K8S中,如何在本地上传及更换证书呢? 问题解答 如果使用Self-host网关,则不支持使用上传到 APIM的 CA 根证书验证服务器和客户端 ...
- 【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)
问题描述 在上一篇博文([Azure 存储服务].NET7.0 示例代码之上传大文件到Azure Storage Blob (一):https://www.cnblogs.com/lulight/p/ ...