作者 | stella  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/613162521

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【3D目标检测】技术交流群

后台回复【OccupanyNetwork】获取Occupany Network相关论文干货资料!

本文调研了4篇基于视觉的3D Occupancy预测及语义补全的方法。该任务输入一帧或多帧图像,输出栅格形式的占据情况及语义类别。更多方法可以参考这篇综述。

MonoScene: Monocular 3D Semantic Scene Completion,CVPR 2022,

MonoScene的主要贡献:提出了一种从单目图像直接预测三维语义栅格+语义补全的框架(github)

算法整体流程

方法的大致流程比较简单:

  1. 2D UNet提取图像特征

  2. 三维栅格从图像中提取特征

  3. 类似3D Unet的结构提取三维特征

  4. 预测head输出每个栅格是否占据+语义类别

图像特征提取及投影

图像特征提取:采用预训练的https://arxiv.org/pdf/1905.11946.pdf,参数不固定,网络训练时也参与训练。对应代码https://github.com/astra-vision/MonoScene/blob/master/monoscene/models/unet2d.py

特征投影:栅格的中心投影到图像平面上,在特征图1,2,4,8四个层级上插值得到对应的特征(对应代码https://github.com/astra-vision/MonoScene/blob/master/monoscene/models/flosp.py),四个层级的特征求和后作为栅格特征(对应代码https://github.com/astra-vision/MonoScene/blob/7e3c573a34a0d5bf030cbc129752f0854415ac07/monoscene/models/monoscene.py#L101)。超出图像范围的栅格特征设为0。

三维特征提取及输出

采用两级的3D UNet结构,其中最底层增加了一个3D Context Relation Prior(CRP)模块。之后接一个3D ASPP层+softmax输出占据和类别预测。这部分对应代码 https://github.com/astra-vision/MonoScene/blob/master/monoscene/models/unet3d_kitti.py

3D CRP 模块主要的作用是预测每一个栅格和其他所有栅格是否属于同一类别,并分别把同类/不同类的其他栅格特征通过某种方式(类似加权求和)拿过来,和当前特征concat,作为最终特征。可以理解为带有inductive bias的cross attention。

具体细节:借鉴了CPNet这篇论文,建立一个(Z* Y* X)× (Z* Y* X/s^3)的关系矩阵描述voxel<->super voxel的关系(为了降低复杂度,将边长为s内的所有voxel合在一起考虑)。关系分为4种情况:(当前voxel和该super voxel均为&语义类别不同),(当前voxel和该super voxel均为&语义类别相同),(当前voxel和该super voxel有一个不空&语义类别相同),(当前voxel和该super voxel有一个不空&语义类别不同)。实际上只有三种情况,因为不存在voxel都为空且语义不相同的情况。

网络需要预测这个关系矩阵,通过关系矩阵可以得到4个attention map。关系矩阵和3D栅格特征(reshape到(Z/s* Y/s* X/s) × feature_dim)矩阵相乘得到4个特征,通过concat等方式和当前特征组合,作为最终的特征。这部分对应代码monoscene/models/CRP3D.py(下图为s=2的示意图)

训练

训练的loss包含4个部分:

  1. 每个栅格预测的占据/语义的Cross-entropy Loss,占据和语义合在一起,即free作为一个语义类别与语义的unknown合并为一类,其中free的类别权重为0.05

  2. 3D CRP预测的关系矩阵Cross-entropyLoss

  3. 3D CRP预测的Scene-Class Affinity Loss

  4. 作者提出的Frustum Proportion Loss

Scene-Class Affinity Loss 将类内voxel和类间voxel视为两个整体来指导网络学习关系矩阵,按照类似Percision, Recall, Specificity给出了loss的计算。(具体的原理我也不太理解。。。)

Frustum Proportion Loss 主要是为了让网络关注到视锥上类别的分布,比如视锥中一般会有地面(即使被物体遮挡),loss可以理解为一组视锥上语义真值的概率分布(栅格数量的比例)与网络实际预测的分布的KL散度。

OccDepth: A Depth-aware Method for 3D Semantic Occupancy Network

OccDepth的主要贡献:提出了一种基于双目图像预测三维语义栅格+语义补全的框架。github

算法整体流程

整体流程和MonoScene非常像(代码也是在MonoScene基础上改的):

  1. 2D UNet提取双目图像特征

  2. 三维栅格从左右目图像中pull特征并融合

  3. Occupancy Aware Depth Module利用深度估计对栅格特征进行类似attention的操作

  4. 和MonoScene一样的UNet结构提取三维特征

  5. 预测head输出每个栅格是否占据+语义类别

图像特征提取及投影

图像特征提取:与MonoScene相同,采用预训练的
https://arxiv.org/pdf/1905.11946.pdf

特征投影:左右目图像的特征投影与MonoScene相同,OccDepth的特殊之处在于:栅格的特征是将左右目的特征进行平均并乘以权重,权重的计算方法是左右目特征的Cosine Similarity;如果左右目没有重叠则使用单目的特征。个人感觉这个很有道理,因为这个计算特征相似度的过程相当于在进行双目匹配,如果左右目特征不吻合说明这个栅格很可能是空的。因此加上cos similarity应该可以帮助网络更好地学习双目匹配

Occupancy Aware Depth Module

除了Cosine Similarity,OccDepth还使用了单目深度估计来指导特征投影过程,OAD模块的主要流程是:

  1. 左目/右目图像scale=8层的特征图经过一个网络提取Net_D深度特征

  2. 经过softmax,得到每个视锥对应的深度分布

  3. 根据内参矩阵和外参矩阵,投影至栅格对应的坐标系,采样得到每个栅格对应的深度概率

  4. 每个栅格对应的深度概率作为注意力权重,乘以上一步特征投影得到的特征。(对于有双目视野重叠的栅格,深度概率会取左右目的均值。)

训练

Loss的计算和MonoScene基本一样,不同之处为:

  • 为了帮助训练深度预测模型,作者使用双目图像估计的深度指导深度网络Net_D的学习。具体是使用双目深度预测网络https://proceedings.neurips.cc/paper/2020/file/fc146be0b230d7e0a92e66a6114b840d-Paper.pdf的深度预测离散化后的one-hot真值,用Cross-entropy Loss训练。

  • 是否占据的预测和语义类别的loss分开计算。而MonoScene将是否free作为一个语义类别。

VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Completion,CVPR 2023

VoxFormer的主要贡献:提出了一种基于单目图像序列预测三维语义栅格+语义补全的框架,github

算法整体流程

VoxFormer的整体流程有点类似Tesla Occupancy Network的方案,流程中大部分用到了Transformer:

  1. ResNet-50提取图像特征

  2. 生成一些类别无关的3D栅格Proposal用于后续query

  3. 3D栅格Proposal作为query从图像中取特征(Cross Attention)

  4. 类似MAE的流程,以3D栅格Proposal的特征为输入,通过Self Attention得到完整栅格特征

  5. 预测head输出每个栅格是否占据+语义类别

类别无关的3D栅格Proposal生成

这一步主要是选择一些在相机视野内的,比较重要的栅格。主要通过深度估计+占据概率预测的方式实现。具体流程如下:

  • 深度估计:使用单目或双目深度估计网络预测每个像素的深度(实验中使用了https://arxiv.org/pdf/2108.09770.pdf),然后根据相机内参投影到相机坐标系中

  • 深度修正(占据概率预测):深度估计直接投影的点云存在很多噪声,因此使用基于3D栅格的occupancy预测网络。具体是将深度投影的点云进行0-1栅格化,然后用3D Unet架构输出栅格分辨率更低的占据预测。(实验中使用了类似https://arxiv.org/pdf/2008.10559.pdf的网络,LMSCNet是一个基于激光雷达的3D语义补全方法)

  • query栅格生成:上一步预测的所有占据栅格作为query栅格

三维特征提取及输出

主要分为3个部分,query栅格和图像特征的Cross Attention,以及query栅格和其他所有栅格的Self Attention,以及最后的输出。其中attention均采用Deformable Attention(在Deformable DETR中提出的,BEVFormer也用到了)

Deformable Transformer我理解的流程是这样的:给定Query按照某种方式得到一个参考点,同时经过几个可学习layer得到offset->参考点附近按照offset采样得到KV -> Transformer的Cross Attention。主要的优点是在Cross Attention时不需要使用所有的栅格的KV,而是通过可学习的方式选择一定数量的感兴趣的位置,从而减少计算量。具体细节可以参考大佬的这篇文章。

Deformable Cross Attention 主要是把每一个Query栅格的坐标投影到各帧图像上,投影点作为Deformable Attention的参考点(reference point),参考点附近采样一些点(可学习),这些点对应的图像特征作为Key,Value输入。同一个栅格可能会投到多帧图像上,那么多帧图像的attention输出进行平均,作为最终的输出。

Deformable Self Attention 是把所有栅格(HxWxZ)的特征作为输入,但对于非Query栅格,使用一个mask token替换原有特征。其中Deformable Attention参考点(reference point)为栅格中心坐标。

训练

第一阶段的网络(类别无关的3D栅格Proposal生成)的loss为栅格是否占据的Cross-entropy Loss。

第二阶段的网络(Deformable Attention及输出层)的loss包括:

  • 语义类别的Cross-entropy Loss

  • MonoScene的Scene-Class Affinity Loss

TPVFormer: Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction,CVPR 2023

TPVFormer的主要贡献:提出了一种三维特征的表示方法,通过三个正交平面上的特征来近似表示三维点/三维栅格的特征。这种表示形式可以用于3D点云语义分割、3D语义补全等任务。也是学术界对Tesla Occupancy Network的一种复现和改进方案。

作者先定义了TPV特征;然后给出了基于TPV平面上一个给定query点的两种Cross Attention,分别是和图像的attention以及和三个TPV之间的attention;最后基于这两种attention构建网络即为TPVFormer,完成各种感知任务。

TPV特征

由于三维栅格的空间和时间复杂度都是随着边长三次方增长,很难在真机实时部署;BEV虽然复杂度降低但高度方向的信息可能会有一定丢失,因此TPVFormer提出将空间的点向三个正交平面投影的方式(类似https://www.cvlibs.net/publications/Peng2020ECCV.pdf中提出的2D版本),将三维点特征由三个平面的特征来表示。

TPV特征是在水平、径向、横向三个平面中分别保存的特征图。当下游任务需要获取三维点/三维栅格时,可将query的点/栅格投影到各平面,从各平面对应位置采样feature (双线性插值),然后通过某种aggregate方法(求和)得到三维特征。

TPVFormer

TPVFormer包含两种attention,一种是TPV特征到图像的Cross Attention,另一种是三个特征平面之间的Cross Attention。

TPV特征到图像的Cross Attention(ICA)

和VoxFormer类似,采用Deformable Attention。

对于一个TPV平面上(如XY平面)的某个像素(记为Query点),该点的垂直方向上采样一些 三维参考点(如不同的Z值),这些点投影到各个图像上,得到的二维坐标,作为Deformable Attention的参考点(记为二维参考点)。如果该点在所有图像视野外,则剔除该三维点。

  • 然后所有这些二维参考点附近采样一些点(可学习),作为Deformable Attention的KV。也就是说一个TPV平面上的Query对应N个图像的n_z个参考点的附近的n_offset个采样点的KV(因为有很多高度不同的三维参考点投影到各个图像,并在附近采样多个KV),即一个Query对应N* n_z*n_offset个KV。

  • 同一个三维参考点从不同图像Cross Attention来的特征计算平均则为该三维参考点最终的的特征。

TPV特征平面间的Cross Attention(CVHA)

和上一部分TPV到图像的Cross Attention类似:

  • 对于一个TPV平面上(如XY平面)的某个像素(记为Query点),会在该点附近采样一些点,然后在这些点高度方向上采样一些点,投影到另外两个TPV平面上。

  • 剩下的步骤和TPV到图像的Cross Attention一样了。

算法整体流程

算法的整体流程是:

  1. 根据任务类型定义一些点/栅格,比如语义补全任务可以初始化一些栅格

  2. 每个栅格可以作为query,得到三个平面上的TPV query

  3. 每个TPV平面的query经过若干层 ICA和CVHA层得到融合后的特征

  4. 3个TPV特征加起来作为该栅格特征

  5. 预测head输出该栅格是否占据+语义类别

国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

基于视觉的3D Occupancy论文阅读:MonoScene等最新文章!相关推荐

  1. Over Coat AnImplicit Canvas for 3D Painting论文阅读

    看完了论文<Over Coat: AnImplicit Canvas for 3D Painting>给我的感觉就是即便是在siggraph这样的国际一流大会上,论文运用的数学公式其实也是 ...

  2. 场景生成及编辑3D定位论文阅读

    前置知识 归纳偏置 关于归纳偏置的理解:首先推荐一篇解释归纳偏置非常好的博客:浅谈归纳偏置 (InductiveBias) 通俗的,归纳偏置可以理解为,从现实生活中观察到的现象中归纳出一定的 规则(h ...

  3. 3D检测论文阅读简记

    论文读完之后很快忘记了, 写长篇的论文笔记又很耗时间; 因此打算换一种简洁的方式记录读过的一些3D检测论文: 论文的动机和主要的解决问题. 1. (arXiv 2205) BEVFusion: Mul ...

  4. 3D重建论文阅读-CVPR2022(1-2)

    MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation. 文章目录 MHFormer: Multi-Hypothesis ...

  5. 【论文阅读】了解最新科研动向、最新论文的获取

    IEEE 网址:https://ieeexplore.ieee.org/browse/periodicals/title 可以选择 会议/期刊,查看最新的研究: 假设我想查看以下期刊的内容: 就可以看 ...

  6. 论文阅读笔记整理合集

    视频关系预测相关 Ji J , Krishna R , Li F F , et al. Action Genome: Actions As Compositions of Spatio-Tempora ...

  7. 【论文阅读第一期】Goods:Organizing Google’s Datasets总结

    论文阅读第一期的文章<Goods:Organizing Google's Datasets>讲的是关于谷歌在海量元数据管理方面的实践.本篇总结主要从3个方面进行展开:1.什么是元数据:2. ...

  8. Patchwork++论文阅读——基于3D点云的快速鲁棒地面分割算法

    文章目录 摘要 1. 介绍 2. 相关工作 A. 基于学习的地面分割方法 B. 传统的地面分割方法 C. 地面分割的应用 3. PATCHWORK++:快速.稳健.自适应的地面分割 A. 问题定义 B ...

  9. 3D目标检测论文阅读多角度解析

    3D目标检测论文阅读多角度解析 一.前言 CNN(convolutional neural network)在目标检测中大放异彩,R-CNN系列,YOLO,SSD各类优秀的方法层出不穷在2D图像的目标 ...

最新文章

  1. c++ 负数比较大小_负数的定义(二)
  2. PLSQL_SQL Loader的概念和用法(概念)
  3. clang编译c语言开o优化,针对gcc或clang的LTO可以跨C和C方法进行优化
  4. Mysql 学习笔记2
  5. 因特网 以太网 互联网的含义及区别
  6. 百度小程序html转码,百度小程序全局配置
  7. 如何打造数据驱动型企业
  8. 超级便宜的鸿蒙开发板环境搭建-编译-烧录
  9. SQL Server Alwayson概念总结
  10. EMC-- DFC --Sessions and Session Managers
  11. C语言基础教程之递归
  12. YDOOK: USB 转 TTL 模块 连线使用实例教程
  13. 不用无限手套,人人都能开发 BI 系统
  14. Ubuntu server树莓派版本默认用户名密码及密码修改
  15. 深度精简版XP如何安装IIS
  16. Koo叔说Shader—Shader简介
  17. keep-alive用法
  18. 影创SDK☀️一、本专栏概述及资源地址
  19. oppo小布机器人_腾讯宠粉狂欢季丨OPPO手机、腾讯听听音箱、小布AI机器人……100+份豪礼免费送!...
  20. 水果店线下营销玩法有哪些,水果店前期营销方案有哪些

热门文章

  1. Python的小括弧,中括号,大括号的区别
  2. 【学术】观点动力学模型——IJAC主题分享会议上的听讲笔记
  3. .net core3.1下路由的配置
  4. 某种产品中,合格品率为85%,一个合格品被检查成次品的概率是10%,一个次品被检查成合格品的概率为5%,问题:求一个被检查成合格品的产品确实为合格品的概率()?
  5. 2012年北邮网研院复试上机题目
  6. Python学习笔记:玩转emoji表情
  7. 如何利用开源风控系统(星云)防止撞库?
  8. 中华文明的基本脉络---唐加文
  9. 面试时应该问些什么问题
  10. NLP自然语言处理学习笔记(十一)(转自咕泡AI)