端到端课程自用 1课 感知部分

细碎笔记

整体介绍

  • BEV Encoder 通过显或者隐藏式的feature表示 传递给下游 下游通过不同目标的decoder 基于bev encoder出来的特征来工作

  • 什么是dense 什么是 sparse bev

  • 常见的感知任务

  • occupancy 用vixel表示 带有语义 还有对应属性

  • 2D 目标检测发展过程 AI解读

第一部分:上半部分------从手工特征到统一大模型

这部分展示了技术范式的根本转变。

  1. 2012 AlexNet 出现之前:手工设计特征与浅层模型

    在这一阶段,计算机并不具备自己学习特征的能力,工程师需要手动设计特征提取器,配合简单的分类器来识别物体。

    SVM (支持向量机):这是一种经典的机器学习分类算法。图(a)(b)展示了它在二维空间划分数据的过程,在早期的目标检测中,它负责给提取出的特征做分类(是目标还是背景)。

    SIFT (尺度不变特征变换):这是一种手工设计的局部特征描述子,对图像的旋转、缩放、亮度变化保持不变性,常用于图像匹配和物体识别。

    HOG (方向梯度直方图):通过计算图像局部区域的梯度方向分布来描述物体的形状,非常适合捕捉边缘和轮廓信息,是当时行人检测的主流特征。

  2. 2023 大语言模型 (LLM) 出现之后:统一大模型成为主流

    随着大模型的兴起,视觉检测也从"专用小模型"走向了"通用大模型"。

    SAM系列 (Segment Anything Model):这是 Meta 提出的"分割一切"模型。它的核心思想是构建一个通用的分割模型 (Universal segmentation model)。

    它不再局限于特定类别的检测,而是通过 Prompt Encoder​ 接收提示信息(如点、框、文本描述或掩码)。

    结合 Image Encoder​ 提取的特征,模型能灵活地对任意物体进行分割。这标志着目标检测开始向更开放、更通用的方向发展。

第二部分:下半部分------深度学习目标检测的三条演进路线

这部分展示了深度学习方法在目标检测领域的精细化发展过程。

  1. 二阶段检测器:RPN 与特征金字塔的演进

    这一阶段的研究重点在于如何提高定位精度和召回率。

    RPN (Region Proposal Network):二阶段检测器的核心,负责生成候选区域(Proposal),解决了"在哪里可能有物体"的问题。

    特征金字塔 (Feature Pyramid):为了解决物体在图像中大小不一的问题,利用不同层级的特征图来检测不同尺度的目标。

    多尺度、Anchor、正负样本匹配:这些是二阶段检测器的关键技术细节。

    Anchor:预设在不同位置和尺度的参考框,用于回归目标位置。

    正负样本匹配:决定哪些样本用于训练分类器,哪些用于训练回归器,这对模型的收敛至关重要。

    NMS (非极大值抑制):在最终输出结果时,去除重叠度高的框,只保留最可能是目标的框。

    具体代表:

    R-CNN:最早的一批深度学习检测器,使用 Selective Search 生成候选框,但速度慢。

    Fast R-CNN:引入 ROI Pooling,将特征提取和候选框分类/回归解耦,显著提速。

    Faster R-CNN:创新性地将候选框生成网络 (RPN) 和 Fast R-CNN 共享同一个卷积神经网络,实现了端到端训练,极大提升了效率。

  2. 一阶段检测器:YOLO 系列

    一阶段检测器追求速度与精度的平衡,它将目标检测视为一个单一的回归问题。

    YOLO一阶段:直接将输入图像划分为网格,每个网格直接预测边界框和类别概率。

    特点:速度快,适合实时检测,但早期精度略低于二阶段。

    后续演进:图中展示的 YOLO 架构(1x1 conv, upsample, concat)暗示了引入了特征金字塔(FPN/PANet)思想,通过融合不同层次的特征,提升了对小物体的检测能力。

  3. 端到端目标检测:DETR

    DETR (DEtection TRansformer) 是一种颠覆性的检测方法,它完全抛弃了 NMS 和 Anchor 等传统组件。

    核心思想:利用 Transformer 架构,将目标检测视为一个集合预测 (Set Prediction)​ 任务。

    架构流程:

    Backbone (CNN):提取图像特征。

    Encoder-Decoder (Transformer):利用注意力机制建立图像特征与物体实例之间的全局关系。

    Prediction Heads:直接输出一组预测结果(类别+框坐标)。

    Set Loss:通过二分图匹配的方式,将预测结果与真实标注进行最优匹配,从而消除 NMS 的需要。

    优势:简化了检测流程,概念上更简洁,但在早期收敛较慢。

  • 3D 目标检测

左侧:单目3D + 多相机融合(2021年左右主流)

核心思想:

复制代码
利用多个摄像头(前视、侧视、环视)分别采集图像。
每个相机独立跑3D感知模型(如单目3D检测、深度估计)。
最后通过后处理或简单融合(如图中"Model 1 → ... → Model N"),输出动态物体(车、人)、红绿灯、静态感知(车道线、路牌)。

优点:

复制代码
成本相对较低(只用摄像头)。
每个模型专注单一任务,技术成熟。

缺点:

复制代码
融合困难:不同相机的3D坐标不一致,需要复杂的标定和融合算法。
信息割裂:缺乏全局视角,难以处理遮挡、远距离目标。
静态感知弱:车道线、标志牌等静态元素往往被忽视或精度不足。

📌 图中下方的小图展示了多相机视角下的检测结果(蓝色框),说明当时已能实现较准确的3D检测,但仍是"多模型并行 + 后融合"的模式。

中间:BEV视角融合(2023年成为主流)

核心思想:

