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 ringk_inter_ring: Number of neighbors from adjacent ringsring_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