IGN LiDAR HD Dataset Processing Library for Building LOD Classification
Project description
IGN LiDAR HD Processing Library
Version 2.5.1 | ๐ Full Documentation
Transform IGN LiDAR HD point clouds into ML-ready datasets for building classification
Quick Start โข What's New โข Features โข Documentation โข Examples
๐ Overview
A comprehensive Python library for processing French IGN LiDAR HD data into machine learning-ready datasets. Features include GPU acceleration, rich geometric features, RGB/NIR augmentation, and flexible YAML-based configuration.
Key Capabilities:
- ๐ GPU Acceleration: 6-20x speedup with RAPIDS cuML
- ๐จ Multi-modal Data: Geometry + RGB + Infrared (NDVI-ready)
- ๐๏ธ Building Classification: LOD2/LOD3 schemas with 15-30+ classes
- ๐ฆ Flexible Output: NPZ, HDF5, PyTorch, LAZ formats
- โ๏ธ YAML Configuration: Reproducible workflows with example configs
โจ What's New in v2.5.1
๐ฆ Maintenance Release
v2.5.1 is a maintenance release with documentation improvements and updates.
Recent Updates (v2.5.0)
v2.5.0 represented a complete internal modernization while maintaining 100% backward compatibility!
Unified Feature System โจ
- FeatureOrchestrator: New unified class replaces FeatureManager + FeatureComputer
- Simpler API: One class handles all feature computation with automatic strategy selection
- Better organized: Clear separation of concerns with strategy pattern
- Fully compatible: All existing code works without changes
Improved Code Quality
- 67% reduction in feature orchestration code complexity
- Enhanced error messages and validation throughout
- Complete type hints for better IDE support
- Modular architecture for easier maintenance and extension
Migration Made Easy
- Zero breaking changes: Your v1.x code continues to work
- Deprecation warnings: Clear guidance for future-proofing your code
- Migration guide: Step-by-step instructions in MIGRATION_GUIDE.md
- Backward compatible: Legacy APIs will be maintained through v2.x series
# NEW (v2.0) - Recommended unified API
from ign_lidar import LiDARProcessor
processor = LiDARProcessor(
config_path="config.yaml",
feature_mode="lod3" # Clearer mode specification
)
# Access unified orchestrator
orchestrator = processor.feature_orchestrator
print(f"Feature mode: {orchestrator.mode}")
print(f"Has RGB: {orchestrator.has_rgb}")
print(f"Available features: {orchestrator.get_feature_list('lod3')}")
# OLD (v1.x) - Still works with deprecation warnings
# feature_manager = processor.feature_manager # Deprecated but functional
# feature_computer = processor.feature_computer # Deprecated but functional
Why upgrade?
- Future-proof your code for v3.0
- Access to new features and improvements
- Better performance and error handling
- Professional, maintainable codebase
๐ See MIGRATION_GUIDE.md for complete upgrade instructions
๐ Full Release History
๐ Quick Start
Installation
# Standard installation (CPU)
pip install ign-lidar-hd
# Optional: GPU acceleration (6-20x speedup)
./install_cuml.sh # or follow GPU_SETUP.md
Basic Usage
# Download sample data
ign-lidar-hd download --bbox 2.3,48.8,2.4,48.9 --output data/ --max-tiles 5
# Enrich with features (GPU accelerated if available)
ign-lidar-hd enrich --input-dir data/ --output enriched/ --use-gpu
# Create training patches
ign-lidar-hd patch --input-dir enriched/ --output patches/ --lod-level LOD2
Python API
from ign_lidar import LiDARProcessor
# Initialize and process
processor = LiDARProcessor(lod_level="LOD2")
patches = processor.process_tile("data.laz", "output/")
๐ Key Features
Core Processing
- ๐ฏ Complete Feature Export - All 35-45 computed geometric features saved to disk (v2.4.2+)
- ๐๏ธ Multi-level Classification - LOD2 (12 features), LOD3 (38 features), Full (43+ features) modes
- ๐ Rich Geometry - Normals, curvature, eigenvalues, shape descriptors, architectural features, building scores
- ๐จ Optional Augmentation - RGB from orthophotos, NIR, NDVI for vegetation analysis
- โ๏ธ Auto-parameters - Intelligent tile analysis for optimal settings
- ๐ Feature Tracking - Metadata includes feature names and counts for reproducibility
Performance
- ๐ GPU Acceleration - RAPIDS cuML support (6-20x faster)
- โก Parallel Processing - Multi-worker with automatic CPU detection
- ๐ง Memory Optimized - Chunked processing, 50-60% reduction
- ๐พ Smart Skip - Resume interrupted workflows automatically (~1800x faster)
Flexibility
- ๐ Processing Modes - Three clear modes: patches only, both, or LAZ only
- ๐ YAML Configs - Declarative workflows with example templates
- ๐ฆ Multiple Formats - NPZ, HDF5, PyTorch, LAZ (single or multi-format)
- ๐ง CLI & API - Command-line tool and Python library
๐ก Usage Examples
Mode 1: Create Training Patches (Default)
# Using example config
ign-lidar-hd process \
--config-file examples/config_training_dataset.yaml \
input_dir=data/raw \
output_dir=data/patches
# Or with CLI parameters
ign-lidar-hd process \
input_dir=data/raw \
output_dir=data/patches \
output.processing_mode=patches_only
Mode 2: Both Patches & Enriched LAZ
ign-lidar-hd process \
--config-file examples/config_complete.yaml \
input_dir=data/raw \
output_dir=data/both
Mode 3: LAZ Enrichment Only
ign-lidar-hd process \
--config-file examples/config_quick_enrich.yaml \
input_dir=data/raw \
output_dir=data/enriched
โ ๏ธ Note on Enriched LAZ Files: When generating enriched LAZ tile files, geometric features (normals, curvature, planarity, etc.) may show artifacts at tile boundaries due to the nature of the source data. These artifacts are inherent to tile-based processing and do not appear in patch exports, which provide the best results for machine learning applications. For optimal quality, use
patches_onlyorbothmodes.
GPU-Accelerated Processing
ign-lidar-hd process \
--config-file examples/config_gpu_processing.yaml \
input_dir=data/raw \
output_dir=data/output
Preview Configuration
ign-lidar-hd process \
--config-file examples/config_training_dataset.yaml \
--show-config \
input_dir=data/raw
Python API Examples
from ign_lidar import LiDARProcessor, IGNLiDARDownloader
# Download tiles
downloader = IGNLiDARDownloader("downloads/")
tiles = downloader.download_by_bbox(bbox=(2.3, 48.8, 2.4, 48.9), max_tiles=5)
# Process with custom config
processor = LiDARProcessor(
lod_level="LOD3",
patch_size=150.0,
num_points=16384,
use_gpu=True
)
# Single tile
patches = processor.process_tile("input.laz", "output/")
# Batch processing
patches = processor.process_directory("input_dir/", "output_dir/", num_workers=4)
# PyTorch integration
from torch.utils.data import DataLoader
dataset = LiDARPatchDataset("patches/")
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
๐ Feature Modes
IGN LiDAR HD supports multiple feature computation modes optimized for different use cases:
Minimal Mode (4 features) - Ultra-Fast
Best for: Quick processing, classification updates, minimal computation
Features: normal_z, planarity, height_above_ground, density
Performance: โกโกโกโกโก Fastest (~5s per 1M points)
LOD2 Mode (12 features) - Fast Training
Best for: Basic building classification, quick prototyping, baseline models
Features: XYZ (3), normal_z, planarity, linearity, height, verticality, RGB (3), NDVI
Performance: ~15s per 1M points (CPU), fast convergence
LOD3 Mode (37 features) - Detailed Modeling
Best for: Architectural modeling, fine structure detection, research
Features: Complete normals (3), eigenvalues (5), curvature (2), shape descriptors (6), height features (2), building scores (3), density features (4), architectural features (4), spectral (5)
Performance: ~45s per 1M points (CPU), best accuracy
Full Mode (37+ features) - Complete Feature Set
Best for: Research, feature analysis, maximum information extraction
All Features: All LOD3 features plus any additional computed features
Performance: ~50s per 1M points (CPU), complete geometric description
Usage:
features:
mode: minimal # or lod2, lod3, full, custom
k_neighbors: 10
Output Format:
- NPZ/HDF5/PyTorch: Full feature matrix with all features
- LAZ: All features as extra dimensions for GIS tools
- Metadata:
feature_namesandnum_featuresfor tracking
๐ See Feature Modes Documentation for complete details.
๐ฆ Output Format
NPZ Structure
Each patch is saved as NPZ with:
{
'points': np.ndarray, # [N, 3] XYZ coordinates
'normals': np.ndarray, # [N, 3] surface normals
'curvature': np.ndarray, # [N] principal curvature
'intensity': np.ndarray, # [N] normalized intensity
'planarity': np.ndarray, # [N] planarity measure
'verticality': np.ndarray, # [N] verticality measure
'density': np.ndarray, # [N] local point density
'labels': np.ndarray, # [N] building class labels
# Facultative features:
'wall_score': np.ndarray, # [N] wall likelihood (planarity * verticality)
'roof_score': np.ndarray, # [N] roof likelihood (planarity * horizontality)
# Optional with augmentation:
'red': np.ndarray, # [N] RGB red
'green': np.ndarray, # [N] RGB green
'blue': np.ndarray, # [N] RGB blue
'infrared': np.ndarray, # [N] NIR values
}
Available Formats
- NPZ - Default NumPy format (recommended for ML)
- HDF5 - Hierarchical data format
- PyTorch -
.ptfiles for PyTorch - LAZ - Point cloud format for visualization (may show boundary artifacts in tile mode)
- Multi-format - Save in multiple formats:
hdf5,laz,npz,torch
๐ก Tip: For machine learning applications, NPZ/HDF5/PyTorch patch formats provide cleaner geometric features than enriched LAZ tiles.
๐ Documentation
Quick Links
- ๐ Complete Documentation Index - Full documentation navigation
- ๐ Full Documentation - Online documentation site
- ๐ Installation Guide
- ๐ Testing Guide - Test suite and development testing
- ๐ Changelog - Version history and release notes
User Guides
Located in docs/guides/:
- ASPRS Classification Guide - Complete ASPRS standards
- Building Classification Guide - Building class reference
- Vegetation Classification Guide - Vegetation analysis
Examples & Configuration
Located in examples/:
- Example Configurations - YAML configuration templates
- Versailles Configs - LOD2, LOD3, and ASPRS examples
- Architectural Analysis - Style detection
- Multi-scale Training - Advanced training
Architecture & API
- System Architecture - Design documentation
- Geometric Features Reference
- Feature Modes Guide
- CLI Reference
- Python API
- Configuration Schema
๐ ๏ธ Development
# Clone and install in development mode
git clone https://github.com/sducournau/IGN_LIDAR_HD_DATASET
cd IGN_LIDAR_HD_DATASET
pip install -e ".[dev]"
# Run tests
pytest tests/
# Format code
black ign_lidar/
๐ Requirements
Core:
- Python 3.8+
- NumPy >= 1.21.0
- laspy >= 2.3.0
- scikit-learn >= 1.0.0
Optional GPU Acceleration:
- CUDA >= 12.0
- CuPy >= 12.0.0
- RAPIDS cuML >= 24.10 (recommended)
๐ License
MIT License - see LICENSE file for details.
๐ค Support & Contributing
- ๐ Report Issues
- ๐ก Feature Requests
- ๐ Contributing Guide
๐ Cite Me
If you use this library in your research or projects, please cite:
@software{ign_lidar_hd,
author = {Ducournau, Simon},
title = {IGN LiDAR HD Processing Library},
year = {2025},
publisher = {GitHub},
url = {https://github.com/sducournau/IGN_LIDAR_HD_DATASET},
version = {2.5.1}
}
Project maintained by: ImagoData
Made with โค๏ธ for the LiDAR and Machine Learning communities
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ign_lidar_hd-2.5.1.tar.gz.
File metadata
- Download URL: ign_lidar_hd-2.5.1.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52fb016d7dffd83165851d4c5f1823af4c874976961ac79c08863570925d8187
|
|
| MD5 |
fba506906444ecdbdd098035628e1ca1
|
|
| BLAKE2b-256 |
50e9d26366e8839f410dcd7892379b0a0fb51e0841dc76139cba8aaade9294c7
|
File details
Details for the file ign_lidar_hd-2.5.1-py3-none-any.whl.
File metadata
- Download URL: ign_lidar_hd-2.5.1-py3-none-any.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
882719e309389d92ec2b5f80efc93a13a362598aa57244ed5e75fd848b556c86
|
|
| MD5 |
4c722b650b40e6f6af953d7770dfbb6e
|
|
| BLAKE2b-256 |
f7fe53493cef4e33120e4af61e8b13f3053f0328db900329a100e4fdcef89c80
|