fast_bev 学习笔记

一. 简述

原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline
FAST BEV是一种高性能、快速推理和部署友好的解决方案,专为自动驾驶车载芯片设计。该框架主要包括以下五个部分:

Fast-Ray变换:这是一种轻量级的、部署友好的视图变换,它将多视图2D图像特征沿着相机射线的体素投影到3D,从而快速获得BEV(鸟瞰图)表示。相较于传统方法,这种变换方式显著提升了推理速度,使得多尺度投影操作变得更为高效和实用。
多尺度图像编码器:利用多尺度信息来获取更好的性能。通过多尺度投影操作,编码器能够充分利用不同尺度的图像特征,从而增强BEV感知的准确性和鲁棒性。
高效BEV编码器:专为加速车载推理而设计。通过使用少量的原始残差网络作为基本BEV编码器,该部分能够在保证性能的同时,进一步降低计算复杂度和推理时间。
数据增强:针对图像和BEV空间的强大数据增强策略,以避免过度拟合。通过引入各种数据变换和增强技术,可以提高模型的泛化能力,使其在面对不同场景和复杂环境时仍能保持良好的性能。
时间融合:利用时间信息的多帧特征融合机制。通过融合多帧图像的特征信息,该部分能够捕捉动态场景中物体的运动轨迹和状态变化,从而进一步提升BEV感知的准确性和实时性。
FAST BEV的优势在于其能够在保证高性能的同时,实现快速推理和方便部署。这使得它成为自动驾驶车载芯片上一种理想的解决方案。此外,相较于传统方法,FAST BEV无需使用昂贵的视图变换器或深度表示,从而降低了硬件成本和维护难度。

综上所述,FAST BEV通过优化视图变换、编码器设计、数据增强和时间融合等方面,实现了高性能、快速推理和部署友好的自动驾驶解决方案。随着自动驾驶技术的不断发展,FAST BEV有望在未来发挥更大的作用。

二. 输入输出

FAST BEV的输入主要是多相机RGB图像,
输出则是预测的3D边界框(包括速度)和地图分割结果。

通过一系列的处理步骤,如Fast-Ray变换、多尺度图像编码、高效BEV编码等,对输入的RGB图像进行特征提取、视图变换和编码,最终输出3D边界框和地图分割结果。

三. github资源

源码: https://github.com/Sense-GVT/Fast-BEV
使用CUDA和TensorRT进行Fast-BEV推理: https://github.com/Mandylove1993/CUDA-FastBEV
https://github.com/linClubs/FastBEV-ROS-TensorRT

Fast-BEV代码复现实践: https://blog.csdn.net/h904798869/article/details/130317240
Fast Bev在ubuntu上的复现过程以及error汇总: https://blog.csdn.net/qq_42704750/article/details/130280567
复现教程1 : https://zhuanlan.zhihu.com/p/631504194

四. 复现推理过程

4.1 cuda tensorrt 版

参考链接:https://github.com/Mandylove1993/CUDA-FastBEV

提供了PTQ和QAT的int8量化代码,
PTQ (Post-Training Quantization)是在模型训练完成后进行的量化,通过分析训练好的模型的权重和激活的分布来确定量化参数(如缩放因子和零点偏移)。
QAT(Quantization Aware Training)通过在训练过程中模拟量化操作来优化模型的权重,以减少量化带来的精度损失。
int8量化代码: 将模型的权重从浮点数转换为int8。在推理过程中,将模型的激活从浮点数转换为int8。在计算层输出时,将int8值转换回浮点数以便进行后续计算。

问题1:
安装mmcv mmdet mmdet3d 参考:https://blog.csdn.net/h904798869/article/details/130317240版本如下:
在这里插入图片描述

问题2:
安装spconv:

pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html

git clone https://github.com/traveller59/spconv.git 
cd spconv
git checkout v1.2.1
git submodule update --init --recursive 
python setup.py bdist_wheel

cd ./dist
pip install spconv-.....

python 
import spconv

问题:https://blog.51cto.com/u_15906550/5921374

训练

https://blog.csdn.net/yunqiushuiman/article/details/136537614
https://zhuanlan.zhihu.com/p/627783225

