- Super fast and accurate 3D object detection based on LiDAR
- Fast training, fast inference
- An Anchor-free approach
- No Non-Max-Suppression
- Support distributed data parallel training
- Release pre-trained models
- The technical details are described here
- The great introduction and explanation from
Computer Vision and Perception for Self-Driving Cars CourseYoutube link - SFA3D is used for the second course in the
Udacity Self-Driving Car Engineer Nanodegree Program: Sensor Fusion and TrackingGitHub link
Update 2020.09.06: Add ROS source code. The great work has been done by @AhmedARadwan.
The implementation is here
The instructions for setting up a virtual environment is here.
git clone https://github.com/maudzung/SFA3D.git SFA3D
cd SFA3D/
pip install -r requirements.txtDownload the 3D KITTI detection dataset from here.
The downloaded data includes:
- Velodyne point clouds (29 GB)
- Training labels of object data set (5 MB)
- Camera calibration matrices of object data set (16 MB)
- Left color images of object data set (12 GB) (For visualization purpose only)
Please make sure that you construct the source code & dataset directories structure as below.
To visualize 3D point clouds with 3D boxes, let's execute:
cd sfa/data_process/
python kitti_dataset.pyThe pre-trained model was pushed to this repo.
python test.py --gpu_idx 0 --peak_thresh 0.2
python demo_2_sides.py --gpu_idx 0 --peak_thresh 0.2
The data for the demonstration will be automatically downloaded by executing the above command.
python train.py --gpu_idx 0- Single machine (node), multiple GPUs
python train.py --multiprocessing-distributed --world-size 1 --rank 0 --batch_size 64 --num_workers 8
-
Two machines (two nodes), multiple GPUs
- First machine
python train.py --dist-url 'tcp://IP_OF_NODE1:FREEPORT' --multiprocessing-distributed --world-size 2 --rank 0 --batch_size 64 --num_workers 8- Second machine
python train.py --dist-url 'tcp://IP_OF_NODE2:FREEPORT' --multiprocessing-distributed --world-size 2 --rank 1 --batch_size 64 --num_workers 8
- To track the training progress, go to the
logs/folder and
cd logs/<saved_fn>/tensorboard/
tensorboard --logdir=./- Then go to http://localhost:6006/
To benchmark inference speed and collect statistics (e.g., FPS, system stats) on Jetson devices, use the provided scripts:
# For detailed stats and benchmarking
python sfa/demo_2_sides_stats.py --jclock
python sfa/demo_front_stats.py --jclock# For live video rendering
python sfa/demo_2_sides_live.py# Check jtop stats API
python sfa/stats.py- The
--jclockflag enables Jetson maximum performance clocks for consistent benchmarking. - Stats scripts print detailed FPS and runtime statistics, and can output all available
jtopsystem stats (CPU, GPU, RAM, temperature, etc.) for full hardware monitoring. - Sample stats outputs (e.g.,
results/fpn_resnet_18/2sides_jclock.csv) are available in theresults/directory for reference.
Tested Jetson Environment:
- PyTorch v2.1.0
- JetPack 6.0 DP (L4T R36.2.0)
- Python 3.10
- torch-2.1.0-cp310-cp310-linux_aarch64.whl (USE_DISTRIBUTED=on)
For best performance on Jetson devices, install the official NVIDIA PyTorch wheel:
Download PyTorch for Jetson (Python 3.8, CUDA 10.2)
Install with:
pip install https://nvidia.box.com/shared/static/0h6tk4msrl9xz3evft9t0mpwwwkw7a32.whlIf you think this work is useful, please give me a star!
If you find any errors or have any suggestions, please contact me (Email: [email protected]).
Thank you!
@misc{Super-Fast-Accurate-3D-Object-Detection-PyTorch,
author = {Nguyen Mau Dung},
title = {{Super-Fast-Accurate-3D-Object-Detection-PyTorch}},
howpublished = {\url{https://github.com/maudzung/Super-Fast-Accurate-3D-Object-Detection}},
year = {2020}
}[1] CenterNet: Objects as Points paper, PyTorch Implementation
[2] RTM3D: PyTorch Implementation
[3] Libra_R-CNN: PyTorch Implementation
The YOLO-based models with the same BEV maps input:
[4] Complex-YOLO: v4, v3, v2
3D LiDAR Point pre-processing:
[5] VoxelNet: PyTorch Implementation
${ROOT}
└── checkpoints/
├── fpn_resnet_18/
├── fpn_resnet_18_epoch_300.pth
└── dataset/
└── kitti/
├──ImageSets/
│ ├── test.txt
│ ├── train.txt
│ └── val.txt
├── training/
│ ├── image_2/ (left color camera)
│ ├── calib/
│ ├── label_2/
│ └── velodyne/
└── testing/
│ ├── image_2/ (left color camera)
│ ├── calib/
│ └── velodyne/
└── classes_names.txt
└── sfa/
├── config/
│ ├── train_config.py
│ └── kitti_config.py
├── data_process/
│ ├── kitti_dataloader.py
│ ├── kitti_dataset.py
│ └── kitti_data_utils.py
├── models/
│ ├── fpn_resnet.py
│ ├── resnet.py
│ └── model_utils.py
└── utils/
│ ├── demo_utils.py
│ ├── evaluation_utils.py
│ ├── logger.py
│ ├── misc.py
│ ├── torch_utils.py
│ ├── train_utils.py
│ └── visualization_utils.py
├── demo_2_sides.py
├── demo_front.py
├── test.py
└── train.py
├── README.md
└── requirements.txt