Paddle3D正式版发布!BEV、单目、激光雷达3D感知算法开箱即用,无缝衔接Apollo
当今时代,通过科技改变生产生活方式的各种先进技术纷纷崛起,交通产业也经历着巨大的变革。国家对于智能交通和交通强国战略的支持使得交通产业更加需要相关技术支撑与赋能。对此,百度飞桨团队与Apollo自动驾驶团队强强联合,聚焦人工智能关键技术,深耕自动驾驶各个场景,汇聚各方力量,不断拓宽开源之路。
此次,飞桨基于和Apollo自动驾驶团队合作开发的大量业务实践经验,结合自动驾驶感知算法开发难点,正式发布飞桨首个端到端3D感知开发套件——Paddle3D!
Paddle3D官方开源代码链接如下,也欢迎大家入群进行3D感知开发的技术交流,接下来将为大家全面的介绍Paddle3D。
接下来具体介绍一下Paddle3D这几部分的内容。
基础层主要提供了数据处理管道、数据集的基础支持、自定义算子的开发支持、高级API支持。
数据处理管道
提供数据处理的I/O加速能力,提高训练阶段数据吞吐速度。同时提供多种数据变换、数据增强能力,满足3D模型的快速开发。
数据集
在本次的正式版中,我们全面支持了自动驾驶三大开源数据集KITTI、Waymo和nuScense。同时,Paddle3D还支持用户自定义数据集进行训练,详情请前往Paddle3D官方开源仓库。此外,百度和清华联合发布了业内首个车路协同3D感知数据集DAIR-V2X,并且相应的比赛“车路协同自动驾驶算法挑战赛”正在如火如荼的进行,第一名奖金高达40000元,欢迎大家使用Paddle3D报名参赛打榜,点击下方图片可跳转报名。
真值库
在模型精度优化方面,除了模型层面的一些优化策略,Paddle3D在数据层面也提供了基于真值库的在线优化策略。在做自动驾驶感知任务时,采集和标注点云数据所耗费的人力成本偏高,我们希望可以充分利用已有的数据来拓展训练数据的多样性。基于真值库的在线优化策略是先根据已有的训练数据离线地生成真值库,训练的过程中在线地从真值库里面随机采样一些真值目标,放到当前帧中来合成一帧新的点云,从而提升模型的泛化能力。
下图是使用这个优化策略前后的精度对比情况,整体精度有5.39%的提升。
自定义算子即训即推
3D感知模型在训练过程中会遇到需要开发特色的自定义算子的情况,例如用于过滤重叠三维框的非极大值抑制操作(3D IoU NMS)、PointNet++中聚合和采样点云的操作、点云体素化操作等等。Paddle3D的模型均可基于飞桨的原生推理库Paddle Inference完成服务器端和云端的模型部署,且不需要在部署阶段重新开发自定义算子,完全做到即训即用。
算法层主要提供了开箱即用的单目3D感知、点云3D感知、BEV 3D感知、多模态3D感知等算法,同时提供了主流的骨干网络实现参考。
单目3D感知模型
在和自动驾驶开源框架Apollo的合作过程中,我们沉淀了SMOKE、CaDDN这两个经典的单目3D感知模型,并且已经作为Apollo最新的内置3D视觉感知模型。此外,在本次正式版发布中,我们还新增了DD3D模型,FCOS3D模型的支持也即将完成。
激光雷达3D感知模型
除了视觉模型之外,我们在和Apollo的合作过程中同样沉淀了激光雷达3D感知模型PointPillars、CenterPoint,且已作为Apollo的原生激光雷达支持模型,本次正式版中我们还新增了IA-SSD、PAConv、PV-RCNN、Voxel-RCNN等前沿点云3D检测模型。同时,也补充了点云分割模型SqueezeSegV3。
BEV模型
当前,最直接的解决方案是使用单目相机框架和跨相机后处理,该框架的缺点是其需要单独处理不同的视图,无法跨相机捕获信息,导致性能和效率低下。作为单目相机框架的替代方案,一种更统一的框架是从多目相机图像中提取整体表示。鸟瞰图 (Bird’s Eye-View,BEV) 是一种常用的周围场景表示方法,它能清晰地呈现物体的位置和规模,适用于各种自动驾驶任务。
而最近以BEV为基础的3D检测方案席卷自动驾驶届,我们也在持续跟进该方向。目前已在Paddle3D的模型库中补充BEV经典模型PETR、PETRv2、BEVFormer,而BEVFusion正在实现中,即将和大家见面。
工具层主要提供了基于VisualDL的训练、推理效果可视化,同时提供了模型的量化部署加速能力、Apollo的集成开发能力以及混合精度训练能力。
自动混合精度训练支持
自动混合精度训练(Auto Mixed Precision, AMP)是指通过混合使用单精度和半精度数据格式,加速深度神经网络训练的过程,同时保持了单精度训练所能达到的网络精度。混合精度训练能够加速计算过程,同时减少内存使用和存取,并使得在特定的硬件上可以训练更大的模型或batch size。
Paddle3D目前全面支持混合精度训练,从而进一步优化3D感知算法开发对硬件的需求,加速训练速度。
量化部署支持
模型量化是一种将浮点计算转成低比特定点计算的技术,可以有效地降低模型参数大小,降低算力、内存等资源消耗,从而提升模型在端侧硬件上的运行效果。
3D感知模型相比传统的2D检测模型往往模型更复杂,参数更多,在服务器上可能会达到不错的推理速度和精度的平衡。但是实际部署时,帧率往往达不到要求。对此,Paddle3D目前支持SMOKE、CenterPoint的量化部署,同时Paddle3D将结合飞桨团队的另一个部署神器FastDeploy对3D感知模型通过量化压缩等手段在端侧硬件进行端到端的优化,支持更多模型的量化部署。链接参考如下:
https://github.com/PaddlePaddle/Paddle3D/tree/develop/configs/quant
https://github.com/PaddlePaddle/FastDeploy
稀疏卷积支持
在基于点云的3D检测任务中,主流的解决思路会把无序的点云表示成有序的三维体素空间,精准地学习到几何结构特征的最佳方法莫过于采取3D卷积。但是3D卷积耗费非常大的显存和计算量,使得面向实时端侧场景的应用须以损失部分检测精度作为代价,将三维空间压缩至二维空间后采用2D卷积来换取速度的提升和计算量的减小。
然而,室外场景中数量高达~100k的点云经过体素化后,三维体素空间的稀疏性低至~0.5%,采用3D卷积会有大量零元素的计算浪费。在稀疏3D卷积中,会预先建立一个规则表,表中仅记录与卷积核相乘的非零输入元素及其输出元素在密集特征层上的位置,基于规则表完成卷积计算可避免零元素的无效运算。飞桨框架v2.4已经全面支持稀疏计算,Paddle3D也集成了许多使用稀疏3D卷积的前沿模型,如PV-RCNN、VoxelRCNN、CenterPoint。
以CenterPoint为例,基于飞桨原生推理库Paddle Inference在一块RTX 3080显卡上的推理速度可达到21.20毫秒每帧,nuScenes验证集上精度NDS(NuScenes Detection Score)可达到66.74%。
3D感知算法多卡算力在线开发
考虑到3D感知算法在学习使用过程中对显存等硬件资源需求较大,飞桨团队提供了免费的算力资源,方便大家在线开发,同时Paddle3D也提供了官方的在线开发示例,欢迎大家fork进行二次开发。
在线开发示例链接如下:
https://aistudio.baidu.com/aistudio/projectdetail/5268894
https://aistudio.baidu.com/aistudio/projectdetail/5269115
详细文档
文档是快速上手一个开源项目的关键,Paddle3D针对模型训练部署以及每个算法都有详细的文档说明,欢迎大家阅读浏览,同时我们也欢迎大家一同建立更完善的Paddle3D文档和教程。
直播课&技术解读文章
考虑到3D感知的更新迭代速度快,上手难度大。Paddle3D会定期组织直播课程,由开发同学为大家深入讲解3D感知算法的开发、部署细节;同时也会定期发布技术专栏文章进行解读。相应的课程链接以及技术文章链接我们会定期更新到GitHub首页,再次欢迎大家关注Paddle3D官方仓库:
https://github.com/PaddlePaddle/Paddle3D
Apollo是由百度开源的开放、完整、安全的自动驾驶平台,助力开发者快速搭建自动驾驶系统。
Apollo官方仓库:
https://github.com/ApolloAuto/apollo
Paddle3D和Apollo在持续性的进行合作开发,目前已提供视觉感知模型SMOKE、CaDDN,点云感知模型PointPillars、CenterPoint,BEV感知模型PETR的训推打通。用户可以在Paddle3D进行模型的训练、测试、导出,然后一键部署集成到Apollo的感知算法部分,和下游的跟踪算法、多传感器融合算法、预测算法、规划控制算法全栈运行。同时,用户可以通过Apollo的DreamView平台联合定位、预测、规划控制模块进行仿真调试,找出Badcase指导模型的优化开发。
详细开发步骤请参考:
https://apollo.baidu.com/community/Apollo-Homepage-Document/Apollo_Doc_CN_8_0/lidar
https://apollo.baidu.com/community/Apollo-Homepage-Document/Apollo_Doc_CN_8_0/camera
以上就是本次正式版本的主要内容,欢迎大家fork体验。未来,我们也将持续进行更新迭代:丰富模型库和预训练模型,持续优化模型在端侧的量化压缩部署,提供更详细的开发文档以及更简洁的API,为社区带来更好用的3D感知开发套件。我们也欢迎社区用户参与到Paddle3D的建设中,不断完善Paddle3D。