公司动态

5 步跑通 MMDetection3D:从环境搭建到训练出你的第一个 3D 检测模型

📅 2026/8/24 21:35:02
5 步跑通 MMDetection3D:从环境搭建到训练出你的第一个 3D 检测模型
5 步跑通 MMDetection3D从环境搭建到训练出你的第一个 3D 检测模型【免费下载链接】mmdetection3dOpenMMLabs next-generation platform for general 3D object detection.项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection3dMMDetection3D 是 OpenMMLab 的 3D 目标检测工具箱给它一帧激光雷达点云或几张环视图像它回你一叠带类别、尺寸和朝向的 3D 检测框。这篇文章按「先跑通、再训练」的思路走完整流程——装环境、喂 KITTI/nuScenes 数据、训一个 PointPillars、看懂评估结果——中间每一步都告诉你改哪里、看哪个文件。全程 5 个环节跟着敲就行先看它能干什么再决定从哪入手3D 目标检测和你熟悉的 2D 检测最大的区别是输入形态不一样而输入形态直接决定了你的标注成本和训练成本。MMDetection3D 把四种输入形态都接好了配置里换个 type 就能切换输入形态特点典型数据集配置参考configs 目录纯点云不需要相机标定标注、训练都便宜KITTI、nuScenesconfigs/pointpillars/单目图像只依赖一个相机部署便宜精度天花板略低KITTI-monoconfigs/pgd/、configs/smoke/多目图像多相机环视无激光雷达nuScenesconfigs/mvfcos3d/点云 图像融合精度最高工程成本也最高nuScenesconfigs/centerpoint/、projects/BEVFusion新手最容易纠结的其实是选数据集。把两条线摆一起看决策就简单了维度KITTInuScenes体量点云约 29 GB一杯咖啡的功夫下完数百 GB建议放高速网盘/内网类别3 个室外类Car/Pedestrian/Cyclist10 个类别 6 环相机评估AP 系列easy/medium/hard 分档mAP NDS 综合分训练显存单卡约 5~6 GB 起步单卡 16 GB 起步小显存开 FP16结论一句话想快速验证整条流水线选 KITTI想贴近真实自动驾驶业务选 nuScenes。两条线在仓库里都有现成配置下面的流程两条都能套。5 分钟装好环境先说硬性要求Linux推荐、Python 3.8、PyTorch 1.8CUDA 有最好、没有也能跑推理。整套命令大概 5 分钟重点是 mmcv 版本要和你的 PyTorch 对得上这是后面八成装不上问题的根源。# 1. 建环境 conda create -n mmdet3d py3.8 -y conda activate mmdet3d # 2. 装 PyTorchCUDA 11.8 为例按你机器的 CUDA 版本选 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 3. 装 MIMOpenMMLab 的包管理器和两件套 pip install -U openmim mim install mmengine mim install mmcv2.1.0 # 4. 安装 MMDetection3D源码安装便于改代码 git clone https://gitcode.com/gh_mirrors/mm/mmdetection3d cd mmdetection3d pip install -v -e .装完先跑三条验证命令全绿才算装好python -c import torch; print(torch.__version__, torch.cuda.is_available()) python -c import mmcv; print(mmcv.__version__) python -c import mmdet3d; print(mmdet3d.__version__)GPU 机器第二行应该打印True。只有 CPU 的机器也能跑通推理就是慢一些后面演示命令里把--device改成cpu即可。把数据喂进去KITTI 和 nuScenes 两条线先明确一点3D 检测训练吃的不只是原始点云还有一份「索引文件」infos。它把点云路径、3D 标注、内外参打包成 pkl训练、评估、推理全靠它。原始数据下好后必须跑一遍转换脚本生成它漏掉这步后面一定会报路径错。KITTI目录摆正一条命令生成 infos从 KITTI 官网拿三样东西Velodyne 点云约 29 GB、训练集标注、相机标定按官方结构解压后应该长这样data/kitti/ ├── training/ │ ├── velodyne/ # 点云 .bin │ ├── label_2/ # 3D 标注 │ └── calib/ # 相机内外参 └── testing/ ├── velodyne/ └── calib/然后进仓库根目录跑转换脚本在tools/create_data.pydata/kitti指你解压的位置python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti跑完data/kitti/里会多出kitti_infos_train.pkl、kitti_infos_val.pkl等文件数据集就喂进去了。nuScenes下载更费时间流程一样nuScenes 体量大很多官方在tools/dataset_converters/nuscenes_converter.py里提供了下载加转换的一体化脚本# 下载 转换一步到位需要先把官方 devkit 装上脚本头部有说明 python tools/dataset_converters/nuscenes_converter.py create_nuscenes_info \ --root-path ./data/nuscenes --out-dir ./data/nuscenes转换完成后把配置里的data_root指向你的目录即可。nuScenes 单卡显存约 16 GB显存吃紧就选带amp的 FP16 配置显存能压到 8 GB 出头。训练出第一个 PointPillars 模型配置里你只需要关心这几处MMDetection3D 的配置全是 Python 文件靠_base_继承拼装你不用读懂每一行。以configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py为例真正决定训练什么、怎么训练的就下面这几处参数位置含义class_names配置头部要检测哪些类别改数据集必改这里point_cloud_range配置头部点云有效范围超出范围的点会被过滤voxel_size/max_voxels体素化层继承自_base_点云怎么切格子、最多保留多少格子db_sampler配置中部难例采样每个 batch 额外塞进多少真车train_dataloader.samples_per_gpu数据加载段单卡 batch sizeOOM 时第一个调它注意一个坑如果你把类别从 Car 单类改成 3 类num_classes和 anchor 的sizes数量要同步改否则训练时直接报维度错误。单卡和多卡就两条命令训练入口在tools/train.py多卡脚本是tools/dist_train.sh名字里的8xb6表示 8 卡 × 每卡 6 个样本单卡跑时它不影响正确性只是慢# 单卡 python tools/train.py configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py # 多卡8 卡 bash tools/dist_train.sh configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py 8训练产物在work_dirs/下包括日志 json 和检查点best_*.pth/last_*.pth。KITTI 配置是每轮验证一次nuScenes 默认 24 轮评一次train_cfg里的val_interval。跑的时候盯两样loss 是否平稳下降、周期性验证指标是否在涨两者都正常就可以让它安静跑完。看懂你的模型评估、可视化和快速验证评估跑一遍测试集拿指标python tools/test.py \ configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py \ work_dirs/xxx/best_ckpts/best_mAP_xxxx.pth \ --eval mAPKITTI 会输出 bbox / bev / 3d / aos 四种 APeasy、medium、hard 三档nuScenes 看 mAP 和 NDS。数值和官方模型 zoo 里的预训练结果对得上说明你的训练没有跑偏。可视化一张点云上的框长什么样仓库自带一份 demo 点云demo/data/kitti/000008.bin和对应的相机图demo/data/kitti/000008.png不用等训练完现在就可以用官方预训练权重跑一次推理看效果python demo/pcd_demo.py demo/data/kitti/000008.bin \ configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-car.py \ 预训练权重路径 \ --out-dir outputs --pred-score-thr 0.3outputs/下会生成可视化图片和预测 JSON。服务器没有显示器时--show会被自动关闭并打印一条警告属正常现象文件照存。想批量看测试集效果用tools/test.py加--show-dir也可以。数据本身也可以先肉眼检查。tools/misc/browse_dataset.py支持--max-image-size之类参数把数据集可视化出来训练前看一眼标注有没有对齐点云比训练完发现问题省时间python tools/misc/browse_dataset.py data/kitti/kitti_infos_train.pkl --max-num-visualize 10卡点自查表按出现频率排序八成问题都能在这里对号入座现象大概率原因处理import mmcv报错或编译失败MMCV 与 PyTorch/CUDA 版本不匹配按第 3 节重装对应版本用mmcv.utils.collect_env输出核对环境CUDA out of memory显存不够调小samples_per_gpu、换amp混合精度配置、或换 KITTI 小数据FileNotFoundError: ...infos*.pklinfos 没生成或data_root没指对重跑tools/create_data.py确认data_root指向真实目录服务器上打印Display device not found无显示设备属正常行为不用管结果仍会保存到--out-dirloss 正常但指标远低于预期数据没转对、类别/anchor 没对齐先肉眼browse_dataset核对标注再逐项比对配置里的class_names与num_classes想换自己的数据集从哪里下手分两种情况。标注格式和 KITTI 接近lidar 点云 文本标注的直接复用KittiDataset类改data_root和class_names再写个仿tools/dataset_converters/kitti_converter.py的脚本生成 infos基本就能训。差异较大的室内、自定义坐标系、特殊标注字段按官方文档里的新数据集教程重写数据集类和 infos 生成逻辑。无论哪种动手前先把两件事确认清楚你的点云在哪个坐标系下、标注框的坐标和点云是不是同一套。坐标系这块官方文档有专门的图文说明路径是docs/en/user_guides/coord_sys_tutorial.md建议花十分钟读完再写代码。跑通 KITTI 的 3 类之后nuScenes、Waymo、室内 ScanNet 都是换数据 换配置级别的迁移仓库里都有现成参照。祝训练顺利。【免费下载链接】mmdetection3dOpenMMLabs next-generation platform for general 3D object detection.项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection3d创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考