技能名称:PointPillars 点云3D目标检测(tao-train-pointpillars)
描述:PointPillars 用于从 LiDAR 点云进行3D目标检测。通过基于柱状体的表示将点云编码为伪图像,然后应用2D检测。用于自动驾驶/机器人领域。
许可证:Apache-2.0 兼容性:需要 docker + nvidia-container-toolkit 作者:NVIDIA Corporation 允许工具:Read Bash 标签:point、cloud、3d、detection
PointPillars
PointPillars 用于从 LiDAR 点云进行3D目标检测。通过基于柱状体(pillar)的表示将点云编码为伪图像,然后应用2D检测。适用于自动驾驶和机器人领域。
通常需从头训练。若要恢复训练,请提供 train.resume_training_checkpoint_path 路径。
对于 TAO Deploy TensorRT 操作(gen_trt_engine、TensorRT 的 evaluate 和 inference),请先阅读 references/tao-deploy-pointpillars.md。部署规范模板位于 references/ 目录,文件名前缀为 spec_template_deploy_*.yaml。
打包的 PyTorch PointPillars CLI 支持 dataset_convert、train、evaluate、inference、export、prune。没有单独的 retrain 子命令;重训剪枝模型时,使用 pointpillars train -e …,并在 train.pruned_model_path 中指定剪枝模型路径。
数据类架构
生成的 TAO Core schema 文件位于 schemas/<action>.schema.json,schemas/manifest.json 列出可用操作。每个 schema 还从其顶层 default 生成 references/spec_template_<action>.yaml 模板。AutoML 启用状态在 references/skill_info.yaml 中的 automl_enabled 字段声明。若要运行 AutoML,需要具备对应操作的 schema 和 spec 模板。
训练操作策略
该模型在模型层启用 AutoML。默认 automl_policy 为 on。当用户要求关闭 AutoML、禁用 HPO 或普通训练时,将本次运行的 automl_policy 置为 off。若 automl_policy=on 且具备 train.schema.json 和 spec_template_train.yaml,则通过 tao-skill-bank:tao-run-automl 技能来执行训练。非训练动作(evaluate、inference、export 等)仍在本技能中处理。
训练要求
- 数据集类型:pointpillars
- 数据格式:default
- 监控指标:loss
逐操作数据集要求
| 动作 | Spec 键 | 数据来源 | 文件/路径 |
|---|---|---|---|
| dataset_convert | dataset.data_path | id | 无 |
| evaluate | dataset.data_path | train_datasets | 无 |
| evaluate | dataset.data_info_path | train_datasets | /results/{dataset_convert_job_id}/results_dir/data_info/ |
| export | dataset.data_info_path | train_datasets | /results/{dataset_convert_job_id}/results_dir/data_info/ |
| inference | dataset.data_info_path | train_datasets | /results/{dataset_convert_job_id}/results_dir/data_info/ |
| prune | dataset.data_info_path | train_datasets | /results/{dataset_convert_job_id}/results_dir/data_info/ |
| retrain | dataset.data_info_path | train_datasets | /results/{dataset_convert_job_id}/results_dir/data_info/ |
| train | dataset.data_info_path | train_datasets | /results/{dataset_convert_job_id}/results_dir/data_info/ |
说明:所有动作都必须提供 dataset.data_path 和 dataset.data_info_path,后者的路径通常来自 dataset_convert 作业输出。
常用规范覆盖
数据源覆盖是强制性的。例如设置:
- DATA_ROOT = s3://bucket/data/pointpillars
- DATA_INFO = /results/{dataset_convert_job_id}/results_dir/data_info
- CHECKPOINT = /results/{train_job_id}/results_dir/checkpoint_epoch_1.pth
- PRUNED_MODEL = /results/{prune_job_id}/results_dir/pruned_0.1.tlt
原始 PointPillars 目录必须是已解压的文件夹,含有 train/lidar、train/label、val/lidar、val/label 子目录。若数据为分开的 train/val 压缩包,需都解压到同一个根目录,并将 dataset.data_path 指向该根。
对于本地 Docker,DATA_INFO 必须能在容器内访问。若主机结果目录挂载到 /results,则容器内路径可能是 /results/results/<job_id>/results_dir/data_info。不要跨运行根使用错误路径。
在 AutoML 训练前,需在当前 RESULTS_ROOT 下生成 dataset_convert 产物,并确认训练容器可看到 dbinfos_train.pkl、infos_train.pkl、infos_val.pkl。
评估数据集
可选。验证数据(val.tar.gz)独立于训练数据。用于 mAP 评估。
重要参数
- train.num_epochs:默认 80,PointPillars 需要较多 epoch 收敛。
- train.lr:学习率,默认 0.003,配合 adam_onecycle 调度器。
- dataset.class_names:3D 目标类别列表,默认 7 类(KITTI 风格)。
- dataset.data_path:点云数据目录路径。
- dataset.data_info_path:dataset_convert 生成的数据信息目录。
- dataset.point_cloud_range:点云空间范围。
- model.dense_head.anchor_generator_config:每类锚点配置。
多 GPU/多节点
启动方式为 torchrun(非 Lightning)。使用 PyTorch DistributedDataParallel。
| Spec 键 | 说明 | 默认 |
|---|---|---|
| train.num_gpus | 每节点 GPU 数 | 1 |
| train.gpu_ids | GPU 索引 | [0] |
| train.num_nodes | 节点数 | 1 |
环境变量:WORLD_SIZE、NODE_RANK、MASTER_ADDR、MASTER_PORT、NUM_GPU_PER_NODE 等由编排器设置。
硬件要求
最少 1 个 GPU,推荐 4 个。建议每 GPU 16GB 以上显存(V100/A100)。主要瓶颈是点云数据 I/O。
错误模式
- 如果没有先运行 dataset_convert,训练会失败。
- point_cloud_range 与传感器范围不一致时检测结果差。
- 检查点 epoch 编号可能与 status.json 相差 1。
- 检查点文件通常为 checkpoint_epoch_N.pth,不要误用 model.pth。
- 剪枝和重训需要非空 key,否则会生成空 pruned 模型文件。
- 即使有“Execution status: PASS”和退出码 0,某些不完整结果也可能失败,要检查 status.json 和产物。
- 本地 Docker 时必须同时设置顶层 results_dir 及行为特定 results_dir。
规范参数与父模型推断
| 动作 | Spec 字段 | 推断函数 | 含义 |
|---|---|---|---|
| evaluate | evaluate.checkpoint | parent_model | 从父作业结果选择模型 |
| export | export.checkpoint | parent_model | 同上 |
| inference | inference.checkpoint | parent_model | 同上 |
| prune | prune.model | parent_model | 同上 |
| retrain | train.pruned_model_path | parent_model | 同上 |
| train | train.resume_training_checkpoint_path | resume_model | 从当前作业结果选择模型 |
部署
参考 references/tao-deploy-pointpillars.md