盘一盘 | 基于BEV空间的视觉感知算法模型梳理(自下而上&自上而下)(下)

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 激光雷达传感器可以提供物体准确的深度信息以及结构信息;但激光雷达传感器提供物体信息的距离比较有限,同时其获得的点云数据与相机传感器采集到的图像信息相比更加稀疏;

四、自上而下的BEV空间特征构建方法



自上而下的这类算法通常是利用点云的感知范围以及体素大小预先构建一组BEV空间下的3D网格坐标,然后利用相机的内外参变换矩阵将3D空间坐标投影到图像坐标系下,并对相应位置的图像特征进行采样,或者借鉴Transformer中的Query思想,利用在3D空间下构建的Object Query与图像特征进行交互,最终实现BEV特征的构建。下面主要梳理下CaDDN、BEVFormer以及PETR算法模型;


1. CaDNN:Categorical Depth Distribution Network for Monocular 3D Object Detection


论文链接:https://arxiv.org/pdf/2103.01100.pdf

Github仓库源码:https://github.com/TRAILab/CaDDN


CaDDN是发表在CVPR 2021上的一篇论文,该论文主要是基于单目相机实现3D目标检测任务。CaDDN算法模型的整体流程图如下:


640.png


CaDDN算法模型的前向过程主要包括以下四个部分:


  • 利用主干网络提取输入单目图像的多尺度特征(对应上图的Image Backbone);
  • 利用提取到的多尺度特征预测特征图每个单元格上的语义表达和深度方向的概率估计,从而构建相机视锥特征(对应上图的Frustum Features);
  • 将BEV空间下构造的3D网格点根据相机的内外参变换矩阵投影到相机视锥坐标系,进行特征采样(对应上图的Voxel Features),并利用Voxel Collapse形成最终的BEV空间特征;
  • 对得到的BEV特征先经过BEV Backbone实现多尺度特征的提取,然后接Detection Head实现3D目标检测;

利用主干网络提取输入单目图像的多尺度特征


论文中采用的是ResNet-101主干网络提取图像的多尺度特征,多尺度特征如下


Python
Tensor([bs, 2048, H / 8, W / 8]); # 降采样8倍的特征图用于后续预测深度方向的离散信息;
Tensor([bs, 256, H / 4, W / 4]);  # 降采样4倍的特征图用于后续预测语义特征;


利用提取到的多尺度特征预测特征图单元格的语义特征和深度方向的离散概率估计,从而构建相机视锥特征


CaDDN构建视锥特征的方式整体与LSS算法相近,二者算法主要的区别是CaDDN中深度预测网络是靠显式监督,而LSS算法中的深度预测网络是隐式监督的。


  • 对降采样4倍的特征图,论文中采用ASPP模块,通过不同大小的卷积来扩大感受野,用于预测特征图上每个单元格的语义特征;
  • 对降采样8倍的特征图,论文中利用深度预测网络预测深度方向的离散概率分布;
  • 最后根据预测的语义特征以及深度方向的离散概率分布利用外积运算得到相机视锥特征;


将BEV空间下构造的3D网格点根据相机内外参投影到相机视锥坐标系,并进行采样,利用Voxel Collapse构建最终BEV特征


  • 根据点云感知范围以及体素大小构建BEV空间下的3D网格点(源码中的create_meshgrid3d()函数)
Python
def create_meshgrid3d(width, height, depth):
    xs: Tensor = torch.linspace(0, width - 1, width, device=device, dtype=dtype)
    ys: Tensor = torch.linspace(0, height - 1, height, device=device, dtype=dtype)
    zs: Tensor = torch.linspace(0, depth - 1, depth, device=device, dtype=dtype)
    # generate grid by stacking coordinates
    base_grid = stack(torch_meshgrid([zs, xs, ys], indexing="ij"), dim=-1)  # DxWxHx3
    return base_grid.permute(0, 2, 1, 3).unsqueeze(0)  # 1xDxHxWx3

根据得到的3D网格点,利用相机内外参投影回相机的视锥空间得到相机视锥网格。其中视锥的横纵坐标的计算方式与正常投影过程的计算方式相同。需要注意的是,论文中对网格点的深度大小利用LID算法进行了处理,其中LID的示意图和公式如下:


