当前位置: 首页 > news >正文

BEV query 式图片点云视觉特征融合

从BEV查询图像

BEVFormer的核心思想是 “从BEV查询图像”。它首先在BEV空间中定义一组“查询员”(BEV Queries),然后让每个“查询员”主动地、有选择性地去多个摄像头的图像中“拉取”自己所需的信息,从而构建出最终的BEV特征图。

假设我们的目标是生成一个 200x200 大小的BEV特征图,每个位置用一个 256 维的向量表示。

步骤 1: 初始化BEV查询向量 (BEV Queries)
  • 操作: 创建BEV特征图的“骨架”。
  • 输入: 无。这是一个初始化学到的参数。
  • 输出: 一个张量 bev_queries,形状为 [40000, 256]
    • 40000 是BEV网格的总点数 (200 * 200)。
    • 256 是每个BEV位置的特征维度 C
  • 含义: 这里的每一个 bev_query 向量都是一个可学习的“占位符”。它代表了BEV空间中一个独一无二的、具体的位置(例如,第0号查询向量代表BEV网格的 (0,0) 位置)。在初始状态,它不包含任何关于场景的信息,它的任务就是去“填充”自己。
步骤 2: 生成3D参考点 (3D Reference Points)
  • 操作: 将抽象的BEV查询向量与真实世界的三维空间位置关联起来。
  • 输入: BEV网格的坐标。
  • 输出: 一个张量 reference_points_3d,形状为 [40000, 3]
  • 含义与流程:
    1. 我们知道每个 bev_query 对应BEV网格中的一个索引 (i, j)
    2. 根据预先定义的BEV物理范围(例如,x轴从-50米到+50米,y轴从-50米到+50米),可以将网格索引 (i, j) 转换为自车坐标系下的一个具体的 (x, y) 坐标。
    3. z 坐标通常被假定在一个或几个固定的高度,例如地面 z=0
    4. 这样,每个 bev_query 就拥有了一个与之对应的、在自车坐标系下的三维空间锚点 (x, y, z)。例如,第 kbev_query 可能对应于自车前方10米、左侧3米的地面位置。
步骤 3: 将3D参考点投影至2D图像平面
  • 操作: 计算每个3D参考点会出现在哪些摄像头的哪个像素位置。
  • 输入:
    • reference_points_3d (形状 [40000, 3])
    • 所有相机的内外参数矩阵 (Camera Intrinsics & Extrinsics)。外参定义了相机在自车坐标系中的位置和姿态;内参定义了相机的成像模型(焦距等)。
  • 输出: 一个张量 reference_points_2d,形状为 [40000, N_cam, 2]
    • N_cam 是相机的数量(例如6)。
    • 最后的 2 代表每个相机图像上的 (u, v) 像素坐标。
  • 含义与流程:
    1. 对40000个3D参考点中的每一个点 (x, y, z)
    2. 遍历 N_cam 个相机。
    3. 使用每个相机的外参矩阵,将点 (x, y, z) 从自车坐标系变换到该相机的坐标系。
    4. 使用该相机的内参矩阵,将相机坐标系下的点投影到其2D图像平面上,得到像素坐标 (u, v)
    5. 同时,记录下哪些点投影后超出了图像边界或者在相机后方,这些点对于该相机是无效的。
  • 实例: 经过这一步,模型知道了:对于BEV网格中代表“车前10米,左侧3米”的那个 bev_query,它应该去前置摄像头的 (450, 320) 像素位置和左前摄像头的 (880, 350) 像素位置寻找视觉信息。
步骤 4: 通过可变形注意力机制采样图像特征

