单目3D初始代码

This commit is contained in:
zhao.zhu
2026-06-24 09:35:46 +08:00
commit 04a5895b6b
1153 changed files with 340700 additions and 0 deletions

View File

@@ -0,0 +1,455 @@
# Heading Error Analysis Toolkit
Heading 误差分析工具链,用于提取、可视化和分析 3D 目标检测中的方向预测错误。
## 工具概览
本工具链包含 4 个核心工具:
### ✅ Tool 1: 数据提取工具
**文件**: `extract_bad_heading_cases.py`
从评估结果中提取 heading 误差大的案例,支持多维度筛选。
```bash
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--threshold 1.5 \
--top-k 100 \
--output bad_heading_cases.json \
--stats
```
**功能**
- 多条件筛选(阈值、类别、距离、置信度)
- 反转错误检测≈180°
- 详细统计分析
- 结构化 JSON 输出
📖 [详细文档](EXTRACT_BAD_HEADING_USAGE.md)
---
### ✅ Tool 2: 可视化生成工具
**文件**: `visualize_heading_errors.py`
生成 BEV、图像投影、角度分析和综合视图。
```bash
python eval_tools/visualize_heading_errors.py \
--input bad_heading_cases.json \
--image-root /path/to/images \
--output runs/heading_viz \
--viz-types bev image angle combined
```
**功能**
- BEV 鸟瞰图GT/Pred 3D框 + 方向箭头)
- 图像视图2D框 + 误差标注)
- 角度分析(极坐标 + 柱状图)
- 综合视图(四宫格 + 详细统计)
📖 [详细文档](VISUALIZE_HEADING_USAGE.md)
---
### 🚧 Tool 3: 交互式查看器 (待实现)
**文件**: `heading_error_viewer.py`
Web 界面交互式浏览和分析案例。
```bash
python eval_tools/heading_error_viewer.py \
--input bad_heading_cases.json \
--viz-dir runs/heading_viz \
--port 8080
```
**计划功能**
- Web UI 浏览所有案例
- 过滤和排序功能
- 并排对比多个案例
- 统计图表展示
---
### 🚧 Tool 4: 报告生成器 (待实现)
**文件**: `generate_heading_report.py`
自动生成 HTML/Markdown 分析报告。
```bash
python eval_tools/generate_heading_report.py \
--input bad_heading_cases.json \
--viz-dir runs/heading_viz \
--output heading_analysis_report.html
```
**计划功能**
- 自动生成分析报告
- 统计图表和趋势分析
- 典型案例展示
- 问题总结和建议
---
## 完整工作流
### 1. 数据提取阶段
```bash
# 提取所有 bad cases
python eval_tools/extract_bad_heading_cases.py \
--input eval_results_common_match_comparison/yolov5s-300w/20260203_210259/detailed_3d_matches.json \
--threshold 1.5 \
--output all_bad_cases.json \
--stats
# 或者只提取反转错误(针对 yolov5s-300w 的主要问题)
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--reversal-only \
--top-k 100 \
--output reversal_errors.json \
--stats
```
### 2. 可视化生成阶段
```bash
# 生成所有类型的可视化
python eval_tools/visualize_heading_errors.py \
--input reversal_errors.json \
--image-root /path/to/eval/cases \
--output runs/reversal_analysis \
--viz-types bev image angle combined
# 或者只生成关键视图(节省时间)
python eval_tools/visualize_heading_errors.py \
--input reversal_errors.json \
--image-root /path/to/eval/cases \
--output runs/reversal_analysis \
--viz-types combined \
--max-cases 50
```
### 3. 交互式查看阶段 (待实现)
```bash
# 启动 Web 查看器
python eval_tools/heading_error_viewer.py \
--input reversal_errors.json \
--viz-dir runs/reversal_analysis \
--port 8080
# 浏览器访问 http://localhost:8080
```
### 4. 报告生成阶段 (待实现)
```bash
# 生成分析报告
python eval_tools/generate_heading_report.py \
--input reversal_errors.json \
--viz-dir runs/reversal_analysis \
--output reports/heading_analysis_report.html
# 查看报告
open reports/heading_analysis_report.html
```
---
## 典型使用场景
### 场景 1: 快速定位严重问题
```bash
# 1. 提取 top 20 worst cases
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--threshold 2.0 \
--top-k 20 \
--output top20_worst.json
# 2. 生成综合视图
python eval_tools/visualize_heading_errors.py \
--input top20_worst.json \
--image-root /data/cases \
--output runs/top20_analysis \
--viz-types combined
# 3. 查看 runs/top20_analysis/combined/ 目录
```
### 场景 2: 分析反转错误模式
```bash
# 1. 提取所有反转错误
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--reversal-only \
--top-k 100 \
--output reversal_100.json \
--stats
# 2. 生成 BEV 视图(最直观)
python eval_tools/visualize_heading_errors.py \
--input reversal_100.json \
--image-root /data/cases \
--output runs/reversal_bev \
--viz-types bev
# 3. 浏览 BEV 图像,寻找共同特征
```
### 场景 3: 类别对比分析
```bash
# 分别提取和可视化不同类别
for class in vehicle pedestrian bicycle rider; do
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--threshold 1.5 \
--classes $class \
--top-k 30 \
--output ${class}_bad.json
python eval_tools/visualize_heading_errors.py \
--input ${class}_bad.json \
--image-root /data/cases \
--output runs/by_class/${class} \
--viz-types combined
done
# 对比各类别的问题模式
```
### 场景 4: 距离敏感性分析
```bash
# 近距离 (< 30m)
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--max-distance 30 \
--top-k 30 \
--output near_bad.json
python eval_tools/visualize_heading_errors.py \
--input near_bad.json \
--image-root /data/cases \
--output runs/distance/near \
--viz-types combined
# 中距离 (30-60m)
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--min-distance 30 \
--max-distance 60 \
--top-k 30 \
--output mid_bad.json
python eval_tools/visualize_heading_errors.py \
--input mid_bad.json \
--image-root /data/cases \
--output runs/distance/mid \
--viz-types combined
# 远距离 (> 60m)
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--min-distance 60 \
--top-k 30 \
--output far_bad.json
python eval_tools/visualize_heading_errors.py \
--input far_bad.json \
--image-root /data/cases \
--output runs/distance/far \
--viz-types combined
```
---
## 当前问题分析
基于 yolov5s-300w 模型的评估结果:
### 主要发现
1. **Heading 误差严重**
- 比 mono3d 高 28.61%
- 68.7% 的 bad cases 是反转错误≈180°
2. **类别差异**
- **Vehicle**: 87.3% 反转率(最严重)
- Bicycle: 46.8% 反转率
- Rider: 35.3% 反转率
- Pedestrian: 16.1% 反转率(最轻)
3. **其他指标良好**
- 2D mAP +21.85%
- 横向误差 -9.39%
- 纵向误差 -4.48%
### 分析假设
可能的根本原因:
1. **模型输出范围问题**
- Heading 预测范围不正确
- 输出范围 [0, π] vs 需要 [-π, π]
- 导致 180° 的系统性偏差
2. **损失函数问题**
- Heading loss 可能没有正确处理角度周期性
- 没有惩罚反转错误
3. **后处理问题**
- 角度转换或归一化错误
- NMS 或其他后处理导致的问题
4. **数据或标注问题**
- 训练数据中的角度分布不均
- 标注定义不一致
---
## 文件结构
```
eval_tools/
├── extract_bad_heading_cases.py # Tool 1: 数据提取
├── visualize_heading_errors.py # Tool 2: 可视化生成
├── heading_error_viewer.py # Tool 3: 交互查看器 (待实现)
├── generate_heading_report.py # Tool 4: 报告生成 (待实现)
├── test_extract_bad_cases.sh # Tool 1 测试脚本
├── test_visualize_heading.sh # Tool 2 测试脚本
├── HEADING_ERROR_TOOLKIT_README.md # 本文档
├── EXTRACT_BAD_HEADING_USAGE.md # Tool 1 详细文档
├── VISUALIZE_HEADING_USAGE.md # Tool 2 详细文档
└── HEADING_ERROR_VISUALIZATION_PLAN.md # 完整分析方案
```
---
## 依赖安装
```bash
# 已包含在项目 requirements.txt 中
pip install -r requirements.txt
# 主要依赖:
# - numpy
# - opencv-python
# - matplotlib
# - tqdm
# - json (标准库)
```
---
## 性能建议
### 大数据集处理
对于大规模评估结果(如 596K 匹配):
```bash
# 1. 先用严格阈值快速筛选
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--threshold 2.5 \
--top-k 50 \
--output critical_cases.json
# 2. 分批可视化
python eval_tools/visualize_heading_errors.py \
--input critical_cases.json \
--image-root /data/cases \
--output runs/critical \
--max-cases 20 \
--viz-types combined
# 3. 根据发现再扩大分析范围
```
### 存储优化
```bash
# 只生成必要的可视化类型
python eval_tools/visualize_heading_errors.py \
--input bad_cases.json \
--image-root /data/cases \
--output runs/viz \
--viz-types bev # 最小化存储
# 降低 DPI 节省空间(预览用)
python eval_tools/visualize_heading_errors.py \
--input bad_cases.json \
--image-root /data/cases \
--output runs/preview \
--viz-types combined \
--dpi 80
```
---
## 下一步计划
### 立即可用
- ✅ Tool 1: 数据提取工具
- ✅ Tool 2: 可视化生成工具
### 待实现
- 🚧 Tool 3: 交互式查看器
- Flask/Streamlit Web UI
- 实时过滤和排序
- 案例对比功能
- 🚧 Tool 4: 报告生成器
- 自动化分析报告
- 统计图表生成
- 问题总结和建议
### 功能增强
- [ ] 3D 可视化(完整 3D 坐标系)
- [ ] 时序分析(同一目标的轨迹)
- [ ] 热力图(误差分布)
- [ ] 自动模式识别
---
## 相关文档
- [Heading Error Visualization Plan](HEADING_ERROR_VISUALIZATION_PLAN.md) - 完整分析方案
- [GT Visualization Guide](../test_scripts/GT_VISUALIZATION_COMPLETE_GUIDE.md) - GT 可视化工具
- [Metrics Summary](../eval_results_common_match_comparison_v1/.../METRICS_SUMMARY.md) - 评估指标总结
---
## 技术支持
遇到问题请:
1. 查看对应工具的详细文档
2. 运行测试脚本验证环境
3. 检查输入文件格式
4. 查看错误日志
```bash
# 调试模式运行
python eval_tools/extract_bad_heading_cases.py \
--input detailed_3d_matches.json \
--threshold 1.5 \
--output test.json \
--stats 2>&1 | tee debug.log
```
---
**更新日期**: 2026-02-04
**版本**: 1.0
**状态**: Tool 1 & 2 已完成Tool 3 & 4 待实现