Algorithm Variants

The variants module contains specialized implementations of the RAPiD algorithm for specific use cases.

R-RAPiD (Intra-Ring RAPiD)

Intra-Ring RAPiD is designed for LiDAR beam-based processing, taking advantage of the ring structure of rotating LiDAR sensors.

Features

  • Ring-Aware Processing: Processes points within the same LiDAR ring

  • Beam Geometry: Leverages LiDAR beam characteristics

  • Efficient Neighbor Search: Optimized for ring-based point clouds

  • Reduced Computational Complexity: Faster than standard RAPiD for ring-structured data

Usage

from rapid_seg.variants import RRAPiDCalculator

# Initialize R-RAPiD calculator
r_rapid_calc = RRAPiDCalculator(device="cuda")

# Compute R-RAPiD features
# Note: coordinates should include ring information
features = r_rapid_calc.compute_r_rapid_features(
    coordinates,      # (N, 4) - x, y, z, ring_id
    reflectivity,    # (N,) - reflectivity values
    k_intra_ring=6,  # neighbors within same ring
    k_inter_ring=2   # neighbors from adjacent rings
)

Parameters

  • k_intra_ring: Number of neighbors within the same ring

  • k_inter_ring: Number of neighbors from adjacent rings

  • ring_threshold: Maximum ring difference for inter-ring neighbors

Example with Ring Information

import torch
from rapid_seg.variants import RRAPiDCalculator

# Create sample data with ring information
n_points = 1000
coordinates = torch.randn(n_points, 3) * 10.0
ring_ids = torch.randint(0, 64, (n_points,))  # 64-ring LiDAR
reflectivity = torch.rand(n_points) * 0.8 + 0.1

# Combine coordinates and ring IDs
coordinates_with_rings = torch.cat([coordinates, ring_ids.unsqueeze(1)], dim=1)

# Initialize R-RAPiD calculator
r_rapid_calc = RRAPiDCalculator(device="cuda")

# Compute features
features = r_rapid_calc.compute_r_rapid_features(
    coordinates_with_rings,
    reflectivity,
    k_intra_ring=8,
    k_inter_ring=3
)

print(f"R-RAPiD features shape: {features.shape}")

C-RAPiD (Intra-Class RAPiD)

Intra-Class RAPiD is designed for semantic segmentation tasks, processing points within the same semantic class.

Features

  • Class-Aware Processing: Groups points by semantic class

  • Semantic Consistency: Maintains class boundaries during feature extraction

  • Adaptive Neighbor Selection: Different k values for different classes

  • Segmentation-Optimized: Features optimized for segmentation tasks

Usage

from rapid_seg.variants import CRAPiDCalculator

# Initialize C-RAPiD calculator
c_rapid_calc = CRAPiDCalculator(device="cuda")

# Compute C-RAPiD features
features = c_rapid_calc.compute_c_rapid_features(
    coordinates,      # (N, 3) - point coordinates
    reflectivity,    # (N,) - reflectivity values
    class_labels,    # (N,) - semantic class labels
    k_per_class={    # k values for each class
        0: 4,        # road
        1: 8,        # car
        2: 6,        # pedestrian
        3: 10        # building
    }
)

Class-Specific Configuration

# Define class-specific parameters
class_config = {
    0: {"k": 4, "batch_size": 64},      # road - simple geometry
    1: {"k": 8, "batch_size": 32},      # car - medium complexity
    2: {"k": 6, "batch_size": 48},      # pedestrian - simple
    3: {"k": 12, "batch_size": 16},     # building - complex geometry
    4: {"k": 5, "batch_size": 56}       # vegetation - medium
}

# Compute features with class-specific settings
features = c_rapid_calc.compute_c_rapid_features(
    coordinates, reflectivity, class_labels, class_config
)

Hybrid RAPiD

Combines multiple RAPiD variants for optimal performance.

Usage

from rapid_seg.variants import HybridRAPiDCalculator

# Initialize hybrid calculator
hybrid_calc = HybridRAPiDCalculator(device="cuda")

# Compute hybrid features
features = hybrid_calc.compute_hybrid_features(
    coordinates,
    reflectivity,
    ring_ids,        # for R-RAPiD
    class_labels,    # for C-RAPiD
    variant_weights={ # weight for each variant
        "standard": 0.3,
        "r_rapid": 0.4,
        "c_rapid": 0.3
    }
)

Performance Comparison

Variant

Use Case

Speed

Memory

Accuracy

Standard RAPiD

General purpose

Baseline

Baseline

Baseline

R-RAPiD

Ring-structured data

+20%

-15%

+5%

C-RAPiD

Semantic segmentation

+10%

+10%

+15%

Hybrid

Mixed scenarios

+5%

+5%

+10%

Choosing the Right Variant

Use R-RAPiD when:

  • Processing rotating LiDAR data

  • Ring structure is important

  • Speed is critical

  • Working with autonomous driving datasets

Use C-RAPiD when:

  • Performing semantic segmentation

  • Class information is available

  • Accuracy is more important than speed

  • Working with labeled datasets

Use Hybrid when:

  • Multiple data characteristics are present

  • Need balanced performance across metrics

  • Working with complex, multi-modal data

Custom Variants

Create custom RAPiD variants by extending the base classes:

from rapid_seg.core import RAPiDCalculator

class CustomRAPiDCalculator(RAPiDCalculator):
    def __init__(self, custom_param, **kwargs):
        super().__init__(**kwargs)
        self.custom_param = custom_param
    
    def compute_custom_features(self, coordinates, reflectivity):
        # Custom feature computation logic
        pass