BEVDET

思想

  1. 相机视图进行特征提取和深度估计,根据深度估计的信息和特征进行融合,得到三维空间的特征
  2. 生成pillar
    1. 生成图像空间内的三维坐标,根据特征下采样的倍数及深度数来生成
    2. 上述三维坐标变换到点云空间,有以下几步变换
      1. 图像是有数据增强的,如旋转、平移、缩放等,浓缩成两个变换,仿射和平移,那第一步是增强后的三维坐标还原为原始的三维坐标,即平移和仿射的逆变换
      2. 图像坐标系到相机坐标系,即乘以内参矩阵
      3. 相机坐标系到点云坐标系,刚体变换,旋转+平移
    3. 生成融合特征,即点云空间的三维坐标及图像特征融合
      1. 点云空间的三维坐标pillar化,减去点云的起点,除以点云的步长
      2. 筛选,保留点云设定范围内的点
      3. voxel内的点筛选留存,留存最大数为300,即相同voxel内点保留前300个,排序按照batch D H W依次来排
      4. 设定pillar特征尺寸, B C D H W 300,按照排序后的坐标将x的值赋值到上面
      5. 最后一个维度sum,第三个维度和第二个维度flatten,得到Pillar特征
  3. 再接neck,以及使用类似centerpoint的head

模型结构

输入

以nuscenes为例,输入是6个camera的数据,尺寸为1 * 6 * 3 * 256 * 704

前处理

test

  1. 只做两个变换,缩放和平移

网络部分

part1 生成伪点云

  1. 基于6个cameras的输入,输出612316*44
  2. 前59维为深度信息,单独提出,然后与后64维度相乘
  3. 如下图,生成深度图
  4. BEVDET_第1张图片

part2 bev pool

  1. 根据点云范围得到点云的网格,生成伪点云

part3 bev detector

  1. 对生成的bev走centerpoint的推理流程
  2. BEVDET_第2张图片

onnx模型导出

由于网络中存在bev pool,直接导出模型不方便,将网络切成两个部分,bevdet_pseudo_cloud和bevdet_detector,需要重写forward函数,修改代码不是很好,我们参考mmdeploy的方案,运行时对bevdet注册一些函数,用来导出两个部分的onnx,git地址

模型推理 onnxruntime or tensorrt

自定义int8量化

参考博客

  1. https://zhuanlan.zhihu.com/p/454569125
  2. https://zhuanlan.zhihu.com/p/557613388

参考论文

  1. https://github.com/nv-tlabs/lift-splat-shoot

你可能感兴趣的:(计算机视觉,人工智能,算法)