Skip to content

Latest commit

 

History

History
 
 

iassd

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Not All Points Are Equal: Learning Highly Efficient Point-based Detectors for 3D LiDAR Point Clouds

IA-SSD

目录

一:引用

Zhang, Yifan, et al. "Not all points are equal: Learning highly efficient point-based detectors for 3d lidar point clouds." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition(CVPR). 2022.

二:简介

IA-SSD是一个single-stage & point-based的3D点云目标检测器。由于点云数据存在较大的冗余,论文提出了面向检测任务的instance-aware sampling方法来有效的采样出那些具有代表性的点,并引入contextual centroid perception来进一步预测更为精确的物体中心,以此来获得更准确的检测结果。IA-SSD以较小的显存占用和较快的速度在kitti和waymo数据集上取得了具有竞争力的结果。后续通过引入基于注意力机制的学习目标,进一步提升了IA-SSD在小目标和罕见类别上的效果。

三:模型库

  • IA-SSD在KITTI Val set数据集上的表现
模型 Car Mod
(IoU=0.7)
Ped. Mod
(IoU=0.5)
Cyc. Mod
(IoU=0.5)
模型下载 配置文件 日志 VDL
IA-SSD 79.13 58.51 71.32 model config log visualdl
IA-SSD(attention) 79.31 60.36 71.84 model \ log visualdl

注意: KITTI benchmark使用4张V100 GPU训练得出。

  • IA-SSD在Waymo Val set数据集上的表现
模型 Vec_L1
AP / APH
Vec_L2
AP / APH
Ped_L1
AP / APH
Ped_L2
AP / APH
Cyc_L1
AP / APH
Cyc_L2
AP / APH
模型下载 配置文件 日志 VDL
IA-SSD 73.90 / 73.27 64.84 / 64.28 70.36 / 60.75 62.93 / 54.13 68.21 / 66.25 66.06 / 64.16 - config log visualdl

注意: Waymo benchmark使用4张V100 GPU训练得出。另外,由于Waymo数据集License许可问题,我们无法提供在Waymo数据上训练出的模型权重,用户可以采用提供的模型配置训练出该精度。

四:训练 & 评估

KITTI数据集

1)数据准备

  • 目前Paddle3D中提供的IA-SSD模型支持在KITTI数据集上训练,因此需要先准备KITTI数据集,请在官网进行下载:
  1. Download Velodyne point clouds, if you want to use laser information (29 GB)

  2. training labels of object data set (5 MB)

  3. camera calibration matrices of object data set (16 MB)

  4. Download road plane infos from here (optional)

  • 下载数据集的划分文件列表:
wget https://bj.bcebos.com/paddle3d/datasets/KITTI/ImageSets.tar.gz
  • 将数据解压后按照下方的目录结构进行组织:
KITTI
|—— training
|   |—— label_2
|   |   |—— 000001.txt
|   |   |—— ...
|   |—— calib
|   |   |—— 000001.txt
|   |   |—— ...
|   |—— velodyne
|   |   |—— 000001.bin
|   |   |—— ...
|   |—— planes(optional)
|   |   |—— 000001.txt
|   |   |—— ...
|—— ImageSets
│   |—— test.txt
│   |—— train.txt
│   |—— trainval.txt
│   |—— val.txt
  • 在Paddle3D的目录下创建软链接 datasets/KITTI,指向到上面的数据集目录:
mkdir datasets
ln -s /path/to/kitti_dataset_root ./datasets
mv ./datasets/kitti_dataset_root ./datasets/KITTI
  • 生成训练时数据增强所需的真值库:
python tools/create_det_gt_database.py --dataset_name kitti --dataset_root ./datasets/KITTI --save_dir ./datasets/KITTI

--dataset_root指定KITTI数据集所在路径,--save_dir指定用于保存所生成的真值库的路径。该命令执行后,save_dir生成的目录如下:

KITTI
|—— ImageSets
│   |—— test.txt
│   |—— train.txt
│   |—— trainval.txt
│   |—— val.txt
|—— training
|   |—— label_2
|   |   |—— 000001.txt
|   |   |—— ...
|   |—— calib
|   |   |—— 000001.txt
|   |   |—— ...
|   |—— velodyne
|   |   |—— 000001.bin
|   |   |—— ...
|   |—— planes(optional)
|   |   |—— 000001.txt
|   |   |—— ...
|—— kitti_train_gt_database
|   |—— anno_info_train.pkl
|   |—— Car
|   |   |—— 4371_Car_7.bin
|   |   |—— ...
|   |—— Cyclist

2)训练

# 单卡训练
python tools/train.py --config configs/iassd/iassd_kitti.yaml --save_interval 1 --num_workers 4 --save_dir outputs/iassd_kitti

