BA Validation Diagnostics
This document explains the diagnostic information available when running BA validation to help understand why frames are being rejected.
Overview
When all frames are rejected, it's important to understand the root cause. The enhanced validation script now provides detailed diagnostics to help identify issues.
Diagnostic Information
1. Frame Categorization Statistics
Shows how many frames fall into each category:
- Accepted (< 2° rotation error): Frames where DA3 poses are very close to ARKit ground truth
- Rejected-Learnable (2-30° rotation error): Frames with moderate error that could be improved with training
- Rejected-Outlier (> 30° rotation error): Frames with very high error, likely outliers
2. Error Distribution
Provides statistical breakdown of rotation errors:
- Q1, Median, Q3: Quartiles showing error distribution
- 90th, 95th, 99th percentiles: High-end error values
- Helps identify if errors are uniformly high or if there are specific problem frames
3. Alignment Diagnostics
Checks if pose alignment is working correctly:
- Scale factor: Should be ~1.0 if DA3 and ARKit trajectories have similar scale
- Rotation matrix determinant: Should be ~1.0 for a valid rotation matrix
- Translation centers: Mean translation values for both pose sets
4. Per-Frame Error Breakdown
Shows rotation and translation error for each frame:
- Helps identify specific problematic frames
- Shows which frames are close to thresholds
- Useful for understanding error patterns
5. Pose Statistics
Translation magnitude statistics:
- DA3 poses: Range and magnitude of DA3 camera positions
- ARKit poses: Range and magnitude of ARKit camera positions
- Helps identify scale mismatches
Common Issues and Diagnostics
All Frames Rejected as Outliers
Possible causes:
- Coordinate system mismatch: Check alignment rotation det (should be ~1.0)
- Scale mismatch: Check scale factor (should be ~1.0)
- DA3 model issues: Very high errors suggest DA3 poses are fundamentally wrong
- ARKit data quality: Check if ARKit tracking was successful
Diagnostics to check:
- Alignment scale factor (if far from 1.0, there's a scale issue)
- Rotation error distribution (if all errors are > 170°, likely coordinate system issue)
- Translation error magnitude (if very large, scale or coordinate issue)
High but Variable Errors
Possible causes:
- DA3 model limitations: Model may struggle with certain scene types
- Motion blur: Fast camera movement can cause tracking issues
- Low texture: Scenes with little texture are harder for visual odometry
Diagnostics to check:
- Error distribution quartiles (if spread is large, some frames are better)
- Per-frame errors (identify which frames are problematic)
Alignment Issues
Symptoms:
- Scale factor far from 1.0
- Rotation matrix det not ~1.0
- Very high translation errors
Solutions:
- Check coordinate system conversion
- Verify ARKit to OpenCV conversion is correct
- Ensure poses are in the same format (w2c vs c2w)
Using Diagnostics in API
The API now returns diagnostics in the validation results:
{
"validation_stats": {
"total_frames": 10,
"accepted": 0,
"rejected_learnable": 0,
"rejected_outlier": 10,
"diagnostics": {
"error_distribution": {...},
"alignment_info": {...},
"per_frame_errors": [...]
}
}
}
Example Output
=== BA Validation Statistics ===
Total Frames Processed: 10
Frame Categorization:
✓ Accepted (< 2°): 0 frames ( 0.0%)
⚠ Rejected-Learnable (2-30°): 0 frames ( 0.0%)
✗ Rejected-Outlier (> 30°): 10 frames (100.0%)
Total Rejected: 10 frames (100.0%)
BA Validation Status: rejected_outlier
Max Rotation Error: 177.76°
=== Detailed Diagnostics ===
Rotation Error Distribution:
Q1 (25th): 170.55°
Median: 177.76°
Q3 (75th): 177.76°
90th: 177.76°
95th: 177.76°
Alignment Diagnostics:
Scale factor: 1.000000 (should be ~1.0)
Rotation det: 1.000000 (should be ~1.0)
Sample Frame Errors (first 5):
Frame 0: 177.76° rot, 1.740m trans - rejected_outlier
Frame 1: 176.50° rot, 1.800m trans - rejected_outlier
...
Next Steps
If all frames are rejected:
- Check alignment diagnostics (scale factor, rotation det)
- Review error distribution to see if errors are uniformly high
- Check per-frame errors to identify patterns
- Verify coordinate system conversions
- Check ARKit tracking quality
- Consider if DA3 model is appropriate for this scene type