【占用网络】VoxFormer 基于视觉的3D语义场景方案 CVPR 2023

前言

本文分享“占用网络”方案中,来自CVPR2023的VoxFormer,它基于视觉实现3D语义场景补全

使用Deformable Attention从图像数据中,预测三维空间中体素占用情况类别信息

VoxFromer是一个两阶段的框架

  • 第一个阶段:预测每个像素的深度值,将像素投影三维空间中,2D图像到3D空间的思想。然后预测每个三维网格是否被占用,生成稀疏体素特征。最后选择其中是“占用”的体素作为“体素查询特征”进入第二阶段。这个阶段只预测占用情况,选择一些值得分析的体素。
  • 第二个阶段:根据一阶段提议的体素特征,生成体素Query,使用交叉注意力从3D体素Query到2D图像中查询融合特征的思想;然后使用掩码标记与自注意力,预测那些“没占用”的网格,补全得到完整的体素特征。后面接3D语义场景任务头,预测每个三维网格的类别情况。

论文地址:VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Completion

代码地址:https://github.com/NVlabs/VoxFormer 

一、框架思路

VoxFromer仅通过2D图像,不依赖点云数据,能预测完整的3D几何形状语义信息

它输入图像数据,默认是多视角图像数据,比如6个相机的。也可以只输入单张图像数据,单目相机场景。

  • 第一阶段:通过预测图像中每个像素点的深度信息,结合相机内外参,投影到三维空间中。然后预测每个三维网格是否被占用,并选择状态是“占用”的体素,得到提议的3D体素Query。这样模型会选择一些值得分析的体素,进入下一阶段。
  • 第二阶段-1:得到的提议的3D体素Query,使用交叉注意力3D体素Query到2D图像中查询融合特征,生成进一步的3D体素Query'。(这里体素特征Query',表示图像中可见区域生成的,是有占用的;而不是被遮挡或空的空间
  • 第二阶段-2然后使用自注意力,类似MAE的掩码预测生成完整的体素特征。(基于提议的有占用体素特征,预测其它空间的情况,得到完整的体素特征)

最后输出3D语义场景信息,包含体素占用情况和类别信息。

Voxel Queries: 表示体素查询。其中,体素是三维空间中的一个立方体单元,可以想象为三维像素。

体素查询与注意力机制相结合,使模型能够专注于输入数据中的重要部分,然后进行提取特征。

VoxFromer的详细的思路流程,如下图所示:

阶段一:

  1. 对图像中的每个像素,预测其深度值。结合相机内外参,投影到三维空间中,形成稀疏的3D点。
  2. 初始化一个体素查询矩阵Q,结合稀疏的3D点,对每个体素进行二元分类。当网格被占用时,预测为1;当网格没有被占用时,预测为0。图像中可见区域生成的,是有占用的;而不是被遮挡或空的空间。
  3. 设定数量Np,选择Np个最有可能是占用状态的网格特征,组成体素查询Qp。
  4. 这里选择其中是“占用”的体素,作为“体素查询特征”进入第二阶段。这个阶段只预测占用情况,选择一些值得分析的体素。

阶段二:

  1. 使用可变形交叉注意力,根据体素查询Qp,融合对应的图像特征。3D体素Query到2D图像中查询融合特征。
  2. 然后使用自注意力,类似MAE的掩码预测,生成完整的体素特征。基于提议的有占用体素特征,预测其它空间的情况,得到完整的体素特征。

Mask Tokens 掩码标记与体素查询一起使用,以帮助模型预测那些在点云数据中缺失但对于理解整体场景很重要的体素。

每个掩码标记都是一个可学习的向量,代表一个缺失体素的存在,而位置嵌入(positional embeddings)则确保掩码标记能够了解它们在3D空间中的位置。