# 多卡训练,每隔1个epoch保存模型至save_dir
export CUDA_VISIBLE_DEVICES=0,1,2,3
fleetrun tools/train.py --config configs/iassd/iassd_kitti.yaml --save_interval 1 --num_workers 4 --save_dir outputs/iassd_kitti

训练启动参数介绍可参考文档全流程速览

3)评估

python tools/evaluate.py --config configs/iassd/iassd_kitti.yaml --batch_size 16 --num_workers 4 --model outputs/iass_kitti/epoch_80/model.pdparams

评估启动参数介绍可参考文档全流程速览

Waymo数据集

1)数据准备

  • 目前Paddle3D中提供的IA-SSD模型支持在Waymo数据集上训练,因此需要先准备Waymo数据集,请在官网进行下载,建议下载v1.3.2及之后的版本

  • 下载数据集的划分文件列表:

wget https://bj.bcebos.com/paddle3d/datasets/Waymo/1.3.2/ImageSets.tar.gz
  • 将数据解压后按照下方的目录结构进行组织:
waymo
|—— ImageSets
│   |—— train.txt
│   |—— val.txt
|—— raw_data(解压后的所有tfrecord文件)
|   |—— segment-xxxx.tfrecord
|   |—— ...
  • 在Paddle3D的目录下创建软链接 datasets/waymo,指向到上面的数据集目录:
mkdir datasets
ln -s /path/to/waymo_dataset_root ./datasets
mv ./datasets/waymo_dataset_root ./datasets/waymo
  • 解析raw_data中tfrecord序列中的每个frame数据,并生成训练时数据增强所需的真值库:
python tools/create_waymo_infos.py

该命令执行后,生成的目录信息如下:

waymo_dataset_root
|—— ImageSets
│   |—— train.txt
│   |—— val.txt
|—— raw_data(解压后的所有tfrecord文件)
|   |—— segment-xxxx.tfrecord
|   |—— ...
|—— waymo_processed_data_v1_3_2
|   |—— segment-xxxx
|   |   |—— 0000.npy
|   |   |—— ...
|   |   |—— segment-xxx.pkl
|   |—— segment-xxxx
|   |—— ...
|—— waymo_train_gt_database
|   |—— Cyclist
|   |   |—— xxxx.bin
|   |   |—— ...
|   |—— Pedestrian
|   |—— Vehicle
|   |—— waymo_train_gt_database_infos.pkl

train.txtval.txt存放train和val的tfrecord文件列表,waymo_processed_data_v1_3_2是解析后的数据,每一个frame的点云数据以.npy的形式存放,每一个frame的标注信息存放在同级目录的.pkl文件中。waymo_train_gt_database是采样出的真值物体点云和box坐标信息。

2)训练

waymo数据的一个segment是由连续的frames组成,我们遵循业界的普遍做法,对每个segment以间隔5进行采样,取到整个训练数据的20%约32k个frame用于训练

# 单卡训练
python tools/train.py --config configs/iassd/iassd_waymo.yaml --save_interval 1 --num_workers 4 --save_dir outputs/iassd_waymo

# 多卡训练,每隔1个epoch保存模型至save_dir
export CUDA_VISIBLE_DEVICES=0,1,2,3
fleetrun tools/train.py --config configs/iassd/iassd_waymo.yaml --save_interval 1 --num_workers 4 --save_dir outputs/iassd_waymo

训练启动参数介绍可参考文档全流程速览

3)评估

python tools/evaluate.py --config configs/iassd/iassd_waymo.yaml --batch_size 32 --num_workers 4 --model outputs/iassd_waymo/epoch_30/model.pdparams

评估启动参数介绍可参考文档全流程速览

导出 & 部署

模型导出

运行以下命令,将训练时保存的动态图模型文件导出成推理引擎能够加载的静态图模型文件。

python tools/export.py --config configs/iassd/iassd_kitti.yaml --model /path/to/model.pdparams --save_dir /path/to/output
参数 说明
config [必填] 训练配置文件所在路径
model [必填] 训练时保存的模型文件model.pdparams所在路径
save_dir [必填] 保存导出模型的路径,save_dir下将会生成三个文件:iassd.pdiparams iassd.pdiparams.infoiassd.pdmodel, iassd.pdmodeliassd.pdiparams用于后续模型推理

Python部署

目前IA-SSD的模型的Python部署只支持GPU和TensorRT加速。

1)环境依赖

  • Ubuntu 18.04
  • Python==3.7
  • CUDA==11.2
  • cuDNN==8.2.0
  • Paddle Inference==2.3.2
  • TensorRT_8.2.5.1

