【占用网络】SurroundOcc:基于环视相机实现3D语义占用预测 ICCV 2023

前言

本文分享“占用网络”方案中,来自ICCV 2023的SurroundOcc,它基于环视相机实现3D语义占用预测

使用空间交叉注意力多相机图像信息提升到3D体素特征,即3D体素Query到2D图像中查询融合特征的思想

然后使用3D卷积逐步体素特征进行上采样,并在多个层次特征图上进行损失监督。

论文地址:SurroundOcc: Multi-Camera 3D Occupancy Prediction for Autonomous Driving

代码地址:https://github.com/weiyithu/SurroundOcc

同时,SurroundOcc介绍了如何通过多帧点云,构建稠密的3D语义占用栅格数据集,这部分也是挺重要的。

数据集地址:清华大学云盘

一、模型框架

SurroundOcc 通过环视相机,也就是多视角图像数据,实现3D语义占用预测。

  1. 输入多视角图像数据,比如6个环视相机,6组图像数据。
  2. 经过主干网络RestNet101,对于输入图像进行特征提取;然后经过FPN特征金字塔结构生成多尺寸特征图。特征图分辨率大的,保留更多细节信息;特征图分辨率小的,经过更多的下采样,具有更多的上下文信息,特征更为抽象和有概括性。
  3. 初始体素查询,通过“可变形交叉注意力”,Deformable Attention,融合图像信息,即:3D体素Query到2D图像中查询融合特征思想
  4. 然后经过前馈网络3D卷积操作生成3D体积特征,即3D体素特征
  5. 得到的3D体积特征,进行3D语义占用预测。
  6. 同时较小分辨率的3D体积特征,通过3D卷积操作上采样,生成大分辨率的3D体积特征,供下一层阶特征使用。(3D卷积用来处理相邻3D体素之间的特征交互)
  7. 最终通过多尺寸的3D体素特征(包括当前层和上一层特征;上一层特征通过3D卷积上采样,得到和当前层相同大小;两者拼接起来,再做特征提取,得到当前层3D语义占用预测),生成多个不同分辨率大小3D语义占用预测输出

注意:作者在多个不同分辨率大小3D语义占用预测输出,分别进行了训练损失监督。

其中SurroundOcc的方法思路比较简单易理解,简单概括为:

  • 输入图像数据,提取图像特征。
  • 初始体素查询,通过交叉注意力,体素查询在图像特征中融合对应信息,得到3D体素特征。
  • 通过FPN特征金字塔结构,生成多个3D语义占用预测输出。

这些3D特征被用来预测空间中每个体积元素(voxel)是否被物体占用。这是通过监督学习完成的,其中模型被训练以预测3D网格中的每个元素是否为空或被物体占用。

下面梳理一下模型的输入输出。

  • 输入:多视角图像数据,比如6个环视相机,6组图像数据。
  • 中间层: 3D体素特征,多尺寸中每一层中各自输出一个3D特征张量V,其形状为HxWxZ,代表预测的3D占用空间。3D张量的值在0和1之间,表示网格占用的概率。
  • 输出:3D语义占用,将3D体素特征提升到一个(L, H, W, Z)形状的张量,其中L是类别数量,可以得到3D语义占用网格,类别0表示非占用网格。

二、核心内容——生成3D体素特征

SurroundOcc是直接从2D图像信息提升为3D体素特征而不是BEV特征,下面分析一下其中的细节。

现有方法的局限性:

  • 许多3D场景重建方法将多视图2D特征集成到3D空间中,通常是通过将2D特征重新投影到已知姿态的3D体积中。
  • 这些方法简单地通过对同一网格中的所有2D特征取平均来计算网格特征。
  • 然而,这种方法假设不同视图3D体素查询的贡献是相等的,这并不总是成立的,尤其是当某些视图被遮挡模糊时

提出的方法:

  • 为了解决这个问题,作者采用了交叉视图注意力来融合多摄像头特征。
  • 通过投影3D参考点到2D视图,并使用可变形注意力来对3D参考点周围2D视图特征进行查询。
  • 二维“BEV查询”不同,他们构建了“3D体素查询”以保留更多的3D空间信息。(因为BEV查询融合图像特征后,会在高度方向进行压缩的)
  • 通过这种方法,可以定义特定的3D体素查询,为每个查询将其对应的3D点投影到2D视图,并使用3D参考点命中的视图来采样2D特征。

