ADM PV-RCNN 的用法

ADM PV-RCNN 的用法

image

注意

本文档主要介绍 ADM PV-RCNN Docker 容器的使用,详情可参见 here.

该 Docker 容器包含从激光雷达到算法模型的完整流水线工作文件。该 Docker 容器可以处理由激光雷达采集的 Pcap 格式数据包。目前,它仅支持由 Robosense 生产的四种类型的激光雷达收集的数据: RS-LiDAR-16RS-LiDAR-32RS-LiDAR-64RS-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")。

最后更新于