自动驾驶实战:基于Paddle3D的点云障碍物检测

lidar

在自动驾驶车辆的软件架构中,需要先通过感知环节对周围环境进行理解,完成障碍物检测和可行域分割等任务,就可以预测障碍物接下来的运动方向,再规划出一条可以避开所有障碍物的运动轨迹,下发运动命令控制车体完成前进。可以说,感知系统是自动驾驶的重要基础和先决条件。

Paddle3D是飞桨官方开源的端到端深度学习3D感知套件,涵盖了许多前沿和经典的3D感知模型,支持多种模态和多种任务,可以助力开发者便捷地完成 『自动驾驶』 领域模型 从训练到部署的全流程应用。接下来通过点云障碍物检测的动手实践,我们可以更加直观地体验自动驾驶感知系统开发的全流程。话不多说,让我们开始吧!

Paddle3D项目链接:https://github.com/PaddlePaddle/Paddle3D

在这里插入图片描述

Paddle3D是完全开源免费的,大家可以Star⭐收藏源码并支持我们!

3d点star

本次项目是Apollo与飞桨联合开展的自动驾驶两日课程中的实操部分,希望完整了解自动驾驶全栈技术与深度学习3D视觉开发的同学可以扫码报名参加!

接下来就让我们开始项目实操吧!

准备点云数据

Paddle3D支持按照KITTI数据集格式构建自己的数据集,可参考文档自定义数据集格式说明进行准备。

为了能快速演示整个流程,本项目使用数量为300帧的KITTI小数据集。该小数据集是从从KITTI训练集中随机抽取了250帧点云、验证集中随机抽取50帧点云。完整的KITTI数据集可至官网下载。

解压#小数据集:

!tar xvzf data/data165771/kitti300frame.tar.gz

安装Paddle3D

克隆Paddle3D源码,基于develop分支完成安装:

下载Paddle3D源码:

!git clone https://github.com/PaddlePaddle/Paddle3D

进入Paddle3D所在路径:

cd /home/aistudio/Paddle3D

安装Paddle3D依赖项:

!python -m pip install -r requirements.txt

安装Paddle3D源码:

!python setup.py install

模型训练

CenterPoint以点云作为输入,基于关键点检测的方式回归物体的尺寸、方向和速度。面向物体尺寸多样不一的场景时其精度表现更高,简易的模型设计使其在性能上也表现更加高效。

目前Paddle3D对CenterPoint性能做了极致优化,因此本项目选择CenterPoint完成点云障碍物检测。

(1) 创建数据集软链

!mkdir datasets
!ln -s /home/aistudio/kitti300frame ./datasets
!mv ./datasets/kitti300frame ./datasets/KITTI

(2)生成训练时数据增强所需的真值库

!python tools/create_det_gt_database.py --dataset_name kitti --dataset_root ./datasets/KITTI --save_dir ./datasets/KITTI

(3) 修改配置文件

Paddle3D中CenterPoint提供的KITTI baseline是基于8卡32G V100训练,此处只有1张16G V100显卡,所以需要将学习率和批大小修改成针对本地单卡的。

!cp configs/centerpoint/centerpoint_pillars_016voxel_kitti.yml configs/centerpoint/centerpoint_pillars_016voxel_minikitti.yml
# 将batch_size从4减少至2
# 将base_learning_rate从0.001减小至0.0000625 (减小16倍)
# 将epochs减小至20

(4)启动训练

通过指定--model https://bj.bcebos.com/paddle3d/models/centerpoint//centerpoint_pillars_016voxel_kitti/model.pdparams基于预训练模型进行Fintune:

!python tools/train.py --config configs/centerpoint/centerpoint_pillars_016voxel_minikitti.yml --save_dir ./output_kitti --num_workers 3 --save_interval 5 --model https://bj.bcebos.com/paddle3d/models/centerpoint//centerpoint_pillars_016voxel_kitti/model.pdparams

模型评估

模型训练完成后,可以评估模型的精度:

!python tools/evaluate.py --config configs/centerpoint/centerpoint_pillars_016voxel_minikitti.yml --model https://bj.bcebos.com/paddle3d/models/centerpoint//centerpoint_pillars_016voxel_kitti/model.pdparams --batch_size 1 --num_workers 3

模型导出

在部署之前,需要将训练时保存的动态图模型文件导出成推理引擎能够加载的静态图模型文件。

!python tools/export.py --config configs/centerpoint/centerpoint_pillars_016voxel_minikitti.yml --model ./output_kitti/epoch_20/model.pdparams --save_dir ./output_kitti_inference

模型部署

CenterPoint支持使用C++和Python语言部署,C++部署方式可以参考Paddle3D CenterPoint C++部署文档。本项目采用基于Paddle Inference推理引擎,使用Python语言进行部署。

进入python部署代码所在目录:

cd deploy/centerpoint/python

指定模型文件所在路径、待预测点云文件所在路径,执行预测:

!python infer.py --model_file /home/aistudio/Paddle3D/output_kitti_inference/centerpoint.pdmodel --params_file /home/aistudio/Paddle3D/output_kitti_inference/centerpoint.pdiparams --lidar_file /home/aistudio/Paddle3D/datasets/KITTI/training/velodyne/000104.bin --num_point_dim 4

对预测结果进行可视化,更为直观地展示预测效果。我们将预测结果保存至文件pred.txt中,便于可视化脚本加载。通过指定--draw_threshold可以过滤掉低分预测框:

!python /home/aistudio/show_lidar_pred_on_image.py --calib_file /home/aistudio/Paddle3D/datasets/KITTI/training/calib/000104.txt --image_file /home/aistudio/Paddle3D/datasets/KITTI/training/image_2/000104.png --label_file /home/aistudio/Paddle3D/datasets/KITTI/training/label_2/000104.txt --pred_file pred.txt --save_dir ./ --draw_threshold 0.16

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