mmdetection3d
安装mmcv-full
pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.8.1/index.html
安装mmdet
pip install mmdet==2.14.0
安装mmseg
pip install mmsegmentation==0.14.1
如果此时编译mmdet3d可能编译不过去,gcc版本问题
gcc -V 或者 gcc -version;7.5.0至少要搭建cuda11,cuda10,要降级gcc到5.5才可以,亲测7.5编译报错。
降级gcc
安装gcc5.5
sudo apt install gcc-5 g++-5
建立软连接
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 80 --slave /usr/bin/g++ g++ /usr/bin/g++-5
再次执行命令gcc -v
和 g++ -v
查看gcc、g++版本已是5.5
返回到gcc7.5.0,切换多版本
sudo update-alternatives --config gcc
直接选择标号即可
编译mmdet3d
cd mmdetection3d
pip install -v -e .
mmdetection3D RuntimeError: Error compiling objects for extension
解决:
第三行是有问题的,写的方式不正确,导致找不到CUDA_HOME的位置,需要修改为第四行的样式,可以正常进入setup环节
看一下这一篇《Fast-BEV: Towards Real-time On-vehicle Bird’s-Eye View Perception》文章,文中发现发现BEV表示可以在不使用昂贵的视图变换或深度表示的情况下就可以拥有较好的性能,文中将 M 2 B E V M^2BEV M2BEV 作为Baseline,然后进一步引入(1)用于图像和BEV空间的强大数据增强策略以避免过度拟合(2)多帧特征融合机制以利用时间信息(3)优化的部署友好视图变换以加速推理。文中提到M1 模型(R18@256 × 704)在 Tesla T4 平台上可以以 50 FPS 的速度运行。代码也已经在Github上开源了。
paper:https://arxiv.org/pdf/2301.07870.pdf
code:https://github.com/sense-gvt/fast-bev
1. 主要贡献
精确的3D感知系统对自动驾驶来说是至关重要的。而使用纯视觉的BEV方法能够替代传统昂贵的激光雷达。本文基于 M2BEV思想,文中认为图像到BEV视图变换过程中,沿着相机光线的深度分布是均匀的。并提出了更强、更快的全卷积BEV感知框架,无需使用昂贵的视图变换器或深度表示。主要贡献如下:
我们在 M2BEV上验证了两种技术的有效性:强数据增强和多帧时间融合,使Fast-BEV达到最先进的性能。
我们提出了两种加速设计:预先计算投影索引并将其投影到相同的体素特征,使Fast-BEV可以在车载芯片上轻松部署,并具有快速的推理速度。
本文所提出的Fast-BEV是针对实时车载BEV感知的首个部署导向工作。希望我们的工作能够对工业级、实时、车载BEV感知提供启示。
2. 详细内容
下图是整个框架的示意图,我们可以看到其模型框架基本是依据 M2BEV完成的,但是本文针对M2BEV的问题进行了改进,下面我们详细来看一下
- 1.轻量级视图转换,2D转3D体素空间
- 2.多尺度图像encoder,bev编码器增强feature map的多通道权重信息
- 3.cv2.img和环视bev的数据加强,避免过拟合
- 4.多帧特征融合机制,
- 在RTX2080ti单卡训练 nuscenes数据集FPS达52.6;NDS达0.473。
本文整体pipeline:
- 1)图像编码部分:输出多尺度图像特征
- 2)2D转3D部分:使用查找表和基于camera ray实现2D到一个统一3D空间的转换
- 3)数据增广:在图像和BEV空间下实现数据增广,其实就是相机的内外参数进行调整
- 4)时序数据融合:借鉴BEVDet4D中时域数据融合策略,增加了参与数据融合的帧数
M2bev架构:
加入了强大的数据增强,以避免过拟合,并且2加入了多帧特征融合机制,以利用时间信息,从而实现最先进的性能。此外,我们还提出优化3视图变换,以使其更适合车载平台的部署。
M2BEV
fastbev
- 数据增强。我们凭经验发现,在M2BEVM2BEV的后期训练中有严重的过拟合问题。这是因为原始M2BEVM2BEV中没有使用数据增强。受到最近的工作[18,37]的启发,我们在图像和BEV空间上增加强烈的3D增强,例如随机翻转,旋转等。详情请参阅第3.3节。
- 时间融合。在实际的自主驾驶场景中,输入是时间连续的,具有巨大的互补信息。例如,在当前帧中部分被遮挡的一个行人可能在过去的几帧中完全可见。因此,我们通过引入时间特征融合模块,将M2BEV从仅空间空间扩展到空间-时间空间,类似于[31,20]。更具体来说就是,我们使用当前帧BEV特征和存储的历史帧特征作为输入,以端对端的方式训练Fast-BEV。
- 优化视图转换:我们发现从图像空间到体素空间的投影对延迟起着主导作用。我们提出了从两个角度优化投影:(1) 我们预先计算固定的投影索引并将其存储为静态查询表,这在推理期间非常高效。(2) 我们让所有摄像机投影到同一个体素,以避免昂贵的体素聚合。我们的方法不基于 Lift-Splat-Shoot 的改进视图转换方案[37,18,1],因为它不需要使用复杂且困难的DSP/GPU并行计算,而是足够快的仅使用CPU计算,非常方便部署。更多细节请参见第3.5节。
3.时间融合
受BEVDet4D和BEVFormer的启发,作者还将历史帧引入到当前帧中以进行时间特征融合。通过空间对齐操作和级联操作,将历史帧的特征与当前帧的对应特征融合。时间融合可以被认为是帧级的特征增强,在一定范围内较长的时间序列可以带来更多的性能增益。
具体来说,用三个历史关键帧对当前帧进行采样;每个关键帧具有0.5s间隔,本文采用了BEVDet4D中的多帧特征对齐方法。如图6所示,在获得四个对齐的BEV特征后,直接将它们连接起来,并将它们馈送到BEV编码器。在训练阶段,使用图像编码器在线提取历史帧特征,在测试阶段,历史帧功能可以离线保存,并直接取出用于加速。与BEVDet4D和BEVFormer进行比较,BEVDet4D只引入了一个历史框架,我们认为这不足以利用历史信息。
Fast BEV使用三个历史帧,从而显著提高了性能,通过使用两个历史帧,BEVFormer略优于BEVDet4D。然而,由于记忆问题,在训练阶段,历史特征在没有梯度的情况下被分离,这不是最佳的。此外,BEVFormer使用RNN样式来顺序融合特征,这是低效的。相比之下,Fast BEV中的所有帧都以端到端的方式进行训练,这与普通GPU相比更易于训练!
4.消融实验
数据集描述:评估了nuScenes数据集上的 Fast BEV,该数据集包含1000个自动驾驶场景,每个场景20秒。数据集被分成850个场景用于训练/验证,其余150个场景用于测试。虽然nuScenes数据集提供来自不同传感器的数据,但我们只使用相机数据。相机有六个视图:左前、前、右前、左后、后、右后。
评估指标,为了全面评估检测任务,使用平均精度(mAP)和nuScenes检测分数(NDS)的标准评估指标进行3D目标检测评估。此外,为了计算相应方面的精度(例如,平移、缩放、方向、速度和属性),使用平均平移误差(mATE)、平均缩放误差(mASE)、平均方向误差(mAOE)、平均速度误差(mAVE),以及平均属性误差(mAAE)作为度量。
5.实践中可扩展:
随着技术的发展,许多自动驾驶制造商已经开始放弃激光雷达,只使用纯摄像头进行感知。结果,在真实车辆收集的大量数据中没有深度信息。在实际开发中,模型放大或数据放大通常基于从真实车辆收集的数据,以利用数据潜力提高性能。在这种情况下,基于深度监控的解决方案遇到瓶颈,而Fast BEV不引入任何深度信息,可以更好地应用!