【占用网络】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 图像的质量在雨天和夜晚会下降,但然可以预测详细的占用情况。 

下面是一些可视化效果:

分享完成~

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

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

相关文章

Python爬虫---Scrapy项目的创建及运行

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖 掘,信息处理或存储历史数据等一系列的程序中。 1. 安装scrapy: pip install scrapy 注意:需要安装在python解释器相同的位置,例如&#xf…

【conda】pip安装报错,网络延时问题解决记录(亲测有效)

【conda】pip安装报错,网络延时问题解决记录 1. pip install 报错如下所示2. 解决方案: 1. pip install 报错如下所示 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out.…

爱情视频相册怎么做?2.14情人节表白/活动视频模板PR剪辑素材

美好爱情故事,情人节表白视频相册怎么做?粉色浪漫的PR情人节表白/活动视频模板剪辑素材mogrt下载。 特征:可编辑文字和调整颜色,通过智能对象替换图像,RGB颜色模式,易于自定义,无需插件&#xf…

Django报错处理

django.template.exceptions.TemplateDoesNotExist: django/forms/widgets/text.html django.template.exceptions.TemplateDoesNotExist: django/forms/widgets/number.html以上报错是pycharm中创建虚拟环境之后把原本自带的templates文件删除,重新在app01下面创建…

Windows RPC运行时漏洞事后总结

2022年4月前后,Windows RPC运行时被曝出存在远程代码执行漏洞,当时曾引起很多人广泛关注。微软很快做出反应,发布补丁程序进行修补。这次事件中,Windows远程过程调用(RPC)运行时共出现三个关键漏洞&#xf…

HMM算法(Hidden Markov Models)揭秘

序列数据 机器学习的数据通常有两类,最常见的是独立同分布数据,其次就是序列数据。对于前者,一般出现在各种分类/回归问题中,其最大似然估计是所有数据点的概率分布乘积。对于后者,一般出现在各种时间序列问题中&…

详细讲解MybatisPlus实现逻辑删除

目录 前言1. 基本知识2. 实战Demo3. 拓展 前言 对于MybatisPlus的相关知识可在我的博客进行搜索 对应的CRUD相关知识也可看我这篇文章:【Java项目】实战CRUD的功能整理(持续更新) 在讲述逻辑删除这个概念时,先引入另外一个概念&…

企业用WhatsApp营销的好处有哪些?

1.建立良好的客户关系 WhatsApp是全球用户喜爱的即时通信软件,使用WhatsApp与客户沟通,可拉进企业和客户双方的距离。使用WhatsApp会话和消息推送功能,企业和用户可实时开展消息对话,及时解决客户咨询与疑虑,构建便捷…

解决 ubuntu 下编译文件的时候与 YAML 相关的的报错

输入: catkin build -DCMAKE_C_COMPILERgcc-8 -DCMAKE_CXX_COMPILERg-8 或 catkin build airsim_tutorial_pkgs -DCMAKE_C_COMPILERgcc-8 -DCMAKE_CXX_COMPILERg-8 报错如下: 可能是缺少 yaml-cpp 文件,然后操作: sudo apt-g…

【添加墨水注意事项]

添加墨水注意事项 当液位灯亮起时请添加墨水,添加墨水应时戴好护目镜和手套.注意墨水不要洒在设备注意墨水要避光保护防止固化 请使用本公司配套专用墨水,添加时注意墨水颜色 禁止儿童接触墨水及容器,如不慎接触眼睛或者误服应立即以大量清…

openssl3.2 - 官方dmeo学习 - server-arg.c

文章目录 openssl3.2 - 官方dmeo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方dmeo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…

leaflet学习笔记-带有方位角信息的圆的绘制(七)

前言 项目中有一个需求,就是需要绘制一个圆,并且绘制的时候还要设置方位角,最后返回圆的坐标集合和方位角。本功能使用Leaflet-GeomanTurf.jsleaflet实现。 方位角简介 在陆地导航中,方位角通常表示为 alpha、α,并定…

网络安全B模块(笔记详解)- nmap扫描渗透测试

nmap扫描渗透测试 1.通过BT5对服务器场景Linux进行TCP同步扫描 (使用工具Nmap,使用参数n,使用必须要使用的参数),并将该操作使用命令中必须要使用的参数作为Flag提交; Flag:sS 2.通过BT5对服务器场景Linux进行TCP同步扫描 (使用工具Nmap,使用参数n,使用必须要使用的参数…

Python-代码雨【附源码】

Python-代码雨 运行效果:实现的是动态的代码雨 import sys import random import pygame from pygame.locals import *# 屏幕大小 WIDTH 800 HEIGHT 600 # 下落速度范围 SPEED [15, 30] # 字母大小范围 SIZE [5, 30] # CODE长度范围 LEN [1, 8]# 随机生成一个…

如何通过anaconda创建第一个django项目

因为python版本用的是anaconda安装的,但是平时呢是使用viscod来玩py的,本来想创建个django的项目玩玩的,通过anacoda的powershell prompt 的插件用 pip 命令安装了django的包 pip install django 但是不知道在哪里的命令行创建项目&#xf…

A preview error may have occurred. Switch to the Log tab to view details.

记录一下当时刚开始学习鸿蒙开发犯的错误 UIAbility内页面间的跳转内容的时候会遇到页面无法跳转的问题 并伴随标题错误 我们跳转页面需要进行注册 路由表路径: entry > src > main > resources > base > profile > main_pages.json 或者是页面…

PHP企业物资管理系统源码带文字安装教程

PHP企业物资管理系统源码带文字安装教程 技术架构 主要框架 : PHP7.0 laravel5.4  mysql5.5.36 composer1.3.2(依赖管理) 前端 : jquery bootstrap jstree(树形结构) echart(图表) layer(弹出层) 企…

React 基本使用

create-react-app 创建 react 项目的脚手架。 React 基本用法 jsx 语法 变量、表达式 import React from react;class JSXBaseDemo extends React.Component {constructor(props) {super(props);this.state {name: 章三};}render() {// 获取变量 插值const pElem <p&…

U-Boot学习(2):U-Boot编译和.config配置文件生成分析

上一节U-Boot学习(1)&#xff1a;简介及命令行指令详解中&#xff0c;介绍了如何使用U-Boot。我们知道一个U-Boot可能要适配不同的硬件&#xff0c;所以不同的硬件就有不同的配置&#xff0c;配置后就可以编译U-Boot&#xff0c;最终生成镜像。U-Boot如何编译&#xff0c;以什么…

【GoLang入门教程】Go语言几种标准库介绍(六)

文章目录 前言几种库Net库 (网络库&#xff0c;支持 Socket、HTTP、邮件、RPC、SMTP 等)重要的子包和功能&#xff1a;示例 OS库&#xff08;操作系统平台不依赖平台操作封装&#xff09;主要功能&#xff1a;示例 path库(兼容各操作系统的路径操作实用函数)常用函数&#xff1…