OCC-BEV:基于三维场景重建的多摄像机统一预训练

news2024/12/24 21:43:58

论文:https://arxiv.org/pdf/2305.18829.pdf
代码:https://github.com/chaytonmin/Occ-BEV

多摄像机3D感知技术(能够收集车辆周围360°的环境信息)已经成为自动驾驶领域的一个突出研究领域,为 Lidarb-based 解决方案提供了一个可行且成本效益高的替代方案。

然而,现有的多摄像机算法主要依赖于单目图像的预训练(ImageNet模型和深度估计模型),忽略了不同摄像机视图之间的空间和时间相关性。 此外,单目预训练虽然提高了图像特征提取的能力,但不能充分满足后续任务的预训练要求。

深度估计方法通常侧重于估计物体表面的深度,而忽略了物体和被遮挡元素的整体三维结构。

自动驾驶车辆收集了大量的 image-LiDAR 对,这些image-LiDAR 对包含有价值的三维空间和结构信息。因此,有效地利用这些未标记的 Image-Lidar 对有助于提高自动驾驶系统的性能。

论文提出了第一个多摄像机统一预训练框架 OCC-BEV,它首先重建三维场景作为基础阶段,然后在下游任务中对模型进行微调。设计了一个3D解码器,用于利用多视角图像的鸟瞰(BEV)特征来预测3D几何占用率,以使模型能够捕获对3D环境的更全面的理解。

OCC-BEV的一个显著好处是它能够利用大量未标记的图像激光雷达对进行预训练。

在这里插入图片描述在自动驾驶领域,优先考虑重建整个三维场景的占用网格,而不是仅仅强调深度预测,模型的预训练会产生更大的好处。
单目预训练只提高了从单个视图中提取特征的能力,而多视图统一预训练则通过三维场景重建将多视图图像的时空信息融合起来进行预训练。

在这里插入图片描述
由于单帧点云的稀疏性,我们采用多帧点云融合作为占据标签生成的基准。Decoder 仅用于预训练,而训练好的模型用于初始化多摄像机感知模型。

论文涉及

多摄像机三维感知

Learning-based BEV 感知方法,基于 2D 到 3D 视觉转换,大致可以分为基于几何基于 transformer 两种方法。

基于几何: LSS(Least Squares-Support Vector Machines)
LSS方法首先通过相机标定和几何变换,将每个相机的图像坐标系与车辆坐标系进行对应。然后,使用特征截锥技术,将相机视野中的每个图像区域映射到车辆周围的三维空间中。这样可以获得每个相机视野中的物体位置和姿态信息。

接下来,通过将这些三维物体位置和姿态信息映射到BEV平面(垂直于地面的平面),可以将它们投影到一个光栅化的BEV网格中。BEV网格将车辆周围的环境划分为离散的网格单元,每个单元可以表示物体的存在或者空闲状态。

基于 transformer: DETR3D
定义了三维空间中的对象 Query,并使用 Transformer Decoder从多视图图像特征中学习。

自监督学习

自监督学习(Self-Supervised Learning)和半监督学习(Semi-Supervised Learning)是机器学习领域中两种不同的学习方法。

自监督学习 是一种无监督学习的变体,通过从数据中自动生成标签或者利用数据内部的结构来进行学习。在自监督学习中,模型从输入数据中自行学习表示或预测任务,而无需人工标记的监督信号。
自监督学习的优点是可以利用大量未标记的数据进行训练,而无需耗费人力和时间进行标注。它在缺乏大量标注数据的情况下,可以提供有效的学习方法。

半监督学习 是介于无监督学习和有监督学习之间的一种学习方法。在半监督学习中,训练数据既包含带标签的样本,也包含未标记的样本。
半监督学习的优点是可以在有限的标记数据的情况下,利用未标记数据进行模型训练,从而提高学习性能和泛化能力。

论文内容

BEV 感知

多摄像机输入图像,表示为 I = { I i , i = 1 , 2 , . . . , N v i e w } I=\{I_i,i=1,2,...,N_{view}\} I={Ii,i=1,2,...,Nview},最初由图像 backbone 网络处理(ResNet-101),每个摄像机视角产生特征映射 F 2 d = { F 2 d i } i = 1 N v i e w F_{2d}=\{F_{2d}^i\}_{i=1}^{N_{view}} F2d={F2di}i=1Nview。然后,对这些特征从到2D到3D视图进行转换操作,以将它们投影到统一的鸟瞰视图表示中,表示为 F b e v ∈ R C × H × W F_{bev} \in \R^{C×H×W} FbevRC×H×W。 通过加入特定的 heads,可以在鸟瞰视图上完成多种自动驾驶感知任务,包括3D目标检测、地图分割、目标跟踪等。

