LSS 和 BEVDepth算法解读

前言

当前BEV的研究大都基于深度学习的方法,从组织BEV特征信息的方式来看,主流方法分属两类:自底向上方法和自顶向下方法。

自底向上方法比较早的代表工作是LSS,后来BEVDet、BEVDepth等也是基于LSS的框架来进行优化。自底向上方法核心是:Lift——对各相机的图像显性地估计像平面下采样后特征点的深度分布,得到包含图像特征的视锥(点云);Splat——结合相机内外参把所有相机的视锥(点云)分配到BEV网格中,对每个栅格中的多个视锥点进行sum-pooling计算,形成BEV特征图;Shoot——用task head处理BEV特征图,输出感知结果。本文就是通过解读LSS和BEVDepth两篇论文,来深度剖析自底向上构建BEV方法。

自顶向下方法的典型代表是Tesla用Transformer构建BEV,2020年10月发布的FSD Beta软件视觉感知模块已开始应用此方法,在2021年Tesla AI-Day上Andrej Karparthy披露了更多技术思想,核心是:先预定义待生成的BEV特征图,利用Transformer全局感知能力在多个视角图像的特征中多次查询相应信息,并把信息融合更新到BEV特征图中。上海AILab团队做了类似的技术实现,并以BEVFormer公布了相关工作。

BEV网格

在自车周围俯视平面x-y方向划分n个网格,每个网格表示特定物理距离d米。如200200的BEV网格,每格代表0.5米,这个网格就表示100米100米的平面范围。如果恰好自车中心(自动驾驶的的车辆中心一般指后轴中心)在网格中心位置,那么网格就表示自车前、后和左、右各50米的范围。注意这里强调用网格划分平面空间,并不涉及网格内放什么内容。
在这里插入图片描述

图1. BEV网格示意

BEV特征图

在BEV网格的所有格子中都填充C个通道的特征值作为内容(contex),就组成了BEV特征图。注意,为了让BEV特征图保留BEV网格x-y方向距离的意义,这里每个格子中C通道特征值都要来自格子所对应空间的特征信息,而不是胡乱地填充其它地方的特征信息。

形象地解释,假如某个格子所对应空间有个锥桶,那么这个格子里填充的一定是用来描述这个锥桶的特征值,而不是远方天空或红绿灯的特征值。

无论是自顶向下还是自底向上方法,核心目标是:为BEV网格中每个格子组织并填充合适的特征信息,得到BEV特征图。

本文解读BEV自底向上方法的两篇重要论文:LSS和BEVDepth。LSS提出了一整套自底向上构建BEV Representation的框架(ECCV2020),为后续很多相关工作奠定了系统性基础。BEVDepth在保持LSS框架的基础上,重点围绕如何获取更准确的深度估计进行优化,另外还提出了高效计算Voxel Pooling过程的方法,引入了多帧融合,这些工作使BEVDepth取得了不错的提升效果。

1. 自底向上方法框架-LSS

参考如下:

原文:Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D

视锥点云和Lift操作

用单目相机进行距离、尺寸类的感知,关键是如何恢复图像中的深度信息。

2D图像中每个像素点可以理解成世界空间中某点到相机中心的一条射线,仅利用图像不能确定此像素具体来自射线上哪个位置(也就是不知道该像素的深度值),如下图3中的P,投影到P^{'},丢失了深度信息Z。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/92e2447c5f5b41d7bee1f1f0d08c238e.png

图3 相机成像原理,三位空间某点P投影道像素平面,损失深度信息Z。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c38a80de92874ca9913a9ec99c8c9050.png)

视锥点云的空间位置

官方代码中生成视锥点云的实现方式是:如下图4所示,定义距离图像特征平面4m到44m、间隔1m的多个平面,这样每个图像特征点有D=41个可能的离散深度值。每个点相对相机的描述的位置是[h, w, d],利用相机内、外参,可以把这个位置转换成用车辆坐标系下的空间位置来表示,其维度也是HxWxDx3,即HxWxD个[x, y, z]。
在这里插入图片描述

图4 相机视锥模型,由深度范围在4m~44m、间隔1m的41个平面组成。

有了视锥点云,以及每个点所对应的空间位置,那么如何获得每个点的有效特征信息呢?这就由Lift-2“给每个点生成特征值(contex)”来实现。

视锥点云的特征(Context)

在这里插入图片描述
在这里插入图片描述

图5:Lift操作可视化原理。

BEV Pillar和Splat操作

有了视锥点云(包含空间位置和特征),就可以根据视锥点的空间位置把每个视锥点的特征(contex)放到BEV网格中的合适位置,组成BEV特征图。

BEV网格由200x200个格子(BEV Pillar)组成,每个格子对应物理尺寸为0.5米x0.5米。即BEV网格对应车辆前、后和左、右各50m,且高度不限的3维空间。

上面通过相机的内外参,已经把视锥点云转换到车辆坐标系下的空间位置。排除掉BEV网格所表示空间范围(以自车为中心100mx100m范围)以外的点,就可以把剩余有效的视锥点云分配到每个BEV Pillar里。

注意,这里存在同一个BEV Pillar可能分配多个视锥点的情况,这是由两个原因引起:

1.单张2D图像不同的像素点可能投影在俯视图中的同一个位置,例如垂直于地面的电线杆,它成像的多个像素点可能投到同一个BEV Pillar。
2.相邻两相机有部分成像区域重叠,相机图像中的不同像素点投影在同一个BEV Pillar。例如不同相机画面中的同一个目标。
对于一个BEV Pillar分配多个视锥点,作者使用了sum-pooling的方法,把视锥点的特征相加,最后得到了200x200xC的BEV特征图,源码中C取64。
在这里插入图片描述

图5. Lift-Splat-Shoot 完整过程概览。

Shoot: Motion Planning

Lift-Splat已经输出了由N个相机图像编码的BEV features,接下来就是再接上Head来实现特定的任务,这部分由Shoot来实现。

LSS的关键是可以仅使用图像就可以实现端到端的运动规划。在测试时,用推理输出cost map进行规划的实现方法是:”Shoot”输出多种轨迹,并对各个轨迹的cost进行评分,然后根据最低cost轨迹来控制车辆运动。这部分的核心思想来自《End-to-end Interpretable Neural Motion Planner》。

pipeline

论文中对方法实现描述不清楚,把方法实现的pipeline整理到如下几个部分:
在这里插入图片描述

cumsum_trick(): 池化累积求和技巧

模型中使用Pillar累积求和池化,“累积求和”是通过bin id 对所有点进行排序,对所有特征执行累积求和,然后减去 bin 部分边界处的累积求和值来执行求和池化。无需依赖 autograd 通过所有三个步骤进行反向传播,而是可以导出整个模块的分析梯度,从而将训练速度提高 2 倍。 该层被称为“Frustum Pooling”,因为它将 n 个图像产生的截锥体转换为与摄像机数量 n 无关的固定维度 CxHxW 张量。

计算原理的过程示意图:
在这里插入图片描述

图6. cumsum_trick 计算原理示意。

2. 出于蓝胜于蓝的自底向上方法BEVDepth

BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection

BEVDepth在保持LSS框架的基础上,重点围绕如何获取更准确的深度估计进行优化,另外还提出了高效计算Voxel Pooling过程的方法,引入了多帧融合,这些工作使BEVDepth取得了显著提升效果。

Motivation

近期基于视觉的自动驾驶技术中,包括自底向上的BEV方法,非常依像素赖深度估计。虽然这些方法非常受欢迎,但自然而然地还是会有疑问:这些方法中深度估计的质量和效率怎么样?已经满足了高精、高效的3D目标检测任务要求了吗?

