# Heading误差可视化分析方案 ## 方案概述 针对`detailed_3d_matches.json`中heading误差较大的目标,设计多维度可视化分析系统,帮助定位问题根源。 --- ## 📋 方案设计 ### 1. 数据筛选策略 #### 筛选条件 - **主要条件**:`heading_error > threshold`(建议threshold=1.5rad ≈ 85°) - **辅助条件**: - 按类别筛选(vehicle/pedestrian/bicycle/rider) - 按距离范围筛选(近距离/中距离/远距离) - 按置信度筛选(高置信度bad cases更值得关注) - 按误差类型筛选(接近π的反转错误 vs 其他错误) #### 误差分级 ```python # 误差等级定义 ERROR_LEVELS = { 'critical': heading_error > 2.5, # 严重错误(>143°) 'severe': 1.5 < heading_error <= 2.5, # 重大错误(85°-143°) 'moderate': 0.5 < heading_error <= 1.5, # 中等错误(28°-85°) 'minor': heading_error <= 0.5 # 轻微错误(<28°) } ``` ### 2. 可视化维度 #### A. BEV鸟瞰图视角 🗺️ **目的**:直观对比GT和预测的朝向差异 **可视化内容**: ``` ┌─────────────────────────────────────┐ │ Bird's Eye View │ │ │ │ ↑ Z (Forward) │ │ │ │ │ │ ┏━━━━━━━━┓ ← GT (绿色) │ │ │ ┃ ┃ 箭头指向前方 │ │ │ ┃ → ┃ │ │ │ ┗━━━━━━━━┛ │ │ │ │ │ │ ╔════════╗ ← Pred (红色) │ │ │ ║ ← ║ 箭头指向相反 │ │ │ ║ ║ │ │ │ ╚════════╝ │ │ │ │ │ └────────────────→ X (Right) │ │ │ │ 误差:3.14 rad (180°) - 方向反转 │ └─────────────────────────────────────┘ ``` **实现要点**: - GT用绿色框+绿色箭头 - Prediction用红色框+红色箭头 - 标注误差值(弧度和角度) - 显示自车位置 - 标注距离网格 #### B. 图像投影视角 📷 **目的**:在原图上查看目标外观和朝向关系 **可视化内容**: - 原始图像 - 2D边界框(GT绿色,Pred红色) - 3D边界框投影(8个顶点+12条边) - 朝向指示箭头 - 信息标注: - 类别、置信度 - heading_error值 - GT rotation vs Pred rotation - 距离信息 #### C. 角度对比图 📐 **目的**:可视化角度差异的具体模式 **1. 圆形角度图(Polar Plot)** ``` 0° (Forward) ↑ │ │ 270° ────┼──── 90° │ │ ↓ 180° (Backward) ● GT角度位置(绿点) ● Pred角度位置(红点) → 误差向量(虚线箭头) ``` **2. 散点图(Scatter Plot)** ``` Pred Rotation π ┤ ●●●●●● ← 反转错误聚集区 │ ● │ │ ● -π ├────●────────────── -π 0 π GT Rotation ``` **3. 误差分布直方图** ``` Count │ █ │ █ │ █ █ │ █ █ █ │ █ █ █ █ └──────────────────→ Heading Error (rad) ``` #### D. 多目标对比面板 📊 **目的**:同时展示多个bad cases,发现共性 **布局设计**: ``` ┌─────────────────────────────────────────────────────┐ │ Top 10 Worst Heading Errors │ ├──────────┬──────────┬──────────┬─────────────────────┤ │ Case 1 │ Case 2 │ Case 3 │ ... │ │ ┌────┐ │ ┌────┐ │ ┌────┐ │ │ │ │BEV │ │ │BEV │ │ │BEV │ │ 每个case包含: │ │ └────┘ │ └────┘ │ └────┘ │ - BEV图 │ │ ┌────┐ │ ┌────┐ │ ┌────┐ │ - 原图 │ │ │IMG │ │ │IMG │ │ │IMG │ │ - 关键信息 │ │ └────┘ │ └────┘ │ └────┘ │ │ │ Info │ Info │ Info │ │ ├──────────┴──────────┴──────────┴─────────────────────┤ │ 共性分析: │ │ - 80%为反转错误(error ≈ π) │ │ - 90%为vehicle类别 │ │ - 集中在中远距离(30-80m) │ └─────────────────────────────────────────────────────┘ ``` #### E. 交互式分析面板 🖱️ **目的**:支持深入分析和探索 **功能设计**: ``` ┌─────────────────────────────────────────────────────┐ │ Heading Error Analysis Dashboard │ ├─────────────────────────────────────────────────────┤ │ [Filters] │ │ Class: [✓All ✓Vehicle ✓Pedestrian □Bicycle] │ │ Distance: [0-30m] [30-60m] [60-100m] [100m+] │ │ Error: [>2.5] [1.5-2.5] [0.5-1.5] [<0.5] │ │ Pattern: [Reversal (≈π)] [Other] │ ├─────────────────────────────────────────────────────┤ │ ┌──────────────┐ ┌──────────────┐ │ │ │ Distribution │ │ Scatter Plot │ │ │ │ Chart │ │ GT vs Pred │ │ │ └──────────────┘ └──────────────┘ │ ├─────────────────────────────────────────────────────┤ │ [Selected Case Detail] │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ Image │ │ BEV │ │ Stats │ │ │ │ │ │ │ │ │ │ │ └────────────┘ └────────────┘ └────────────┘ │ ├─────────────────────────────────────────────────────┤ │ Navigation: [< Prev] Case 15/234 [Next >] │ └─────────────────────────────────────────────────────┘ ``` ### 3. 统计分析图表 #### A. 误差模式分析 **1. 误差类型饼图** ``` ┌─────────────────────┐ │ Error Patterns │ │ │ │ ╱────╲ │ │ │ 68% │ 反转错误 │ │ │ π │ │ │ ╲────╱ │ │ ╱──╲ 22% 其他 │ │ │10%│ 中等误差 │ │ ╲──╱ │ └─────────────────────┘ ``` **2. 各类别误差对比** ``` Avg Error (rad) 3.0 ┤ 2.5 ┤ █ 2.0 ┤ █ █ 1.5 ┤ █ █ █ 1.0 ┤ █ █ █ █ 0.5 ┤ █ █ █ █ 0.0 └──────────────→ Veh Ped Bic Rid ``` **3. 距离-误差关系图** ``` Error (rad) 3.0 ┤ ●●● 2.5 ┤ ●●●●● 2.0 ┤●●●●●●● 1.5 ┤●●●●●●●● 1.0 ┤ ●●●●●●● 0.5 ┤ ●●●●● 0.0 └────────────────→ 0 30 60 90 Distance (m) ``` #### B. GT vs Pred角度关系矩阵 **热力图展示**: ``` Pred Angle π ┤ ██░░░░░░ ← 反转区域 │ ░░░░░░░░ │ ░░░░█░░░ ← 正常区域 │ ░░░░░░░░ -π └─────────── -π 0 π GT Angle 颜色深度 = case数量 ``` ### 4. 输出报告 #### A. 自动生成分析报告 **报告结构**: ```markdown # Heading误差分析报告 ## 1. 概览 - 总样本数:596,602 - 高误差样本(>1.5rad):5,839 (0.98%) - 反转错误(>3.04rad):4,012 (68.7%) ## 2. 典型Case展示 [Top 20 worst cases with images] ## 3. 误差模式 - 方向反转(≈180°):68.7% - 其他大误差:31.3% ## 4. 类别分布 - Vehicle: 86.8% 反转率 - Bicycle: 38.3% 反转率 - Rider: 34.0% 反转率 - Pedestrian: 11.7% 反转率 ## 5. 建议 ... ``` #### B. 交互式HTML报告 **功能**: - 可筛选、排序的表格 - 点击查看详细可视化 - 导出功能 - 打印友好版本 --- ## 🛠️ 实现工具 ### 工具1:数据提取器 ```bash python extract_bad_heading_cases.py \ --input detailed_3d_matches.json \ --threshold 1.5 \ --output bad_heading_cases.json ``` ### 工具2:可视化生成器 ```bash python visualize_heading_errors.py \ --input bad_heading_cases.json \ --gt-dir /path/to/labels \ --img-dir /path/to/images \ --output-dir runs/heading_analysis ``` ### 工具3:交互式查看器 ```bash python heading_error_viewer.py \ --input bad_heading_cases.json \ --port 8080 # 在浏览器打开 http://localhost:8080 ``` ### 工具4:报告生成器 ```bash python generate_heading_report.py \ --input bad_heading_cases.json \ --output heading_error_report.html ``` --- ## 📂 输出目录结构 ``` runs/heading_error_analysis/ ├── overview/ │ ├── error_distribution.png │ ├── gt_vs_pred_scatter.png │ ├── error_by_class.png │ ├── error_by_distance.png │ └── pattern_analysis.png ├── bev_visualization/ │ ├── case_000001_bev.png │ ├── case_000002_bev.png │ └── ... ├── image_visualization/ │ ├── case_000001_img.png │ ├── case_000002_img.png │ └── ... ├── combined_view/ │ ├── case_000001_combined.png # BEV + IMG + Stats │ ├── case_000002_combined.png │ └── ... ├── multi_case_panels/ │ ├── top10_worst.png │ ├── reversal_cases.png │ └── by_class.png ├── bad_heading_cases.json ├── analysis_report.md ├── analysis_report.html └── statistics.json ``` --- ## 🎯 关键洞察点 ### 预期发现 1. **反转错误模式** - GT接近0时,Pred接近π - GT为负值时,Pred为大正值 - 特定类别更易发生反转 2. **距离相关性** - 远距离目标误差更大? - 近距离反转错误比例? 3. **类别差异** - Vehicle反转率最高(86.8%) - Pedestrian相对较好(11.7%) 4. **视觉特征** - 反转的目标有何共同特征? - 遮挡、截断的影响? - 角度标注的歧义性? ### 可能的根因 1. **模型架构问题** - Heading输出范围映射错误 - 损失函数未考虑角度周期性 - 前后方向特征不明显 2. **数据问题** - 训练数据角度分布不均 - 标注歧义(前/后定义) - 数据增强影响角度 3. **后处理问题** - 角度归一化错误 - 坐标系转换问题 --- ## 📝 使用流程 ### Step 1: 提取数据 ```bash python extract_bad_heading_cases.py \ --input eval_results_common_match_comparison/yolov5s-300w/20260203_210259/detailed_3d_matches.json \ --threshold 1.5 \ --top-k 100 \ --output bad_cases.json ``` ### Step 2: 生成可视化 ```bash python visualize_heading_errors.py \ --input bad_cases.json \ --gt-dir /data/labels \ --img-dir /data/images \ --output-dir runs/heading_viz ``` ### Step 3: 查看分析 ```bash # 方式1:静态报告 open runs/heading_viz/analysis_report.html # 方式2:交互式查看 python heading_error_viewer.py --input bad_cases.json --port 8080 ``` ### Step 4: 深入分析 - 根据可视化结果筛选特定模式 - 对比不同条件下的误差 - 定位具体问题原因 --- ## 🔄 迭代优化 基于分析结果,可以: 1. **模型改进** - 优化heading损失函数 - 添加角度歧义解决机制 - 增强前后方向特征学习 2. **数据改进** - 检查和修正标注错误 - 平衡角度分布 - 添加难例样本 3. **评估改进** - 区分反转错误和其他错误 - 添加角度置信度评估 - 引入人工review机制 --- ## 📌 总结 这套方案提供: - ✅ 多维度可视化(BEV、图像、统计图) - ✅ 自动化工具链 - ✅ 交互式分析能力 - ✅ 完整的输出报告 - ✅ 可扩展的分析框架 通过这套方案,可以: 1. 快速定位heading误差大的样本 2. 直观理解误差模式 3. 发现问题根因 4. 指导模型改进