依赖于在单目图像上训练的特征提取模型(ImageNet)或深度估计模型没有考虑从不同的摄像机视图和帧捕获的图像之间的相互作用和相关性。深度估计只能估计物体表面的位置,忽略了物体的遮挡。

为了充分挖掘不同摄像机视图之间的时空关系,论文提出了一种多摄像机统一预训练模型。

多摄像机统一预训练

对于多摄像机系统,精确的三维占据网格预测有利于感知的准确性。

几何占据 Decoder

为了根据BEV特征 F b e v F_{bev} Fbev预测三维几何占用率, 首先转换BEV特征为 F b e v ′ ∈ R C ′ × D × H × W F_{bev}^{'}\in \R^{C^{'} \times D \times H \times W } FbevRC×D×H×W,其中 D D D 表示高度通道数, C = C ′ × D C = C^{'} \times D C=C×D。然后使用了一个专门设计的三维 Decoder 来生成三维几何占据。
Decoder 包括轻量级的 3D 卷积层,最后一层提供每个体素包含点的概率。Decoder 的输出表示为 P ∈ R D × H × W × 1 。 \boldsymbol P \in \R^{D \times H \times W \times 1}。 PRD×H×W×1在预训练过程中,Decoder 的主要目的是重建被占用的体素。

Pre-training 目标

考虑到单帧激光雷达点云的稀疏特性,以及由于动态目标的存在而导致的融合大量帧的潜在不准确性,论文从一些关键帧的LiDAR点云进行融合,以生成占据标签。根据3D感知模型中的标准做法,激光雷达点云被划分成均匀间隔的体素。
将激光雷达点云沿 Z × Y × X Z×Y×X Z×Y×X 方向的维数分别确定为 D × H × W D×H×W D×H×W,体素大小相应确定为 v Z × v H × v W v_Z×v_H×v_W vZ×vH×vW。 体素的占据,即每个体素中是否包含点,作为地面真值 T ∈ { 0 , 1 } D × H × W × 1 \boldsymbol T \in \{ 0,1 \}^{D \times H \times W \times 1} T{0,1}D×H×W×1。 1 表示占据,0 表示空闲。

论文介绍了用于预训练多摄像机感知模型的二元几何占据分类任务。 该任务的目标是训练网络以准确预测基于多视点图像的三维场景的几何占据分布。 考虑到空白体素的数量相当大,预测占据格网存在一个不平衡的二元分类问题。为了解决这个问题,论文使用预测的占据值P和真实的占据体素T来计算二元占据分类的焦点损失: l o s s = − 1 b a t c h 1 n ∑ i = 1 b a t c h ∑ j = 1 n α t ( 1 − P t i j ) γ log ⁡ ( P t i j ) loss= -\frac{1}{batch}\frac{1}{n}\sum_{i=1}^{batch}\sum_{j=1}^{n}\alpha_t(1-\boldsymbol P_{t}^{ij})^\gamma \log (\boldsymbol P_{t}^{ij}) loss=batch1n1i=1batchj=1nαt(1Ptij)γlog(Ptij) P t i j \boldsymbol P_{t}^{ij} Ptij是第 i i i 个训练样本中体素 j j j 的预测概率。 n = D × H × W n = D \times H \times W n=D×H×W 是体素总数,batch是批大小的数目。 对于类别1,设置 α t = α \alpha_t = \alpha αt=α P t i j = P i j P_{t}^{ij} = P^{ij} Ptij=Pij;对于类别0,设置 α t = 1 − α \alpha_t = 1 - \alpha αt=1α P t i j = 1 − P i j P_{t}^{ij} = 1 - P^{ij} Ptij=1Pij

环境语义占据预测的预训练

直接预测多视点图像的三维语义需要大量的三维语义标注来进行训练,代价高昂且耗时。论文提出提出将多摄像头统一预训练算法扩展到周围语义场景完成任务,即首先进行几何占据预测,然后在语义场景完成任务上进行微调,以预测多视角图像的3D语义,更好地理解环境中的物体和场景,避免了为训练模型收集大量 3D 语义注释的开销和时间成本。

预训练模型的微调损失函数可以表示为以下公式:
L = − 1 N ∑ i = 1 N [ y i log ⁡ ( p i ) + log ⁡ ( 1 − p i ) ] − λ 1 M ∑ j = 1 M [ y j s e m log ⁡ ( p j s e m ) + ( 1 − y j s e m ) log ⁡ ( 1 − y j s e m ) ] L=-\frac {1}{N} \sum_{i=1}^{N}[y_i \log (p_i)+\log (1-p_i)] - \lambda \frac{1}{M} \sum_{j=1}^{M}[y_{j}^{sem}\log(p_{j}^{sem})+(1-y_{j}^{sem})\log (1-y_{j}^{sem})] L=N1i=1N[yilog(pi)+log(1pi)]λM1j=1M[yjsemlog(pjsem)+(1yjsem)log(1yjsem)] N N N是体素的数量, y i y_i yi是真实值, p i p_i pi是预测值 y j s e m y_{j}^{sem} yjsem是周围语义标签的真实值, p j s e m p_{j}^{sem} pjsem是预测的周围语义标签, M M M是周围语义标签的数量, λ \lambda λ是微调损失函数的权重系数。

三维场景重建可视化

几个重建的3D场景。可以观察到,使用单帧点云作为占据格网生成的监督会导致不完整的重建结果,这是由于LiDAR点云的稀疏性。另一方面,使用三个关键帧及其相应的非关键帧作为监督信息可以实现更完整的3D场景重建。
在这里插入图片描述

优势

(1) 空时集成:通过利用多个摄像头视角的空间和时间信息,模型可以更好地理解环境的动态性,并做出更准确的预测。
(2) 统一表示:统一的预训练方法使模型能够在不同摄像头视角之间学习共享表示,促进更好的知识迁移,并减少对特定任务预训练的需求。
(3) 对遮挡区域的感知:单目深度估计只能预测物体的表面位置,而提出的多摄像头统一预训练方法使得对遮挡物体的整体三维重建成为可能。

与知识蒸馏的比较:论文旨在利用3D点云中丰富的空间信息,并将其转化为多摄像头算法所使用。独特的预训练算法消除了对注释或预训练LiDAR检测模型的需求,从而大大降低了对3D注释的要求。

局限性

(1)Decoder 中的 3D 卷积限制了它对需要高分辨率占用重建的任务的适用性。
(2)主要依靠激光雷达来获取地面真值占据网格。
(3)动态目标会导致定位不准确。

参考:Occ-BEV:通过3D场景重建助力多目预训练不断突破!

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

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

相关文章

EMC学习笔记(九)特殊信号的EMC处理(一)

特殊信号的EMC处理(一) 1.电源接口EMC防护滤波电路1.1 24VDC电源口1.2 电源地的EMC电路1.3 Flyback EMC电路1.4 BUCK电路EMC电路1.5 推挽电路 2.时钟电路的EMC防护2.1 有源时钟2.2 无源时钟2.3 差分时钟 3.复位电路EMC防护4.对外接口信号的EMC防护4.1 差…

简历不要随意给猎头!他们会胡乱投递,影响你之后求职!

猎头是求职的重要途径之一,但猎头群体良莠不齐,并不是每个猎头都值得信任。 一位网友就对猎头持怀疑态度,问大家: 简历可以随意给猎头吗?给他们的时候需要注意什么?他们会不会群发,对自己之后求…

软考A计划-系统集成项目管理工程师-一般补充知识-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

F429驱动TFT裸屏时LTDC

F429驱动TFT裸屏时LTDC时序配置说明(以V6的7寸驱动为例) 说明: 1. 经常有兄弟问到这个问题,所有这里就写一个帖子。 2. 基础知识学习: TFT LCD的DE模式和HV模式的区别:http://bbs.armfly.com/read.php?tid…

Kafka搭建部署

解压文件 启动zookeeper 配置kafka环境变量 查看Kafka的版本内容 分发Kafka文件到slave1、slave2 修改server.properties文件 在Master、slave1和slave2节点上分别启动Kafka 在Master节点上执行如下命令来创建Topic 解压文件 tar -zxvf kafka_2.12-2.4.1.tgz -C /opt …

2022(一等奖)基于哨兵2影像的典型地表参量和红边指数的特征空间石漠化遥感监测模型

作品介绍 1 监测模型设计概述 (1)应用背景 石漠化是危害人们安全的自然灾害之一,也是土壤荒漠化其中的一种。我国西南地区是全球石漠化现象最严重的地区之一,长期的人为干预使得生态环境变得非常敏感,地表植被破坏严…

升级系统到Proxmox VE 8

Proxmox VE 8.0正式版发布 Proxmox VE 需要升级到7.4,验证一下。 rootpve99:~# pveversion pve-manager/7.4-13/46c37d9c (running kernel: 5.13.19-6-pve) rootpve99:~# pve7to8 CHECKING VERSION INFORMATION FOR PVE PACKAGES Checking for package updates.…

【实战与杂谈】本地搭建自己的游戏王卡片生成器

声明: 1.游戏王卡片制作器本身就是由【kooriookami】开发的,用于DIY卡片因此我只是原有功能再现并不会追加新功能 2.其次数据和卡图均来源于网络,因此我也只提供网络能获取该内容的途径,并不会预先准备好 最近一直没有时间看回复…

2023数字化产品经理如何建立自己的护城河线下演讲-上

来源:三爷出席《人人都是产品经理》2023数字化产品经理大会演讲实录 各位朋友们,大家下午好,非常高兴呢能受到人人都是产品经理官方的邀请,今天能有这样一个机会站在这里和大家做一个简单的分享。 ​ 编辑 添加图片注释&#xf…

C#/.Net的多播委托到底是啥?彻底剖析下

前言 委托在.Net里面被托管代码封装了之后,看起来似乎有些复杂。但是实际上委托即是函数指针,而多播委托,即是函数指针链。本篇来只涉及底层的逻辑,慎入。 概括 1.示例代码 public delegate void ABC(); //委托写在类的外面 publi…

Linux 多路转接 —— poll

目录 传统艺能😎poll🤣struct pollfd🤣 poll 服务器😘PollServer类😁运行服务器😒事件处理😁 服务器测试😂 传统艺能😎 小编是双非本科大二菜鸟不赘述,欢迎米…

【初识C语言(4)】操作符

文章目录 1. 算术操作符2. 移位操作符3. 位操作符4. 赋值操作符5. 单目操作符6. 关系操作符7. 逻辑操作符8. 条件操作符9. 逗号表达式10. 下标引用、函数调用和结构成员 1. 算术操作符 - * / %加 减 乘 除 求余 加减乘 都很简单没啥可讲的,这里主要讲解 除 和 求余。…

nginx主配置文件及实操

文章目录 一、nginx主配置文件nginx.conf1.认识nginx服务的主配置文件2.全局配置3.I/O事件配置4.HTTP配置5.检查配置文件是否正确6.浏览器测试 二、实战操作1.nginx的访问状态统计2.基于授权的访问控制:3.基于客户端访问设置(设置…

驱动开发:内核中进程与句柄互转

在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。在Windows内核中,EProcess结构表示一个进程,而HANDLE是一个句柄。 为了实…

【跑实验04】CLIP安装报错,setup.py如何安装,图像编码器(image_encoder)的使用(含源代码)

文章目录 一、如何解决CLIP安装报错二、setup.py如何安装?三、图像编码器(image_encoder)的使用 一、如何解决CLIP安装报错 我第一次尝试安装CLIP,采用的方法是pip的方法: pip install clip但是安装后,无法使用: 明确…

代码随想录二刷 day31 | 贪心之 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

day31 理论基础什么是贪心贪心算法的套路一般解题步骤 455.分发饼干376. 摆动序列情况一:上下坡中有平坡情况二:数组首尾两端情况三:单调坡度有平坡 53. 最大子序和 理论基础 什么是贪心 贪心的本质是选择每一阶段的局部最优,从…

vue3基础 ---- 上

目录 一.vue3介绍 1. 官网初识 2.环境搭建 2-1 线上尝试 2-2 CDN使用 2-3 Vue CLI 2-4 Vite 二.vue3基础 1.模板语法 1-1 我的第一个vue应用 1-2 应用背后的真相 1-3 模板语法-新的皮肤来了 1-4 Todolist-来个案例 1-5 点击变心案例 - 是变色 1-6 v-html- 模板…

【libdatachannel】pycharm运行streamer的信令服务及streamer与js客户端本机联调2

后面与ws服务器一直有ping pong2023-06-23 10:30:27.915 VERB [24456] [rtc::impl::PollService::runLoop@178] Entering poll, timeout=10000ms 2023-06-23 10:30:27.916 VERB [24456] [rtc::impl::PollServ

有了电脑怎么搞?我有办法(第一部分)-涵子的个人想法

上一次会选电脑后,今天我们来学习一下电脑的整理方法。今天满满的都是干货,请仔细阅读!注意粗体内容。 目录 一、磁盘太乱咋整? 1.1.磁盘是个啥?为啥乱? 1.2.分区怎么分? 1.3.还是分不清怎…

Java类加载机制:从字节码到对象的奇妙之旅

目录 什么是类加载机制? 类加载顺序 类加载顺序图 双亲委派模型 双亲委派模型示意图 如何打破双亲委派模型? 要想学好java,首先得知道它是什么,怎么运行的,怎么加载的,运行的是个什么东西&#xff0c…