Thanks to visit codestin.com
Credit goes to github.com

Skip to content

πŸ”₯ Synthetic and real-world 2d/3d dataset for semantic and instance segmentation

Notifications You must be signed in to change notification settings

zifanyu-samsara/STPLS3D

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

53 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

arXiv GitHub Stars visitors

STPLS3D: A Large-Scale Synthetic and Real Aerial Photogrammetry 3D Point Cloud Dataset

Meida Chen, Qingyong Hu, Thomas Hugues, Andrew Feng, Yu Hou, Kyle McCullough, Lucio Soibelman.
[Paper] [Project page] [Video] [Urban3D workshop@ECCV2022] [Instance segmentation competition]

Updates

(1) Our Focus

  • Our project aims to provide a large database of annotated ground truth point clouds reconstructed using aerial photogrammetry.
  • Our database can be used for training and validating 3D semantic and instance segmentation algorithms.
  • We are developing a synthetic data generation pipeline to create synthetic training data that can augment or even replace real-world training data.

(2) Dataset

2.1 Overview

we have built a large-scale photogrammetry 3D point cloud dataset, termed Semantic Terrain Points Labeling - Synthetic 3D (STPLS3D), which is composed of high-quality, rich-annotated point clouds from real-world and synthetic environments.

2.2 Data Collection

We first collect real-world aerial images using photogrammetry best practices with quadcopter drone flight at a low altitude with significant overlaps between adjacent photos. We then reconstructed point clouds with 1.27 km^2 landscape following the standard photogrammetry pipeline. Next, we follow the same UAV path and flying pattern to generate 62 synthetic point clouds with different architectural styles, vegetation types, and terrain shapes. The synthetic dataset covers about 16 km^2 of the city landscape, with up to 18 fine-grained semantic classes and 14 instance classes.

2.3 Synthetic data generation workflow demo

2.4 Semantic Annotations

  • 0-Ground: including grass, paved road, dirt, etc.
  • 1-Building: including commercial, residential, educational buildings.
  • 2-LowVegetation: 0.5 m < vegetation height < 2.0 m.
  • 3-MediumVegetation: 2.0 m < vegetation height < 5.0 m.
  • 4-HighVegetation: 5.0 m < vegetation height.
  • 5-Vehicle: including sedans and hatchback cars.
  • 6-Truck: including pickup trucks, cement trucks, flat-bed trailers, trailer trucks, etc.
  • 7-Aircraft: including helicopters and airplanes.
  • 8-MilitaryVehicle: including tanks and Humvees.
  • 9-Bike: bicycles.
  • 10-Motorcycle: motorcycles.
  • 11-LightPole: including light poles and traffic lights.
  • 12-StreetSgin: including road signs erected at the side of roads.
  • 13-Clutter: including city furniture, construction equipment, barricades, and other 3D shapes.
  • 14-Fence: including timber, brick, concrete, metal fences.
  • 15-Road: including asphalt and concrete roads.
  • 17-Windows: glass windows.
  • 18-Dirt: bare earth.
  • 19-Grass: including grass lawn, wild grass, etc.

Note that not all datasets we are currently providing have all the semantic labels available, the ground points that don't have the material available (15, 18, 19) are labeled with 0.

2.5 Instance annotations

The ground is labeled with -100. Window instance is currently per building but not per window but could be post-processed using connect component algorithm. Our experiments did not include the window instances.

Only synthetic datasets v2 and v3 have the instance labels.

(3) Benchmarks

3.1 Semantic segmentation:

3.2 Instance segmentation:

(4) Training and Evaluation

Here we provide the training and evaluation script for both semantic and instance segmentation.

4.1 Semantic segmentation:

KpConv (Ubuntu and Windows 10): The environment setup is the same as the official KpConv release. We follow the same steps as shown here to evaluate KpConv on our STPLS3D dataset.

  • Preparing the dataset

Download the data and unzip it. Change the variable self.path of STPLS3DDataset class (here) to the place where STPLS3D is stored.

STPLS3D
β”œβ”€β”€ RealWorldData
β”‚   β”œβ”€β”€ OCCC_points.ply
β”‚   β”œβ”€β”€ ...
β”‚   └── WMSC_points.ply
β”œβ”€β”€ Synthetic_v1
β”‚   β”œβ”€β”€ Austin.ply
β”‚   β”œβ”€β”€ ...
β”‚   └── TownshipofWashington.ply
β”œβ”€β”€ Synthetic_v2
β”‚   β”œβ”€β”€ 2_points_GTv2.ply
β”‚   β”œβ”€β”€ ...
β”‚   └── j_points_GTv2.ply
└── Synthetic_v3
    β”œβ”€β”€ 1_points_GTv3.ply
    β”œβ”€β”€ ...
    └── 25_points_GTv3.ply
  • Start training:
