LSS(Lift, Splat, Shoot)算法解析

news2024/11/22 11:35:05

1.简介

LSS(Lift, Splat, Shoot) 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法,通过将图像特征反投影到3D空间生成伪视锥点云,通过Efficientnet算法提取云点的深度特征和图像特征并对深度信息进行估计,最终将点云特征转换到BEV空间下进行特征融合和后续的语义分割任务。

本篇按照LSS代码的运行逻辑,结合论文对LSS算法进行解析。

参考链接:

LSS (Lift, Splat, Shoot) 论文+源码万字长文解析
LSS(Lift,Splat,Shoot)-实现BEV感知的最佳利器
LSS解读
LSS: Lift, Splat, Shoot】代码的复现与详细解读
一文读懂BEV自底向上方法:LSS 和 BEVDepth
自动驾驶BEV-LSS系列文章算法代码解析
BEV经典之作Lift, Splat, Shoot解析

2.算法流程

图像来自https://zhuanlan.zhihu.com/p/675034283
  1. 初始化视锥点云,并根据相机内外参将视锥中的点投影到ego坐标系;

  2. 对环视图像完成深度特征和图像特征的提取,并构建图像特征点云;

  3. 基于Voxel Pooling构建BEV特征;

  4. 对生成的BEV特征利用BEV Encoder做进一步的特征融合;

  5. 利用特征融合后的BEV特征完成语义分割任务;

2.1 初始化视锥点云

输出:shape为[B, N, 41, 8, 22, 3]的初始视锥点云

B:`batch_size`
N:相机数量
41:为每个像素生成离散的41个深度值
8*22:后面图像经backbone下采样后的特征图大小 
3:XYZ三个通道的坐标值

2.1.1 初始化视锥点云的shape


1.相机投影几何:
根据之前的相机投影知识可以了解到,2D图像像素点 p 2 d p_{2d} p2d是3D空间下某个点 P 3 d P_{3d} P3d的投影,二者一一对应,从相机光心出发连接图像中的像素点可以得到一条射线, P 3 d P_{3d} P3d一定在这条射线上。

但实际上对于单目相机中的某个像素点是无法得到具体的深度信息的,因此需要对深度进行估计,LSS采取的办法是对于图像中的每一个像素,在对应射线上每隔1m进行采样(算法中是41个),这样每个2D像素点都有41个3D点和他对应,这样就得到一组视锥点云(伪),然后通过提取深度特征并离散为深度概率信息估计像素深度
在这里插入图片描述


2.视锥点云的初始化过程:

定义距离图像特征平面4m到44m、间隔1m的多个平面,这样每个图像特征点有D=41个可能的离散深度值。每个点相对相机的描述的位置是[h, w, d],最终得到一个在图像坐标系下的数量为D*H*W的一组伪点云数据,H和W表示图像的高和宽,D表示离散深度的维度。

在这里插入图片描述

2.1.2 将视锥点云变换到自车坐标系(ego坐标系)

注意,这里转换的是上一步初始化的原始视锥点云,不包含深度特征和图像特征,只是一组云点。

整体的过程: 图像坐标系 -> 归一化相机坐标系 -> 相机坐标系 -> 车身坐标系
整个转换过程比较清晰简单,就是3D点投影到图像平面的逆过程

  • 生成的视锥点云每个点用(u,v,d)进行描述,即图像坐标系下的坐标和对应的深度值
  • 首先将图像坐标系下的坐标(u,v,d)通过内参K转换到归一化坐标(x,y,1),公式如下:
    [ x y 1 ] = 1 d K − 1 [ u v 1 ] \begin{bmatrix} x\\ y\\1\end{bmatrix}=\frac{1}{d} K^{-1} \begin{bmatrix} u\\ v\\1\end{bmatrix} xy1 =d1K1 uv1
  • 将归一化平面坐标转换为相机坐标系下的3D坐标:
    [ X c a m Y c a m Z c a m ] = d [ x y 1 ] \begin{bmatrix} X_{cam}\\ Y_{cam}\\Z_{cam}\end{bmatrix}=d\begin{bmatrix} x\\ y\\1\end{bmatrix} XcamYcamZcam =d xy1
  • 将3D点通过外参[R, t]由相机坐标系转换到自车坐标系;
    [ X e g o Y e g o Z e g o ] = R [ X c a m Y c a m Z c a m ] + t \begin{bmatrix} X_{ego}\\ Y_{ego}\\Z_{ego}\end{bmatrix}=R\begin{bmatrix} X_{cam}\\ Y_{cam}\\Z_{cam}\end{bmatrix}+t XegoYegoZego =R XcamYcamZcam +t

2.2 提取环视相机的深度特征和图像特征

输入:原始环视图像

shape=[bs, N, H, W, 3],bs表示batch_size,表示环视相机的数量,
在特征提取时将这两个维度合并一起进行特征提取

