[vip]【MLP-BEV(11)】BEV的view_transformer思路整理
·
鱼眼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空间
三步法:
- 3D点生成:
- 将图像特征提升到3D体素网格
- 3D点映射到2D图像:
- 通过相机参数投影到图像平面
- 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为例的实施方案:
核心步骤:
- 生成3D点(非均匀空间采样)
- 使用KB模型计算投影点
- F.grid_sample双线性采样
- 特征融合(
torch.sum(values, dim=1))
SimpleBEV的3D点生成方案
get_bevgrid()函数:
- 输入:h(X方向分辨率)、w(Y方向)、z(Z方向)
- 输出:(N,3)张量(3D体素网格坐标)
特点:
- 基于几何变换
- 不依赖深度估计
- 适用于简化场景
3D点映射到2D鱼眼方案
投影过程:
- 3D点→相机坐标系:
3D相机点 = 外参逆矩阵 × 3D点 \text{3D相机点} = \text{外参逆矩阵} \times \text{3D点} 3D相机点=外参逆矩阵×3D点 - 计算径向距离:
径向距离 = X 2 + Y 2 \text{径向距离} = \sqrt{X^2 + Y^2} 径向距离=X2+Y2 - 计算入射角:
Θ = torch.atan2 ( 3D相机点 , 径向距离 ) \Theta = \text{torch.atan2}(\text{3D相机点}, \text{径向距离}) Θ=torch.atan2(3D相机点,径向距离) - 计算畸变系数:
径向畸变系数 = ( Θ + k 1 Θ 3 + k 2 Θ 5 + ⋯ ) \text{径向畸变系数} = (\Theta + k_1 \Theta^3 + k_2 \Theta^5 + \cdots) 径向畸变系数=(Θ+k1Θ3+k2Θ5+⋯) - 投影到2D:
2D鱼眼点 = ( 内参仿射部分 × 归一化3D点 ) + 主点坐标 \text{2D鱼眼点} = (\text{内参仿射部分} \times \text{归一化3D点}) + \text{主点坐标} 2D鱼眼点=(内参仿射部分×归一化3D点)+主点坐标
2D图像采样与BEV生成
流程:
- 特征复制Z次并拼接
- F.grid_sample双线性采样
- 多视角特征求和融合
- 卷积压缩生成
feat_bev
任务头拓展应用(BEVFCOSHead)
无锚点方案:
- 逐像素检测(FCOS)
- 中心点预测(CenterNet/SMOKE)
三、路径优化
(一)有效性分析
优势:
- 计算效率高(适合实时应用)
- 简化设计(无需深度估计)
- 小规模场景适用
KB模型优势:
- 广角覆盖能力强
- 畸变校正准确
(二)问题
主要缺陷:
- 复杂场景精度低
- 对相机参数敏感
- 无法处理深度不确定性
KB模型问题:
- 计算复杂度高
- 依赖精确畸变参数
- 动态场景适应性差
(三)优化路径
改进方向:
- 引入轻量级深度估计
- 改进多视角特征融合
- 增加几何约束
KB模型优化:
- 高效畸变校正算法
- 动态参数调整
- 结合深度学习
完
更多推荐


所有评论(0)