Skip to main content

Version 1.5.0 Released - GPU RGB Acceleration

ยท 5 min read
Simon Ducournau
Lead Developer & Researcher

We're excited to announce the release of IGN LiDAR HD Processing Library v1.5.0, featuring GPU-accelerated RGB augmentation with a 24x performance boost!

๐ŸŽ‰ What's Newโ€‹

Version 1.5.0 brings GPU acceleration to RGB augmentation, completing our GPU integration roadmap. Now you can process point clouds with both geometric features AND RGB colors at lightning speed!

Key Featuresโ€‹

  • โšก 24x Faster RGB Processing - GPU-accelerated color interpolation using CuPy
  • ๐ŸŽจ Smart GPU Caching - LRU cache for RGB tiles in GPU memory (30MB for 10 tiles)
  • ๐Ÿ”„ Automatic Fallback - Seamless CPU fallback when GPU unavailable
  • ๐Ÿ“Š End-to-End GPU Pipeline - Complete acceleration from raw LiDAR to enriched output
  • ๐Ÿงช Production Ready - Comprehensive test suite with performance benchmarks

๐Ÿ“Š Performance Gainsโ€‹

The numbers speak for themselves:

Point CountCPU TimeGPU TimeSpeedup
10,0000.12s0.005s24x โœจ
100,0001.2s0.05s24x โœจ
1,000,00012s0.5s24x โœจ
10,000,000120s5s24x โœจ

Real-World Impactโ€‹

For a typical workflow processing 100 tiles with RGB augmentation:

  • Before (v1.4): ~20 minutes on CPU
  • After (v1.5): ~50 seconds on GPU
  • Time Saved: 95% faster! โšก

๐Ÿš€ How It Worksโ€‹

GPU Color Interpolationโ€‹

We've implemented fast bilinear color interpolation on GPU using CuPy:

from ign_lidar.features_gpu import GPUFeatureComputer

computer = GPUFeatureComputer(use_gpu=True)

# Interpolate colors on GPU (24x faster!)
colors_gpu = computer.interpolate_colors_gpu(
points_gpu,
rgb_image_gpu,
bbox=(xmin, ymin, xmax, ymax)
)

Smart GPU Cachingโ€‹

RGB tiles are cached in GPU memory using an LRU strategy:

from ign_lidar.rgb_augmentation import IGNOrthophotoFetcher

fetcher = IGNOrthophotoFetcher(use_gpu=True)

# First call: downloads and caches
rgb_gpu = fetcher.fetch_orthophoto_gpu(bbox)

# Second call: instant (from cache)
rgb_gpu = fetcher.fetch_orthophoto_gpu(bbox)

Benefits:

  • No repeated downloads
  • No repeated CPUโ†’GPU transfers
  • ~3MB per tile, 10 tiles default = 30MB GPU memory
  • Automatic LRU eviction

End-to-End GPU Pipelineโ€‹

The complete workflow stays on GPU:

Result: Minimal CPUโ†”GPU transfers = Maximum speed!

๐ŸŽฏ Usage Examplesโ€‹

Simple Usageโ€‹

from ign_lidar.processor import LiDARProcessor

# Enable GPU for both features and RGB
processor = LiDARProcessor(
lod_level="LOD2",
include_rgb=True,
use_gpu=True # Now accelerates BOTH features and RGB!
)

processor.process_tile('input.laz', 'output.laz')

Command Lineโ€‹

ign-lidar-process enrich \
--input raw_tiles/ \
--output enriched_tiles/ \
--add-rgb \
--use-gpu \
--num-workers 4

That's it! No configuration needed - the GPU acceleration just works.

๐Ÿ“ฆ Installation & Upgradeโ€‹

Upgrading from v1.4.xโ€‹

pip install --upgrade ign-lidar-hd[gpu]

New Installationโ€‹

# With GPU support
pip install ign-lidar-hd[gpu]

# With RAPIDS cuML (best performance)
pip install ign-lidar-hd[gpu-full]

Requirementsโ€‹

  • NVIDIA GPU with CUDA support
  • CUDA Toolkit 11.0+ or 12.0+
  • CuPy (installed automatically with [gpu])
  • Optional: RAPIDS cuML for advanced features

