14 KiB
Executable File
14 KiB
Executable File
Heading误差可视化分析方案
方案概述
针对detailed_3d_matches.json中heading误差较大的目标,设计多维度可视化分析系统,帮助定位问题根源。
📋 方案设计
1. 数据筛选策略
筛选条件
- 主要条件:
heading_error > threshold(建议threshold=1.5rad ≈ 85°) - 辅助条件:
- 按类别筛选(vehicle/pedestrian/bicycle/rider)
- 按距离范围筛选(近距离/中距离/远距离)
- 按置信度筛选(高置信度bad cases更值得关注)
- 按误差类型筛选(接近π的反转错误 vs 其他错误)
误差分级
# 误差等级定义
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. 自动生成分析报告
报告结构:
# 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:数据提取器
python extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--threshold 1.5 \
--output bad_heading_cases.json
工具2:可视化生成器
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:交互式查看器
python heading_error_viewer.py \
--input bad_heading_cases.json \
--port 8080
# 在浏览器打开 http://localhost:8080
工具4:报告生成器
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
🎯 关键洞察点
预期发现
-
反转错误模式
- GT接近0时,Pred接近π
- GT为负值时,Pred为大正值
- 特定类别更易发生反转
-
距离相关性
- 远距离目标误差更大?
- 近距离反转错误比例?
-
类别差异
- Vehicle反转率最高(86.8%)
- Pedestrian相对较好(11.7%)
-
视觉特征
- 反转的目标有何共同特征?
- 遮挡、截断的影响?
- 角度标注的歧义性?
可能的根因
-
模型架构问题
- Heading输出范围映射错误
- 损失函数未考虑角度周期性
- 前后方向特征不明显
-
数据问题
- 训练数据角度分布不均
- 标注歧义(前/后定义)
- 数据增强影响角度
-
后处理问题
- 角度归一化错误
- 坐标系转换问题
📝 使用流程
Step 1: 提取数据
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: 生成可视化
python visualize_heading_errors.py \
--input bad_cases.json \
--gt-dir /data/labels \
--img-dir /data/images \
--output-dir runs/heading_viz
Step 3: 查看分析
# 方式1:静态报告
open runs/heading_viz/analysis_report.html
# 方式2:交互式查看
python heading_error_viewer.py --input bad_cases.json --port 8080
Step 4: 深入分析
- 根据可视化结果筛选特定模式
- 对比不同条件下的误差
- 定位具体问题原因
🔄 迭代优化
基于分析结果,可以:
-
模型改进
- 优化heading损失函数
- 添加角度歧义解决机制
- 增强前后方向特征学习
-
数据改进
- 检查和修正标注错误
- 平衡角度分布
- 添加难例样本
-
评估改进
- 区分反转错误和其他错误
- 添加角度置信度评估
- 引入人工review机制
📌 总结
这套方案提供:
- ✅ 多维度可视化(BEV、图像、统计图)
- ✅ 自动化工具链
- ✅ 交互式分析能力
- ✅ 完整的输出报告
- ✅ 可扩展的分析框架
通过这套方案,可以:
- 快速定位heading误差大的样本
- 直观理解误差模式
- 发现问题根因
- 指导模型改进