2)执行预测

进入deploy/iassd/python,运行以下命令,执行不同配置的推理(如果需要开启TensorRT加速,请下载带有TRT的PaddlePaddle版本):

  • 执行原生GPU预测:
python3.7 deploy/iassd/python/infer.py --model_file /path/to/iassd.pdmodel --params_file /path/to/iassd.pdiparams --lidar_file /.../000001.bin --gpu_id 0
  • 执行TRT_FP32预测:
python3.7 deploy/iassd/python/infer.py --model_file /path/to/iassd.pdmodel --params_file /path/to/iassd.pdiparams --lidar_file /.../000001.bin --gpu_id 0 --run_mode trt_fp32
  • 执行TRT_FP16预测:
python3.7 deploy/iassd/python/infer.py --model_file /path/to/iassd.pdmodel --params_file /path/to/iassd.pdiparams --lidar_file /.../000001.bin --gpu_id 0 --run_mode trt_fp16

执行上述命令后可以得到点云3D检测结果:

{'boxes': array([[ 5.9013954e+01,  1.6384674e+01, -8.3350408e-01,  4.2825608e+00,
         1.6158756e+00,  1.5127110e+00,  2.9756324e+00],
       [ 1.7047174e+00, -5.7812780e-01, -1.0745335e+00,  3.9012828e+00,
         1.5632588e+00,  1.4671783e+00, -2.4538052e+00],
       [ 4.6258511e+01, -4.5674486e+00, -6.3848123e-03,  1.6965854e+00,
         4.1198540e-01,  1.7212551e+00,  1.1975995e-01],
       [ 4.0068634e+01,  1.9198923e+01, -9.9642396e-01,  4.1801486e+00,
         1.6866810e+00,  1.6624287e+00, -1.9688037e-01]], dtype=float32),
'labels': array([0, 0, 2, 0]),
'scores': array([0.35698408, 0.2946543 , 0.21058026, 0.16246885], dtype=float32)}
参数 说明
--model_file 导出模型的结构文件iassd.pdmodel路径
--params_file 导出模型的参数文件iassd.pdiparams路径
--lidar_file 待预测的点云文件.bin格式
--gpu_id 用于预测的GPU ID
--run_mode 推理模式,支持fp32,trt_fp32,trt_fp16

C++部署

目前IA-SSD的模型的C++部署只支持GPU和TensorRT加速。

1)环境依赖

  • Ubuntu 18.04
  • Python==3.7
  • CUDA==11.2
  • cuDNN==8.2.0
  • Paddle Inference==2.3.2
  • TensorRT_8.2.5.1
  • GCC==8.2.0
  • CMake==3.16.0

2)编译

  • step 1:进入部署代码所在路径
cd deploy/iassd/cpp
  • step 2:下载Paddle Inference C++预测库

Paddle Inference针对是否使用GPU、是否支持TensorRT、以及不同的CUDA/cuDNN/GCC版本均提供已经编译好的库文件,请至 Paddle Inference C++预测库中下载符合的版本。

  • step 3:修改compile.sh中的编译参数 主要修改以下参数:
参数 说明
WITH_GPU 是否使用gpu。ON或OFF, OFF表示使用CPU,默认ON
USE_TENSORRT 是否使用TensorRT加速。ON或OFF,默认OFF
LIB_DIR Paddle Inference C++预测库所在路径
CUDNN_LIB cuDNN libcudnn.so所在路径
CUDA_LIB CUDA libcudart.so所在路径
TENSORRT_ROOT TensorRT安装路径。如果开启USE_TENSORRT加速,则需要填写该路径
  • step 4:编译
sh compile.sh

3)执行预测

执行命令参数说明

参数 说明
model_file 导出模型的结构文件iassd.pdmodel所在路径
params_file 导出模型的参数文件iassd.pdiparams所在路径
lidar_file 待预测的点云文件所在路径
rum_mode 预测配置,支持trt_fp32, trt_fp16,默认采用gpu_fp32执行预测
gpu_id 用于预测的GPU_ID
  • 执行原生GPU预测:
./build/main --model_file /path/to/iassd.pdmodel --params_file /path/to/iassd.pdiparams  --lidar_file /.../000001.bin --gpu_id 0
  • 执行trt_fp32预测:
./build/main --model_file /path/to/iassd.pdmodel --params_file /path/to/iassd.pdiparams --lidar_file /.../000001.bin --gpu_id 0 --run_mode trt_fp32
  • 执行trt_fp16预测:
./build/main --model_file /path/to/iassd.pdmodel --params_file /path/to/iassd.pdiparams --lidar_file /.../000001.bin --gpu_id 0 --run_mode trt_fp16