python3 train_STPLS3D.py
  • Evaluation:
python3 test_models.py

Point Transformer (Ubuntu): Please refer to Point Transformer to test it on our STPLS3D dataset.

4.2 Instance segmentation:

HAIS (Ubuntu): The environment setup is the same as the official HAIS release

  • Setup the environment
git clone https://github.com/meidachen/STPLS3D.git
cd STPLS3D/HAIS
conda create -n hais python=3.7
conda activate hais
pip install -r requirements.txt
conda install -c bioconda google-sparsehash
conda install libboost
conda install -c daleydeng gcc-5
cd STPLS3D/HAIS/lib/spconv
export CUDACXX= $PATH_TO_NVCC$
python setup.py bdist_wheel
cd STPLS3D/HAIS/lib/spconv/dist
pip install {wheel_file_name}.whl
cd STPLS3D/HAIS/lib/hais_ops
export CPLUS_INCLUDE_PATH={conda_env_path}/hais/include:$CPLUS_INCLUDE_PATH
python setup.py build_ext develop
  • Preparing the dataset

Download the data, unzip it and place it under STPLS3D/HAIS/dataset.

HAIS
β”œβ”€β”€ dataset
Β Β  └── Synthetic_v3_InstanceSegmentation
Β Β      β”œβ”€β”€ 1_points_GTv3.txt
Β Β      β”œβ”€β”€ 2_points_GTv3.txt
Β Β      β”œβ”€β”€ 3_points_GTv3.txt
Β Β      β”œβ”€β”€ ...
Β Β      β”œβ”€β”€ 23_points_GTv3.txt
Β Β      β”œβ”€β”€ 24_points_GTv3.txt
Β Β      └── 25_points_GTv3.txt
cd STPLS3D/HAIS/data
python prepare_data_inst_instance_stpls3d.py

(optional) In case you are changing training data (i.e., not using data agumentation, using different ways for data agumentation, etc.), please run prepare_data_statistic_stpls3d.py to get the class_weight, class_radius_mean, and class_numpoint_mean_dict. Change them in hais_run_stpls3d.yaml, hierarchical_aggregation.cpp, and hierarchical_aggregation.cu accordingly. Make sure you rebuild the hais_ops.

  • Start training:
CUDA_VISIBLE_DEVICES=1 python train.py --config config/hais_run_stpls3d.yaml 
  • Evaluation:
CUDA_VISIBLE_DEVICES=1 python test.py --config config/hais_run_stpls3d.yaml --pretrain exp/Synthetic_v3_InstanceSegmentation/hais/hais_run_stpls3d/hais_run_stpls3d-000000500.pth

(5) Instance segmentation challenge and evaluation server

We are also organizing a instance segmentation challenge on CodaLab! Please feel free to submit your results to our evaluation server with the unlabled testing datasets.

Citation

If you find our work useful in your research, please consider citing:

@article{chen2022stpls3d,
  title={STPLS3D: A Large-Scale Synthetic and Real Aerial Photogrammetry 3D Point Cloud Dataset},
  author={Chen, Meida and Hu, Qingyong and Hugues, Thomas and Feng, Andrew and Hou, Yu and McCullough, Kyle and Soibelman, Lucio},
  journal={arXiv preprint arXiv:2203.09065},
  year={2022}
}

Related Repos

  1. RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds GitHub stars
  2. SensatUrban: Learning Semantics from Urban-Scale Photogrammetric Point Clouds GitHub stars
  3. 3D-BoNet: Learning Object Bounding Boxes for 3D Instance Segmentation on Point Clouds GitHub stars
  4. SpinNet: Learning a General Surface Descriptor for 3D Point Cloud Registration GitHub stars
  5. SQN: Weakly-Supervised Semantic Segmentation of Large-Scale 3D Point Clouds GitHub stars
  6. SoTA-Point-Cloud: Deep Learning for 3D Point Clouds: A Survey GitHub stars
  7. Hierarchical Aggregation for 3D Instance Segmentation GitHub stars
  8. KPConv: Flexible and Deformable Convolution for Point Clouds GitHub stars
  9. Point Transformer GitHub stars

About

πŸ”₯ Synthetic and real-world 2d/3d dataset for semantic and instance segmentation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 49.6%
  • C++ 43.5%
  • Cuda 5.2%
  • Cython 0.6%
  • C 0.6%
  • CMake 0.3%
  • Other 0.2%