修改图像数

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用ROS和Python编写两个接口,用于收发FastBEV训练集和训练参数,可以使用以下步骤: 1. 首先,需要安装ROS,并创建一个ROS工作空间。可以参考ROS官方文档进行安装和设置。 2. 创建一个ROS包,用于存放接口的代码。可以使用以下命令创建一个名为“fastbev_interface”的ROS包: ``` cd ~/catkin_ws/src catkin_create_pkg fastbev_interface rospy ``` 3. 在ROS包中创建两个Python文件,一个用于接收FastBEV训练集,另一个用于接收训练参数。可以使用以下命令在ROS包中创建这两个文件: ``` cd ~/catkin_ws/src/fastbev_interface touch receive_dataset.py touch receive_params.py ``` 4. 编写接收FastBEV训练集的Python文件。可以使用以下代码作为起点: ``` #!/usr/bin/env python import rospy from std_msgs.msg import String def callback(data): rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data) def receive_dataset(): rospy.init_node('receive_dataset', anonymous=True) rospy.Subscriber('fastbev_dataset', String, callback) rospy.spin() if __name__ == '__main__': receive_dataset() ``` 在这个文件中,创建了一个名为“receive_dataset”的ROS节点,用于接收FastBEV训练集。使用ROS的“rospy.Subscriber”函数订阅了一个名为“fastbev_dataset”的主题,并指定了一个回调函数“callback”来处理接收到的数据。最后,使用“rospy.spin()”函数使节点保持运行状态。 5. 编写接收训练参数的Python文件。可以使用以下代码作为起点: ``` #!/usr/bin/env python import rospy from std_msgs.msg import String def callback(data): rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data) def receive_params(): rospy.init_node('receive_params', anonymous=True) rospy.Subscriber('fastbev_params', String, callback) rospy.spin() if __name__ == '__main__': receive_params() ``` 在这个文件中,创建了一个名为“receive_params”的ROS节点,用于接收训练参数。使用ROS的“rospy.Subscriber”函数订阅了一个名为“fastbev_params”的主题,并指定了一个回调函数“callback”来处理接收到的数据。最后,使用“rospy.spin()”函数使节点保持运行状态。 6. 在ROS包中创建一个launch文件,用于启动这两个接口节点。可以使用以下命令在ROS包中创建这个文件: ``` cd ~/catkin_ws/src/fastbev_interface touch interface.launch ``` 7. 编写launch文件,在其中启动两个接口节点。可以使用以下代码作为起点: ``` <launch> <node name="receive_dataset" type="receive_dataset.py" pkg="fastbev_interface" output="screen"/> <node name="receive_params" type="receive_params.py" pkg="fastbev_interface" output="screen"/> </launch> ``` 在这个文件中,使用ROS的“<node>”标签启动两个接口节点。分别指定节点的名称、类型、所属ROS包,并使用“output”参数指定节点的输出方式。 8. 在终端中运行launch文件,启动两个接口节点。可以使用以下命令启动这个文件: ``` cd ~/catkin_ws source devel/setup.bash roslaunch fastbev_interface interface.launch ``` 在这个命令中,使用“roslaunch”命令启动指定的launch文件。在启动前,需要先激活ROS工作空间,并使用“source”命令加载环境变量。 9. 现在,两个接口节点已经启动,可以使用ROS的“rostopic”命令来发布FastBEV训练集和训练参数。例如,可以使用以下命令发布一个名为“fastbev_dataset”的主题,并发送一条数据: ``` rostopic pub -r 10 fastbev_dataset std_msgs/String 'hello world' ``` 在这个命令中,“-r 10”参数指定了发送数据的频率为10Hz,“std_msgs/String”指定了数据的类型为字符串,‘hello world’是要发送的数据。 10. 可以使用类似的方式,发布名为“fastbev_params”的主题,并发送训练参数数据。这些数据将被接口节点接收并处理。 以上是一个简单的例子,用于展示如何使用ROS和Python编写两个接口,用于收发FastBEV训练集和训练参数。实际应用中,可能需要更复杂的逻辑和功能,可以根据需要进行扩展和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值