LID示意图:

640.png


LID公式:


640.png


在得到相机视锥特征以及相机视锥网格后,通过F.grid_sample()函数进行采样,从而得到图中的Voxel Features,再利用Voxel Collapse操作去掉Voxel Features的高度信息,得到最终的BEV空间特征。


对得到的BEV特征经过BEV Backbone特征提取后,接Detection Head实现3D目标检测


这里Detection Head所预测的内容与BEVDet中检测头预测的内容基本保持一致,就不再重复介绍啦 ~


2. BEVFormer:Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers


论文链接:https://arxiv.org/pdf/2203.17270.pdf

Github仓库源码:https://github.com/fundamentalvision/BEVFormer

BEVFormer是发表在ECCV 2022上的一篇论文,该论文主要是基于环视图像实现感知中的3D目标检测和地图分割任务的。BEVFormer算法模型的整体流程图如下:

640.png


BEVFormer算法模型的前向过程主要包括以下三个部分:


  • 主干网络和特征融合网络提取环视图像的多尺度特征;
  • 利用上图中的Encoder模块(由Temporal Self-Attention模块和Spatial Cross-Attention模块组成)实现空间BEV特征的构建;
  • Object Query与BEV特征利用Decoder模块进行交互得到Output Embedding,进而接3D检测头或者语义分割头完成3D目标检测和地图分割任务;

主干网络和特征融合网络提取环视图像的多尺度特征,输出的多尺度特征如下

Python
[0]: Tensor([bs, cam, 256, h / 8, w / 8])
[1]: Tensor([bs, cam, 256, h / 16, w / 16])
[2]: Tensor([bs, cam, 256, h / 32, w / 32])
[3]: Tensor([bs, cam, 256, h / 64, w / 64])

利用Temporal Self-Attention模块和Spatial Cross-Attention模块完成BEV特征的构建


由论文中的流程图可知,Encoder模块由Temporal Self-Attention模块以及Spatial Cross-Attention模块组成实现BEV特征构建。两个模块的功能描述如下:


Temporal Self-Attention模块
该模块的主要作用是通过引入之前时序帧的信息特征(图中的History BEV)并与当前时刻的BEV Query利用Self-Attention机制实现融合,然后将融合后的BEV Query送入到后面的Spatial Cross-Attention模块中。将时序信息引入到模型里的好处是可以使算法模型更好的解决感知中存在的遮挡问题,也可以比较准确的预测周围物体的速度信息。


Spatial Cross-Attention模块
Spatial Cross-Attention模块利用Temporal Self-Attention模块输出的BEV Query,对主干网络和特征融合网络提取到的多尺度环视图像特征进行查询,生成BEV空间下的


BEV Embedding特征;
BEVFormer这里的实现方式与CaDDN算法类似,都是采用了自上而下的构建方式;根据点云感知范围和体素大小构建BEV下的3D空间网格,通过相机内外参变换矩阵将3D空间点映射到图像特征上,BEVFormer算法借鉴了Deformable Transformer的局部注意力机制的思想对图像特征进行采样完成最终的BEV特征构建。


Object Query与BEV特征利用Decoder模块进行交互得到Output Embedding,进而接3D检测头或者语义分割头完成3D目标检测和地图分割任务


由于官方代码只提供了3D目标检测的实现方式,所以这里主要介绍3D目标检测的实现方式。


算法中将Object Query与BEV特征借鉴Deformable DETR中局部注意力的思想输出Output Embedding。利用FFN网络充当3D目标检测头预测相关的感知参数(预测内容与BEVDet算法相似),实现最终的3D目标检测任务。


3. PETR:Position Embedding Transformation for Multi-View 3D Object Detection


论文链接:https://arxiv.org/pdf/2203.05625.pdf

Github仓库源码:https://github.com/megvii-research/PETR

PETR是发表在ECCV 2022上的一篇论文,该论文的主要思想是希望类似于DETR算法一样实现完全端到端的3D目标检测任务;PETR算法模型的整体流程图如下:


640.png


PETR算法模型的前向过程主要包括以下三个部分:


  • 利用主干网络和特征融合网络提取图像的2D特征;
  • 利用3D位置编码器输出具有3D空间位置的特征;
  • 利用Decoder获得Output Embedding,最后接3D检测头实现3D目标检测;

