ADM PV-RCNN 的用法
注意
本文档主要介绍 ADM PV-RCNN Docker 容器的使用,详情可参见 here.
该 Docker 容器包含从激光雷达到算法模型的完整流水线工作文件。该 Docker 容器可以处理由激光雷达采集的 Pcap 格式数据包。目前,它仅支持由 Robosense 生产的四种类型的激光雷达收集的数据: RS-LiDAR-16、RS-LiDAR-32、RS-LiDAR-64和RS-LiDAR-128。未来将支持更多品牌和类型的激光雷达。
描述
ADM PV-RCNN 全称是自适应形变模块 PV-RCNN,是基于 PV-RCNN 设计的新的基于点和体素的三维物体检测模型(参见 github.com/open-mlab/OpenPCDet)。我们在 PV-RCNN 的基础上增加了自适应形变卷积模块和上下文融合模块。自适应形变卷积模块可以解决 PV-RCNN 模型在模糊场景和远距离场景中识别精度不高的问题,而上下文融合模块则可以降低 PV-RCNN 模型在点云分布不均匀区域的误报概率。我们在 KITTI 数据集上测试了所提出的 ADM PV-RCNN 模型,结果表明所提出的模型远高于 PV-RCNN 和其他类似模型。
下载
只需在安装了 Docker 的机器上输入 docker pull 663lab/ adm-pv-rcnn:v1.0
,即可下载 Docker 容器。
使用方法
1. 解析 LiDAR pcap 数据包
进入 Docker 容器,将 Robosense 激光雷达采集的 Pcap 格式数据包挂载到 Docker 容器中。
a. 转到 Robosense LiDAR SDK 文件夹
cd ~/catkin_ws/src/rslidar_sdk/
b. 将 Pcap 数据包转换为 Pcd 数据
▪︎ 将 config
目录下的 config.yaml
文件中的参数修改为相应参数,如将 msg_source
改为 3,将 pcap_path
改为 pcap 数据包的路径**,将 lidar_type
改为 LiDAR 的类型。
▪︎ 通过运行以下命令将 Pcap 数据包转换为 ROSBag 数据包:
roslaunch rslidar_sdk start.launch
▪︎ 转到存储 Pcap 数据包的目录。
▪︎ 运行以下命令修复 ROSBag 数据包:
rosbag reindex xxx.bag.active
rosbag fix xxx.bag.active result.bag
▪︎ 通过运行以下命令将 ROSBag 数据包转为 Pcd 数据:
rosrun pcl_ros bag_to_pcd result.bag ~/pcdfiles
转换后的 Pcd 数据文件存储在 /root/pcdfiles/
目录中。
2. 将激光雷达点云转换为标准化 bin 文件
a. 将 Pcd 数据文件转换为二进制 bin 数据文件
▪︎ 转到 Pcd 转 bin 项目文件夹
cd ~/pcd2bin/
▪︎ 修改当前目录下的 pcd2bin.cpp 文件,并将 pcd_path 和 bin_path 改为相应的路径。
▪︎ 运行以下命令编译并安装 Pcd-to-bin 项目:
mkdir build && cd build
cmake ... && make
▪︎ 运行以下命令生成二进制 bin 数据文件:
zsh ./bin2pcd
b. 将 bin 数据文件修改为标准化 bin 文件
▪︎ 进入 Modbin 项目文件夹:
cd ~/modbin/
▪︎ 运行以下命令生成标准化 bin 数据文件:
mkdir ~/modfiles
conda activate model
python modbin.py --ori_path ~/binfiles mod_path ~/modfiles
3. ADM PV-RCNN 的使用方法
a. 进入 ADM PV-RCNN 项目文件夹:
cd ~/ADM-PV-RCNN/
b. 将 ADM PV-RCNN src文件夹复制到OpenPCDet中:
zsh ./init.sh
c. 准备 Kitti 数据集:
请下载官方KITTI 3D物体检测数据集,并按如下方式组织下载的文件(道路平面可从[road plane]下载,这对于训练中的数据增强是可选的):
ADM-PV-RCNN ├── OpenPCDet │ ├── data │ │ ├── kitti │ │ │ │──ImageSets │ │ │ │──training │ │ │ │ ├──calib & velodyne & label_2 & image_2 & (optional: planes) │ │ │ │──testing │ │ │ │ ├──calib & velodyne & image_2 │ ├── pcdet │ ├── tools
▪︎ 通过运行以下命令生成数据信息:
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
d. 使用特定配置文件运行实验:
▪︎ 测试并评估预训练模型,您可以从这里下载我们的预训练模型。
• 进入tools目录:
cd OpenPCDet/tools
• 使用预训练模型进行测试:
python test.py --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE} --ckpt ${CKPT}
• 例如:
python test.py --cfg_file cfgs/kitti_models/def_pv_rcnn.yaml --batch_size 4 --ckpt ${SAVED_CKPT_PATH}/def_pv_rcnn.pth
▪︎ 训练模型:
• 使用多个GPU训练:
sh scripts/dist_train.sh ${NUM_GPUS} --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE} --epochs 80
• 例如:
sh scripts/dist_train.sh 8 --cfg_file cfgs/kitti_models/def_pv_rcnn.yaml --batch_size 16 --epochs 100
• 使用单个GPU训练:
python train.py --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE} --epochs 100
e. 快速演示
▪︎ 通过运行以下命令使用预训练模型和您的自定义点云数据运行演示:
python demo.py --cfg_file cfgs/kitti_models/adm_pv_rcnn.yaml --ckpt adm_pv_rcnn_epoch_100.pth --data_path ${POINT_CLOUD_DATA}
这里的 ${POINT_CLOUD_DATA}
可以是以下格式:
1). 您转换的自定义数据,如单个numpy文件 my_data.npy
。
2). 您转换的自定义数据,如单个bin文件 my_data.bin
。
3). 您转换的自定义数据,如包含多个点云数据的目录。
4). 原始KITTI .bin
数据,如 data/kitti/testing/velodyne/000010.bin
。
PS: 如果您有任何问题,请通过jensen.acm@gmail.com给我发邮件(请在邮件主题中注明"ADM PV-RCNN")。