精确的3D感知系统对于自动驾驶至关重要。经典方法依赖于激光雷达点云提供的精确3D信息。然而,激光雷达传感器通常花费数千美元,阻碍了其在经济型车辆上的应用。纯基于相机的鸟瞰图(BEV)方法最近因其令人印象深刻的3D感知能力和经济的成本而显示出巨大的潜力。
为了从2D图像特征中进行3D感知,nuScenes上最先进的BEV方法要么使用隐式/显式基于深度的投影,要么使用基于Transformer的投影。然而,它们很难部署在车载芯片上:
- 具有深度分布预测的方法通常需要多线程CUDA内核来加速推理,这不方便在资源受限或推理库不支持的芯片上操作。
- Transformer内的注意力机制需要专用芯片来支持。此外,它们在推理方面很耗时,这使它们无法进行实际部署。
1、省流阅读
本文主要对性能优秀、部署友好、推理速度高的Fast-BEV感知框架的讲解和TensorRT的落地部署
1、TensorRT落地效果
2、量化前后的精度与速度的对比
3、部署代码列表
4、环境的配置
5、开源地址
TensorRT的代码链接:https://github.com/Mandylove1993/CUDA-FastBEV
2、Fast-BEV的原理要点
1、Fast-BEV的前世
2、Fast-BEV的今生
重中之重——优化 View Transformation
cuda kernel实现如下:
static __global__ void compute_volum_kernel(int num_valid, const half* camera_feature, const float* valid_index, const int64_t* valid_y, const int64_t* valid_x, int num_camera, int feat_height, int feat_width, half* output_feature) {
int tid = cuda_linear_index;
if (tid >= num_valid) return;
for (int icamera = 0; icamera < num_camera; ++icamera) {
int index = icamera * num_valid + tid;
if(valid_index[index] == 1.0){
int64_t x = valid_x[index];
int64_t y = valid_y[index];
for(int c=0; c< 64; c++){
output_feature[c*num_valid+tid] = camera_feature[icamera*64*feat_height*feat_width+c*feat_height*feat_width +feat_width*y+x];
}
}
}
}
将为每个相机视图存储一个体素特征,然后将其聚合以生成最终的体素特征(见图5)。因为每个相机只有有限的视角,所以每个体素特征都非常稀疏,例如,只有大约17%的位置是非零的。作者认为这些体素特征的聚集由于其巨大的尺寸而非常昂贵。建议生成密集的体素特征,以避免昂贵的体素聚集。
具体来说,让来自所有相机视图的图像特征投影到相同的体素特征,从而在末端产生一个密集的体素。
在表1中,分析了4种不同方法的视图转换延迟,发现:
- BEVDepth在GPU上实现了最佳延迟,但它需要专用的并行计算支持,因此不适用于CPU。
- 与 Baseline相比,所提出的快速BEV在CPU上实现了数量级的加速。
3、参考
[1].Fast-BEV: Towards Real-time On-vehicle Bird’s-Eye View Perception.
[2].https://github.com/Mandylove1993/CUDA-FastBEV.
作者: AI视界引擎
文章来源:AI视界引擎
推荐阅读
- Residual Pattern Learning: 在不影响模型闭集表现的情况下分割异常物体
- ICCV 2023 | FocalFormer3D: 解决假阴性问题,提升自动驾驶3D目标检测召回率
- 超越RTMPose | 清华联合IDEA提出全身关键点检测SOTA模型 DWPose
- SAM-U升级SAM | 带你分析SAM的弱点并重新优化设计填补空缺
- YOLOD也来啦 | 优化YOLOv5样本匹配,顺带设计了全新的模块
更多嵌入式AI干货请关注嵌入式AI专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。