鱼眼BEV的view_transformer培训

一、理论溯源

(一)Kannala-Brandt 模型

Kannala-Brandt 模型(OpenCV中的fisheye::calibrate)是专门针对鱼眼相机成像过程设计的模型。

  • 常见鱼眼相机成像模型:
    • 等距投影(最常用)
    • 等立体角投影
    • 体视投影
    • 正交投影

鱼眼镜头不按"设计蓝图"成像
可拆解为:理想成像模型 + 畸变模型

鱼眼相机成像模型

等距投影模型(Equidistant Model):

  • 核心公式: r d = f ⋅ Θ rd = f \cdot \Theta rd=f⋅Θ
  • r d rd rd:图像半径
  • Θ \Theta Θ:光线与相机光轴的夹角
  • f f f:焦距

Kannala 多项式近似模型:

  • r d = f ⋅ ( Θ + k 1 Θ 3 + k 2 Θ 5 + ⋯   ) rd = f \cdot (\Theta + k_1 \Theta^3 + k_2 \Theta^5 + \cdots) rd=f⋅(Θ+k1​Θ3+k2​Θ5+⋯)
  • k 1 , k 2 k_1, k_2 k1​,k2​:多项式系数
3D到2D投影过程

见我的博客【鱼眼镜头10】等距Equidistant模型的Kannala-Brandt模型【opencv的鱼眼标定使用的模型

(二)View_Transformer理论

核心任务:将多视角相机图像特征映射到BEV空间

三步法:

  1. 3D点生成:
    • 将图像特征提升到3D体素网格
  2. 3D点映射到2D图像:
    • 通过相机参数投影到图像平面
  3. 2D图像采样与BEV生成:
    • 特征采样与体素聚合
步骤一:3D点生成方案

3D点的生成是将2D图像特征点映射到3D空间的过程,常见方案包括:

基于深度估计
  • 使用单目深度估计模型或立体匹配方法预测深度值
  • 结合相机内外参将2D点映射到3D空间
    • 深度分布(离散分类)LSS
    • 深度分布BEVDet【隐式学习(无LiDAR)】
    • 深度分布和几何约束BEVDepth【LiDAR显式监督】
基于几何变换
  • 使用相机投影模型将2D点直接映射到3D空间
  • 不依赖深度估计,适用于简化场景
    • 例如SimpleBEV
基于稀疏特征
  • 仅对关键点或显著区域进行3D点生成
  • 适用于稀疏表示方法
    • PETR
    • StreamPETR
    • Sparse4D等

步骤二:3D点映射到2D图像方案

将3D点映射到2D图像平面是BEV生成的关键步骤,常见方案包括:

针孔相机模型
  • 使用针孔相机模型将3D点投影到2D图像平面
  • 适用于传统相机或窄视角相机
鱼眼相机模型
  • 使用Kannala-Brandt模型等鱼眼相机模型进行投影
  • 适用于广角或鱼眼相机
多视角融合
  • 将多个相机的3D点投影到各自的2D图像平面
  • 通过多视角融合提高投影精度

步骤三:2D图像采样与BEV生成方案

将2D图像特征映射到BEV平面是BEV感知的核心步骤,常见方案包括:

双线性采样
  • 使用双线性插值将2D特征映射到BEV平面
    • 例如SimpleBEV
  • 计算效率高,适用于实时应用
体素聚合
  • 将3D特征聚合到体素网格中,再映射到BEV平面
    • 求和池化LSS
    • BEVDet
    • BEVDepth
    • BEVpoolingv2
  • 适用于高精度检测场景
稀疏特征采样
  • 仅对关键点或显著区域进行特征采样和映射
    • 例如PETR
  • 适用稀疏表示方法
深度学习模型
  • 使用深度学习模型(如Transformer)直接生成BEV特征
    • 例如BEVFormer
  • 适用于复杂场景和端到端训练

(理论溯源部分完)

二、问题映射

(一)鱼眼View_Transformer的实现

核心问题:

  • 鱼眼图片如何生成BEV空间特征?
  • 多路鱼眼特征如何在BEV空间对齐?

(二)复合理论应用

以SimpleBEV为例的实施方案:

核心步骤:

  1. 生成3D点(非均匀空间采样)
  2. 使用KB模型计算投影点
  3. F.grid_sample双线性采样
  4. 特征融合(torch.sum(values, dim=1))
SimpleBEV的3D点生成方案

get_bevgrid()函数:

  • 输入:h(X方向分辨率)、w(Y方向)、z(Z方向)
  • 输出:(N,3)张量(3D体素网格坐标)

特点:

  • 基于几何变换
  • 不依赖深度估计
  • 适用于简化场景
3D点映射到2D鱼眼方案

投影过程:

  1. 3D点→相机坐标系:
    3D相机点 = 外参逆矩阵 × 3D点 \text{3D相机点} = \text{外参逆矩阵} \times \text{3D点} 3D相机点=外参逆矩阵×3D点
  2. 计算径向距离:
    径向距离 = X 2 + Y 2 \text{径向距离} = \sqrt{X^2 + Y^2} 径向距离=X2+Y2 ​
  3. 计算入射角:
    Θ = torch.atan2 ( 3D相机点 , 径向距离 ) \Theta = \text{torch.atan2}(\text{3D相机点}, \text{径向距离}) Θ=torch.atan2(3D相机点,径向距离)
  4. 计算畸变系数:
    径向畸变系数 = ( Θ + k 1 Θ 3 + k 2 Θ 5 + ⋯   ) \text{径向畸变系数} = (\Theta + k_1 \Theta^3 + k_2 \Theta^5 + \cdots) 径向畸变系数=(Θ+k1​Θ3+k2​Θ5+⋯)
  5. 投影到2D:
    2D鱼眼点 = ( 内参仿射部分 × 归一化3D点 ) + 主点坐标 \text{2D鱼眼点} = (\text{内参仿射部分} \times \text{归一化3D点}) + \text{主点坐标} 2D鱼眼点=(内参仿射部分×归一化3D点)+主点坐标
2D图像采样与BEV生成

流程:

  1. 特征复制Z次并拼接
  2. F.grid_sample双线性采样
  3. 多视角特征求和融合
  4. 卷积压缩生成feat_bev
任务头拓展应用(BEVFCOSHead)

无锚点方案:

  • 逐像素检测(FCOS)
  • 中心点预测(CenterNet/SMOKE)

三、路径优化

(一)有效性分析

优势:

  1. 计算效率高(适合实时应用)
  2. 简化设计(无需深度估计)
  3. 小规模场景适用

KB模型优势:

  1. 广角覆盖能力强
  2. 畸变校正准确

(二)问题

主要缺陷:

  1. 复杂场景精度低
  2. 对相机参数敏感
  3. 无法处理深度不确定性

KB模型问题:

  1. 计算复杂度高
  2. 依赖精确畸变参数
  3. 动态场景适应性差

(三)优化路径

改进方向:

  1. 引入轻量级深度估计
  2. 改进多视角特征融合
  3. 增加几何约束

KB模型优化:

  1. 高效畸变校正算法
  2. 动态参数调整
  3. 结合深度学习

完

更多推荐