二、核心内容——第一阶段(预测深度值、预测网格是否被占用

第一个阶段主要包括:预测深度值、预测网格是否被占用。

一阶段详细步骤:

  1. 深度估计:从给定的二维图像中,使用深度估计模型来预测每个像素点的深度。结果是一个深度图,其中每个像素的值代表从相机到场景中相应点的距离。

  2. 体素化:利用这些深度信息,结合相机内外参,投影到三维空间的体素网格。每个体素是三维空间中的一个立方体区域,类似于二维图像中的像素点。

  3. 占用决策(深度修正):对于每个体素,根据其内部是否有从深度图中推导出的点来决定其占用状态。如果一个体素在其对应的深度图区域内有深度信息(即至少有一个像素点的深度信息指向该体素的空间区域),则该体素被标记为“占用”(通常用1表示)。如果没有深度信息指向该体素,它被标记为“空闲”(通常用0表示)。

  4. 二值化占用图:通过这种方式,可以生成一个二值化的占用图,这是一个三维网格,其中每个体素的值指示该区域是否被占用。

  5. 查询提案:接下来,系统会选择这些“占用”的体素进行进一步的处理,如特征提取或语义分割,在本文中是输入到第二阶段。在Class-Agnostic Query Proposal阶段,模型不区分体素类别,而是根据它们是否包含足够的信息(即是否占用)来选择哪些体素值得进一步分析。

 有了每个像素的深度值后,可以利用相机的内外参,来将图像反投影至3D点云空间:

通过这种方法生成的3D点云在远距离区域特别是地平线附近的质量非常低,原因在于这些区域的深度极不一致。

此外,只有极少数像素决定了大片区域的深度,导致这些区域的点云相对稀疏。

为什么要做深度校正,也就是外什么还有用一个模型来预测每个网格是否占用?

深度修正背景

  • 在场景的远处,如地平线区域,因为在这些区域,相机捕捉到的深度信息往往因为距离过远而不准确或者分辨率不足。这种情况下,直接从图像像素得到的深度数据是不可靠的,需要进行校正。
  • 地平线区域进行深度估计的问题通常是因为在这些远距离处,深度信息变得非常稀疏和不连续。在普通的二维图像中,地平线附近的物体通常比较小,因此在点云数据中,它们可能只对应非常少的点,甚至可能没有点。

解决方案:是使用一个模型来预测占用图,这是一个在较低空间分辨率下二进制体素网格。每个体素表示一小块三维空间。

如果至少有一个点在该体素的空间范围内,则该体素在占用图中被标记为1,表示该区域被占用;如果没有点,则标记为0,表示未被占用。

这种占用信息有助于对深度信息进行修正,因为它提供了场景中哪些区域是空的,哪些是有物体的更明确的信息。

深度修正的思路流程:

  1. 使用深度估计模型从图像获取初步的深度信息。
  2. 将这个初步深度信息转换成一个低分辨率的体素网格,即占用图。
  3. 通过检查哪些体素被占用(至少有一个点),哪些没有被占用(没有点),来校正深度信息。这样可以修正因为分辨率不足或其他原因造成的误差。

详细步骤:

  1. 生成初步深度图:首先,利用深度估计模型(比如基于单目或立体视觉的深度估计网络)从二维图像中生成一个初步的深度图。这个深度图在远处尤其是地平线区域可能会存在较大的误差。

  2. 构建占用图:随后,将初步深度图转换为一个三维体素网格。这个过程中,每个体素根据是否存在对应的深度点被标记为占用(1)或未占用(0)。由于地平线区域的深度信息可能不连续,所以此时的体素网格是低分辨率的,也就是说,每个体素覆盖的空间较大,可以包含较多的潜在深度信息。

  3. 低分辨率修正:在低分辨率的占用图中,可以辨别出哪些区域是连续被占用的,哪些区域是空的。由于每个体素较大,即使远处的深度点非常稀疏,也更可能被检测到占用。然后,可以对那些在初步深度图中看起来是空的但在占用图中被标记为占用的区域进行深度修正。

  4. 插值和平滑:在确认了哪些大体素内的空间确实存在物体后,可以在这些区域应用插值或平滑技术来估计更准确的深度值。例如,如果一个大体素被标记为占用,而其内部的小体素深度值不连续,可以通过插值周围小体素的深度值来估计这些小体素的深度,使深度信息在大体素内部更加连续。

  5. 高分辨率细化:最后,使用这个经过低分辨率修正的占用图作为一个指导,可以在更高分辨率的深度图上进行细化,进一步提高深度估计的准确性。这可以通过在高分辨率深度图上应用从占用图中得到的占用信息来完成,进而优化整个场景的深度估计。

三、核心内容——第二阶段(交叉注意力、自注意力、生成完整的体素特征

第一阶段,系统已经生成了体素查询提案特征,表示这些体素值得进一步分析。

第二阶段是关于如何利用这些体素查询提案来提取丰富的图像特征,并对它们进行分割,区分不同类别的物体。

  • 第二阶段-1:得到的提议的3D体素Query,使用交叉注意力3D体素Query到2D图像中查询融合特征,生成进一步的3D体素Query'。(这里体素特征Query',表示图像中可见区域生成的,是有占用的;而不是被遮挡或空的空间
  • 第二阶段-2然后使用自注意力,类似MAE的掩码预测生成完整的体素特征。(基于提议的有占用体素特征,预测其它空间的情况,得到完整的体素特征)

首先使用ResNet以及FPN提取多尺度图像特征。使用可变形交叉注意力,根据体素查询Qp,融合对应的图像特征。3D体素Query到2D图像中查询融合特征。

然后使用自注意力,类似MAE的掩码预测,生成完整的体素特征。基于提议的有占用体素特征,预测其它空间的情况,得到完整的体素特征。

最后然后使用VoxFormeHead得到3D栅格预测,其中Attention均采用Deformable Attention。

体素Query'与图像特征的Cross Attention:通过将Query栅格的坐标投影到图像上,使用投影点作为Deformable Attention的参考点,并在这些参考点附近采样图像特征作为Value进行处理。

将每个查询网格的坐标投影到图像上,以这些投影点作为参考点。

然后,通过可变形注意力机制在参考点周围采样图像特征,这些特征随后被用作Transformer的Value。对于投影到多个图像帧的网格,将各帧的注意力输出进行平均,以合成最终特征。

体素Query''栅格与所有栅格的Self Attention:处理整个空间的栅格特征,对于非Query栅格使用mask token进行替代,并以栅格中心作为Deformable Attention的参考点。

四、VoxFormer实现细节

在第一阶段中:

深度估计:这一步骤使用深度感知网络,如MobileStereoNet或MSNet3D,从单幅图像或一对立体图像中估计出每个像素点的深度信息。此信息随后利用相机内部和外部参数被转换成三维空间中的点云数据,这通常是为了与现实世界的物理尺度对齐。

深度修正:直接从深度估计得到的点云数据往往包含噪声,为了提高数据质量,引入了基于3D网格的占据概率预测网络,使用了激光雷达SSC方法LMSCNet。该网络处理经过栅格化(将连续空间量化为离散的网格)的点云数据,输出更低分辨率的占据预测,以减少噪声和增强数据的可用性。

这个流程中,输入为三维栅格,每个体素(voxel)记录了0-1的占据情况。处理过程首先通过permute操作将z轴的维度转换到图像的通道维度,这样三维数据被转换为类似于二维图像的形式。接下来,利用类似于图像处理中的UNet架构来处理这个“二维化”的数据,从而得到二维特征图。最后,使用一个专门的头部(head)网络将这个二维特征图再转换回三维占据栅格。这个过程有效地将3D空间数据处理流程与传统的2D图像处理技术相结合,以实现高效的特征提取和空间理解。

查询网格生成:在占据概率预测步骤之后,所有被预测为占据的栅格都被用作查询网格。这些查询网格将用于后续的3D视觉处理任务,如语义分割或对象识别。

在第二阶段中:

可变形交叉注意力(Deformable Cross Attention):它专注于将查询网格坐标投影到图像上,使用这些投影点作为采集图像特征的参考点,并通过可变形注意力机制来实现。对每一帧图像都进行此操作,并将注意力输出进行平均,以获得全面的特征表示。

可变形自注意力(Deformable Self Attention):采用所有网格点的特征(包括由mask token代表的非查询点)进行注意力处理,以网格中心作为参考点。

其中Attention均采用Deformable Attention。

损失函数

在模型训练过程中,分两个阶段应用了不同的损失函数。

第一阶段 - 这一阶段主要使用交叉熵损失来评估栅格是否正确地被识别为占用。这个阶段的重点是识别哪些体素是重要的,应该被后续处理阶段进一步分析。

第二阶段 - 这一阶段的损失函数更复杂,包括两个部分:

一是用于评估语义类别识别准确性的交叉熵损失;

二是MonoScene提出的Scene-Class Affinity Loss,这个损失函数专注于优化模型对场景中不同类别间关系的理解,从而增强模型对整个场景的认知能力。

五、背景——语义场景补全(SSC,Semantic Scene Completion)

在自动驾驶汽车感知中,从视觉图像进行完整的3D场景理解是一个重要而具有挑战性的任务。

这个过程受限于传感器的视野和物体遮挡问题,导致获取准确和完整的3D信息变得困难。

为了解决这些问题,语义场景补全(SSC)技术被提出,它旨在从有限的观测中联合推断出场景的完整几何形状语义信息

SSC的挑战在于需要同时处理可见区域的场景重建遮挡区域的场景推断

目前一些基于视觉的SSC方法,例如MonoScene,尝试通过将2D图像特征投影到3D空间来解决这个问题。但这种方法可能会把可见区域的2D特征错误地分配给空的或被遮挡的体素,从而产生歧义,影响后续的几何补全和语义分割任务的性能。

六、模型效果

VoxFormer在SemanticKITTI数据集上进行验证,该数据集提供了KITTI里程计基准测试中每个激光雷达扫描的密集语义注释,共包含22个户外驾驶场景。

  • SemanticKITTI SSC基准测试关注车前51.2米、左右两侧各25.6米、高6.4米的体积区域。这个体积的体素化导致了一组尺寸为256×256×32的3D体素网格,因为每个体素的大小为0.2米×0.2米×0.2米。
  • 体素网格被标记为20个类别(19个语义类和1个空类)。
  • 关于目标输出,SemanticKITTI通过连续注册的语义点云的体素化提供了真实的语义体素网格。
  • 对于SSC模型的稀疏输入,可以是单个体素化的激光雷达扫描或RGB图像。

对基于相机的语义场景补全(SSC)方法进行了定量比较:

性能在三种不同体积的空间(分别是12.8×12.8×6.4立方米、25.6×25.6×6.4立方米和51.2×51.2×6.4立方米)内进行评估。前两个体积是为了评估在安全关键的邻近位置的SSC性能。

性能最佳的三种方法分别用红色、绿色和蓝色标记。

 VoxFormer和MonoScene在SemanticKITTI hidden test上的定量结果。

VoxFormer在与最新激光雷达基础的语义场景补全(SSC)方法的定量比较中,即使在近距离范围内,其表现也与一些激光雷达基础的方法相当。

在单目深度的情况下,VoxFormer-S在几何(12.8米、25.6米和51.2米范围)和语义(12.8米和25.6米范围)方面的表现优于MonoScene。

VoxFormer在大规模自动驾驶场景中测试效果。相对下,VoxFormer在树干、电线杆等小物体的补全方面表现较好。

分享完成~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript 从入门到进阶之基础篇(四) symbol类型篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …

mysql之视图执行计划

一.视图 1.1视图简介 1.2 创建视图 1.3视图的修改 1.4视图的删除 1.5查看视图 二.连接查询案例 三.思维导图 一.视图 1.1视图简介 虚拟表,和普通表一样使用 MySQL中的视图(View)是一个虚拟表,其内容由查询定义。与实际表不…

解决 POST http://x.x.x.x:8000/aaa/ net::ERR_CONNECTION_TIMED_OUT

记录一下我遇到的问题和解决办法 我的项目前后端分离,在前端用的vue访问后端时连接不上后端,一切操作都触发不了后端,数据也传不到后端去; 原因:url有问题,url地址写的不是本机,所以导致连接超…

OpenCV的安装和vscode的配置

在图像处理领域,OpenCV的使用是必不可少的,这里介绍一下OpenCV的安装及其在vscode中的配置 1.OpenCV的安装 (1)安装依赖 sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavc…

vue2中vuex详细使用

1.安装 说明:也就是版本号,一般vue2安装vuex3。 npm i vuex3.6.2 2.搭建架子 执行流程如下: 初始化状态:在state对象中定义了一个名为message的属性,并将其初始值设置为"启动"。 定义变更函数&#xff08…

leetcode 每日一题 2023年12月30日 一周中的第几天

题目 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", &qu…

pytorch集智-2单车预测器

完整代码在个人主页简介链接pytorch路径下可找到 1 单车预测器1.0 1.1 人工神经元 对于sigmoid函数来说,w控制函数曲线的方向,b控制曲线水平方向位移,w控制曲线在y方向的幅度 1.2 多个人工神经元 模型如下 数学上可证,有限神经…

[大厂实践] 无停机迁移大规模关键流量(下)

在系统升级、迁移的过程中,如何验证系统逻辑、性能正确无误,是一个很大的挑战。这一系列介绍了Netflix通过重放流量测试解决这一挑战的实践。原文: Migrating Critical Traffic At Scale with No Downtime — Part 2 想象一下,你被心爱的Netf…

【操作系统xv6】学习记录5--实验1 Lab: Xv6 and Unix utilities

ref:https://pdos.csail.mit.edu/6.828/2020/xv6.html 实验:Lab: Xv6 and Unix utilities 环境搭建 实验环境搭建:https://blog.csdn.net/qq_45512097/article/details/126741793 搭建了1天,大家自求多福吧,哎。~搞环境真是折磨…

浅谈 JVM 类加载过程

🚗🚗🚗今天给大家分享的是HTTPS加密的工作过程。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! ✈️✈…

SQL Server从0到1——写shell

xp_cmdshell 查看能否使用xpcmd_shell; select count(*) from master.dbo.sysobjects where xtype x and name xp_cmdshell 直接使用xpcmd_shell执行命令: EXEC master.dbo.xp_cmdshell whoami 发现居然无法使用 查看是否存在xp_cmdshell: EXEC…

如何在群晖7.2中运行WPS Office镜像容器并使用固定地址公网访问

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本,通过…

数据结构与算法教程,数据结构C语言版教程!(第二部分、线性表详解:数据结构线性表10分钟入门)九

第二部分、线性表详解:数据结构线性表10分钟入门 线性表,数据结构中最简单的一种存储结构,专门用于存储逻辑关系为"一对一"的数据。 线性表,基于数据在实际物理空间中的存储状态,又可细分为顺序表&#xff…

解决pip安装第三库echarts报错:Package would be ignored而安装失败的问题

现象: 尝试了很多方法都没解决 ,最后终于突然灵光一闪找到原因(我这是python虚拟环境,创建的时候会自动升级pip) 原因: pip版本过高! 想不到是这原因吧! 解决办法:手动…

主线程退出后子线程是否还会正常运行?

问题: 父子线程的关系 今天突然有感而发, 想要来探讨一下主线程和子线程之间的关系。 例一:子线程执行时间较父线程慢 public class ThreadTest {public static void main(String[] args) {// 测试主线程 和 子线程Thread sonThread new …

STM32 HAL库定时器触发DMA并口数据传输

代码目的: STM32与FPGA通讯,通过8位并口线进行通讯,16byte的数据在10us之内通过8位并口数据线传给FPGA,FPGA读取该数据。 HAL库设置说明: 时钟采用80MHz,由于16byte的数据要在10us之内传完,那…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(8)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(7) 2.2 HOST主桥 MPC8548处理器的拓扑结构如图2-2所示: 2.2.2 存储器域地址空间到PCI总线域地址空间的转换 MPC8548处理器使用ATMU&#xff…

协程池与新脚本语言

今天的主人公名为——Melang。 这是一款使用C语言开发的“新”的脚本语言,然而其已经默默问世了6年之久。 下面笔者就带你走进Melang world。 What is Melang Melang是一款协程并发脚本语言。它是一款解释型,而非编译型语言。 在Melang中&#xff…

计算机网络期末知识汇总

一、计算机网络概述 1.Internet 的中文译名并不统一。 现有的 Internet 译名有两种: 因特网,这个译名是全国科学技术名词审定委员会推荐的,但却长期未得 到推广; 互联网,这是目前流行最广的、事实上的标准译名。现…

如何在 iPhone 上检索已删除的短信:6个有效方法分享

您是否错误地删除了 iPhone 上的重要短信?或者您可能删除了“消息”应用程序中的整个对话并想将其恢复?无论您的情况如何,有一些数据恢复方法可以帮助您恢复 iPhone 上已删除的邮件。 在本文中,我们将介绍在 iPhone 上恢复丢失、…