这是整个流程的核心。它在标准的注意力机制上做了改进。

  • 操作: bev_query 作为查询(Query),从多尺度图像特征图中采样信息来更新自身。
  • 输入:
    • Q (Query): bev_queries (形状 [40000, 256])。
    • K (Key) & V (Value): 来自图像骨干网络(如ResNet)输出的多尺度2D特征图。这些特征图是形状类似于 [N_cam, C, H_img, W_img] 的张量。
    • Reference Points: reference_points_2d (形状 [40000, N_cam, 2]),它告诉注意力机制应该去哪里采样
  • 输出: 一个更新后的 bev_queries 张量,形状仍为 [40000, 256],但现在填充了从图像中提取的视觉信息。
  • 详细流程:
    1. 对于每一个 bev_query,模型通过一个微小的全连接网络,基于 bev_query 自身,预测出一组采样点偏移量 (sampling offsets)注意力权重 (attention weights)。假设模型要采样 M 个点(例如 M=4)。
    2. 这些偏移量被加到步骤3中计算出的2D参考点 (u, v) 上,得到 M 个最终的、精确的采样坐标。例如,参考点是 (450, 320),模型可能会学会去 (448, 319), (452, 321), (450, 330), (450, 310) 这四个位置采样,因为这可能对应物体的不同部分,能提供更丰富的上下文。
    3. 模型使用双线性插值,从2D图像特征图中精确地提取出这 M 个采样点的特征向量。
    4. 之前预测出的注意力权重被应用到这 M 个特征向量上,进行加权求和。这允许模型动态地决定这 M 个采样点中,哪个更重要。
    5. 这个加权求和后的特征向量,最终被用来更新 bev_query
  • 含义: 这一步极其关键。它没有被动地接收投影信息,而是让每个BEV位置主动地、智能地去图像的多个相关位置进行探索和采样,从而汇集最有效的视觉证据。
步骤 5: BEV空间内的信息交互 (BEV Self-Attention)
  • 操作: 在BEV特征图内部进行信息传递,增强空间上下文感知。
  • 输入: 经过步骤4更新后的 bev_queries
  • 输出: 再次更新的 bev_queries
  • 含义与流程:
    1. 模型应用一个标准的自注意力(Self-Attention)层。
    2. 每个 bev_query 都会与其他所有的 bev_query 计算相似度,并根据相似度加权聚合来自其他位置的信息。
    3. 这使得信息可以在BEV空间中流动。例如,一个表示大型卡车车头位置的查询向量,可以从表示该卡车车身和车尾的查询向量中获取信息,从而理解到它们共同构成了一个完整的、连续的物体。
步骤 6: 与LiDAR等其他模态特征融合
  • 操作: 将纯视觉的BEV特征图与其他模态(如LiDAR)的BEV特征图进行融合。
  • 输入:
    • 纯视觉的 bev_queries (来自步骤5,重塑为 [256, 200, 200])。
    • 由点云处理分支生成的 lidar_bev_features (形状也为 [256, 200, 200])。
  • 输出: 一个融合后的多模态BEV特征图。
  • 流程: 最简单的方式是将两个特征图在通道维度上拼接(Concatenate),然后通过一个卷积层来压缩通道并进行特征融合。更复杂的方法也可以使用注意力。
步骤 7: 迭代优化与输出

上述的步骤4和步骤5(即BEV Cross-Attention和BEV Self-Attention)通常会组成一个“BEVFormer Layer”,并且会堆叠多层(例如6层)。上一层的输出 bev_queries 会作为下一层的输入,每一层都会对BEV特征图进行一次更精细的优化。

最终,最后一层输出的BEV特征图将被送入下游的检测头或分割头,来完成最终的感知任务。

交叉注意力(Cross-Attention)融合

下面将解析如何使用注意力机制,特别是交叉注意力(Cross-Attention),来替代简单的拼接融合方法。

这种方法的核心思想是,让两种模态的特征图不再是简单地“堆叠”在一起,而是进行一次智能的、有选择性的“信息问询”,从而实现更深层次的融合。

构建一个双向交叉注意力融合模块(Bi-directional Cross-Attention Fusion Module)。这个模块包含两个平行的信息流:

  1. 路径A: LiDAR特征图作为“主导”,去查询图像特征图,用视觉信息来“增强”自己。
  2. 路径B: 图像特征图作为“主导”,去查询LiDAR特征图,用精确的几何信息来“校准”自己。

假设输入是两个BEV特征图:

  • lidar_bev_features: 由点云分支生成,形状为 [C, H, W]
  • image_bev_features: 由图像分支(例如BEVFormer-style Attention)生成,形状也为 [C, H, W]
步骤 1: 输入准备 (Tokenization & Positional Encoding)