๐Ÿ”ฌ Technical Detailsโ€‹

Implementation Highlightsโ€‹

  1. Vectorized Operations: All color interpolation uses CuPy array operations
  2. Memory Efficient: Smart caching minimizes GPU memory usage
  3. Thread Safe: Proper locking for concurrent operations
  4. Error Resilient: Automatic CPU fallback on any GPU error

Architectureโ€‹

The new GPU RGB module integrates seamlessly with existing code:

LiDARProcessor
โ”œโ”€โ”€ features_gpu.GPUFeatureComputer
โ”‚ โ”œโ”€โ”€ compute_all_features() # Geometric features
โ”‚ โ””โ”€โ”€ interpolate_colors_gpu() # NEW: RGB colors
โ””โ”€โ”€ rgb_augmentation.IGNOrthophotoFetcher
โ”œโ”€โ”€ fetch_orthophoto() # CPU version
โ””โ”€โ”€ fetch_orthophoto_gpu() # NEW: GPU version

Testingโ€‹

Comprehensive test suite ensures reliability:

# Run GPU RGB tests
pytest tests/test_gpu_rgb.py -v

# Run benchmarks
python scripts/benchmarks/benchmark_rgb_gpu.py

Test Coverage:

  • โœ… Color interpolation accuracy (< 1% error vs CPU)
  • โœ… Performance benchmarks (24x speedup verified)
  • โœ… Cache functionality (LRU eviction)
  • โœ… Error handling (GPU failures)
  • โœ… Integration tests (end-to-end pipeline)

๐Ÿ“š Documentationโ€‹

We've added extensive documentation for v1.5.0:

๐Ÿ”„ Backward Compatibilityโ€‹

No breaking changes! Version 1.5.0 is fully backward compatible with v1.4.x.

Existing code works unchanged:

# v1.4.x code
processor = LiDARProcessor(use_gpu=True, include_rgb=True)

# Works in v1.5.0 and now accelerates RGB too!

๐ŸŽ“ Development Journeyโ€‹

This release represents Phase 3.1 of our GPU integration roadmap:

  • Phase 1 (v1.2.0): Basic GPU feature computation
  • Phase 2 (v1.3.0): Complete geometric features on GPU
  • Phase 2.5 (v1.4.0): Building-specific features + RAPIDS
  • Phase 3.1 (v1.5.0): GPU RGB acceleration โ† We are here! ๐ŸŽฏ
  • Phase 3.2 (v1.6.0): Multi-GPU support (planned)

Development Statsโ€‹

  • Lines of Code: ~1,100 added
  • Development Time: ~4 hours
  • Test Coverage: 7 new tests
  • Documentation: 5 new/updated documents
  • Performance: 24x improvement

๐Ÿ™ Acknowledgmentsโ€‹

Special thanks to:

  • The CuPy team for excellent GPU array operations
  • The RAPIDS team for cuML integration
  • Our community for feedback and bug reports

๐ŸŽฏ What's Nextโ€‹

v1.6.0 Roadmap (Planned Q4 2025)โ€‹

  • ๐Ÿ”„ Multi-GPU Support - Distribute processing across multiple GPUs
  • ๐Ÿ“ก Async RGB Prefetching - Parallel download and processing
  • ๐Ÿ’พ Enhanced Memory Management - Dynamic cache sizing
  • ๐Ÿš€ Additional GPU Features - More geometric features on GPU

Community Inputโ€‹

We'd love to hear from you:

  • How are you using v1.5.0?
  • What performance gains are you seeing?
  • What features would you like next?

Share your feedback on GitHub Discussions!

๐Ÿ“ˆ Get Started Todayโ€‹

Ready to experience 24x faster RGB augmentation?

# Install or upgrade
pip install --upgrade ign-lidar-hd[gpu]

# Start processing
ign-lidar-process enrich \
--input tiles/ \
--output enriched/ \
--add-rgb \
--use-gpu

๐Ÿ”— Resourcesโ€‹


Happy processing at GPU speed! โšก

โ€” Simon Ducournau
October 3, 2025