利用主干网络和特征融合网络提取图像的2D特征,实现流程如下

Python
# 主干网络输出的多尺度特征如下
l0 = Tensor([bs * N, 1024, H / 16, W / 16])
l1 = Tensor([bs * N, 2048, H / 32, W / 32])
# 特征融合网络对主干网络输出的多尺度特征进行融合,输出图像的2D特征
out[0] = Conv1x1(l1) --> Tensor([bs * N, 256, H / 32, W / 32]);
out[1] = Conv1x1(l0) + Up(Tensor([bs * N, 256, H / 32, W / 32]) --> Tensor([bs * N, 256, H / 16, W / 16]);


利用3D位置编码器输出具有3D空间位置的特征,3D位置编码器整体流程图如下:


对主干网络和特征提取网络输出的2D图像特征利用1x1卷积进行拟合得到图像语义特征;


生成视锥网格点,并利用相机内外参转换到3D空间(对应上图中的3D Coordinates),利用3D Position Embedding进行3D位置编码


最后将3D位置编码 + 1x1卷积拟合后的图像语义特征进行相加,得到具有空间位置的语义特征(对应上图中的3D Position-aware Features)


利用Decoder获得Output Embedding,最后接3D检测头实现3D目标检测


这部分的实现逻辑与传统的Transformer的Decoder的逻辑类似,利用Cross-Attention模块将生成的3D空间下的Object Query和具有3D空间位置的语义特征进行交互,得到Output Embedding,然后利用FFN网络充当3D检测头实现最终的3D检测结果。


参考文章



[1] https://arxiv.org/pdf/2208.02797.pdf 

[2] https://arxiv.org/pdf/2209.05324.pdf 

[3] https://arxiv.org/pdf/2008.05711.pdf(LSS)

[4] https://arxiv.org/pdf/2112.11790.pdf(BEVDet)

[5] https://arxiv.org/pdf/2103.01100.pdf(CaDDN)

[6] https://arxiv.org/pdf/2203.17270.pdf(BEVFormer)

[7] https://arxiv.org/pdf/2203.05625.pdf(PETR)


原文首发微信公众号【自动驾驶之心】:一个专注自动驾驶与AI的社区(https://mp.weixin.qq.com/s/NK-0tfm_5KxmOfFHpK5mBA

相关文章
|
26天前
|
机器学习/深度学习 人工智能 JSON
微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
Microsoft Research最新推出的rStar2-Agent在AIME24数学基准测试中以80.6%的准确率超越超大规模模型DeepSeek-R1,展现“思考更聪明”而非“更长”的AI推理新方向。
104 8
微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
|
12天前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
|
12天前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
56 7
|
12天前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
49 0
粒子群算法模型深度解析与实战应用
|
12天前
|
机器学习/深度学习 运维 算法
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
|
1月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
|
12天前
|
机器学习/深度学习 存储 算法
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习模型、算法与应用的全方位解析
深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
456 3
|
3月前
|
算法
基于RMD算法模型的信号传输统计特性的matlab模拟仿真
本项目基于RMD(Random Midpoint Displacement)算法模型,使用MATLAB 2022A进行信号传输统计特性的模拟仿真。通过递归在区间中点加入随机位移,生成具有自相似性和长相关性的随机信号,实现了文中多个仿真图,并提供操作视频与中文注释代码。RMD模型生成的信号均值为零,方差无穷大,具备低误码率、强抗干扰能力及高传输效率等优势,为现代通信系统提供了新思路。
|
4月前
|
人工智能 自然语言处理 算法
算法及模型合规:刻不容缓的企业行动指南
随着AI技术迅猛发展,算法与模型成为企业数字化转型的核心。然而,国家密集出台多项法规,如《人工智能生成合成内容标识办法》等,并开展“清朗·整治AI技术滥用”专项行动,标志着AI监管进入严格阶段。算法备案从“可选项”变为“必选项”,未合规可能面临罚款甚至刑事责任。同时,多地提供备案奖励政策,合规既是规避风险的需要,也是把握政策红利和市场信任的机遇。企业需系统规划合规工作,从被动应对转向主动引领,以适应AI时代的挑战与机遇。

热门文章

最新文章