140 lines
3.4 KiB
Markdown
Executable File
140 lines
3.4 KiB
Markdown
Executable File
# 距离区间3D评测功能说明
|
||
|
||
## 功能描述
|
||
|
||
新增了按距离区间统计3D检测误差的功能,可以分析模型在不同距离范围内的性能表现。
|
||
|
||
## 配置方法
|
||
|
||
在配置文件 `eval_config.yaml` 中的 `metrics_3d` 部分添加 `distance_ranges`:
|
||
|
||
```yaml
|
||
metrics_3d:
|
||
enabled: true
|
||
distance_ranges:
|
||
- [0, 30] # 0-30米
|
||
- [30, 60] # 30-60米
|
||
- [60, 100] # 60-100米
|
||
- [100, 999] # 100米以上
|
||
```
|
||
|
||
## 距离定义
|
||
|
||
- 使用GT目标的**z坐标**(纵向距离)作为距离值
|
||
- 单位:米(meter)
|
||
- 区间为左闭右开:`[min, max)`
|
||
|
||
## 评测结果
|
||
|
||
### 控制台输出示例
|
||
|
||
```
|
||
3D Metrics:
|
||
vehicle [overall]: Lat=0.647m, Long=1.680m, Head=0.258rad (n=2407)
|
||
[0-30m]: Lat=0.500m, Long=1.203m, Head=0.177rad (n=2142)
|
||
[30-60m]: Lat=1.149m, Long=5.074m, Head=0.607rad (n=194)
|
||
[60-100m]: Lat=0.897m, Long=5.624m, Head=1.036rad (n=37)
|
||
```
|
||
|
||
### 文本报告示例
|
||
|
||
```
|
||
VEHICLE:
|
||
|
||
[0-30m]:
|
||
Samples: 2142
|
||
Lateral Error (m):
|
||
Mean: 0.4995
|
||
Median: 0.2247
|
||
Std: 0.8574
|
||
90%: 1.2385
|
||
Longitudinal Error (m):
|
||
Mean: 1.2026
|
||
Median: 0.5173
|
||
Std: 1.8009
|
||
90%: 3.1931
|
||
Heading Error (rad):
|
||
Mean: 0.1768
|
||
Median: 0.0526
|
||
Std: 0.5410
|
||
90%: 0.2019
|
||
|
||
[30-60m]:
|
||
Samples: 194
|
||
...
|
||
|
||
[OVERALL]:
|
||
Samples: 2407
|
||
...
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
### 1. 使用配置文件
|
||
|
||
```bash
|
||
python eval_tools/eval.py \
|
||
--config eval_tools/configs/eval_config.yaml \
|
||
--roi 0 120 1920 1080 \
|
||
--roi-input-size 704 352
|
||
```
|
||
|
||
### 2. 快速测试
|
||
|
||
```bash
|
||
bash eval_tools/test_distance_ranges.sh
|
||
```
|
||
|
||
## 性能分析
|
||
|
||
从测试结果可以看出:
|
||
|
||
### Vehicle类别(2407个样本)
|
||
- **0-30m**(近距离,2142样本):
|
||
- 横向误差:0.50m
|
||
- 纵向误差:1.20m
|
||
- 朝向误差:0.18rad
|
||
- **性能最好**
|
||
|
||
- **30-60m**(中距离,194样本):
|
||
- 横向误差:1.15m(↑2.3倍)
|
||
- 纵向误差:5.07m(↑4.2倍)
|
||
- 朝向误差:0.61rad(↑3.4倍)
|
||
- **误差明显增大**
|
||
|
||
- **60-100m**(远距离,37样本):
|
||
- 横向误差:0.90m
|
||
- 纵向误差:5.62m
|
||
- 朝向误差:1.04rad(↑5.9倍)
|
||
- **朝向估计最困难**
|
||
|
||
### Rider类别(65个样本)
|
||
- **0-30m**(44样本):误差较小
|
||
- **30-60m**(21样本):纵向误差显著增加(0.96m → 2.33m)
|
||
|
||
## 关键发现
|
||
|
||
1. **距离越远,误差越大**:符合预期,远距离目标分辨率低
|
||
2. **纵向误差增长最快**:距离估计是3D检测的主要挑战
|
||
3. **朝向误差对距离敏感**:远距离目标的朝向估计困难
|
||
4. **样本分布不均**:89%的vehicle样本在30米内
|
||
|
||
## 向后兼容
|
||
|
||
- 如果不配置 `distance_ranges`,评测脚本将只输出整体统计(兼容旧版本)
|
||
- 现有评测脚本无需修改即可继续使用
|
||
|
||
## 实现细节
|
||
|
||
- **匹配方式**:仍使用2D IoU匹配,距离区间只用于统计分组
|
||
- **数据结构**:`errors[class_id][range_key]` 存储分组误差
|
||
- **统计指标**:每个区间独立计算mean/median/std/90%分位数
|
||
- **JSON输出**:完整保存所有区间数据,便于后续分析
|
||
|
||
## 相关文件
|
||
|
||
- `eval_tools/evaluator/metrics_3d.py` - 核心实现
|
||
- `eval_tools/evaluator/evaluator.py` - 配置传递和报告生成
|
||
- `eval_tools/configs/eval_config.yaml` - 配置示例
|
||
- `eval_tools/test_distance_ranges.sh` - 测试脚本
|