注意力机制处理的是一系列“令牌”(Tokens),而不是2D的图像网格。因此,第一步是进行预处理。

  • 1a. 展平 (Flattening):

    • 操作: 将两个 [C, H, W] 的2D特征图展平为1D的令牌序列。
    • 数据变换: [C, H, W] -> [H * W, C]。令 N = H * W,则形状变为 [N, C]
    • 输出:
      • lidar_tokens (形状 [N, C])
      • image_tokens (形状 [N, C])
    • 含义: 现在我们有了两个令牌序列,每个令牌代表了BEV空间中的一个特定位置,并携带了该位置的特征信息。
  • 1b. 添加位置编码 (Positional Encoding):

    • 操作: 为每个令牌添加其在原始 H x W 网格中的位置信息。
    • 数据变换: 将一个预先定义或可学习的位置编码张量(形状 [N, C])与 lidar_tokensimage_tokens 相加。
    • 输出: 带有位置信息的 lidar_tokensimage_tokens
    • 含义: 标准的注意力机制是“置换不变”的,它不关心令牌的顺序。而BEV特征具有强烈的空间属性,因此必须显式地将位置信息注入到令牌中,模型才能理解每个令牌代表的几何位置。
步骤 2: 双向交叉注意力 (Bi-directional Cross-Attention)

这是融合的核心。我们将并行执行两个交叉注意力计算。

  • 路径 A: LiDAR 查询 Image (LiDAR Queries Image)

    • 目标: 对于BEV中的每一个位置,LiDAR特征想知道:“在图像特征中,哪些信息与我最相关?请把它们提供给我。”
    • 注意力角色分配:
      • Query (Q): 来自 lidar_tokens
      • Key (K): 来自 image_tokens
      • Value (V): 来自 image_tokens
    • 计算流程:
      1. 线性投影: 使用三个独立的全连接层(Linear layers)将Q, K, V分别进行线性变换,得到 Q_lidar, K_image, V_image
      2. 计算注意力分数: 通过点积计算 Q_lidarK_image 的相似度,并进行缩放和Softmax归一化。
        AttentionScoresA=Softmax(Qlidar⋅KimageTdk)AttentionScores_A = \text{Softmax}\left(\frac{Q_{lidar} \cdot K_{image}^T}{\sqrt{d_k}}\right)AttentionScoresA=Softmax(dkQlidarKimageT)
        这个分数矩阵的每一行代表一个LiDAR令牌对所有Image令牌的关注度分布。
      3. 生成上下文向量: 将注意力分数与 V_image 相乘。
        OutputA=AttentionScoresA⋅VimageOutput_A = AttentionScores_A \cdot V_{image}OutputA=AttentionScoresAVimage
    • 输出: enhanced_lidar_tokens (形状 [N, C])。
    • 含义: 这是“被图像信息增强过的LiDAR特征”。每个令牌现在不仅包含原始的LiDAR几何信息,还融合了从图像特征图中所有位置加权平均得来的、与之最相关的视觉上下文信息。
  • 路径 B: Image 查询 LiDAR (Image Queries LiDAR)

    • 目标: 对于BEV中的每一个位置,图像特征想知道:“我的特征可能存在不确定性,请告诉我LiDAR特征中哪些精确的几何信息能对我进行校准和确认。”
    • 注意力角色分配:
      • Query (Q): 来自 image_tokens
      • Key (K): 来自 lidar_tokens
      • Value (V): 来自 lidar_tokens
    • 计算流程: 与路径A完全相同,只是Q, K, V的来源不同。
    • 输出: enhanced_image_tokens (形状 [N, C])。
    • 含义: 这是“被LiDAR信息校准过的图像特征”。每个令牌现在融合了来自LiDAR特征图的、与之最相关的几何结构信息,使其空间定位更加可靠。
步骤 3: 特征聚合 (Aggregation)
  • 操作: 将两个并行路径的输出结果和原始输入结合起来。
  • 输入:
    • 原始的 lidar_tokensimage_tokens
    • 增强后的 enhanced_lidar_tokensenhanced_image_tokens
  • 输出: 融合后的令牌序列 fused_tokens (形状 [N, C])。
  • 流程:
    1. 聚合增强特征: 将两个增强后的特征进行合并,最简单的方式是相加:aggregated_enhancement = enhanced_lidar_tokens + enhanced_image_tokens
    2. 残差连接 (Residual Connection): 将聚合后的增强特征与原始特征相加。这对于稳定训练至关重要。例如,只增强LiDAR特征:fused_tokens = lidar_tokens + aggregated_enhancement。更常见的是将两个原始特征也先融合一下:fused_tokens = (lidar_tokens + image_tokens) + aggregated_enhancement
    3. 层归一化 (Layer Normalization): 对 fused_tokens 进行层归一化。
