This is the 3DSSD implementation rewritten based off OpenPCDet framework. The code is orginized by the guideline given in the official repo as the figure below:
- Update 5/12/2021: added 3D IoU loss
- Update 4/11/2021: added pointpainting
- Update 3/09/2021: supported multi-class prediction
The codes are tsted under the following environment:
- Ubuntu 20.04
- Python 3.7
- Pytorch 1.7.1
- CUDA 11.1
The procedure is identical to the office installation guide of OpenPCDet, you can also refer to the following:
-
Install required dependency by running
pip install -r requirements.txt
. -
Refer to the link to install spconv (although not used in the repo, install for the ease of not modifying the original codebase)
-
Install rotated IoU operator. Go to
pcdet/ops/Rotated_IoU/cuda_ops
folder, run the commandpython setup.py develop
. -
Install the OpenPCDet related libraries by running
python setup.py develop
-
Preprocess KITTI dataset by running the following command from project directory:
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
-
(Optional) If training with pointpainting, painted dataset should first be generated by
python -m pcdet.datasets.kitti.paint_kitti
from project root directory. After the dataset is generated, re-preprocess the ground truth database bypython -m pcdet.datasets.kitti.kitti_dataset_painted create_kitti_infos
Refer to visualization for visualization info.
Train the 3DSSD model by running the command in tools
directory:
python train.py --cfg_file cfgs/kitti_models/3dssd.yaml
The pretrained models are provided in the output folder under ckpt directory, you can examine the pretrained model from tools
directory by:
python test.py --cfg_file cfgs/kitti_models/3dssd.yaml --ckpt ../output/kitti_models/3dssd/default/ckpt/checkpoint_epoch_120.pth
Models with IoU loss are considerably better than original model, Car, Pedestrain and Cyclist as follow all under R11 criteria, if you are interested in R40 result as well, refer to the output folder.
Car [email protected], 0.70, 0.70:
bbox AP:96.6985, 90.1025, 89.4729
bev AP:90.0036, 88.3474, 86.8328
3d AP:89.0494, 79.1208, 78.1524
aos AP:96.66, 89.97, 89.25
Pedestrian [email protected], 0.50, 0.50:
bbox AP:71.7494, 67.7955, 63.0582
bev AP:63.7641, 57.1950, 54.4950
3d AP:58.7558, 53.5601, 49.4172
aos AP:67.95, 63.76, 59.10
Cyclist [email protected], 0.50, 0.50:
bbox AP:94.4467, 77.8638, 75.6069
bev AP:92.8921, 74.7190, 71.6883
3d AP:90.9060, 72.0020, 66.5100
aos AP:94.36, 77.25, 75.00
As a comparison, here is the result for original model with L1 box loss:
Car [email protected], 0.70, 0.70:
bbox AP:96.4641, 90.0299, 89.4182
bev AP:89.9948, 87.9284, 85.8481
3d AP:88.5553, 78.4563, 77.3031
aos AP:96.43, 89.94, 89.25
Pedestrian [email protected], 0.50, 0.50:
bbox AP:72.2514, 69.3984, 64.1170
bev AP:63.2845, 58.1731, 55.0167
3d AP:58.1822, 54.3187, 49.5647
aos AP:65.99, 62.96, 57.97
Cyclist [email protected], 0.50, 0.50:
bbox AP:94.4852, 82.3373, 77.1431
bev AP:92.4290, 73.7010, 70.8207
3d AP:86.2519, 70.4854, 65.3238
aos AP:94.41, 81.76, 76.66
Many thanks to qiqihaer and his excellent work on reimplmentation of 3DSSD. I borrowed some code from his repo including part of the head and coder.
Also I refered to the code from MMdetection3D to make the code structure more organized.