可变形注意力机制(Deformable Attention:

  • 通过可变形注意力机制,权重和采样位置可以调整,从而使网络能够根据每个特定情况更有效地融合来自不同视图的信息。
  • 输出的是交叉视图注意力层的加权特征和,是根据可变形注意力机制采样的特征的加权和。

 

 F是输出特征的元素,它是通过可变形注意力计算得出的命中视图的平均值。

Qp是3D体素查询,P是从3D到2D的投影函数,Vhit​是命中视图的集合。

这种方法通过在多视图融合过程中使用更加复杂的权重分配策略来提高3D重建的精度。

可变形注意力机制允许网络在将2D特征转换为3D表示时,根据每个特征点的具体情况进行更加灵活的调整。(对3D参考点周围2D视图特征进行查询)

这种方法的优势在于它可以更好地处理视图遮挡和模糊,为3D场景重建提供了更准确的3D空间信息。

三、重要设计——多尺度占用预测

多尺度方法的必要性:

  • 与3D检测任务不同,3D场景重建需要捕捉更多的低层次特征学习细粒度的细节
  • 从不同尺度(大小、分辨率)的2D图像中提取特征,每个尺度捕获不同的信息。较小的尺度可以捕获精细的细节,而较大的尺度则捕获更广泛的结构。
  • 这是因为场景重建涉及到理解和复现一个场景的所有细节,而不仅仅是识别场景中的物体。

2D-3D U-Net架构:

  • 为了解决细节捕捉的问题,采用了2D-3D U-Net架构。U-Net是一种常见的深度学习架构,它特别擅长在图像分割任务中捕获多尺度的空间特征。
  • 多尺度2D特征被输入到不同数量的2D-3D空间注意力层以提取多尺度3D体素特征。

特征上采样与融合:

  • 下面公式描述了如何将一个尺度的特征上采样,并与下一尺度的特征融合。
  • 这通过3D反卷积层(Deconvolution layer)完成,它通常用于上采样,即增加数据的分辨率。

不同分辨率的占用预测:

  • 网络在每个级别输出具有不同分辨率的占用预测结果,这允许网络在不同的尺度上捕捉和预测空间占用情况。
  • 这种多分辨率的输出有助于获取精细的细节同时也保留了全局结构的信息。

高层和低层特征的融合:

  • 为了获得强大的高层次和低层次3D特征,网络在每个尺度上都进行监督学习。
  • 这意味着每个尺度的输出都通过特定的损失函数进行训练,以确保网络能够在不同级别捕捉到有用的特征。

损失函数:

  • 对于3D语义占预测:使用多类别交叉熵损失。
  • 对于3D场景重建:使用二分类形式的损失函数。

A、在3D语义占用预测中,通常需要区分多个类别(例如不同类型的物体或空间区域),因此使用多类别交叉熵损失是合适的。

网络试图对每个体素的类别进行分类,这可能包括多种物体类别以及空闲空间。

B、3D场景重建的任务,如果目标是简单地区分空间是否被占用(不关心占用的是什么类型的物体),那么二分类损失函数就足够了。

在这种情况下,网络的目标是判断每个体素是否为空(例如,没有被物体占用)或非空(被某种物体占用)。这是一个典型的二分类问题。

四、重要参考——生成稠密的3D语义占用数据

SurroundOcc介绍了如何通过多帧点云,构建稠密的3D语义占用栅格数据集,这部分也是挺重要的。

背景:

  • 实验发现,仅使用稀疏的LiDAR(激光雷达)点云数据进行监督的网络无法预测足够密集的占用信息。
  • 这是因为稀疏的数据不足以覆盖场景中所有可能的占用区域,尤其是在远距离或者遮挡较多的场合。

稠密的占用标签的重要性:

  • 为了提高预测的密集度,需要生成密集的占用标签。
  • 这里所谓的“稠密占用”指的是场景中每个体素(三维空间中的像素)是否被占用的详细信息。

挑战:

  • 如SemanticKITTI 中提到的,为一个包含数百万体素的3D场景,手动标注密集占用信息是非常复杂且劳动密集的。

自动生成标签方法:

  • 为了解决这一问题,作者设计了一个自动生成密集占用标签,这个方法利用现有的3D检测和3D语义分割标签,而不需要额外的人工注释。
  • 一个直观的方法是直接将多帧LiDAR点云序列变换到统一的坐标系中,并将这些点云体素化(转换为体素网格)。但这种简单的方法只适用于完全静态的场景,忽略了移动物体,并且可能因为点云的稀疏性而产生错误的占用标签。
  • 为了解决这些问题,提出了将动态物体静态场景多帧LiDAR点云分别缝合的方法。
  • 还采用了Poisson Reconstruction方法来填补点云中的空洞,并将获得的网格体素化,以得到密集的体积占用信息。

关键步骤1——多帧点云拼接

用于处理和合成多帧LiDAR(激光雷达)点云数据的方法,特别是在处理动态(可移动)和静态(不动的)对象时。

这个过程是为了创建一个统一的场景表示,该表示可以用于后续的体素化和占用空间的预测。

动态与静态数据的分离:

  • 对于每一帧LiDAR数据,首先根据3D边界框标签点云中剪切出可移动的对象,这样就可以分别得到静态场景和可移动对象的3D点

多帧数据集成:

  • 然后,将收集到的静态场景段移动对象段集成到各自的集合中。
  • 这意味着动态对象与背景环境的数据被分开处理和储存。

坐标变换:

  • 将多帧段的坐标转换到世界坐标系统中,这涉及使用校准矩阵和自我位置(ego-pose)信息来校正每一帧数据的位置和方向。

最终场景构建:

  • 根据对象的位置和当前帧的自我位置,可以通过合并静态场景和移动对象的3D点来得到该帧的3D点 P。
  • 使用变换矩阵将静态场景和对象的点,从世界坐标系转换到当前帧的坐标系。

 这个方法的关键在于能够区分和独立处理动态对象和静态场景的数据,从而能够在动态环境中准确地进行点云重建。

通过合适的坐标变换和数据集成,可以为后续的体素化过程提供更丰富的信息。

关键步骤2——通过Poisson重建来提高点云数据的密度

通过步骤1的多帧点云缝合方法提高了点云的密度,由于LiDAR束的限制,点云中仍然存在许多间隙,且点的分布不均匀。

法向量计算

  • 为了解决这个问题,首先需要计算点云中点的法向量。
  • 法向量是垂直于点云表面的一个重要属性,能够指示表面的方向。
  • 后续的Poisson重建方法需要每个点的法向量,这些法向量通常通过分析点云的局部结构计算得出。

Poisson重建

  • Poisson重建是一种流行的算法,它使用点云及其法向量作为输入,并输出一个连续的、封闭的三角网格模型,这个模型填补了原始点云中的空隙。
  • 输入:点云和法向量,利用这些信息推断出一个三维表面。
  • 输出:是一个三角网格,这是一种由三角形组成多边形网格,用于在计算机中表示3D形状。该网格紧密地拟合原始点云数据,并填补由点云稀疏部分导致的空隙。

获得的网格和体素化

  • 一旦得到连续的三角网格,就可以将其转换为体素表示。体素化是将连续几何体转换为离散的网格体积元素的过程,类似于在三维空间中填充小立方体来近似形状。
  • 得到的三角网格由顶点和边组成。这个网格提供了一个更加连续和均匀的表面表示,它可以用来填补点云的空洞。
  • 进一步将这个网格转换成密集的体素 。

通过这种方法,可以有效地从稀疏或不均匀的点云数据中生成一个高质量的、密集的3D模型。

五、模型效果

SurroundOcc在nuScenes 验证集上的 3D 语义占用预测结果,如下图所示。(说实话没有太大提升,但是呢,这篇论文的思路很经典,而且提出了3D语义占用数据集,还是值得学习和致敬的)

具有挑战性的场景的示例,尽管 RGB 图像的质量在雨天和夜晚会下降,但然可以预测详细的占用情况。 

下面是一些可视化效果:

分享完成~

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

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

相关文章

如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理

首先,需要用到的这个工具: 百度 密码:qwu2蓝奏云 密码:2r1z 打开工具,切换到“文章工作域”(嗯...默认就是) 找到这个,多内容断行分割 点击打开,出现如下窗口设置 相关的…

Netty-Netty基础应用与了解

前言 Netty 的优势 1、 API 使用简单,开发门槛低; 2、功能强大,预置了多种编解码功能,支持多种主流协议; 3、定制能力强,可以通过 ChannelHandler 对通信框架进行灵活地扩展; 4、性能高…

【教程】通过Excel宏/Pandas两种方法来自动添加渐变数据条

这种数据真的很难看懂: 一般会对其画折线图或者数据条,相比起来就非常直观: 但是每一列都要手动这样设置就非常累了,所以这里就用到了VBA宏(或者Pandas)。 VBA宏方法 从这里进入宏: 随便写一个宏名后点创建&#xff1…

LangChain 69 向量数据库Pinecone入门

LangChain系列文章 LangChain 50 深入理解LangChain 表达式语言十三 自定义pipeline函数 LangChain Expression Language (LCEL)LangChain 51 深入理解LangChain 表达式语言十四 自动修复配置RunnableConfig LangChain Expression Language (LCEL)LangChain 52 深入理解LangCh…

机器视觉在OCR字符检测的应用

在产品质量 检测过程中,对于字符、条码等标识信息的识别、读取、检测是非常重要的一部分,比如在食品饮料包装检测中,生产日期 、保质期 、生产批号 、条码等字符信息是产品管理和追溯必不可缺的,因此利用机器视觉技术进行OCR字符采…

【实用技巧】Windows电脑向iPhone或iPad传输视频方法2:有线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频,以 iPhone 为例,iPad的操作方法类似,本文不作赘述。 二、所需原材料 Windows 电脑(有 USB-A 或 USB-C 接口)(桌面或其它文件夹中…

Web组件的使用

文章目录 1 概述2 加载网页加载在线网页加载本地网页 3 网页缩放文本缩放 4 Web组件事件Web组件处理JS confirm事件 5 Web和JavaScript交互启用JavaScriptWeb组件调用JS方法JS调用Web组件方法 6 处理页面导航7 调试网络应用8 参考链接 1 概述 相信大家都遇到过这样的场景&…

依赖Kafka的Go单元测试例解

Kafka[1]是Apache基金会开源的一个分布式事件流处理平台,是Java阵营(最初为Scala)中的一款杀手级应用,其提供的高可靠性、高吞吐量和低延迟的数据传输能力,让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。 在…

SpringCloud微服务 【实用篇】| RabbitMQ快速入门、SpringAMQP

目录 一:初始RabbitMQ 1. 同步和异步通讯 1.1 同步调用 1.2 异步调用 2. MQ常见框架 二:RabbitMQ快速入门 1. RabbitMQ概述和安装 2. 常见消息队列模型 3. 快速入门案例 三:SpringAMQP 1. Basic Queue 简单队列模型 2. Work Queu…

ORACLE RAC DG文件路径错乱解决办法

最近接手了一个客户的RAC-RAC dg环境的维护,登录上去之后发现dg延迟了8天,由于主库的空间非常紧张,归档日志早就删除了,所以准备使用rman基于scn点的备份恢复的方案恢复dg同步 在备份完成之后,使用新的控制文件进行数据恢复的时候报错datafile 43 not found: 检查了一下发现当…

SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 设计模式-单例模式-饿汉式单例模式、懒汉式单例模式、静态内部类在Java中的使用示例: 设计模式-单例模…

Python requirements.txt 详解

文章目录 1 概述1.1 作用1.2 注意 2 操作2.1 生成 requirements.txt2.2 安装 requirements.txt 3 示例3.1 新建 Django 项目3.2 找到 Scripts 目录,执行生成 requirements.txt 命令 1 概述 1.1 作用 作用:记录 当前项目下 所有 依赖包及其版本号&#…

不知道题目是啥

本题是学校的集训里的题,所有不知道题目名字是啥,直接看题目就好 解题思路:因为字符串只含有小写字母,所以可以创建两个数组分别来存s和t的每个字母出现次数,然后遍历数组,如果s字符串中的某个字母比t的小&…

输电线路分布式故障诊断装置的四大特点介绍-深圳鼎信

输电线路分布式故障诊断装置是一种利用行波测距、无线通信等技术手段实现电网故障定位的设备。这对于电网的故障处理和恢复具有重要意义,可以帮助运维人员提高故障处理的效率,缩短故障处理时间,减少停电时间,提高用户的供电可靠性…

premiere简约大气3D动画logo片头Pr模板Mogrt免费下载

Premiere简约大气3D动画logo片头pr模板mogrt下载,无需插件,高清分辨率,易于自定义,包括教程,不包括音频和图像。免费下载:https://prmuban.com/37065.html

Linux学习(1):目录结构、编辑器和用户管理

Linux学习(1):目录结构、编辑器和用户管理 1 Linux目录结构2 vi和vim编辑器2.1 快捷键练习 3 用户管理3.1 添加用户3.2 删除用户即主目录3.3 切换用户 4 用户组 1 Linux目录结构 在linux世界里,一切皆为文件。 linux目录结构&a…

test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试(Fuzz Testing) test fuzz-…

Gin CORS 跨域请求资源共享与中间件

Gin CORS 跨域请求资源共享与中间件 文章目录 Gin CORS 跨域请求资源共享与中间件一、同源策略1.1 什么是浏览器的同源策略?1.2 同源策略判依据1.3 跨域问题三种解决方案 二、CORS:跨域资源共享简介(后端技术)三 CORS基本流程1.CORS请求分类2.基本流程 四、CORS两种…

Java项目:02 基于ssm超市订单管理系统

项目介绍 基于ssm超市订单管理系统 环境:jdk1.8,mysql5.7,tomcat8.5,maven3.6 软件:IDEA 功能:超市后台管理系统,有订单管理,供应商管理,用户管理,密码修改&…

阿赵UE学习笔记——9、材质和材质实例

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎,这次来了解一下UE里面关于材质的一些概念性的东西。 一、材质 材质这个概念,在所有三维软件里面都会有,比如3Dsmax里面的材质球,或者Unity里面的Material…