代码复现 :SECOND pytorch版本 ①
源码: https://github.com/traveller59/second.pytorch
“ Alpha”表示可能存在许多错误,配置格式可能会更改,spconv API可能会更改。
仅支持python 3.6 ,pytorch 1.0.0 。 在Ubuntu 16.04 / 18.04 / Windows 10中进行了测试。我们只关注KITTI数据集。
News
- 2019-4-1:发布了SECOND V1.6.0 alpha:New Data
API,NuScenes支持,PointPillars支持,fp16和multi-gpu支持。 - 2019-3-21:SECOND V1.5.1(较小的改进和错误修复)发布了!
- 2019-1-20:SECOND V1.5发布! 基于稀疏卷积的网络。
有关更多详细信息,请参见发行说明。
警告:您应在每次更新代码后重新运行信息生成。
KITTI验证集中的性能 (50/50 split)
car.fhd.config
160 epochs (25 fps in 1080Ti):
Car AP@0.70, 0.70, 0.70:
bbox AP:90.77, 89.50, 80.80
bev AP:90.28, 87.73, 79.67
3d AP:88.84, 78.43, 76.88
car.fhd.config
50 epochs 超收敛 (6.5 hours) (25 fps in 1080Ti):
Car AP@0.70, 0.70, 0.70:
bbox AP:90.78, 89.59, 88.42
bev AP:90.12, 87.87, 86.77
3d AP:88.62, 78.31, 76.62
car.fhd.onestage.config
50 epochs 超收敛 (6.5 hours) (25 fps in 1080Ti):
Car AP@0.70, 0.70, 0.70:
bbox AP:97.65, 89.59, 88.72
bev AP:90.38, 88.20, 86.98
3d AP:89.16, 78.78, 77.41
NuScenes验证集中的性能(all.pp.config,NuScenes微型训练集,3517个样本,而非v1.0-mini)
car Nusc dist AP@0.5, 1.0, 2.0, 4.0
62.90, 73.07, 76.77, 78.79
bicycle Nusc dist AP@0.5, 1.0, 2.0, 4.0
0.00, 0.00, 0.00, 0.00
bus Nusc dist AP@0.5, 1.0, 2.0, 4.0
9.53, 26.17, 38.01, 40.60
construction_vehicle Nusc dist AP@0.5, 1.0, 2.0, 4.0
0.00, 0.00, 0.44, 1.43
motorcycle Nusc dist AP@0.5, 1.0, 2.0, 4.0
9.25, 12.90, 13.69, 14.11
pedestrian Nusc dist AP@0.5, 1.0, 2.0, 4.0
61.44, 62.61, 64.09, 66.35
traffic_cone Nusc dist AP@0.5, 1.0, 2.0, 4.0
11.63, 13.14, 15.81, 21.22
trailer Nusc dist AP@0.5, 1.0, 2.0, 4.0
0.80, 9.90, 17.61, 23.26
truck Nusc dist AP@0.5, 1.0, 2.0, 4.0
9.81, 21.40, 27.55, 30.34
安装
1. Clone code
git clone https://github.com/traveller59/second.pytorch.git
cd ./second.pytorch/second
2.安装依赖项python软件包
建议使用Anaconda软件包管理器。
conda install scikit-image scipy numba pillow matplotlib
pip install fire tensorboardX protobuf opencv-python
If you don’t have Anaconda:
pip install numba scikit-image scipy pillow
按照spconv中的说明安装spconv。
如果要以fp16混合精度进行训练(在RTX系列,Titan V / RTX和Tesla V100中训练得更快,但我只有1080Ti),则需要安装apex。
如果要使用NuScenes数据集,则需要安装nuscenes-devkit。
3.为numba设置cuda(将在1.6.0版中删除)
您需要为numba.cuda添加以下环境变量,您可以将它们添加到~/.bashrc
中:
export NUMBAPRO_CUDA_DRIVER=/usr/lib/x86_64-linux-gnu/libcuda.so
export NUMBAPRO_NVVM=/usr/local/cuda/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda/nvvm/libdevice
4.将second.pytorch/ 添加到PYTHONPATH
KITTI数据集准备
下载KITTI数据集并首先创建一些目录:
└── KITTI_DATASET_ROOT
├── training <-- 7481 train data
| ├── image_2 <-- for visualization
| ├── calib
| ├── label_2
| ├── velodyne
| └── velodyne_reduced <-- empty directory
└── testing <-- 7580 test data
├── image_2 <-- for visualization
├── calib
├── velodyne
└── velodyne_reduced <-- empty directory
Then run 数据生成:
python create_data.py kitti_data_prep--data_path=KITTI_DATASET_ROOT
NuScenes数据集暂不用。。。
修改配置文件
在配置文件中需要配置一些路径:
train_input_reader: {
...
database_sampler {
database_info_path: "/path/to/dataset_dbinfos_train.pkl"
...
}
dataset: {
dataset_class_name: "DATASET_NAME"
kitti_info_path: "/path/to/dataset_infos_train.pkl"
kitti_root_path: "DATASET_ROOT"
}
}
...
eval_input_reader: {
...
dataset: {
dataset_class_name: "DATASET_NAME"
kitti_info_path: "/path/to/dataset_infos_val.pkl"
kitti_root_path: "DATASET_ROOT"
}
}
使用
训练
我建议使用script.py
进行训练和评估。 有关更多详细信息,请参见script.py
。
使用单个GPU训练
python ./pytorch/train.py train --config_path=./configs/car.fhd.config --model_dir=/path/to/model_dir
使用多个GPU进行训练(需要测试,我只有一个GPU)
假设您有4个GPU,并希望使用3个GPU进行训练:
CUDA_VISIBLE_DEVICES=0,1,3 python ./pytorch/train.py train --config_path=./configs/car.fhd.config --model_dir=/path/to/model_dir --multi_gpu=True
注意:配置文件中的batch_size和num_workers是每个GPU的,如果使用multi-gpu,它们将乘以GPU的数量。 不要手动修改它们。
您需要在配置文件中修改总计步骤。 例如,car.lite.config和单个GPU的50个epochs= 15500步,如果使用4个GPU,则需要将step
和steps_per_eval
除以4。
用fp16训练(混合精度)
修改配置文件,将enable_mixed_precision设置为true。
- 如果要训练新模型,请确保 "
/path/to/model_dir
"不存在。如果model_dir不存在,将创建一个新目录,否则将读取其中的checkpoints。 - 训练过程对于1080Ti默认使用batchsize = 6作为默认值,如果GPU的内存较少,则需要减小batchsize。
- 目前仅支持单GPU训练,但在单个1080Ti中训练模型仅需要20小时(165个epoch),并且仅需要50个epoch以达到78.3 AP,with super converge in car moderate 3D in Kitti validation dateset。
评估
python ./pytorch/train.py evaluate --config_path=./configs/car.fhd.config --model_dir=/path/to/model_dir --measure_time=True --batch_size=1
检测结果将作为result.pkl
文件保存在model_dir / eval_results / step_xxx
中,或者如果使用--pickle_result = False
,则另存为官方KITTI标签格式。
预训练模型
您可以在Google云端硬盘中下载经过预训练的模型。 car_fhd
模型对应于car.fhd.config
。
请注意,此预训练模型在稀疏卷积错误修复之前进行了训练,因此评估结果可能会稍差一些。
Docker(不建议使用。由于网络问题,我无法推送Docker。)
您可以使用prebuilt docker进行测试:
docker pull scrin/second-pytorch
Then run:
nvidia-docker run -it --rm -v /media/yy/960evo/datasets/:/root/data -v $HOME/pretrained_models:/root/model --ipc=host second-pytorch:latest
python ./pytorch/train.py evaluate --config_path=./configs/car.config --model_dir=/root/model/car
尝试 Kitti Viewer Web
推理步骤
首先,必须单击加载按钮并成功加载。
- 输入checkpointPath和configPath。
- 单击buildNet。
- 点击inference。
尝试Kitti Viewer(不建议使用)
训练之前,应使用基于pyqt和pyqtgraph的kitti查看器检查数据。
运行python ./kittiviewer/viewer.py
,检查以下图片以使用kitti查看器:
概念
- Kitti激光雷达box
Kitti激光雷达盒由7个元素组成:[x,y,z,w,l,h,rz],见图。
所有训练和推理代码均使用kitti框格式。 因此,我们需要在训练之前将其他格式转换为KITTI格式。
- Kitti相机box
Kitti相机盒包含7个元素:[x,y,z,l,h,w,ry]。