BEVDepth论文工作中从定量和定性两方面分析了深度估计。BEVDet的深度估计和真值之间的关系如图7(a)所示,会发现深度估计准确性非常不充分。这么差的深度估计对3D目标检测的影响有多大呢?作者把BEVDet中视角转换用到的深度预测值换成了深度真值,对比结果如图7©所示,采用深度真值后mAP和NDS分别提高了18.8%和18.2%。另外,translation erro(mATE)从0.750大幅下降至0.393。这些现象表明,优化深度估计质量是提升多视角3D目标检测的关键。图7(b)中展示了BEVDepth的主要工作效果,对深度估计进行修正后,深度预测值分布非常接近真值。
在这里插入图片描述

图7. 关于深度修正及其性能的定型分析。

Methods

本文提出利用具有鲁棒性的显性深度监督(Explicit Depth Supervision)来优化深度估计,具体实现还包括深度修正(Depth Correction)和具有相机感知能力的深度估计(Camera-aware Depth Prediction)。另外,还提出了高效体素池化(Efficient Voxel Pooling)来加速BEVDepth方法,以及多帧融合(Multi-frame Fusion)来提高目标检测效果和运动速度估计。BEVDepth方法的概览如图8所示。
在这里插入图片描述

图8. BEVDepth框架。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cca4ba355a4741398df11f667ab3f778.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ee40046932b1463ea049cae531d17f79.png)
图9. DepthNet的结构。

在这里插入图片描述
在这里插入图片描述

图10. 实现Efficient Voxel Pooling的细节示意图。

在这里插入图片描述
在这里插入图片描述

图11. 多帧融合的pipeline。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子画册制作与传统画册相比,有哪些优势?

在当今数字化时代,电子画册作为一种新兴的媒体形式,其制作与传统画册相比具有显著的优势。以下是对这些优势的详细探讨。 首先,电子画册的制作过程通常更加便捷和经济。相较于传统画册需要经历的繁琐的印刷过程,电子画册的制作大多…

【C++课程学习】:类和对象(拷贝构造和运算符重载)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 ✍拷贝构造: 🍉特点一: 🍉特点二: &…

(三十)Flask之wtforms库【剖析源码上篇】

每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者 🔥🔥本文已收录于Flask框架从入门到实战专栏:《Flask框架从入…

45.Python-web框架-Django - 开始建立第一个项目

目录 1.django是什么? 2.Pycharm 社区版,还是专业版? 3.开始django,Pycharm专业版 创建一个Django项目 运行一个Django项目 运行方法一,命令行的方式 运行方法二,配置Django Server的方式 4.django尊…

gpio-0设置成输出失败的原因

原因 spi驱动先设置gpio-0成了输出; 但是后面其他驱动,使用of_property_read_u32获取设备树节点的属性时,没去判断返回值;而直接使用参数返回的0,导致gpio-0又被设置成了输入 实例 正常的如下,gpio显示…

入职3年-我如何做一名AI产品经理(文末福利)

引言 从2021年校招加入京东开始,我一直从事AI产品经理的工作,有幸见证了AI行业的热情从一台台服务器烧到了全世界各个角落,也见证了京东AI中台团队的影响力如何一步步的扩大。从21年的迷茫到24年的坚定,很庆幸我正走在适合自己的…

【C++】类的默认成员函数

类的默认成员函数 类的六个默认成员函数构造函数构造函数的概念构造函数的特性 析构函数析构函数的概念析构函数的特性 构造函数与析构函数的调用顺序拷贝构造拷贝构造的概念拷贝构造的特性赋值运算符重载运算符重载赋值运算符重载前置与后置重载输入输出流重载 const修饰成员实…

高精度减法

高精度减法 两个高精度整数的减法题目思路实现代码实现 两个任意符号的高精度加减法 两个高精度整数的减法 高精度指的是数字的大小非常非常大,最多能有10的5次方 的 位数。 本次计算的两个数均为 正数,如何求负数会在最后提到。 题目 给定两个正整数…