步骤 4: 前馈网络 (Feed-Forward Network, FFN)
  • 操作: 对融合后的令牌进行进一步的非线性变换,增加模型的表达能力。这是Transformer模块的标准组件。
  • 输入: fused_tokens (来自步骤3)。
  • 输出: 最终的融合令牌 final_fused_tokens (形状 [N, C])。
  • 流程:
    1. fused_tokens 通过一个MLP(通常是两层全连接层,中间有一个ReLU或GELU激活函数)。
    2. 同样,应用残差连接和层归一化。final_fused_tokens = LayerNorm(fused_tokens + MLP(fused_tokens))
步骤 5: 输出
  • 操作: 将处理完成的令牌序列还原为2D BEV特征图的格式。
  • 输入: final_fused_tokens (形状 [N, C])。
  • 数据变换: [N, C] -> [H * W, C] -> [H, W, C] -> [C, H, W]
  • 输出: 最终融合后的BEV特征图,可以送入下游的检测头。

通过以上步骤,模型不再是盲目地拼接特征,而是智能地让两种模态相互“协商”,提取对彼此最有价值的信息,从而得到一个质量更高、信息更丰富的融合BEV特征图。

我们将按照数据流动的顺序,一步步拆解从独立的传感器输入到最终特征融合的完整过程。

FocalsConv 多模态融合策略 (Focals Conv-F) 详解

该策略的核心思想是:利用轻量级的图像特征来增强点云体素特征,特别是在预测哪些体素区域更重要(即包含物体)以及增强这些重要体素的特征表达上。 融合操作本身非常直接高效,即求和 (Summation)

步骤 1: 独立的LiDAR特征提取
  • 操作: 将原始的LiDAR点云转换为主干网络可以处理的BEV(鸟瞰图)稀疏体素特征。
  • 输入: 原始LiDAR点云数据。
  • 输出: 稀疏的3D体素特征 (LIDAR Features)。在论文的图示中,这被表示为 Sparse features。这些特征以一种稀疏格式存储,即只保存有“活动”体素的位置及其对应的特征向量。
  • 含义: 这一步是所有基于体素的3D检测器的标准流程,它将无序的点云转化为规整的、带有空间位置信息的特征表示,为后续的3D卷积操作做准备。
步骤 2: 独立的2D图像特征提取
  • 操作: 从同步的RGB图像中提取2D特征图。
  • 输入: RGB相机图像 (RGB Features)。
  • 输出: 一个2D图像特征图。
  • 含义与流程:
    1. 该模块被设计为轻量级的,仅包含几个卷积层、批归一化(BN)、ReLU激活层和一个最大池化层,而不是一个完整的、沉重的2D检测或分割模型。
    2. 输入图像首先被下采样(例如,到1/4分辨率),然后通过几个带有残差连接的卷积层来提取特征。
    3. 最后,通过一个MLP(全连接层)将特征图的通道数调整到与LiDAR体素特征的通道数一致,以便后续进行求和操作。
    • 关键点: 这一步的目标不是进行2D目标检测,而仅仅是提取出包含颜色、纹理等丰富语义信息的2D特征,作为LiDAR特征的补充。
步骤 3: 特征对齐 (3D到2D的投影)

这是实现多模态融合最关键的一步,它解决了“哪个3D体素对应哪个2D图像像素”的问题。

  • 操作: 将稀疏的3D体素特征的位置,通过坐标系变换,投影到2D图像特征图上,从而找到每个体素对应的图像特征。
  • 输入:
    • 3D体素的位置坐标(来自步骤1)。
    • 2D图像特征图(来自步骤2)。
    • 传感器标定参数(相机内外参)和数据增强中记录的变换参数。
  • 输出: 对于每个3D体素,都能索引到一个与之对应的2D图像特征向量。
  • 含义与流程:
    1. 处理坐标变换: 训练过程中,点云数据会经过一系列的数据增强操作,如随机翻转、缩放、旋转和平移。这些变换是可逆的。为了正确投影,模型会记录这些变换的参数,并对体素的坐标进行逆变换,将其恢复到原始的、未增强的坐标系中。
    2. 3D到2D投影: 使用相机的标定矩阵,将恢复后的3D体素中心点坐标投影到2D图像的像素平面上。
    3. 特征索引: 根据投影得到的2D像素坐标,从步骤2生成的图像特征图中进行索引,提取出对应的图像特征向量。
    • 关键点: 经过这一步,原本在不同空间(3D和2D)的特征被打通了。现在,对于每一个LiDAR体素,我们都有了一个来自图像的、描述其颜色和纹理的特征向量。