输出:深度和图像语义特征

shape=[bs * N, C, D, H, W]

图像在输入到LSS的图像特征编码器后,会使用Efficientnet网络对图像提取 D=41维的深度特征C=64维的语义特征,将深度特征和语义特征进行外积操作会进一步得到关于每个3D对应点更加准确的深度概率分布。

1.特征提取:
每一条射线表示某个像素点对应的一组3D点(共D=41维),在提取深度特征后会通过softmax函数将其转换为对应的概率信息,每个α表示对应点的深度概率。

每个feature c表示了每个像素点对应的特征向量(共C=64维)。

这样每个像素点会有一个D=41维的深度特征和C=64维的图像特征和其对应。

2.外积处理
对像素点的深度概率和图像特征进行外积,于是就为特征图的每一个点赋予了一个depth 概率,然后广播所有的 αc,就得到了不同的channel的语义特征在不同深度(channel)的特征图,经过训练,重要的特征颜色会越来越深(由于softmax概率高),反之就会越来越暗淡,趋近于0。

在这里插入图片描述

2.3 基于Voxel Pooling构建BEV特征

输入:视锥点云+特征点云

视锥点云:shape为(B, N, 41, 8, 22, 3),包含了每个点在自车坐标系中的位置
特征点云:shape为(B, N, 41, 8, 22, 64),包含了每个点的context特征(深度+语义)
  1. 将特征点云展平(flatten)。上一步将深度特征和图像语义特征作外积后得到一个B*N*D*H*W*C的张量,B表示batch的数量,N表示相机的个数,D表示深度通道,H*W表示高和宽,C表示语义通道,flatten后得到一个C个通道的一维张量,这个一维张量包含B*N*D*H*W个点
    在这里插入图片描述
  2. 将ego下的空间坐标转换到BEV网格坐标,排除掉落在BEV空间之外的点(BEV空间的大小固定,一般是以车体为中心的200*200的网格空间),然后将网格坐标展平,同样可以得到一个一维张量,该张量有4个通道(x,y,z,batch_id),这个一维张量包含B*N*D*H*W个点
  3. 将所有的feature基于坐标位置进行排序,给每一个点一个rank值,rank相等的点在同一个batch和同一个BEV pillar,这样就把属于相同BEV pillar的体素放在相邻位置,得到点云在体素中的索引
  4. 采用cumsum_trick完成Voxel Pooling运算,上一步将特征值进行了排序,将落在同一个pillar的特征累加,最终获得新的张量。
    在这里插入图片描述
    因为多个视角的相机形成的视锥点云会存在交叉现象,对于上图,已经知道一个特征向量1 3 2 1 2,每个特征的区间索引为0 1 1 2 3,区间索引表示每个特征所属的BEV网格,通过上述排序操作将属于同一batch同一BEV网格的特征放在了相邻位置,现在要做的是将属于同一BEV网格中的特征进行累加,根据区间索引得知第2位和第3位的特征属于同一个BEV pillar,因此在进行累计求和后的结果为1 5 1 2

2.4 BEV特征融合和语义分割

为了执行语义分割任务,最后还接个BevEncode对BEV特征进一步进行编码,BevEncode由一个2d Conv、resnet18的前三层、以及两个上采样层组成,最终输出的特征图shape为(4, 1, 200, 200)。

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

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

相关文章

JETBRAINS IDES 分享一个2099通用试用码!IDEA 2024 版 ,支持一键升级

文章目录 废话不多说上教程:(动画教程 图文教程)一、动画教程激活 与 升级(至最新版本) 二、图文教程 (推荐)Stage 1.下载安装 toolbox-app(全家桶管理工具)Stage 2 : 下…

盲盒小程序怎么做?盲盒创业

盲盒作为当下的新兴行业,从出现就备受年轻消费者的追捧,成为了我国发展前景巨大的行业之一。盲盒市场不仅吸引了众多消费者,同时也吸引了更多的创业者,成为了一大创业新模式。 盲盒小程序是一种线上盲盒销售模式,以社…

赋能企业数字化转型 - 易点易动固定资产系统与飞书实现协同管理

在当前瞬息万变的商业环境下,企业如何借助信息化手段提升管理效率,已经成为摆在各行各业面前的紧迫课题。作为企业数字化转型的重要一环,固定资产管理的信息化建设更是不容忽视。 易点易动作为国内领先的企业资产管理服务商,凭借其全方位的固定资产管理解决方案,助力众多企业实…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

信创 | 2023年中国信创产业深度研究报告(完整版)

信创产业研究报告 免责声明:本文资料来源于“第一新声”,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将在第一时间协商版权问题或删除内容! 获取文中相关的PPT资料,请关注文末公众号“程序员…

创意自我介绍视频制作软件有哪些?