解决浏览器缩放的时候,重新设置滚动条的位置,使页面滚动条固定悬浮在页面底部

项目场景: 浏览器调试页面兼容页面时,缩放页面宽度,整体超出时滚动条出现在页面最底部,不是悬浮在页面下面,只有滚动到最底部才出现,需要的是悬浮在页面底部,不是滚动到最下面才出现 解决方案…

java面试整合全套

什么是Java (定义 优点) java是一个平台,由jvm和Java应用编程接口构成的一门面向编程语言。 不仅吸收了C语言的各种优点,还摒弃了c语言里面的多继承,指针等概念,因此java的特征主要有功能强大和简单易用的特征。 jav…

FPGA Verilog模块化设计入门篇一

随着电子技术的快速发展,现场可编程门阵列(FPGA)已成为现代电子系统设计中不可或缺的一部分。FPGA的灵活性、可重构性和高性能使得它成为处理复杂算法、加速数据处理和实现特定功能的理想选择。然而,随着系统复杂性的增加&#xf…

go-zero整合Excelize并实现Excel导入导出

go-zero整合Excelize并实现Excel导入导出 本教程基于go-zero微服务入门教程,项目工程结构同上一个教程。 本教程主要实现go-zero框架整合Excelize,并暴露接口实现Excel模板下载、Excel导入、Excel导出。 go-zero微服务入门教程:https://blo…

Mysql学习(九)——存储引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 七、存储引擎7.1 MySQL体系结构7.2 存储引擎简介7.3 存储引擎特点7.4 存储引擎选择7.5 总结 七、存储引擎 7.1 MySQL体系结构 连接层:最上层是一些客户…

自然语言处理领域的重大挑战:解码器 Transformer 的局限性

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

聚焦赛宁网安竞赛平台+赛事服务,引领网络安全竞赛新潮流

第八届XCTF总决赛将在2024年6月22日于中国成都震撼开启,本届总决赛分为个人Live Solo和团队KOH巅峰对决两个赛道,从个人和团队多角度全方位考察参赛人员的竞技水平。 巅峰对决 智慧的火花在此碰撞 个人Live Solo赛制 Live Solo赛分为晋级赛和Solo赛。…

贝壳APP渗透测试WP

前期配置 环境说明 使用PIXEL 4手机,为Android 12系统 APP名为贝壳找房,包名com.lianjia.beike,版本号3.01.10,截至2024/05/07为最新版,小米应用市场下载 绕过反Frida机制 可以参考往期推送,《绕过最新…

2分钟用手机开发一个ChatBot

前言: 在上一期,我们测评了CodeFlying,用它开发出了一个复杂推文管理系统,然后体验了一下它的热门应用:AI智能机器人。今天咱就继续用CodeFlying来开发一个属于我们自己的聊天机器人。 老规矩,我们先在手机…

【qt】平面CAD(计算机辅助设计 )项目 上

CAD 一.前言二.界面设计三.提升类四.接受槽函数五.实现图形action1.矩形2.椭圆3.圆形4.三角形5.梯形6.直线7.文本 六.总结 一.前言 用我们上节课刚刚学过的GraphicsView架构来绘制一个可以交互的CAD项目! 效果图: 二.界面设计 添加2个工具栏 需要蔬菜的dd我! 添加action: …

遗传算法求解车间调度问题(附python代码)

背景介绍 车间调度问题(Job Shop Scheduling Problem, JSSP)是一类经典的组合优化问题,它在制造业和生产管理中有着广泛的应用。JSSP 的目标是对车间中的一系列作业进行排程,以使得作业在不同机器上的加工顺序是最优的&#xff0…

万相台的功能是什么?如何使用万相台?

1.特点: 万相台是一个智能渠道,可控性弱,高转化,人群&关键词是黑盒; 2.场景多: 有拉新快、活动加速、上新快、货品加速、活动加速、多目标直投、全站推等; 3.扣费逻辑:cpc付…