步骤 4: 两次求和融合 (Fusion via Summation)

根据FocalsConv的设计(见论文图3),融合操作在两个地方以求和的方式发生。

  • 4a. 第一次融合 (用于重要性预测):

    • 操作: 将对齐后的图像特征与输入的LiDAR体素特征相加。
    • 数据流动: LIDAR Features 与对齐后的 RGB Features 进行求和。
    • 输出: 一个临时的、融合了多模态信息的特征张量。
    • 目的: 这个融合后的特征专门被送入一个额外的卷积分支,用于预测“立方体重要性图 (Cubic importance)”。因为图像特征(如颜色)对于判断一个区域是否是前景物体(例如,区分车辆和路面)非常有帮助,所以用它来辅助预测重要性是十分有效的。
  • 4b. 第二次融合 (用于增强输出特征):

    • 操作: 将对齐后的图像特征与输出的、被判断为“重要”的LiDAR体素特征相加。
    • 数据流动: 在主干的稀疏卷积计算完成后,模型会得到一个输出的稀疏特征图。此时,对齐后的 RGB Features 与那些根据步骤4a的预测被认为是“重要”的输出体素特征进行求和。
    • 输出: 最终的多模态BEV特征图,它将被送入网络的下一层。
    • 目的: 这是对模型特征的最终增强。它只增强那些模型认为值得关注的区域(前景物体),避免了将图像信息盲目地添加到所有区域(包括大量背景),从而使得特征表达更具判别力。

通过这种设计,FocalsConv以一种高效且有针对性的方式利用了图像信息:首先用它来帮助模型“聚焦”到场景中的关键物体上,然后再用它来丰富这些关键物体的特征表达,最终实现了两种模态的有效协同。

http://www.dtcms.com/a/434386.html

相关文章:

  • 操作系统应用开发(十二)RustDesk 用户服务器搭建——东方仙盟筑基期
  • 将若依(RuoYi)项目创建为私有Gitee仓库的完整步骤
  • 网站上的百度地图标注咋样做app开发制作专业吗
  • TCP 协议核心面试题 (附答案详解)
  • Spring Security 实战:彻底解决 CORS 跨域凭据问题与 WebSocket 连接失败
  • Tabby下载安装与连接服务器
  • Apache Beam入门教程:统一批流处理模型
  • 计算机毕业设计 基于Hadoop的信贷风险评估的数据可视化分析与预测系统 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 【QT常用技术讲解】QTablewidget单元格存储隐藏的数据
  • K8s学习笔记(九) job与cronjob
  • MATLAB线性代数函数完全指南
  • 关于单片机外设存储芯片的应用笔记(IIC驱动)
  • 梅州网站建设南宁网站 制作
  • 2015 年真题配套词汇单词笔记(考研真相)
  • 中国建设银行舟山分行网站网站构建的过程
  • python如何通过链接下载保存视频
  • K-Lite Mega/FULL Codec Pack(视频解码器)
  • SpringBoot+Vue医院预约挂号系统 附带详细运行指导视频
  • 85-dify案例分享-不用等 OpenAI 邀请,Dify+Sora2工作流实测:写实动漫视频随手做,插件+教程全送
  • GUI高级工程师面试题
  • 经典网站设计风格网站建设产品介绍
  • 基于单片机的人体心率、体温监测系统(论文+源码)
  • WinScp下载与安装
  • 普中stm32大Dap烧录流程
  • 宝安附近做网站公司网站做好了前端 后端怎么做
  • 新媒体营销h5制作网站中国水土保持生态建设网站
  • ubuntu 服务器(带NVLink)更新显卡驱动 (巨坑!!)
  • jQuery提供了多种选择器,可以快速获取DOM元素
  • 【LaTeX】 6 LaTeX 扩展功能
  • 软件测试基础-03(缺陷)