【MLP-BEV(10)】BEVPooling V1和BEVPooling V2的view_transformer,进行鱼眼图片实践

发布于:2025-03-30 ⋅ 阅读:(31) ⋅ 点赞:(0)

先说说 BEVPoolv1

BEVPoolv2 是 BEVPoolv1 的优化版本,其优化了图像特征到 BEV 特征的转换过程,实现了在计算和存储方面极大的降低。BEVPoolv1 (左)和 BEVPoolv2(右) 的示意图如下:

在这里插入图片描述

BEVPoolv1 的主要计算流程如下:

步骤1:3D点生成

利用get_geometry() 计算图像中每个像素对应的3D空间点在自车(Ego)坐标系下的坐标,即建立 2D像素坐标 ↔ 3D自车坐标 的映射关系。
输入(典型参数):

  • rots:相机到自车的旋转矩阵 [B, N, 3, 3]
  • trans:相机到自车的平移向量 [B, N, 3]
  • intrins:相机内参矩阵 [B, N, 3, 3]
  • post_rots / post_trans:图像后处理(如裁剪/缩放)的变换矩阵
  • depth_假设:离散深度值(如 [4.0, 5.0, ..., 45.0]

输出

  • points:3D点坐标 [B, N, D, H, W, 3]
    • B:Batch大小
    • N:相机数量
    • D:深度采样数
    • H/W:特征图高度/宽度
    • 3:自车坐标系下的 (x, y, z) 坐标

首先执行(1) 生成视锥体(Frustum)

  • 预定义一个 3D视锥体网格(Frustum),表示相机视野范围内的空间采样点:
    # 伪代码:生成像素坐标 + 深度假设的网格
    # frustum 是视锥空间的点集合,初始形状为 (B, N_cams, D, H, W, 3)。
    frustum = create_frustum(depth_bins, H, W)  # [D, H, W, 3]
    
    • 每个点的初始坐标为 (u, v, d)(像素坐标 + 深度)。

其次执行(2) 逆投影到3D相机坐标系

  • 通过相机内参的逆变换,将像素坐标转换为 归一化相机坐标
    [ x c a m y c a m 1 ] = K − 1 ⋅ [ u v 1 ] \begin{bmatrix} x_{cam} \\ y_{cam} \\ 1 \end{bmatrix} = K^{-1} \cdot \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} xcamycam1 =K1 uv1
  • 乘以深度值得到 3D相机坐标
    P c a m = [ x c a m ⋅ d y c a m ⋅ d d ] P_{cam} = \begin{bmatrix} x_{cam} \cdot d \\ y_{cam} \cdot d \\ d \end{bmatrix} Pcam= xcamdycamdd
# 使用深度信息&#