专栏算法工具链BEV_IPM_TEMPORAL参考算法疑问

BEV_IPM_TEMPORAL参考算法疑问

chengang2026-03-18
14
2

你好,我看J5和J6的OE包都包含BEV_IPM_TEMPORAL算法,想知道模型的prev_points如何生成?是把BEV采样点从上一帧对齐到当前帧吗?

算法工具链
技术深度解析征程6
评论2
0/1000
  • 费小财
    Lv.5
    prev_points 的生成确实涉及将上一帧的 BEV 采样点对齐到当前帧坐标系下,这是实现时序融合(temporal fusion)的关键步骤。在地平线 J6 平台优化版 BEVFormer 中,这一过程通过 ego2global 坐标变换矩阵完成,而非直接使用公版中基于 CAN bus 初始化 reference 的方式(后者存在未对齐问题)。

    具体流程如下:

    1. 获取上一帧 BEV 特征(prev_bev)

      • 来自上一时刻 Encoder 的输出;

      • 其空间范围与当前帧 BEV Query 对应(如 50×50)。

    2. 坐标对齐(关键改动)

      • 利用当前帧和上一帧各自的 ego → global 坐标变换矩阵(来自定位/IMU/CAN 等);
      • 将当前帧 BEV 网格点(即 query 对应的 3D 空间位置)反向变换到上一帧的 ego 坐标系下
      • 再通过 grid_sample 对 prev_bev 进行采样,得到与当前 query 对齐的时序特征。

    3. 生成对齐后的 prev_points / prev_bev

      • 对齐后的 prev_bev 与当前 bev_query 拼接,作为 Temporal Self-Attention 的 value 输入;

      • reference points(ref_2d 或 ref_3d)在时序维度保持一致,确保 attention 计算有效。

    19小时前
    0
    0
  • Huanghui
    Lv.5
    prev_points 的作用主要是把上一帧缓存的 prev_feats 对齐到当前帧 BEV 坐标系下,再参与当前帧时序融合的。因为上一帧的 BEV feature 是在“上一帧 ego 坐标系”下生成的,如果不做对齐,直接拿来和当前帧融合,就会出现空间错位。

    计算逻辑可以理解成 3 步:

    1. 先根据bev_size和bev_grid生成当前帧固定的 BEV 网格点;

    2. 再根据当前帧和历史帧的 ego2global(current_ego -> global -> history_ego),计算“当前帧 ego 坐标系 -> 历史帧 ego 坐标系”的帧间位姿变换;
    3. 用这个变换把当前帧的 BEV 网格点映射到历史帧 BEV 特征图上的对应采样位置,就得到了 prev_points,然后将之输入模型用它去采样上一帧的 prev_feats,完成历史特征对齐。
    4. 计算prev_points的位姿信息定位系统,一般是 GPS/IMU/里程计/融合定位等,本质也是每帧一个 pose(

      车在全局坐标系中的位置、朝向),再转成同样的 4x4 矩阵给模型前处理使用

    16小时前
    0
    0