OpenPCDet——nuScenes数据集训练BEVFusion/TransFusion_L
引言
OpenPCDet环境搭建参考:【3D目标检测】环境搭建(OpenPCDet、MMdetection3d)
源码地址:OpenPCDet:https://github.com/open-mmlab/OpenPCDet
自定义数据集训练参考:【3D目标检测】OpenPCDet自定义数据集训练
1 nuScenes数据集准备
nuScenes数据集官网
首先需要注册登录,找到如图进行下载:
可以先下载v1.0-mini
数据集测试,有条件的基础上下载全部数据集。
1.1 数据集准备和预处理
按照OpenPCDet的要求准备nuScenes数据结构:
最好放在OpenPCDet/data
文件夹下
或者可以使用软连接
ln -s /opt/data/DATASETS/nuscenes /opt/data/CNN_3D/OpenPCDet/data
OpenPCDet
├── data
│ ├── nuscenes
│ │ │── v1.0-trainval (or v1.0-mini if you use mini)
│ │ │ │── samples
│ │ │ │── sweeps
│ │ │ │── maps
│ │ │ │── v1.0-trainval
├── pcdet
├── tools
1.2 生成标准数据格式
安装必要依赖包
pip install nuscenes-devkit==1.0.5 -i https://pypi.tuna.tsinghua.edu.cn/simple
修改文件路径如下:
- OpenPCDet/pcdet/datasets/nuscenes/
nuscenes_dataset.py
修改导入本地库路径
修改配置信息
修改函数create_nuscenes_info导入库路径
- OpenPCDet/tools/cfgs/dataset_configs/
nuscenes_dataset.yaml
运行代码:
1. 根据上述步骤则可以直接运行
python nuscenes_dataset.py
2. 官网
#仅使用点云数据
python -m pcdet.datasets.nuscenes.nuscenes_dataset --func create_nuscenes_infos \
--cfg_file tools/cfgs/dataset_configs/nuscenes_dataset.yaml \
--version v1.0-trainval
# 使用多模态数据(点云+图像)
python -m pcdet.datasets.nuscenes.nuscenes_dataset --func create_nuscenes_infos \
--cfg_file tools/cfgs/dataset_configs/nuscenes_dataset.yaml \
--version v1.0-trainval \
--with_cam
终端成功运行如下:
文件夹内生成如下文件:
2 训练BEVFusion
2.1 下载预训练权重
2.2 修改训练配置文件bevfusion.yaml
tools/cfgs/nuscenes_models/bevfusion.yaml
两处修改如下图:
2.3 BEVFusion模型训练
修改train.py文件,主要修改以下配置
注意 batch_size=3; epochs=6
报错!
原因分析:
numpy版本太高和老版本不兼容
Bug解决:
pip install numpy==1.23.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
训练完毕如下图所示(笔者只跑了6轮,效果并不好):
2.4 BEVFusion模型评估
官网指令:
bash scripts/dist_test.sh ${NUM_GPUS} --cfg_file cfgs/nuscenes_models/bevfusion.yaml
–ckpt …/output/cfgs/nuscenes_models/bevfusion/default/ckpt/checkpoint_epoch_6.pth
笔者使用指令:
修改test.py文件如下:
def parse_config():
parser = argparse.ArgumentParser(description='arg parser')
parser.add_argument('--cfg_file', type=str, default='/media/ll/L/llr/a2023_my_3d/OpenPCDet/tools/cfgs/nuscenes_models/bevfusion.yaml', help='specify the config for training') # 配置文件路径
parser.add_argument('--batch_size', type=int, default=1, required=False, help='batch size for training') # 显存溢出的时候则可以减小batch_size
parser.add_argument('--ckpt', type=str, default='/media/ll/L/llr/a2023_my_3d/OpenPCDet/ckpt/cbgs_bevfusion.pth', help='checkpoint to start from') # 权重文件
说明:
根据上述步骤,同理可以跑通nuscenes_models下的所有模型
笔者又跑了transfusion_lidar
模型,如下如所示: