Curb detection is a critical task in autonomous driving and robotic perception, enabling accurate understanding of road boundaries and drivable areas.
However, it remains challenging due to:
- (a) Difficulty in extracting height-aware geometric features
- (b) Non-uniform density distribution of LiDAR point clouds
- (c) Severe class imbalance between curb and non-curb points
To address these challenges, we propose CurbNet, a LiDAR-based curb detection framework with:
- A newly constructed 3D-Curb dataset
- A Multi-Scale Channel Attention (MSCA) module for feature fusion and height modeling
- A loss group strategy to handle class imbalance
- A post-processing refinement module for improved prediction quality
We construct the 3D-Curb dataset based on the large-scale SemanticKITTI dataset, with the following features:
- Add a new curb category (label = 3) with full 3D annotations
- Preserve original 28 semantic classes
- Captured using 64-line LiDAR
- Designed for urban autonomous driving scenarios
- Baidu Netdisk: Download Link (Code: 1234)
- Google Drive: Download Link
The dataset follows the SemanticKITTI format:
/kitti/dataset/
└── sequences/
├── 00/
│ ├── labels/
│ │ ├ 000000.label
│ │ └ 000001.label
│ └── velodyne/
│ ├ 000000.bin
│ └ 000001.bin
├── 01/
├── 02/
...
└── 10/
- Point clouds:
.bin - Labels:
.label
Since curb is an additional category, we assign:
label: 3 → "curb"
To visualize correctly using SemanticKITTI API, please modify:
config/semantic-kitti.yaml
Add:
3: "curb"
We recommend using the official SemanticKITTI API:
👉 https://github.com/PRBonn/semantic-kitti-api
The original NRS dataset contains only 2D annotations.
We:
- Project 2D labels to 3D point clouds
- Convert format to SemanticKITTI style
- Release processed version for public use
- Baidu Netdisk: Download Link (Code: 1234)
- Google Drive: Download Link
- Python ≥ 3.7
- PyTorch ≥ 1.2
- yaml
- Cython
- torch-scatter
- spconv (tested with
spconv==1.2.1,cuda==10.2) - nuScenes-devkit (optional)
- Modify config file:
config/semantickitti-curb_0.2.yaml
- Start training:
sh train_0.2.shpython demo_folder_focal.py \
--demo-folder YOUR_FOLDER \
--save-folder YOUR_SAVE_FOLDERpython demo_folder_focal.py \
--demo-folder YOUR_FOLDER \
--save-folder YOUR_SAVE_FOLDER \
--demo-label-folder YOUR_LABEL_FOLDERIf you find this project useful, please consider giving a ⭐ and citing our work:
@article{zhao2025curbnet,
title={CurbNet: Curb detection framework based on LiDAR point cloud segmentation},
author={Zhao, Guoyang and Ma, Fulong and Qi, Weiqing and Liu, Yuxuan and Liu, Ming and Ma, Jun},
journal={IEEE Transactions on Intelligent Transportation Systems},
year={2025},
publisher={IEEE}
}If you have any questions or suggestions, feel free to open an issue or contact the authors.
This project is built upon:
- SemanticKITTI dataset
- Open-source LiDAR perception frameworks Cylinder3D
We thank the community for their contributions.


