OpenPCDet 训练KITTI

数据集配置位于tools / cfgs / dataset_configs内,模型配置位于针对不同数据集的tools / cfgs中。

数据集准备

目前,我们提供了KITTI数据集和NuScenes数据集的数据加载器,并且正在支持更多数据集。

KITTI数据集

  • 请下载官方的KITTI 3D对象检测数据集,并按以下方式组织下载的文件(可以从[road plane]下载road planes,这对于训练中的数据增强是可选的):
  • 注意:如果您已经有来自的数据信息pcdet v0.1,则可以选择使用旧的信息,并将tools / cfgs / dataset_configs / kitti_dataset.yaml中的DATABASE_WITH_FAKELIDAR选项设置为True。第二个选择是您可以再次创建infos和gt数据库,并保持配置不变。
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

会在kitti目录下面生成5个pkl文件 :
在这里插入图片描述

NuScenes数据集

请下载官方的NuScenes 3D对象检测数据集,并按以下方式组织下载的文件:

OpenPCDet
├── data
│   ├── nuscenes
│   │   │── v1.0-trainval (or v1.0-mini if you use mini)
│   │   │   │── samples
│   │   │   │── sweeps
│   │   │   │── maps
│   │   │   │── v1.0-trainval  
├── pcdet
├── tools

通过运行以下命令安装nuscenes-devkitwith版本1.0.5:

pip install nuscenes-devkit==1.0.5

通过运行以下命令来生成数据信息(可能需要几个小时):

python -m pcdet.datasets.nuscenes.nuscenes_dataset --func create_nuscenes_infos \ 
    --cfg_file tools/cfgs/dataset_configs/nuscenes_dataset.yaml \
    --version v1.0-trainval

Waymo Open数据集

  • 请下载官方的Waymo Open Dataset,包括训练数据training_0000.tar ~training_0031.tar和验证数据validation_0000.tar ~ validation_0007.tar。
  • 将上述所有xxxx.tar文件解压缩到以下目录data/waymo/raw_data(您可以获得798 train tfrecord和202 val tfrecord):
OpenPCDet
├── data
│   ├── waymo
│   │   │── ImageSets
│   │   │── raw_data
│   │   │   │── segment-xxxxxxxx.tfrecord
|   |   |   |── ...
|   |   |── waymo_processed_data
│   │   │   │── segment-xxxxxxxx/
|   |   |   |── ...
│   │   │── pcdet_gt_database_train_sampled_xx/
│   │   │── pcdet_waymo_dbinfos_train_sampled_xx.pkl   
├── pcdet
├── tools

waymo-open-dataset通过运行以下命令来安装官方:

pip3 install --upgrade pip
 # tf 2.0.0 
pip3 install waymo-open-dataset-tf-2-0-0 == 1.2.0 --user

通过运行以下命令从tfrecord提取点云数据并生成数据信息(这需要几个小时,您可以参考data/waymo/waymo_processed_data以查看已处理了多少条记录):

python -m pcdet.datasets.waymo.waymo_dataset --func create_waymo_infos \
    --cfg_file tools/cfgs/dataset_configs/waymo_dataset.yaml

请注意,waymo-open-dataset如果您之前已经处理过数据,则无需安装,也不需要使用官方Waymo Metrics进行评估。

训练与测试

所有的配置文件都在tools/cfgs/中。

训练模型

目前,要训练PointPillar或SECOND或PartA2,--batch_size取决于您训练GPU的数量,因为我们使用$ {BATCH_SIZE} = 4 * $ {NUM_GPUS},即--batch_size 32来训练8个GPU。

您可以选择添加其他命令行参数--batch_size ${BATCH_SIZE}--epochs ${EPOCHS}指定首选参数。extra_tag表示储存路径的一个文件夹名,最好和训练的参数保持一致

使用多个GPU或多台机器进行训练

sh scripts/dist_train.sh ${NUM_GPUS} \ 
    --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE}

#或多台机器

sh scripts/slurm_train.sh ${PARTITION} ${JOB_NAME} ${NUM_GPUS} \ 
    --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE}

使用单个GPU进行训练:

python train.py --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE} 

我的:

python train.py --cfg_file=cfgs/kitti_models/pointpillar.yaml --batch_size=3 --epochs=100 --extra_tag 'mydata_1'

OpenPCDet 训练KITTI_第1张图片
在这里插入图片描述

测试和评估预训练的模型

使用预训练的模型进行测试:

python test.py --cfg_file $ {CONFIG_FILE} --batch_size $ {BATCH_SIZE} --ckpt $ {CKPT}

例如,要使用上面提供的Part-A ^ 2模型进行测试,请运行以下命令(此处我们添加–set来修改一些默认参数,使其与所提供的Part-A ^ 2模型的训练设置相匹配,并且 其他提供的模型不需要添加它):

python test.py --cfg_file cfgs/PartA2_car.yaml --batch_size 4 --ckpt PartA2.pth \ 
    --set MODEL.RPN.BACKBONE.NAME UNetV0 MODEL.RPN.RPN_HEAD.ARGS use_binary_dir_classifier:True

我的:
OpenPCDet 训练KITTI_第2张图片OpenPCDet 训练KITTI_第3张图片

要测试特定训练设置的所有保存的检查点并在Tensorboard上绘制性能曲线,请添加–eval_all参数:

python test.py --cfg_file ${CONFIG_FILE} --batch_size 4? --eval_all

要使用多个GPU进行测试:

sh scripts/dist_test.sh ${NUM_GPUS} \
    --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE}

# or

sh scripts/slurm_test_mgpu.sh ${PARTITION} ${NUM_GPUS} \ 
    --cfg_file ${CONFIG_FILE} --batch_size ${BATCH_SIZE}

我的,储存路径命名为'mydata_1'

CUDA_VISIBLE_DEVICES=3,6,7 python -m torch.distributed.launch --nproc_per_node=3 train.py --cfg_file cfgs/kitti_models/pv_rcnn.yaml --launcher pytorch --extra_tag 'mydata_1'

在这里插入图片描述用几张卡–nproc_per_node的值就去取多少,防止溢出

你可能感兴趣的:(PCDet)