复制代码
将所有相机的图像投影到一个统一的鸟瞰图(BEV, Bird's Eye View)上。
使用主干网络(Backbone)提取特征,再通过Transformer或MLP进行跨相机、跨视角的信息融合。
最后在BEV空间上用Head网络输出动态/静态感知结果。

优点:

复制代码
全局统一视角:所有信息在BEV空间中融合,解决了多相机坐标系不一致的问题。
时空一致性好:适合处理遮挡、远距离目标。
静态感知增强:车道线、交通标志等在BEV中天然更易表达。

关键技术:

复制代码
BEVFormer、LSS、PETR、DETR3D等模型。
使用Query机制或注意力机制实现跨视图特征对齐。

📌 图中中间的示意图展示了多相机图像汇聚到BEV空间,黄色车辆位于中心,周围是多视角图像,形象地表达了"从图像到BEV"的融合过程。

右侧:大模型VLM(视觉语言模型)------未来方向

核心思想:

复制代码
不再依赖传统检测头,而是直接使用大模型(LLM)对图像进行端到端的场景理解。
输入是图像(或视频),输出是自然语言描述或推理结果。
可处理全局场景理解、车辆-车道交互、车辆-车辆交互、目标属性识别、空间关系推理、未来状态预测等复杂任务。

代表应用:

复制代码
ChatBEV-QA:如图中下方的示例,用户可以问"哪辆车在红灯前?"、"哪条车道是左转车道?"等,模型直接回答。
VLM + BEV:将BEV特征输入LLM,结合语言指令进行推理。

优点:

复制代码
强大的泛化能力:无需为每种任务单独训练模型。
可解释性强:输出自然语言,便于人机交互。
支持复杂推理:如"预测哪辆车会变道"、"判断路口冲突风险"。

趋势大模型出来之后 和BEV关系弱了 之后走端到端和规划为重点了

Dense BEV LLS base 的方法

上半部分:LSS 模型的三步流程

  1. 左上角:过去的方法(2D→2D)

    输入:RGB图像(来自摄像头)。

    处理:通过传统的卷积编码器-解码器(Convolutional Encoder-Decoder)直接在图像平面上做语义分割。

    输出:也是图像平面的分割结果。

    局限:只能在图像视角做预测,无法获得全局的3D空间信息(比如车在路面的位置、车道线的延伸关系等)。

  2. 右上角:LSS 的核心三步(2D→BEV)

    这是 LSS 的创新所在,它将2D图像"提升"到3D空间,再"投影"回2D的BEV平面。

(1) Lift(抬起)

复制代码
输入:n张不同相机视角的图像 + 相机的内参和外参(标定信息)。
操作:对每张图像,使用一个CNN(卷积神经网络)提取图像特征,然后根据相机的外参(位置和朝向),将每个像素点的特征"抬起"到3D空间中,形成一个视锥形状的点云(每个点包含位置和特征向量)。
意义:把2D图像的像素信息"升维"到3D世界,赋予其空间位置。

(2) Splat(泼洒)

复制代码
操作:利用相机的内参和外参,将每个视锥形状的点云"泼洒"到统一的BEV平面上。这一步通常用Extrinsics(外参)+ Splat(泼洒)来实现,本质是通过几何投影,把3D点云映射到BEV网格中。
结果:得到BEV平面的特征图,每个BEV网格单元聚合了来自不同相机的特征。

(3) Shoot(拍摄)

复制代码
操作:在BEV特征图上,使用一个BEV语义分割或规划网络(如BEV CNN)进行最终的预测。
输出:BEV语义分割结果(如车辆、车道、可行驶区域等)或规划轨迹。

下半部分:LSS 的直观演示(以街道场景为例)

这部分用一个实际的街景图,展示了LSS如何从多相机视角融合到BEV视角:

  1. 输入:多相机图像

    图中展示了左前、正前、右前、左后、正后、右后六个相机的视角,覆盖了车辆周围360度的环境。

    红色框标出了正前相机视角中的一辆车(需要检测的目标)。

  2. 过程:从2D到BEV的映射

    红色箭头:表示模型在BEV视角下做出预测后,再反向投影回原始图像的结果。蓝色点就是预测结果在图像上的投影。

    蓝色点:代表模型在BEV视角下检测到的车辆位置,再映射回各个相机图像的结果。可以看到,即使在正前相机中被遮挡的部分,模型也能通过其他相机(如左前、右前)的信息,在BEV中完整还原车辆的位置。

  3. 输出:BEV视角语义信息

    BEV图:右侧的BEV视角图展示了最终的感知结果。

    蓝色:车辆(包括自车Ego Car和周围车辆)。

    橙色:可驾驶区域。

    绿色:车道线。

    意义:在BEV视角下,所有物体的空间关系(如车辆在车道中的位置、与自车的距离、与其他车辆的相对位置)一目了然,非常适合后续的路径规划和决策。

LSS 的核心价值

复制代码
端到端感知:从图像直接输出BEV语义,无需复杂的后处理融合。
多相机融合:天然支持多相机视角,通过相机标定信息实现空间对齐。
全局视角:BEV平面提供了车辆的全局空间信息,解决了2D图像视角下的遮挡和尺度问题。
可解释性强:BEV图直观展示了感知结果,便于调试和分析。
  • 问题:它将2D图像"提升"到3D空间 这一步看起来无法狠准确呀 毕竟是平面图
    从2D图像"提升"到3D空间,本质上确实是一个"病态问题"(ill-posed problem),因为单张2D图像丢失了深度信息(depth),我们无法100%准确地还原出3D结构。
    但在 LSS(Lift-Splat-Shoot)这类模型中,"提升"并不是靠"猜"深度,而是通过几何约束 + 学习型建模 + 多视角一致性来"合理推测"3D结构。我们可以拆解这个"提升"步骤的合理性:

🧩 为什么"提升"可以做到"相对准确"?

  1. 不是单张图像,而是多相机协同

    LSS 的输入是 n张不同视角的相机图像(比如前视、左视、右视、后视),每张图像都有精确的内参和外参(相机标定)。这意味着:

    每个像素点在世界坐标系中的位置可以通过投影公式反推。

    不同视角看到同一物体时,其像素位置和几何关系可以相互约束。

    ✅ 举例:一辆车在左视图和右视图中都出现,LSS 会通过多视角特征一致性,更准确地推断它在3D空间中的位置。

  2. "视锥点云"不是随机猜测,而是基于几何投影

    "Lift"步骤中,模型不是凭空给每个像素赋予一个深度,而是:

    用 CNN 预测每个像素的深度分布(depth distribution)​ 或 离散深度候选值(depth candidates)。

    然后将每个像素点沿着相机光轴"拉伸"成一个视锥体(frustum),覆盖可能的深度范围。

    每个视锥体内的点都携带原始像素的特征。

    📌 这就像给每个像素点"画一个锥形光束",光束的长度由预测的深度决定 ------ 虽然深度是预测的,但有几何约束,不会乱飞。

  3. "Splat"步骤是特征聚合,不是精确定位

    "Splat"是把3D视锥点云"泼洒"到BEV平面,这一步也不是精确匹配,而是:

    用高斯核、双线性插值或注意力机制,将3D点云特征"软化"地聚合到BEV网格中。

    每个BEV格子会接收来自多个视锥的贡献,从而平滑掉单个像素的预测误差。

    ✅ 这种"软聚合"让模型对深度预测的小误差不敏感,反而能利用多视角信息"互相修正"。

  4. 端到端训练 + 监督信号引导

    LSS 是一个可微分、端到端训练的模型:

    输入是多相机图像,输出是BEV语义分割或规划结果。

    模型通过损失函数(如交叉熵、L1损失)不断优化深度预测和特征融合。

    监督信号(如真实BEV标注、LiDAR点云、高精度地图)会"教"模型如何更准确地"提升"和"泼洒"。

    📌 这就像让模型在不断试错中学习"哪种深度分布+哪种融合方式"能得到最准确的BEV结果。

🧠 举个通俗例子:

想象你在玩"盲人摸象"游戏,但你不是一个人,而是有多个朋友从不同角度摸大象:

复制代码
你(模型)只能看到2D照片(图像),但你朋友告诉你:"我从左边摸,它有个长鼻子"、"我从右边摸,它有大耳朵"。
你通过大家的反馈,结合几何知识(相机角度、距离),大致推断出大象在3D空间中的形状。
最后你把所有信息"汇总"到一个俯视平面图(BEV)上,画出大象的轮廓。

✅ 虽然你没亲眼看到大象,但通过多视角 + 几何约束 + 学习,你能画出相当准确的"BEV大象图"。

🚫 但确实存在"不准确"的情况:

复制代码
单目相机:如果只有一张图,深度预测完全依赖学习,误差可能较大。
遮挡严重:比如一辆车被树挡住一半,模型可能无法准确推断其完整3D形状。
远处小目标:深度预测误差会被放大,导致BEV中位置偏移。
极端光照/反光:影响特征提取,进而影响深度和融合效果。

Lift: Latent Depth Distribution(提升:潜在深度分布)

核心目标:

把每个2D图像像素,根据其预测的深度分布,"提升"到3D空间中的一个点云(视锥体)。

图解细节:

复制代码
左图:视锥(Frustum)​
每个相机视角像一个"金字塔",从相机中心向外扩散。图像中的每个像素都对应这个金字塔中的一个"视线"。
中间图:深度分布 → 视锥特征​
模型为每个像素预测一个深度分布(α₁, α₂, ..., α_D),D是离散深度层数。
然后对每个深度层,计算 feature × depth_weight,得到一个视锥体点云(每个点有3D坐标 + 特征向量)。
右图:3D空间坐标生成​
通过3D Coordinates Generator​ 和 Camera Intrinsics/Extrinsics,将每个像素点映射到3D世界坐标系中,形成多相机视锥(BEV视角)。

✅ 关键点:不是"猜深度",而是学习一个深度分布,再结合几何投影,把2D像素"升维"到3D空间。虽然单张图无法精确测距,但多相机 + 深度分布 + 几何约束让这个过程足够鲁棒。

Splat: Pillar Pooling(泼洒:柱状池化)

核心目标:

把分散在3D空间中的视锥特征,"泼洒"并聚合到统一的2D BEV平面上,形成BEV特征图。

图解细节:

复制代码
左图:Pooling 示意图​
3D点云被"压平"到BEV平面,每个BEV格子接收来自多个视锥的贡献。这类似于将不均匀的3D视锥特征转为均匀的BEV特征。
中间图:PointPillar 风格转换​
借鉴 PointPillar 的思路,将点云转换为"Pillar"(柱子),每个Pillar包含多个点的特征,再通过Stacked Pillars + Learned Features,最终生成一个伪图像(Pseudo Image),即BEV特征图。
右图:多相机视锥 → BEV平面​
不同相机的视锥在3D空间中交汇,通过Transform + Splat,所有特征被"聚合"到BEV网格中,形成统一的环境表示。

✅ 关键点:Splat 不是精确定位,而是特征聚合 + 空间对齐。它允许不同相机、不同深度的特征"混合",从而提升鲁棒性。

Shoot: Motion Planning(拍摄:运动规划)

核心目标:

基于Lift和Splat生成的BEV语义信息,为自动驾驶车辆规划一条最优行驶路径。

图解细节:

复制代码
右图:轨迹采样与评估​
模型在BEV平面上采样多个可能的轨迹(如图中彩色点云),然后根据环境感知信息(如障碍物、车道线、可行驶区域)评估每条轨迹的安全性、舒适性和效率。
输出:选择一条最优轨迹作为控制信号(转向、加速、刹车等)。

✅ 关键点:Shoot 是感知到决策的桥梁。它不再只是"识别物体",而是"理解场景并规划行为"。

🚗 一句话总结:
LSS 用"深度分布"把2D图像抬到3D,用"泼洒聚合"把3D特征压成BEV,再用"轨迹规划"让车知道怎么走 ------ 是一个真正的端到端感知+规划框架。

💡 延伸思考:为什么 LSS 是"简单端到端"?

复制代码
简单:没有复杂的后处理、多阶段融合、手工规则。
端到端:从图像输入 → BEV特征 → 轨迹输出,全程可微分、可训练。
可扩展:后续改进如 BEVFormer、PETR、DETR3D​ 都是在 LSS 基础上优化"提升"和"泼洒"的细节
  • 2d 图像通过深度分布 lift 到3d维度上 得到深度特征

  • 问题 如何根据深度分布生成的视锥特征

    这正是 LSS(Lift-Splat-Shoot)模型中 "Lift"阶段​ 的核心操作。

    下面我详细解释:如何根据深度分布生成视锥特征?

    🎯 目标:

    对每张2D图像中的每一个像素,根据其预测的深度分布,生成一个3D空间中的视锥特征点云(Frustum Feature Points)。

    🧩 步骤详解:

    1️⃣ 输入:2D图像 + 预测的深度分布

    模型(通常是CNN)对每个像素预测一个深度分布(depth distribution),比如:

    深度层级:d₁, d₂, d₃, ..., d_D (D是离散深度数,如64或128)

    对应权重:α₁, α₂, α₃, ..., α_D (∑α_i = 1)

    这个分布可以理解为:"这个像素点在不同深度上的可能性"。

    ✅ 举例:一个像素可能 70% 概率在近处,30% 在远处 ------ 模型会预测 α = [0.7, 0, 0.3, 0, ...]

2️⃣ 计算每个深度层对应的3D坐标

对于每个像素 (u, v),我们用相机内参(焦距、主点)和外参(相机在世界坐标系的位置和朝向),将每个深度 d_k映射为3D空间中的一个点:

X_k = fx * (u - cx) / d_k + Tx

Y_k = fy * (v - cy) / d_k + Ty

Z_k = d_k

复制代码
📌 其中 (fx, fy, cx, cy)是相机内参,(Tx, Ty, Tz)是相机在世界坐标系的位置(外参)。

✅ 这样,每个像素 (u, v)就对应 D 个3D点:{(X₁,Y₁,Z₁), (X₂,Y₂,Z₂), ..., (X_D,Y_D,Z_D)}

3️⃣ 为每个3D点赋予特征(Feature)

原始像素点有一个特征向量 f ∈ R^C(比如从CNN提取的通道数为C的特征)。

对于每个深度层 k,我们让该点的特征为:

f_k = α_k * f

复制代码
✅ 也就是说:深度权重 α_k 乘以原始像素特征 f,得到该深度层的特征。

这样,每个3D点不仅有空间位置 (X_k, Y_k, Z_k),还有特征向量 f_k。

4️⃣ 形成"视锥特征点云"

将所有像素在所有深度层上的3D点和特征组合起来,就形成了一个视锥形状的点云(Frustum Point Cloud):

复制代码
每个点包含:
    3D坐标 (X, Y, Z)
    特征向量 f
整体结构像一个"锥形光束",从相机中心向外发散。

📌 这就是所谓的"视锥特征" ------ 它不是稀疏的点云,而是密集的、带特征的、按深度分布的3D点集合。

🖼️ 图解辅助理解(参考你提供的图):

复制代码
左图(视锥):展示相机视角像金字塔,像素点沿视线分布。
中间图(深度分布 → 视锥特征):
    蓝色条形图表示深度分布 α = [0.1, 0.3, 0.6, 0, ...]
    每个 α_k 乘以特征 f,得到不同深度的特征点。
    最终形成"放射状"的视锥点云。
右图(3D坐标生成):
    通过相机标定参数,将每个点映射到世界坐标系。
    多相机视锥在BEV平面交汇,为后续"Splat"做准备。

🧠 为什么这样做有效?

复制代码
几何约束:深度分布 + 相机参数 → 3D坐标,保证空间位置合理。
特征加权:深度权重 α_k 让模型"更信任"某些深度的特征。
多视角互补:不同相机的视锥在BEV平面重叠,互相校正。
端到端可微:整个过程是可微分的,可以用梯度下降优化。

✅ 总结一句话:

复制代码
"根据深度分布生成视锥特征" = 对每个像素,用预测的深度分布加权其特征,再将每个深度层映射到3D空间,形成带特征的视锥点云。

这是 LSS 模型从2D图像"升维"到3D空间的关键一步,也是它比传统2D方法更强大的原因 ------ 它利用了深度先验 + 几何约束 + 多视角融合,让"提升"不再是瞎猜,而是有理有据的建模。

  • α = [0.1, 0.3, 0.6, 0, ...] 代表什么

🧠 为什么是概率?为什么有多个值?

因为从单张2D图像无法精确知道深度,模型需要表达"不确定性"。

复制代码
如果 α = [1, 0, 0, 0]​ → 模型100%确定这个点在最近处(2米)。
如果 α = [0, 1, 0, 0]​ → 100%确定在5米处。
但实际中,模型经常是"不太确定"的 → 所以会给一个分布,如 [0.1, 0.3, 0.6, 0],表示"可能在10米,但5米也有可能,2米不太像"。

🔧 在 LSS 中如何生成这个 α?

模型会为每个像素预测一个 D 维向量(经过 softmax 归一化,总和=1):

深度头(Depth Head)是一个小型神经网络,学习"这个像素看起来有多远"。

🎨 在图中如何理解?

在"深度分布 → 视锥特征"的图中:

复制代码
蓝色条形图:每个条的高度就是 α_k。
条形图下方:每个 α_k 乘以像素特征 f,生成对应的特征点。
最终形成的"放射状"点云中:
    在10米处(α=0.6)的点特征最强(f×0.6)。
    在5米处(α=0.3)的特征中等。
    在2米处(α=0.1)的特征很弱。
  • 是如何学习的a
    LSS(Lift-Splat-Shoot)模型中的深度分布 α 并不是靠"几何计算"出来的,而是通过"端到端训练"学出来的。
    它本质上是一个分类/回归任务,模型通过观察大量图像和对应的真实3D数据(如LiDAR点云或BEV标注),反向学习"什么样的图像特征对应什么样的深度"。
    🧠 学习机制:从"猜"到"对"
  1. 模型结构:深度预测头(Depth Head)

    在LSS中,每个像素的深度分布是由一个轻量级的神经网络层(Depth Head)预测

    Depth Head​ 通常就是几个卷积层,输入是 C通道的图像特征,输出是 D通道的深度logits。

    D​ 是预设的离散深度层数(如64层),覆盖从近到远的范围(如2m~100m)。

  2. 监督信号:如何告诉模型"学什么"?

    模型需要真实数据来纠正它的预测。在自动驾驶数据集中,通常有:

    LiDAR点云:精确的3D坐标点(x, y, z)。

    BEV语义图:俯视图下的道路、车辆、行人标注。

训练时,模型会做两件事:

复制代码
用预测的 α 生成BEV特征(Lift + Splat)。
将生成的BEV特征与真实的BEV标注做对比,计算损失(如交叉熵)。
  1. 反向传播:误差如何修正 α?

    这是一个可微分的过程:

    如果BEV输出错了​ → 损失函数会计算梯度。

    梯度反向传播​ → 通过Splat步骤 → 回到3D点云 → 修正每个像素的深度分布 α。

    修正逻辑:如果某个像素的深度预测错了,导致BEV特征放错了位置,模型就会调整 α,让这个像素的特征"落到正确的BEV格子里"。

    ✅ 模型在反复试错中学会:"这种纹理(如远处模糊的车影)应该对应较远的深度,那种清晰的车轮纹理应该对应较近的深度。"

🧩 训练流程拆解(以BEV分割任务为例)

复制代码
输入:6张环视图像 + 真实BEV分割图(GT)。
前向传播:
    预测每个像素的 α = [α₁, α₂, ..., α_D]。
    用 α 加权特征,生成3D视锥点云。
    Splat 到BEV平面,输出预测的BEV分割图。
计算损失:

loss = CrossEntropyLoss(BEV_pred, BEV_gt)

反向传播:
    计算梯度:d(loss)/d(alpha)。
    更新 Depth Head 的权重,让 α 更准。

微调

最终模型学到:"这种车尾特征 → 大概率在10米处(α₂ ≈ 0.85)"。

  • splat pooling 成2d bev shoot 后续的工作都是在此基础上改进planning

CaDDN

  • 在lss基础上 单目3D
  • 讲解了深度信息如何生成 提取视锥特征 深度离散化

核心公式:

G=D⊗F

这里的 ⊗表示外积​ 操作,这是整个维度提升的关键。

我们可以分步理解这个变化:

第一步:明确输入维度

图像特征 F

维度:(W_F, H_F, C)

物理意义:这是2D图像的特征图。W_F和 H_F是特征图的宽度和高度(通常比原图小),C是每个像素点的特征通道数(例如256维)。每个像素有一个C维的特征向量,描述了该点的外观、语义等信息。

深度分布 D

维度:(W_F, H_F, D)

物理意义:这也是一个2D的分布图,但它预测的是深度方向的概率分布。D是预设的深度采样数量(比如从近到远均匀取80个深度平面)。每个像素有一个D维的概率向量,描述这个像素点位于每个预设深度平面上的可能性。

注意:F和 D的前两个维度 (W_F, H_F)是完全一致的,一一对应同一个像素位置。

第二步:核心操作------外积

对于特征图上的每一个像素点 (i, j),我们同时拥有:

一个 C维​ 的特征向量 F(i, j)

一个 D维​ 的深度概率分布向量 D(i, j)

外积操作​ 就是将这两个向量结合起来,生成一个矩阵:

G(i,j)=D(i,j)⊤⋅F(i,j)

维度变化:(D,)与 (C,)的外积 => (D, C)

物理意义:这个 (D, C)的矩阵表示,对于这一个像素点,在D个不同的深度平面上,每一个平面都应该有一个C维的特征。而深度概率 D(i, j)决定了这个像素的特征在不同深度平面上的"权重"或"贡献度"。深度概率高的平面,此像素的特征在该平面的"存在感"就强。

第三步:堆叠所有像素,得到最终输出

将图像上所有 W_F x H_F个像素点的 (D, C)矩阵堆叠起来,就得到了最终的视锥特征 G。

维度变化:

像素点 (i, j)的局部特征从 (C,)变成了 (D, C)。

将所有像素堆叠:(W_F, H_F, D, C)

维度变化总结与物理意义

(W_F, H_F, C)+ (W_F, H_F, D)--外积--> (W_F, H_F, D, C)

物理意义:

这个变换就是LSS中 "Lift"(提升)​ 步骤的精髓。它将一个2D的图像特征平面,根据其预测的深度分布,提升​ 成了一个3D的视锥体特征。

W_F, H_F:保留了2D图像的网格结构。

D:新增的维度,代表了从相机光心出发,沿着射线方向的离散化深度。

C:每个3D位置(像素x深度平面)上的特征描述。

最终得到的 G可以看作一个3D的、非均匀的特征体积,它为后续的"Splat"(展开)步骤------即将这个视锥特征投影到鸟瞰图(BEV)坐标系------提供了直接的数据基础。

  • 讲了splat部分 frustum to voxel to bev
  • 总结 caddn

根据您提供的两张图片,这是 CaDDN(Categorical Depth Distribution Network)​ 方法实现端到端单目3D物体检测的完整核心

下面是对图中每个阶段的具体说明:

第一阶段:提取有监督的视锥特征(对应图1)

此阶段目标是从2D图像生成一个3D的、基于深度的特征表示,即"Lift"。

输入与特征提取:输入图像 I经过一个主干网络(如ResNet),同时输出:

图像特征 F:(W_F, H_F, C),包含外观和语义信息。

深度分布 D:(W_F, H_F, D),为每个像素预测其在D个离散深度区间(Depth Bins)上的概率分布。

生成视锥特征 G:通过外积​ 将两者结合:G = D ⊗ F,得到维度为 (W_F, H_F, D, C)的视锥特征。这表示每个像素的特征被"涂抹"到了它可能存在的各个深度平面上。

关键技术(与LSS的核心区别):

有监督的深度估计:不像LSS使用无监督学习,CaDDN对深度预测进行显式监督。它利用稀疏的激光雷达点云,通过投影、深度补全、离散化,为每个像素生成一个独热编码(One-Hot)​ 的深度真值,并使用 Focal Loss​ 进行训练,使深度预测更稳定、准确。

LID深度离散化:采用线性增加离散化来划分深度区间。近处区间窄(分辨率高),远处区间宽,能更均衡地覆盖整个深度范围,优化BEV空间的特征投影质量。

第二阶段:从视锥到BEV的几何转换(对应图2)

此阶段目标是将不规则的视锥特征转换为规则且适用于检测的鸟瞰图特征,即"Splat"。

视锥到体素:

利用相机标定矩阵,将规则3D空间(体素空间)中的每个体素中心点投影到视锥特征G中,找到其对应的特征位置。

由于坐标是连续的,使用三线性插值从G中采样,得到每个体素的特征。最终输出规则3D体素特征 V,维度为 (X, Y, Z, C)。

体素到BEV:

将体素特征V在高度维度Z上展开并拼接,得到(X, Y, Z*C)的2D栅格图。

通过一个1x1卷积层进行融合和降维,生成最终的BEV特征图 B,维度为 (X, Y, C'),其中融合了所有高度层的信息。

第三阶段:3D检测与端到端训练

此阶段对应"Shoot",即在BEV空间执行检测任务。

3D检测:将BEV特征图B输入一个3D检测头(例如PointPillars Head),直接预测3D边界框的类别、位置、尺寸和方向。

多任务损失函数:模型进行端到端训练,总损失函数是多项损失的加权和:

深度估计损失:使用Focal Loss监督深度预测。

检测损失:包括分类损失、边界框回归损失、方向分类损失。

##BEV Det

  • 无关 单纯记录 backone neck header 含义作用

  • 问题 那我想搭建一个新的模型的话,那是工作是不是就是不断的选 Backbone,不断的换 Neck,不断的嗯挑选合适的 Head,就是搭建一个端到端模型的主要工作了。
    你的直觉对了一半。对于工程落地和业务 baseline 构建,这确实是 80% 的工作流;但对于真正的模型研发,这仅仅是"选零件"的起点。真正的挑战在于让这些零件"适配"并"高效协同"。
    一、基础层:你描述的"选型工作流"(工程视角)
    对于大多数工业应用(如用 YOLO 做检测、用 ResNet 做分类),你的描述完全正确。这被称为"模型组合(Model Composition)",也是入门最快的方式。
    Backbone 选型:根据任务选基础特征提取器。
    轻量/移动端:MobileNetV3、GhostNet
    高精度/服务端:ResNet-101、Swin Transformer
    Neck 选型:根据目标特性选融合策略。
    小目标敏感:PANet(加强底层信息)
    速度优先:SimpleFPN
    Head 选型:根据输出需求定结构。
    检测:Anchor-based / Anchor-free Head
    分割:FCN Head
    这一层的工作:像搭乐高一样,利用开源社区的成熟模块,通过排列组合快速验证效果。
    二、进阶层:选型之外的"真实痛点"(研发视角)
    如果你以为只靠"换模块"就能发论文或做出极致性能,往往会遇到以下瓶颈,这才是搭建新模型的核心难点:
  1. 接口适配("乐高插口不匹配")
    不同模块的输入输出维度(Channel数、分辨率)往往不兼容。例如:
    Backbone 输出:[64, 128, 256]通道的特征图。
    Neck 输入:要求 [256, 512]通道。
    你的工作:需要设计适配层(Adapter) 或修改 Neck 的初始通道,否则模型直接报错。
  2. 超参数耦合("牵一发而动全身")
    换一个 Backbone,整个训练配置可能都要变:
    学习率:ResNet 和 Transformer 的最优 lr 完全不同。
    优化器:CNN 常用 SGD,Transformer 常用 AdamW。
    Neck 的深度:Backbone 强了,Neck 可能可以变浅(避免过拟合)。
  3. 特征语义对齐("鸡同鸭讲")
    这是最隐蔽的坑。Backbone 提取的特征风格必须与 Neck 的融合逻辑匹配。
    如果 Backbone 是纹理敏感型,但 Neck 是语义聚合型,直接拼接会导致性能下降。
    你的工作:可能需要修改 Neck 的融合算子(如将 Concat 改为 Add),或者对特征进行归一化。
    三、高级层:什么是真正的"新模型"?
    当你不再满足于"换零件",而是开始做以下操作时,你才是在"搭建新模型":
    自定义 Neck 结构:设计一种新的特征金字塔路径(如 ASFF、BiFPN 就是这类工作)。
    修改 Backbone 的 Stage:为了特定任务(如长尾分布)重设计 ResNet 的某个阶段。
    设计新的 Head 解码逻辑:例如将检测框预测从回归改为分类+微调。
    四、给你的实战建议
    起步阶段:完全按照你的思路来。用 ResNet50 + FPN + YOLO Head跑通流程。
    优化阶段:当效果遇到瓶颈时,不要盲目换更大的 Backbone,而是去分析 Neck 的融合效果(可视化特征图看小目标是否丢失)。
    创新阶段:如果现有模块都不满足,再考虑自己写一个轻量的 Neck 或修改 Head 的输出方式。
    一句话总结:选型是工程手段,让选好的模块协同工作(调参、适配、对齐)才是研发核心。
  • 无 不作为重点了解

BEV fusion

  • 在LSS基础上 做了Lidar的融合
  • 输入是多模态 输出也是多任务

Dense BEV Query based

  • 和lss 区别: lss lift splat , query 通过 查询dense Q 对图像KV进行操作 cross attention

deformable attention

它通过引入可学习的偏移量(Offset),让模型具备"动态聚焦"的能力,从而在保持高精度的同时,大幅降低计算量。

一、核心特点:它到底"变形"在哪里?

  1. 动态感受野(核心突破)
    普通注意力/卷积:关注固定的网格位置(如 3×3 卷积核)或所有位置(全局注意力),计算冗余。
    Deformable Attention:每个查询点(Query)只关注少数(如 4个)关键点,且这些点的位置是模型根据内容动态预测的。
    类比:普通卷积是"撒网捕鱼",Deformable 是"用鱼叉精准刺鱼"。
  2. 稀疏性与高效性
    它不计算所有像素对之间的注意力,只计算预测出的少数参考点,实现了线性复杂度,解决了传统 Transformer 在视觉任务中计算量爆炸(二次复杂度)的问题。
  3. 强适应能力
    由于偏移量是可学习的,它能完美适应不规则物体、极端长宽比、复杂遮挡等场景,这是固定卷积核难以做到的。

    三、实战举例:Deformable DETR
    最经典的例子是 Deformable DETR(将 Deformable Attention 引入 DETR 目标检测框架)。
  4. 原始 DETR 的问题
    使用标准的 Transformer Encoder,每个像素需要与全局所有像素计算注意力,训练极慢,且小目标收敛困难。
  5. Deformable DETR 的改进
    Backbone 提取特征后,在 Encoder/Decoder 中应用 Deformable Attention。
    具体操作:对于特征图上的每个点,模型预测 K 个偏移量(如 K=4),然后只去这 K 个偏移后的位置采样特征并计算加权和。
    结果:训练速度提升 10 倍以上,小目标检测 AP 显著提升,且收敛更快。
    四、在模型架构中的位置
    Deformable Attention 通常作为 Backbone 与 Neck 的增强组件出现:
    替代 Neck 中的部分卷积:在 FPN/PANet 结构中,用 Deformable Attention 模块替换普通卷积,增强特征融合能力。
    作为 Encoder:直接作为特征提取后的编码器(如 Deformable DETR)。
    五、总结
    Deformable Attention 不是一种独立的模型,而是一种"即插即用"的增强算子。它的价值在于:
    对研究者:提供了一种解决视觉任务中"动态稀疏注意力"的思路。
    对工程师:它是提升现有模型(尤其是检测类模型)在复杂场景下性能的高性价比工具。
  • 问题 但如果聚焦关注的地方错了是不是整体性能也差了
    你的担忧非常敏锐,直击了 Deformable Attention(可变形注意力) 最本质的"双刃剑"特性。你的直觉完全正确:如果模型"看错了地方",性能确实会断崖式下跌,甚至不如普通的固定卷积。
    但这正是 Deformable 机制设计的精妙之处:它通过一套"容错与纠错"机制,让"看错"的概率和代价降到最低,从而在统计学上保证整体性能的正向收益。
    一、为什么会"看错"?风险来源
    Deformable Attention 的偏移量(Offset)是由网络前层特征预测出来的。如果前层特征提取错误(如噪声干扰、纹理误导),就会导致偏移量预测失误,进而采样到无关甚至错误的区域。
    二、防御机制:如何防止"一错全错"?
    Deformable 结构通过以下 4 层设计,避免了"一着不慎,满盘皆输"的局面:
  1. 多头并行机制(Multi-Head)------ "不把鸡蛋放一个篮子"
    这是最核心的容错设计。每个位置(Query)不是只预测一个偏移点,而是预测 K 个偏移点(多个头)。
    场景:即使某个头预测失误,采样到了背景,其他头可能采样到了正确的关键点(如物体的边缘、中心)。
    结果:最终输出是多个头的加权融合,少数头的错误会被多数头的正确信息"淹没",整体特征依然有效。
  2. 端到端联合优化 ------ "错也要错得有用"
    偏移量的预测不是孤立的,它和后续的分类/回归任务一起训练。
    机制:如果某个偏移量总是导致采样到无用信息,进而导致任务损失(Loss)增大,反向传播会直接惩罚这个偏移量的预测路径。
    结果:模型在训练中会主动学习避开那些"容易看错"的区域,或者降低错误偏移的权重。
  3. 残差思想(Fallback)------ "退路机制"
    Deformable 结构通常隐含退化特性。如果预测的偏移量极不稳定,模型在训练中会倾向于学习到接近 0 的偏移量。
    结果:此时 Deformable Attention 退化为普通的局部注意力(关注中心点附近),性能至少不会比基线更差,避免了"崩盘"。
  4. 多尺度特征输入 ------ "广撒网"
    在 Neck 或 Backbone 的高层特征中,语义信息已经比较稳定。即使某个尺度的偏移预测错误,其他尺度的特征(如 P3 的小目标特征、P5 的大目标特征)会提供互补信息。

    遵循以下原则来规避"看错"风险:
    数据门槛:不要在数据量 < 10K 的小数据集上直接使用 Deformable,优先使用预训练权重或固定结构。
    放置位置:不要放在 Backbone 的最底层(Shallow Layer)。底层特征噪声大,偏移量预测极不可靠。应放在高层语义特征层(如 ResNet 的 Stage 4/5)或 Neck 中。
    超参设置:初始阶段将偏移量的学习率调低(如主网络的 0.1 倍),让它"慢慢学",避免初期乱跳。
    监控手段:训练时可视化偏移量,看看模型到底在关注哪里。如果发现偏移点大量集中在背景上,说明模型设计或数据有问题
  • 新 qkv 和传统transformer 的变化
  1. 对应部分(保留的核心结构)
    查询Q: 图中的 "Query Feature" 及其上方的 Linear 层,对应标准Transformer中由输入通过线性变换生成的查询向量 Q。
    键K和值V: 图中左侧的 "Input Feature Map" 及其上方的 Linear 层,对应标准Transformer中由输入通过线性变换生成的键 K 和值 V。注意,这里K和V共享同一个源特征图。
    多头机制: 图中明确分出了 Head 1, Head 2, Head 3,这与标准Transformer的多头注意力机制完全一致,目的是让模型并行关注不同子空间的信息。
    注意力权重与加权求和: 图中的 "Attention Weights" 和最后的聚合操作(∑符号),对应标准Transformer中计算出的注意力分数以及对Value的加权求和过程。这是注意力机制最核心的"信息筛选与整合"步骤。
  2. "变形"的部分(核心创新点)
    "可变形"的核心就在于对 K/V的访问方式 和 注意力权重的生成方式 进行了根本性改造。
    从"全局计算"到"局部动态采样":
    标准Transformer: 对于每一个查询点Q_i,需要与特征图上所有位置的K_j计算点积相似度,得到一个全局的注意力权重分布。这需要与N(序列长度或特征图位置数)个K进行计算,复杂度为O(N^2)。
    Deformable Transformer: 它废弃了全局计算。对于每一个查询点Q_i,它不直接与任何K_j计算。取而代之的是,Q_i通过一个线性层预测出一组采样偏移量。图中用 "Sampling Offsets" 明确标出,例如(Δp1, Δp2, Δp3, Δp4)。这些偏移量告诉模型:"请到Input Feature Map上,以Q_i自身位置为参考,去(p_i+Δp1), (p_i+Δp2)...这几个特定的、稀疏的位置进行采样。"
    对应关系: 这个过程取代了标准Transformer中 Q·K^T的矩阵乘法计算。Q不再用于计算相似度,而是用于预测关注点。
    从"相似度权重"到"内容权重":
    标准Transformer: 注意力权重由Q和K的内容相似度动态决定(Softmax(QK^T/√d))。
    Deformable Transformer: 注意力权重 "Attention Weights" 同样由查询Q通过一个独立的线性层直接预测得到(图中Q经过另一个Linear和Softmax得到A1, A2, A3, A4)。这些权重与采样位置一一对应,表示从各个采样点获取的信息的重要性。权重的计算不再依赖于被采样点K的内容,而只依赖于查询Q自身。
    对应关系: 这取代了标准Transformer中通过Softmax计算权重的那一步。权重从"基于内容的相似度"变为"基于查询的预测重要性"。
    价值V的获取:
    标准Transformer: 使用完整的、原始的V矩阵。
    Deformable Transformer: 根据预测的采样偏移量,从Input Feature Map对应的V特征图上,双线性插值采样出对应位置的特征值(图中的Sampling步骤)。最终用于聚合的V',就是这个稀疏的、动态采样的特征集合。
    二、Q、K、V在数据流中的角色
    结合上图,我们可以清晰地追踪Q、K、V的完整数据流:
    输入:
    查询Q路径: "Query Feature" 作为注意力操作的发起者,其角色是主动的查询方。
    键值K/V路径: "Input Feature Map" 作为信息的来源,其角色是被查询的数据源。
    变换与预测:
    Q 经过两个独立的线性层,分别预测出 "Sampling Offsets" 和 "Attention Weights"。这是可变形注意力的核心驱动信号。
    K/V 共同从"Input Feature Map"经过一个线性层变换得到。这里的K在传统意义上"被隐式使用"------采样偏移所指向的位置,可以认为是Q认为最相关的K的位置,但K的值本身不参与权重计算。
    执行注意力:
    根据Q预测的Offsets,到V特征图的对应位置进行采样,得到一组稀疏的V_sample。
    根据Q预测的Weights,对V_sample进行加权求和。
    这个过程完全避免了Q和K的显式大规模矩阵乘法。
    总结
    Deformable Transformer 是标准Transformer注意力模块的一个高效、稀疏的"变形"版本:
    它保留了: Q, K, V的基本输入框架、多头机制、注意力权重与加权求和的核心思想。
    它变形了:
    Q的角色: 从"计算与K的相似度"变为"预测关注位置和该位置的权重"。
    K的角色: 从"与Q进行全局交互以确定权重"变为"其位置信息被Q预测的偏移量所隐含指向"。K的内容不直接参与计算。
    V的获取: 从使用全局的V变为使用根据Q预测的偏移量,从V上动态、稀疏采样得到的局部特征。
    计算模式: 从O(N^2)的全局密集交互,变为O(N*k)的局部稀疏采样(k为固定的、很少的采样点个数,如4或8)。
    这种"变形"使其特别适合处理高分辨率的图像、视频等数据,在保持注意力机制动态聚合能力的同時,极大地降低了计算开销,并更关注于与内容最相关的局部区域。
  • 简短对比

通过特征词嵌入层和位置编码之后

假设我们有一个2×2的特征图,每个位置是一个2维特征向量。我们关注位置(1,1)的查询计算过程。

输入特征矩阵 X(形状:4×2,展平后):

X = [[x₁₁¹, x₁₁²], # 位置(1,1)

x₁₂¹, x₁₂²\], # 位置(1,2) \[x₂₁¹, x₂₁²\], # 位置(2,1) \[x₂₂¹, x₂₂²\]\] # 位置(2,2) 其中上标是特征维度,下标是位置坐标。 二、传统Transformer全流程 1. 生成Q、K、V矩阵 通过三个线性变换: Q = X · W_q (4×2) · (2×d) = 4×d K = X · W_k (4×2) · (2×d) = 4×d V = X · W_v (4×2) · (2×d) = 4×d 设d=3,则: Q = \[\[q₁₁¹, q₁₁², q₁₁³\], \[q₁₂¹, q₁₂², q₁₂³\], \[q₂₁¹, q₂₁², q₂₁³\], \[q₂₂¹, q₂₂², q₂₂³\]

K、V结构类似。
2. 计算注意力权重(以位置(1,1)的查询q₁₁为例)
公式:Attention(Q,K,V) = softmax(QKᵀ/√d) V
步骤1:计算q₁₁与所有k的相似度
s₁₁,₁₁ = q₁₁ · k₁₁ᵀ = Σᵢ q₁₁ⁱ × k₁₁ⁱ
s₁₁,₁₂ = q₁₁ · k₁₂ᵀ
s₁₁,₂₁ = q₁₁ · k₂₁ᵀ
s₁₁,₂₂ = q₁₁ · k₂₂ᵀ
得到相似度向量:s₁₁ = [s₁₁,₁₁, s₁₁,₁₂, s₁₁,₂₁, s₁₁,₂₂]
步骤2:Softmax归一化
α₁₁ = softmax(s₁₁/√3) = [α₁₁,₁₁, α₁₁,₁₂, α₁₁,₂₁, α₁₁,₂₂]
其中 α₁₁,ᵢⱼ = exp(s₁₁,ᵢⱼ/√3) / Σₘₙ exp(s₁₁,ₘₙ/√3)
3. 加权求和得到输出
o₁₁ = α₁₁,₁₁ × v₁₁ + α₁₁,₁₂ × v₁₂ + α₁₁,₂₁ × v₂₁ + α₁₁,₂₂ × v₂₂
这是一个3维向量(因为v是3维)。
4. 矩阵形式(所有位置一起计算)
注意力权重矩阵 A = softmax(QKᵀ/√d) # 4×4
输出矩阵 O = A · V # 4×3
每个位置都需要与所有位置计算相似度,复杂度O(N²)=O(16)。

输入特征矩阵 X(形状:4×2,展平后):

X = [[x₁₁¹, x₁₁²], # 位置(1,1)

x₁₂¹, x₁₂²\], # 位置(1,2) \[x₂₁¹, x₂₁²\], # 位置(2,1) \[x₂₂¹, x₂₂²\]\] # 位置(2,2) 其中上标是特征维度,下标是位置坐标。 二、传统Transformer全流程 1. 生成Q、K、V矩阵 通过三个线性变换: Q = X · W_q (4×2) · (2×d) = 4×d K = X · W_k (4×2) · (2×d) = 4×d V = X · W_v (4×2) · (2×d) = 4×d 设d=3,则: Q = \[\[q₁₁¹, q₁₁², q₁₁³\], \[q₁₂¹, q₁₂², q₁₂³\], \[q₂₁¹, q₂₁², q₂₁³\], \[q₂₂¹, q₂₂², q₂₂³\]

K、V结构类似。
2. 计算注意力权重(以位置(1,1)的查询q₁₁为例)
公式:Attention(Q,K,V) = softmax(QKᵀ/√d) V
步骤1:计算q₁₁与所有k的相似度
s₁₁,₁₁ = q₁₁ · k₁₁ᵀ = Σᵢ q₁₁ⁱ × k₁₁ⁱ
s₁₁,₁₂ = q₁₁ · k₁₂ᵀ
s₁₁,₂₁ = q₁₁ · k₂₁ᵀ
s₁₁,₂₂ = q₁₁ · k₂₂ᵀ
得到相似度向量:s₁₁ = [s₁₁,₁₁, s₁₁,₁₂, s₁₁,₂₁, s₁₁,₂₂]
步骤2:Softmax归一化
α₁₁ = softmax(s₁₁/√3) = [α₁₁,₁₁, α₁₁,₁₂, α₁₁,₂₁, α₁₁,₂₂]
其中 α₁₁,ᵢⱼ = exp(s₁₁,ᵢⱼ/√3) / Σₘₙ exp(s₁₁,ₘₙ/√3)
3. 加权求和得到输出
o₁₁ = α₁₁,₁₁ × v₁₁ + α₁₁,₁₂ × v₁₂ + α₁₁,₂₁ × v₂₁ + α₁₁,₂₂ × v₂₂
这是一个3维向量(因为v是3维)。
4. 矩阵形式(所有位置一起计算)
注意力权重矩阵 A = softmax(QKᵀ/√d) # 4×4
输出矩阵 O = A · V # 4×3
每个位置都需要与所有位置计算相似度,复杂度O(N²)=O(16)。
三、Deformable Transformer全流程(以位置(1,1)为例)
5. 生成Q、K、V矩阵(与传统相同)
Q = X · W_q # 4×3
K = X · W_k # 4×3
V = X · W_v # 4×3
6. 预测采样偏移和注意力权重(关键区别!)
设采样点数量k=4(通常k远小于总位置数N)。
从q₁₁预测:
采样偏移量:Δp = [Δp₁, Δp₂, Δp₃, Δp₄],每个Δpᵢ是二维坐标偏移
注意力权重:α' = [α'₁, α'₂, α'₃, α'₄],通过softmax归一化
公式:

Δp, α'\] = Linear(q₁₁) # q₁₁是3维,输出是4×2 + 4 = 12维 具体: Δp₁ = (Δx₁, Δy₁) # 如(0.1, -0.2) Δp₂ = (Δx₂, Δy₂) # 如(-0.3, 0.4) Δp₃ = (Δx₃, Δy₃) # 如(0.5, 0.1) Δp₄ = (Δx₄, Δy₄) # 如(-0.2, -0.3) α' = softmax(\[w₁, w₂, w₃, w₄\]) # wᵢ是标量 3. 计算采样位置 p₁ = (1,1) + Δp₁ = (1.1, 0.8) p₂ = (1,1) + Δp₂ = (0.7, 1.4) p₃ = (1,1) + Δp₃ = (1.5, 1.1) p₄ = (1,1) + Δp₄ = (0.8, 0.7) 4. 从V特征图采样值(双线性插值) 对于每个采样位置pᵢ,从V矩阵中插值得到特征向量: 双线性插值公式: v_sampledᵢ = Σ_{j∈N(pᵢ)} w_j × V(p_j) 其中N(pᵢ)是pᵢ周围的四个整数网格位置,w_j是插值权重。 例如对于p₁=(1.1, 0.8): 周围网格:(1,1), (1,2), (2,1), (2,2) 权重:根据距离计算 插值结果:ṽ₁ = w₁₁×v₁₁ + w₁₂×v₁₂ + w₂₁×v₂₁ + w₂₂×v₂₂ 得到4个采样值:\[ṽ₁, ṽ₂, ṽ₃, ṽ₄\],每个是3维向量。 5. 加权求和得到输出 o₁₁ = α'₁ × ṽ₁ + α'₂ × ṽ₂ + α'₃ × ṽ₃ + α'₄ × ṽ₄ 6. 矩阵形式示意 对于所有N个查询位置,Deformable Attention可表示为: O_i = Σ_{m=1}\^{M} W_m \[ Σ_{k=1}\^{K} A_{mik} · V(p_i + Δp_{mik})

其中:

M:多头数量(图中Head 1,2,3)

K:采样点数(图中k=4)

A_{mik}:第m个头、第i个查询、第k个采样点的注意力权重

Δp_{mik}:对应的偏移量

V(·):通过双线性插值采样

BEV former

  • 问题 这个encoder 的 B的特征指代的是什么,是怎么得出来的
    核心思想:用"查询"构建BEV地图
    传统方法(如LSS)通过估计每个像素的深度来"提升"图像特征到3D空间,从而生成BEV特征。而BEVFormer采用了一种更直接、更像Transformer的思路:
    它定义了一组可学习的参数,称为 BEV Queries。每个Query都对应BEV网格(俯视图)中的一个特定位置(网格单元)。编码器的核心任务,就是让这些Query通过注意力机制,去环视的多视角图像中"收集"和"融合"与它们位置相关的视觉特征。
    关键模块解析与B特征的生成
    整个编码器的工作流程是一个循环的、时空融合的过程。图中用蓝色和灰色清晰地展示了这一信息流,而 B 特征正是这个信息流的产物和载体。
  1. B特征指代什么?
    B 特征就是BEV特征(Bird's-eye-view Feature)本身。 它是一个三维的张量,可以理解为从正上方俯视场景的、一个稠密的特征地图。它的结构是 (H, W, C):
    H和 W定义了BEV网格的空间分辨率(例如 200x200 个格子)。
    C是每个格子对应的特征通道数(例如256维)。
    这个特征地图中的每一个"格子"(即一个特征向量),都对应现实世界地面上的一个固定大小的区域(例如0.5m x 0.5m),其中编码了该区域内的物体、道路结构等信息。
  2. B特征是如何得出的?(核心流程)
    B特征的生成不是一步到位的,而是通过图中所示的两个核心注意力模块迭代优化而来。其输入是多视角图像和历史BEV特征,输出是当前帧增强后的BEV特征。
    我们可以将流程分解为两个阶段,这两个阶段是交替或循环进行的:
    第一阶段:空间交叉注意力 ------ 从图像中"看"
    输入:
    BEV Queries (Q_bev): 可学习的参数,每个query关联一个BEV网格位置。
    多视角图像特征 (F_img): 通过CNN主干网络提取的多摄像头图像特征。
    过程: 对于每一个BEV Query(对应BEV平面上的一个点(x, y)),模型会将其投影到多个相机的图像平面上,然后通过可变形注意力(Deformable Attention) 机制,只在这个投影点附近采样少数几个关键的图像特征点,而不是处理全局图像。这正是我们之前讨论的Deformable Transformer的精髓应用。
    输出: 经过注意力计算后,每个BEV Query都融合了来自多视角的、与它位置最相关的视觉信息。所有BEV Queries更新后的特征,就形成了当前帧的、初步的BEV特征图(我们可称之为 B_curr_spatial)。 这个过程实现了从"图像视角"到"鸟瞰视角"的特征转换。
    第二阶段:时序自注意力 ------ 从历史中"学"
    输入:
    BEV Queries (Q_bev): 同上的查询。
    历史BEV特征 (B_hist): 上一时刻(或前几帧)生成的BEV特征。这是实现时序融合的关键。
    过程: 对于当前帧的每个BEV Query,系统会根据自车运动(Ego-motion)将其对应的3D位置对齐到历史帧的坐标系下。然后,再次利用可变形注意力机制,从历史BEV特征 B_hist的对应位置附近,采样历史特征。 (可能 Ai写反了 是把历史对齐)
    输出: 每个BEV Query现在不仅包含了当前帧的空间视觉信息,还融入了历史帧的上下文信息(例如被短暂遮挡的物体、物体的运动趋势)。此时,所有BEV Queries最终输出的特征,就是当前帧最强的、融合了时空信息的BEV特征 B_curr_final。
    循环: 这个 B_curr_final会被保存下来,作为下一帧处理时的 B_hist(历史BEV特征),从而实现帧与帧之间的信息传递和融合。
  • 问题 解释一下 空间交叉注意力 和
    时序自注意力

每个BEV Query对应BEV平面上的一个固定位置(网格单元):

假设BEV网格是200×200,就有40,000个Query

每个Query是一个256维的向量(如果hidden_dim=256)

这些Query在训练过程中学习到:

每个BEV位置应该关注图像中的哪些区域

如何融合多视角信息

如何结合时序信息

  • 问题 整理整体流程

    BEVFormer的完整流程、特别是两种注意力机制的细节,整理如下。

    整体流程概览

    BEVFormer是一个基于可学习查询(BEV Queries)的编码器,旨在从多视角图像和上一帧的BEV特征,构建当前帧强大的时空BEV特征表示。其核心是一个循环处理过程,如下图所示:

    flowchart TD

    A[多视角图像特征] --> B[空间交叉注意力模块

    Spatial Cross-Attention]

    C[可学习BEV查询

    BEV Queries] --> B

    B --> D[融合当前帧

    视觉信息的BEV特征]

    E[历史BEV特征 Bₜ₋₁] --> F[时序自注意力模块

    Temporal Self-Attention]

    D --> F

    F --> G[最终融合时空信息的

    BEV特征 Bₜ]

    G --> H{多任务预测头}

    H --> I[3D目标检测]

    H --> J[地图语义分割]

    G --> E

    一、模型输入与核心组件

    BEV Queries (Q)

    本质:一组可学习的模型参数,形状为 (H×W, C),其中 H和 W是BEV网格的空间分辨率,C是特征维度。

    作用:每个查询对应BEV网格中的一个固定位置,其任务是从输入数据中"收集"该位置的相关信息。

    流程:在模型初始化时随机生成,通过训练优化,最终每个查询学会关注其对应BEV位置相关的图像和时序特征。

    输入特征

    多视角图像特征:{F_t^i},来自多个相机的CNN骨干网络。

    历史BEV特征:B_{t-1},上一时刻的BEV特征图,通过自车运动补偿对齐到当前坐标系。

    二、时序自注意力

    目的:将上一时刻的BEV信息(B_{t-1})融合到当前帧的查询中,以引入时间连续性,帮助处理遮挡和预测运动。

    输入:

    查询 Q:当前帧的BEV Queries。

    键/值 K/V:历史BEV特征 B_{t-1}。

    流程:

    坐标对齐:利用自车运动(Ego-motion)参数,将历史BEV特征 B_{t-1}的空间坐标对齐到当前时刻 t。

    预测采样点:对于每个BEV查询 Q_p(对应位置 p=(x,y)),将其与对齐后的历史特征 B_{t-1}拼接,然后通过一个线性层预测一组采样偏移​ Δp和对应的注意力权重​ A。公式中体现为"采样偏移Δp由Q和B_{t-1} concatenate之后,每个grid单独预测"。

    特征采样与聚合:使用可变形注意力(Deformable Attention)机制,根据预测的偏移 Δp,从历史特征 B_{t-1}的对应位置附近进行稀疏采样,最后用预测的权重 A对采样到的特征进行加权求和。

    公式:

    TSA(Q_p, {B_{t-1}}) = Σ_{V ∈ {Q, B_{t-1}}} DeformAttn(Q_p, p, V)

    此公式表示,时序自注意力的输出是查询自身与历史特征在可变形注意力机制下聚合的结果。

    三、空间交叉注意力

    目的:将多视角的2D图像特征"转换"并融合到BEV空间,为每个BEV位置提供视觉依据。

    输入:

    查询 Q:当前帧的BEV Queries。

    键/值 K/V:多视角图像特征 {F_t^i}。

    流程:

    生成3D参考点:对于每个BEV查询 Q_p(对应地面点 p=(x,y)),在高度方向 Z轴上采样 N_{ref}个3D点,得到一组3D参考点。

    投影到图像:利用相机参数,将这些3D参考点投影到各个相机的图像平面上。只有投影到图像有效区域内的点才会被考虑。

    多视角可变形注意力:在每个相关相机视图 i中,以投影点为中心,由查询 Q_p预测一组2D采样偏移 Δp。然后,通过可变形注意力从图像特征 F_t^i中采样特征,并进行加权求和。最终,对所有相关相机视图的结果取平均。

    公式:

    SCA(Q, F_t) = (1/|V_{hit}|) Σ_{i ∈ V_{hit}} Σ_{j=1}^{N_{ref}} DeformAttn(Q_p, p(i,j), F_t^i)

    其中,V_{hit}是能"看到"该3D参考点的相机集合,p(i,j)是投影到相机 i的图像坐标。

    四、多任务预测头

    生成的统一BEV特征 B_t被送入不同的任务头进行解码:

    3D目标检测:通常使用类似DETR的查询机制(Object Queries)。检测头输出边界框参数:中心 (x, y, z)、尺寸 (l, w, h)、朝向 (cosθ, sinθ)和速度 (v_x, v_y)。

    地图语义分割:将BEV特征图直接输入一个分割网络(如Panoptic SegFormer),输出类似于车道线、道路区域等静态元素的像素级分割图。

    五、核心公式解析

    图中给出的通用可变形注意力公式:

    MSDeformAttn(z_q, p_q, {xl}_{l=1}L) = Σ_{m=1}^{M} W_m [ Σ_{l=1}^{L} A_{mlq} · W_m' · x^l(φ_l(p_q) + Δp_{mlq}) ]

    z_q: 查询特征(如BEV Query)。

    p_q: 查询的参考点坐标(如BEV的 (x,y))。

    {x^l}: 多尺度输入特征(如多相机或多尺度BEV特征)。

    M: 注意力头的数量。

    L: 特征层的数量。

    A_{mlq}: 第 m个头、第 q个查询、在第 l层特征上的注意力权重。

    Δp_{mlq}: 预测的采样偏移。

    φ_l(p_q): 将参考点归一化到第 l层特征图坐标系的函数。

    W_m, W_m': 可学习的权重矩阵。

    架构优势总结

    统一表征:生成单一的BEV特征图支持多种下游感知任务。

    时序融合:显式融合历史信息,提升对运动物体的感知和遮挡处理能力。

    高效稀疏注意力:使用可变形注意力,只关注少量关键采样点,避免了全局计算,效率高。

    几何感知:空间交叉注意力通过3D投影建立2D图像与BEV空间的关联,引入了几何先验。

Sparse BEV 特征 Encoder

  • 没有网格的概念

Encoder petr

扩展 模型性能标准

自动驾驶领域几种基于视觉的3D物体检测模型的性能。使用的评测数据集通常是nuScenes,这是一个权威的自动驾驶公开数据集。

mAP

全称:mean Average Precision,即平均精度均值。

含义:这是衡量检测准确度的核心指标。它综合评估了模型能检测到多少物体(召回率)以及检测得有多准(精确率)。

计算方式:在nuScenes中,mAP的计算基于2D平面(鸟瞰图)上检测框与真实框的中心距离阈值(通常为2米),而非传统的交并比。它会计算10个不同距离阈值下的平均精度,然后对所有物体类别(如汽车、行人、卡车等)求平均值。

解读:数值越高越好。表格中,BEVDet-Swin-T的 mAP 为 0.349,意味着它在检测物体的"有无"和"位置"方面,综合表现最好。

NDS

全称:nuScenes Detection Score,即nuScenes检测分数。

含义:这是nuScenes数据集独有的综合性能指标,是比赛排名的最终依据。它不仅考虑检测是否准确,还考虑检测结果的其他关键属性。

构成:NDS 是 mAP 和其他五个度量指标的加权平均:

mATE:平均平移误差(位置有多准)

mASE:平均尺度误差(大小有多准)

mAOE:平均方向误差(朝向有多准)

mAVE:平均速度误差(速度有多准)

mAAE:平均属性误差(如车辆是否在闪灯)

解读:数值越高越好,最高为1。NDS 更全面地反映了模型在真实自动驾驶场景下的实用性。例如,PETR-Swin-T的 NDS 为 0.431,是表中综合性能最强的模型。

总结一下:mAP主要告诉你"模型找到了多少东西",而 NDS则进一步告诉你"模型对这些东西的描述(位置、大小、朝向、速度)有多准"。两者结合,才能全面评价一个3D检测模型。

二、关于"推力模型每秒处理速度"(即推理速度)

这是一个非常实际且关键的问题,但图片中的表格并未提供此项数据。模型的推理速度(常以 FPS - Frames Per Second 衡量)与精度(mAP/NDS)通常是需要权衡的。

"正常应该是多少"没有绝对标准,它完全取决于部署的硬件平台和具体的应用需求。

影响因素:

硬件平台:在 NVIDIA Tesla V100 服务器GPU、Jetson Orin 车载计算平台、Orin-X 车规级芯片或地平线征程5芯片上运行,速度会有数量级的差异。

输入图像尺寸:表格中已列出,1056x384的输入显然比 1408x512处理起来更快。BEVDet-Swin-T和 PETR-Swin-T虽然精度高,但更大的图像尺寸会拖慢速度。

模型结构本身:PETR类的方法通常比复杂BEVDet(需要显式生成BEV特征图)在推理上更有优势。

优化程度:是否使用了TensorRT、FP16/INT8量化、模型剪枝等加速技术。

大致的范围参考:

在高端服务器GPU上,这类模型经过优化后,速度可能在 2 ~ 10 FPS​ 左右。追求高精度的大模型(如表中Swin-T主干)可能偏向下限,而轻量化模型可能接近或超过上限。

在车载嵌入式平台上,要达到可用的实时性(如 ≥ 10 FPS),需要对模型进行大幅裁剪、量化和特定硬件优化。最终部署的模型通常是精度和速度妥协后的专用版本,其性能(mAP/NDS)通常会低于表格中报告的、在服务器上测得的"标杆"精度。

对表格中模型的推测:

BEVDet-ResNet50和 PETR-ResNet50是相对基础的版本,在速度上会有优势,是平衡精度与速度的常见选择。

BEVDet-Swin-T和 PETR-Swin-T使用了更强大的视觉主干网络(Swin Transformer)和更大的图像输入,这带来了显著的精度提升,但必然会以牺牲推理速度为代价。

结论:在选择模型时,必须根据实际可用的硬件算力和应用所需的实时性要求,在 "精度"(mAP/NDS)​ 和 "速度"(FPS)​ 之间做出取舍。表格提供了宝贵的精度参考,但具体的推理速度需要查阅对应论文的实测数据或在目标硬件上自行部署测试。

  • 通过加入像素的位置编码 提升了检测的性能

与之前讨论的需要构建密集鸟瞰图特征的BEVFormer不同,PETR开创了一条"在2D特征中注入3D空间信息"来实现3D检测的新路径。

其核心流程和关键创新点如下:

一、核心思路:3D位置感知的2D特征

PETR认为,无需显式地构建一个完整的密集BEV特征图。相反,它通过3D位置编码器,为每个2D图像像素特征赋予一个精确的3D空间坐标信息。这样一来,所有的2D特征都"知道"自己来自于现实3D世界中的哪个位置。

二、核心组件详解

3D 位置编码器

目的:为2D图像特征生成对应的3D坐标信息。

过程:

利用相机的内参和外参,将图像上每个像素点反投影到一组预设的3D深度平面上,为每个像素生成一系列3D参考点坐标。

通过一个多层感知机网络,将这些3D坐标转换为高维的3D位置编码。

结果:2D图像特征与3D位置编码相加,融合成"3D位置感知的图像特征"。这使得后续的检测头能够直接从这些特征中理解3D几何关系。

查询生成器

目的:生成一组用于检测物体的目标查询。

过程:在3D空间(通常是感兴趣的前方路面区域)中,均匀地、稀疏地采样一组3D点。

结果:每个采样点及其特征将作为一个目标查询。每个查询天然地携带了一个预设的3D空间位置(参考点),其任务是去"询问"特征图中这个位置附近是否存在一个物体及其属性。

检测流程

这些携带3D参考点的目标查询,通过可变形交叉注意力机制,与前面生成的"3D位置感知的图像特征"进行交互。

由于特征本身已包含3D信息,注意力机制能高效地让查询聚集到与其3D位置相关的图像特征上。

最终,解码器直接输出基于这些查询的3D边界框参数(中心、尺寸、朝向等)。

PETR v2

核心工作流程和关键创新:

一、核心流程:从图像到多任务输出

输入:

当前帧(t-frame)和多帧历史(t-n frame)的多视角图像。

可选的3D点云(用于增强几何感知,但PETRv2作为纯视觉方法,点云输入非必需)。

特征与位置编码生成:

图像通过CNN主干网络提取2D图像特征。

最关键的一步:特征引导的位置编码器。它将2D特征、相机参数以及3D空间坐标(由图像像素反投影得到)融合,生成3D位置感知的特征。这个过程不仅编码了空间几何信息,还通过融合历史帧特征,实现了时序信息融合,使模型能够感知动态。

多任务查询解码:

模型定义了三种不同类型的可学习查询向量,分别负责不同任务:

车道查询:专门用于检测车道线。

分割查询:用于可行驶区域等场景的语义分割。

检测查询:用于预测车辆、行人等3D物体的边界框。

这些查询在Transformer解码器中,与前面生成的、富含时空几何信息的特征进行交互(通过交叉注意力机制)。每种查询只关注与自身任务最相关的特征。

输出:

解码后的查询被送入各自轻量级的任务头,最终同时输出:

BEV地图(如车道线、可行驶区域的分割图)。

3D边界框(物体的位置、尺寸、朝向和类别)。

二、关键创新与优势

"稀疏BEV特征"与"特征引导的位置编码":

与传统方法(如BEVFormer)先构建密集的BEV特征图不同,PETRv2始终保持在图像特征层面进行操作。它通过位置编码将3D空间和时序信息"注入"到2D特征中,形成一组稀疏但富含3D信息的特征集合。这避免了构建密集BEV特征的计算开销,效率更高。

统一的时序融合:

时序信息(历史帧特征)被集成在位置编码阶段一并生成。这意味着模型学习到的是一个统一的、时空联合的特征表示,而非先处理空间再融合时间,从而更自然、更高效地建模运动。

优雅的多任务框架:

通过设计车道、分割、检测三组独立的查询,模型在一个前向传播过程中即可完成所有核心感知任务。这些查询在解码器中共享相同的时空特征,但通过学习关注不同的模式,实现了任务间的高效协同与解耦。

扩展 激活函数复习


常用激活函数优缺点总结

  1. Sigmoid
    优点:
    输出范围(0,1),可解释为概率
    平滑梯度,避免跳跃输出
    缺点:
    梯度消失问题严重(尤其在饱和区)
    输出不是零中心化的
    计算涉及指数运算,计算成本较高
  2. Tanh
    优点:
    输出范围(-1,1),零中心化
    比Sigmoid更优的梯度特性
    缺点:
    仍存在梯度消失问题
    计算涉及指数运算
  3. ReLU
    优点:
    计算简单,收敛速度快
    有效缓解梯度消失问题
    在许多实际应用中表现优秀
    缺点:
    死亡ReLU问题(负区梯度为0)
    输出不是零中心化的
  4. Leaky ReLU
    优点:
    解决死亡ReLU问题
    保持ReLU的大部分优点
    缺点:
    α参数需要手动设定
    在某些情况下不稳定
  5. ELU
    优点:
    解决死亡ReLU问题
    输出接近零均值,加速学习
    在负值区域有非零渐进值
    缺点:
    计算复杂度高于ReLU
    参数α需要调整
  6. Softmax
    优点:
    将输出转化为概率分布
    适用于多分类问题
    缺点:
    数值稳定性问题(需使用数值稳定版本)
    计算复杂度较高
  7. Swish
    优点:
    平滑且非单调
    在深层网络中表现优于ReLU
    自门控机制
    缺点:
    计算复杂度高于ReLU
    新兴激活函数,理论分析尚不完善
  8. GELU
    优点:
    在NLP任务中表现优异
    平滑近似ReLU
    结合了Dropout、zoneout等正则化思想
    缺点:
    计算复杂度较高
    主要在Transformer等模型中验证效果

stream PERT

  • 时序的目标级别特征融合

  • 问题 : sparse bev 没有栅格之后 采样的时候采样大小是怎么样的 输出的时候怎么知道那些采样是同一个目标
    回答不一定正确:

一、采样大小是如何确定的?

这里的"采样"实际上指的是模型初始化并维护的一组稀疏的"目标查询"。其大小(即数量)的确定遵循以下逻辑:

预设的超参数:查询的数量 N是模型设计时预设的一个固定值(例如100、200、900等),它是一个超参数,代表了模型单帧最多能够检测的目标数量上限。这个数值通常根据数据集中常见场景的最大目标数量(如繁忙路口的所有车辆、行人等)来设定。

查询的本质:每个查询是一个可学习的高维向量。在训练开始时,这些向量被随机初始化。通过在大规模数据上训练,模型学会让每个查询"专精"于关注场景中某个特定位置或某种特定类型的物体。

"采样"过程:在处理一帧图像时,这 N个固定的查询会全部被使用。它们通过Transformer解码器中的交叉注意力机制,与图像特征进行交互,从而"采集"与自身最相关的视觉信息。这个过程并非在空间上进行离散点采样,而是让一组固定的、有语义的查询向量去"注意"图像中相应的区域。

简单来说:采样大小 = 预设的查询数量,这个数量是固定的,不随图像分辨率或场景变化。

二、如何知道哪些采样属于同一个目标?

在稀疏BEV范式中,"一个查询对应一个潜在目标"​ 是基本设计原则。因此,目标关联的问题转化为 "查询身份的跨帧一致性"​ 问题。

单帧检测:在单帧推理中,每个查询经过解码后,会独立输出一个预测结果(包括:是否存在物体、3D边界框、类别等)。不同的查询天然代表不同的检测候选框,因此不需要在单帧内对采样点进行分组。模型通过自注意力和交叉注意力机制,隐式地让不同查询关注场景的不同部分,避免重复检测。

跨帧跟踪(时序关联):这是知道"同一目标"的关键。以 StreamPETR​ 为代表的时序稀疏BEV方法,其核心创新正是解决了这个问题。

查询传播:模型将上一帧(t-1时刻)的 N个查询及其状态(位置、速度、特征等)保留下来。利用估计的自车运动和目标运动,将这些查询预测传播到当前帧(t时刻)的坐标系下,作为当前帧查询的初始化。

身份保持:在这个过程中,每个查询的ID是保持不变的。第 i个查询在上一帧代表某个目标,传播到当前帧后,它依然代表对同一个目标的跟踪状态。然后,它再与当前帧图像特征交互,更新目标的状态。

新生与消亡:模型会额外引入少量新的"新生查询"来检测新出现的物体,并对长期无匹配的查询进行清除。通过这种机制,稀疏查询集实现了目标的检测、跟踪、管理一体化。

总结:

采样大小:由预设的、固定数量的目标查询决定。

目标关联:在单帧内,一个查询对应一个检测结果,无需关联。在跨帧时序中,通过查询的持久化与传播,保持查询ID的连续性,从而实现将同一目标在不同帧中关联起来。这是稀疏BEV方法实现高效端到端检测与跟踪的基石。

  • 问题 加例子说明 稀疏注意力机制
    稀疏BEV检测模型的具体例子,来讲解交叉注意力机制是如何工作的。
    核心思想
    交叉注意力机制的本质是:让一组"查询"向量,主动去"询问"另一组"源"向量,并根据"源"向量的内容,有选择地提取和聚合信息,最终更新"查询"自身。
    关键角色(以PETR/StreamPETR为例)
    查询:一组可学习的向量,代表模型想要预测的目标假设(例如,100个潜在的3D物体框)。每个查询向量都包含了对一个物体位置、大小、类别等属性的初始猜测或编码。
    键 和 值:它们都来自同一个"源"------经过CNN提取的多视角图像特征。这些特征包含了丰富的视觉信息(边缘、纹理、语义)。
    键:用于与查询计算相关性分数(这个图像区域和我的查询相关吗?)。
    值:是实际承载的信息内容,将被加权聚合后传递给查询。
    工作步骤(举例说明)
    假设我们有 1个查询(代表模型正在寻找一辆车),以及从4个相机视角提取的简化图像特征(每个视角特征简化为3个位置)。
    步骤1:计算相关性(查询问:"哪里有我感兴趣的东西?")
    查询向量 Q通过一个线性层,生成一个"问题"向量。
    图像特征(作为键 K)也通过一个线性层,生成每个图像位置的"关键词"向量。
    计算 Q与所有 K的点积,得到一个相关性分数列表。分数越高,代表该图像位置与当前查询(找车)越相关。
    例如,分数可能是:[前视相机-位置2: 8.5, 右前视相机-位置1: 7.2, 左视相机-位置3: 0.5, ...]。这表明查询与"前视相机中位置2"的特征最相关(可能那里正好有一辆车)。
    步骤2:加权聚合信息(查询说:"把最重要的信息给我")
    将上一步的相关性分数通过Softmax函数归一化为权重(总和为1),例如:[0.7, 0.25, 0.05, ...]。
    图像特征(作为值 V)通过另一个线性层,生成"信息内容"向量。
    用这些权重对所有的 V进行加权求和,得到一个聚合后的特征向量。
    这个新向量 = 0.7 * (前视相机-位置2的信息) + 0.25 * (右前视相机-位置1的信息) + ...
    它现在融合了所有图像中与"车"最相关的视觉信息。
    步骤3:更新查询(查询整合新信息,完善自己的认知)
    将聚合后的特征向量传递给查询。
    查询向量结合这个新信息,更新自己。现在,这个查询向量不仅包含初始的物体假设,还注入了来自真实图像的具体视觉证据,从而能更准确地预测这个物体的3D框和类别。
    在模型中的实际运作
    在Transformer解码器中,这个过程是并行且迭代发生的:
    并行:所有N个查询(如100个)同时与所有图像特征进行交叉注意力计算,高效地各自收集所需信息。
    迭代:上述步骤会重复多次(例如6层解码器)。在第一层,查询可能只学到粗糙的位置信息;经过多层迭代,查询能逐步细化,最终精准定位物体并判断属性。
    总结来说:交叉注意力机制就像一个可学习的、动态的信息检索系统。查询是"问题",键决定"去哪里找答案",值提供"答案内容"。通过这种方式,稀疏的目标查询能够从密集的图像特征中,精准地提取出与自身最相关的信息,从而完成3D感知任务,而无需构建稠密的BEV特征图。

、Memory Queue(记忆队列)

这是一个先进先出的历史信息缓存区,用于存储之前帧中被模型"记住"的物体。

储存内容:每个进入队列的"记忆单元"不仅包含物体的分类、边界框,更重要的是其特征嵌入,这编码了物体的外观、姿态等丰富信息。

运作机制:在每一帧处理完后,模型不会将检测到的所有物体都存入记忆。相反,它只会选择分类置信度最高的前K个物体存入队列。这确保了队列中保存的是最可靠、最关键的物体信息,避免了错误累积和内存浪费。

作用:这个队列构成了模型的"短期记忆",为当前帧的感知提供了宝贵的上下文和历史线索,尤其有助于处理遮挡、外观模糊等困难情况。

二、Propagation Transformer(传播变换器)

这是整个架构的核心引擎,负责将"记忆"中的历史物体信息,智能地、动态地"传播"并融合到当前帧的处理中。其核心创新在于解决了历史特征对齐问题。

Motion-aware Layer Norm:

问题:由于自车和目标物体都在运动,上一帧物体的特征(如位置编码、外观特征)如果直接用于当前帧,会因为坐标系的错位而失效。

解决方案:MLN模块利用已知的自车运动信息(如IMU、轮速计数据)来动态地调整Layer Normalization的参数。它相当于对历史物体的特征进行了一次"运动校准",将其几何和外观特征对齐到当前帧的坐标系和视角下,使其变得"可用"。

Transformer 融合:

查询:当前帧待处理的物体查询。

键与值:来自经过MLN对齐后的Memory Queue中的历史物体特征。

交叉注意力机制:当前帧的物体查询会通过交叉注意力,主动去"询问"那些已经对齐好的历史特征。例如,一个当前帧中部分被遮挡的车辆查询,可以通过注意力机制,高权重地关联到记忆队列中上一帧同一辆车的清晰特征,从而"回忆起"它的完整信息,做出更准确的判断。

整体工作流程

输入:当前帧的图像/特征,以及来自上一时刻的 Memory Queue。

传播与对齐:Memory Queue 中的历史物体特征首先经过 Motion-aware Layer Norm,利用运动信息进行坐标和特征对齐。

信息融合:对齐后的历史特征与当前帧的物体查询一起,送入一个 Transformer 解码器。通过交叉注意力,当前查询有效地吸收、融合了来自历史的信息。

输出与更新:模型输出更稳定、更准确的当前帧3D检测结果。随后,将这些结果中置信度最高的Top-K个物体,更新到 Memory Queue 中,为下一帧处理做好准备。

相关推荐
辞旧 lekkk2 小时前
【Git】远程操作与标签管理
linux·git·学习·萌新
jrlong2 小时前
HelloAgents 进阶篇 task00,task01
笔记·学习
fengci.2 小时前
php反序列化(复习)(第五章)
android·开发语言·学习·php
一个平凡而乐于分享的小比特2 小时前
2026,自动驾驶“分水岭”:L3持证上岗,L4冲向无人区
人工智能·机器学习·自动驾驶
jifeidanda1232 小时前
图形学笔记——Curves(对应虎书15章)
笔记
ICscholar2 小时前
MoE负载均衡损失 & 梯度累加除法
人工智能·学习·算法
嵌入式小企鹅2 小时前
国产AI全栈迁移、涨价潮蔓延、RISC-V测评工具发布
人工智能·学习·开源·嵌入式·边缘计算·半导体·昇腾
zzh0812 小时前
keepalived高可用与负载均衡笔记
运维·笔记·负载均衡
雨浓YN2 小时前
WPF MVVM 模式(调Prism库)项目创建笔记 —— 包含C++/CLI OpenCV互操作
c++·笔记·wpf