创意自我介绍视频制作软件 在制作创意自我介绍视频时,有许多软件可供选择。以下是一些推荐的软件: 乐秀视频剪辑:这是一个被8亿用户选择的视频剪辑、视频制作与Vlog剪辑工具。它提供了丰富的视频编辑功能,帮助用户制作出高质量的…

海云安受邀参加诸子云 4.27南京「金融互联网」私董会

4月27日,“安在新媒体网安用户行业活动”第四期私董会在南京顺利举办。活动以“金融&互联网”为主题,邀请十余位业内资深的甲方用户以及典型厂商代表。摒弃传统的议题分享,采取“随时问答,自由讨论”的形式,提问题…

Android 状态栏WiFi图标的显示逻辑

1. 状态栏信号图标 1.1 WIFI信号显示 WIFI信号在状态栏的显示如下图所示 当WiFi状态为关闭时,状态栏不会有任何显示。当WiFi状态打开时,会如上图所示,左侧表示有可用WiFi,右侧表示当前WiFi打开但未连接。 当WiFi状态连接时&#x…

如何应对访问国外服务器缓慢的问题?SDWAN组网是性价比之选

访问国外服务器缓慢通常由以下原因造成: 1、政策限制:我国管理互联网,限制部分国外网站和服务器,以维护国家安全稳定。 2、技术障碍:国内与国际互联网的网络架构和协议存在差异,可能导致数据传输不兼容。 …

F.softmax(cls) + 1e-4

这个代码段中的 softmax 操作结合了一个微小的常数,这个常数通常被称为平滑化参数。softmax 函数将原始的分类输出转换为概率分布,其公式如下: 在实践中,当某些分类得分特别大时,softmax 函数会将对应的概率接近于 1&a…

filezilla 上传文件到服务器

1. 下载windows ftp客户端 https://filezilla-project.org/index.php 点击左侧的 Download FileZilla Client All platforms 默认安装。 2. 双击打开 filezilla 按图中填写,并上传。 主机名: 10.20.89.* 用户名: zhuzh 密码: *** 端口: 22 点击 快速连接&#…

10个必备功能打造跨境电商平台开发全攻略

在跨境电商行业中,拥有一个高效且功能完善的电商平台至关重要。针对跨境电商平台开发,我们将介绍十个必备功能,帮助您全面打造优秀的跨境电商平台。 关键功能一:多语言支持 跨境电商平台开发的首要功能之一是多语言支持。提供多…

探秘Flex布局下子元素宽度超出的那些烦心事

嘿,小伙伴们!你们有没有遇到过用Flex布局的时候,子元素的宽度莫名其妙地超出了父元素的情况?别着急,今天我就来给大家揭秘这个问题的来龙去脉,以及一些解决方案。让我们一起来深入探讨! 发现问…

73. 矩阵置零/54. 螺旋矩阵

73. 矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 思路&#x…

OurBMC开源大赛企业获奖队伍专访来啦!

精彩纷呈的 OurBMC 开源大赛已告一段落,经历为期四个月的实战,各个参赛队伍也积淀了丰富的实践经验与参赛心得。本期,社区特别邀请 OurBMC 开源大赛获奖企业团队分享「走进OurBMC开源大赛,共同践行开放包容、共创共赢的开源精神」…

WordPress建站从入门到精通,跨境电商建站教程

详情介绍 课程内容:WordPress建站从入门到精通,跨境电商建站教程 - 百创网-源码交易平台_网站源码_商城源码_小程序源码 1-WordPress网站的优势 2-如何用Builtwith识别网站的搭建技术? 3-如何配置站长信息? 4-如何使用WordPress虚拟后台 5-如何选择一个好的网站域名?…

【Osek网络管理测试】[TG4_TC5]唤醒条件

🙋‍♂️ 【Osek网络管理测试】系列💁‍♂️点击跳转 文章目录 1.环境搭建2.测试目的3.测试步骤4.预期结果5.测试结果 1.环境搭建 硬件:VN1630 软件:CANoe 2.测试目的 验证DUT验证DUT睡眠后被唤醒,并再次睡眠能否…

流畅的python-学习笔记_一等函数

函数对象 函数也是对象,操作可像对象一般操作 高阶函数 高阶函数指接受参数为函数,或返回函数的函数 不少高阶函数在py3已经有了替代品。map, filter可通过生成式实现,reduce(在functools里)可通过sum实…

Web3智能物联网:科技连接的未来世界

在当今科技飞速发展的时代,Web3智能物联网正逐渐成为人们关注的焦点。随着区块链技术的不断成熟和普及,以及物联网的普及和应用,Web3智能物联网作为二者的结合,将为未来的数字世界带来革命性的变化。本文将深入探讨Web3智能物联网…

一文快速掌握高性能内存队列Disruptor

写在文章开头 Disruptor是英国外汇公司LMAX开源的一款高性能内存消息队列,理想情况下单线程可支撑600w的订单。所以本文会从使用以及设计的角度来探讨一下这款神级java消息队列。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java code…