思想
- 相机视图进行特征提取和深度估计,根据深度估计的信息和特征进行融合,得到三维空间的特征
- 生成pillar
- 生成图像空间内的三维坐标,根据特征下采样的倍数及深度数来生成
- 上述三维坐标变换到点云空间,有以下几步变换
- 图像是有数据增强的,如旋转、平移、缩放等,浓缩成两个变换,仿射和平移,那第一步是增强后的三维坐标还原为原始的三维坐标,即平移和仿射的逆变换
- 图像坐标系到相机坐标系,即乘以内参矩阵
- 相机坐标系到点云坐标系,刚体变换,旋转+平移
- 生成融合特征,即点云空间的三维坐标及图像特征融合
- 点云空间的三维坐标pillar化,减去点云的起点,除以点云的步长
- 筛选,保留点云设定范围内的点
- voxel内的点筛选留存,留存最大数为300,即相同voxel内点保留前300个,排序按照batch D H W依次来排
- 设定pillar特征尺寸, B C D H W 300,按照排序后的坐标将x的值赋值到上面
- 最后一个维度sum,第三个维度和第二个维度flatten,得到Pillar特征
- 再接neck,以及使用类似centerpoint的head
模型结构
输入
以nuscenes为例,输入是6个camera的数据,尺寸为1 * 6 * 3 * 256 * 704
前处理
test
- 只做两个变换,缩放和平移
网络部分
part1 生成伪点云
- 基于6个cameras的输入,输出612316*44
- 前59维为深度信息,单独提出,然后与后64维度相乘
- 如下图,生成深度图
part2 bev pool
- 根据点云范围得到点云的网格,生成伪点云
part3 bev detector
- 对生成的bev走centerpoint的推理流程
onnx模型导出
由于网络中存在bev pool,直接导出模型不方便,将网络切成两个部分,bevdet_pseudo_cloud和bevdet_detector,需要重写forward函数,修改代码不是很好,我们参考mmdeploy的方案,运行时对bevdet注册一些函数,用来导出两个部分的onnx,git地址
模型推理 onnxruntime or tensorrt
自定义int8量化
参考博客
参考论文
本文含有隐藏内容,请 开通VIP 后查看