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

news2024/11/15 19:56:17

前言

本文分享“占用网络”方案中,来自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在树干、电线杆等小物体的补全方面表现较好。

分享完成~

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

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

相关文章

前端框架的异步组件(Async Components)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

SpringBoot集成MQTT协议

简介 MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Interne…

工业物联网上篇——什么是IIOT?

工业物联网背后的理念是使用工业设施中“哑巴设备”多年来产生的数据。装配线上的智能机器不仅可以更快地捕获和分析数据,且在交流重要信息方面也更快,这有助于更快、更准确地做出业务决策。 信息技术(IT)和运营技术(O…

如何打开wps的备份中心查找备份文件

备份中心在我们使用WPS Office时扮演着重要的角色。经常保存文件的同时,我们也应该学会备份文件,以免意外损失。本文将向您介绍如何使用WPS备份中心来查找并恢复备份文件,方便您在需要时快速找到所需文件。 图片来源于网络,如有侵…

STM32 学习(三)OLED 调试工具

目录 一、简介 二、使用方法 2.1 接线图 2.2 配置引脚 2.3 编写代码 三、Keil 工具调试 一、简介 在进行单片机开发时,有很多调试方法,如下图: 其中 OLED 就是一种比较好用的调试工具: OLED 硬件电路如下&#xff0c…

科技智慧,产业链全覆盖:河南恩珅德农业的养殖业务优势

河南恩珅德农业以科技智慧和全产业链覆盖的优势,成功打造了一体化的养殖业务模式,为养殖者提供了全面的支持和优越的管理体验。以下是该企业养殖业务的核心优势: 1. 先进科技智慧 河南恩珅德农业充分利用先进的科技手段,引入智能…

了解并使用django-rest-framework-jwt

一 JWT认证 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json Web Token(本质就是token)认证机制。 Json web token (JWT), 是为了在网络应用环…

Android开发中“真正”的仓库模式

原文地址:https://proandroiddev.com/the-real-repository-pattern-in-android-efba8662b754原文发表日期:2019.9.5作者:Denis Brandi翻译:tommwq翻译日期:2024.1.3 Figure 1: 仓库模式 多年来我见过很多仓库模式的实…

c# OpenCvSharp透视矫正参数调整器

透视矫正不够智能化,每次都要进行局部参数调整,不便于程序使用,程序流程还是那几个步骤; 1、读取图像、灰度化 2、高斯滤波 3、二值化 4、边缘检测 灰度化图 上个图看看经过调整透视矫正边缘检测结果我还是挺满意的 发现一个…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

将ipad拓展为笔记本副屏

写在前面 对比过moonlight和spacedesk两种软件(付费的更流畅,本人穷困暂不涉及),moonlight无线连接感觉更卡顿一些(但是大多数人都觉得moonlight更丝滑,实践是检验真理的唯一标准,建议自己都试…

go执行静态二进制文件和执行动态库文件

目的和需求:部分go的核心文件不开源,例如验证,主程序核心逻辑等等 第一个想法,把子程序代码打包成静态文件,然后主程序执行 子程序 package mainimport ("fmt""github.com/gogf/gf/v2/os/gfile"…

UⅤ机用的滚珠丝杆套装

UⅤ机用的滚珠丝杆套装 上面是单丝杆UⅤ机内部。

ES(Elasticsearch)的基本使用

一、常见的NoSQL解决方案 1、redis Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级NoSQL数据库,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同&#xff0…

我的创作纪念日三年收获和感悟

机缘 我刚开始接触创作也是最近几年开始,当初就是希望自己的收获分享给大家,不仅使自己成长,也可以带着大家一起成长,独乐乐不如众乐乐,人都是自私的以前我都是看到好的知识文章都是自己藏起来,发现收获的…

Qt/C++编写视频监控系统82-自定义音柱显示

一、前言 通过音柱控件实时展示当前播放的声音产生的振幅的大小,得益于音频播放组件内置了音频振幅的计算,可以动态开启和关闭,开启后会对发送过来的要播放的声音数据,进行运算得到当前这个音频数据的振幅,类似于分贝…

初始数字孪生

文章目录 概念定义 架构框图 基本要求 功能要求 服务应用 参考文献 概念定义 数字孪生(digital twin),是指具有保证物理状态和虚拟状态之间以适当速率和精度同步的数据连接的特定目标实体的数字化表达。 架构框图 数字孪生的整体架构&a…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— DevEco Studio下载与安装

一、下载DevEco Studio IDE开发工具 1. 登录鸿蒙官网 网址为: ​​​​​​​华为HarmonyOS智能终端操作系统官网 | 应用设备分布式开发者生态 页面如下: 2. 搜索“DevEco Studio IDE” 点击右上角的“请输入关键词”,在其中搜索“DevEc…

Termius for Mac/Win:一款功能强大的终端模拟器、SSH 和 SFTP 客户端软件

随着远程工作和云技术的普及,对于高效安全的远程访问和管理服务器变得至关重要。Termius,一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件,正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案,允许用户通过单一平…

钡铼分布式IO在玻璃制造中的实时数据采集与监控应用介绍

导读 玻璃行业多年来一直广泛使用 PLC 来帮助管理生产过程所需的精确材料比例,完全依赖其PLC进行数据采集与控制,并且大量依靠人工来操作,所以这些高成本推动了对成本较低的替代方案的需求。 场景描述 某玻璃厂生产的玻璃生产包括配料段、熔…