3.4 KiB
Executable File
3.4 KiB
Executable File
ROI坐标转换问题解决方案
问题描述
评测结果中precision和recall都为0,经过诊断发现是ROI坐标转换问题。
根本原因
- 检测结果使用ROI坐标系:保存在
txt_results中的检测框坐标是在ROI裁剪区域的坐标系中(尺寸: 704x352) - Ground Truth使用原图坐标系:GT标注使用的是归一化的原图坐标(尺寸: 1920x1080)
- 坐标不匹配导致IoU=0:两个坐标系不一致,所有框的IoU都是0,无法匹配
ROI参数
针对evalset_roi0数据集:
- ROI区域: [0, 120, 1920, 1080] (xyxy格式)
- ROI输入尺寸: 704 x 352 (模型输入尺寸)
- 原图尺寸: 1920 x 1080
坐标转换公式
检测框从ROI坐标转换到原图坐标:
# 1. 缩放
scale_x = (1920 - 0) / 704 = 2.7273
scale_y = (1080 - 120) / 352 = 2.7273
x1_scaled = x1 * scale_x
x2_scaled = x2 * scale_x
y1_scaled = y1 * scale_y
y2_scaled = y2 * scale_y
# 2. 偏移
x1_final = x1_scaled + 0
x2_final = x2_scaled + 0
y1_final = y1_scaled + 120
y2_final = y2_scaled + 120
解决方案
1. 修改DetectionParser
在parser.py中添加ROI缩放和偏移支持:
def __init__(self, roi_offset=None, roi_scale=None):
self.roi_offset = roi_offset or (0, 0)
self.roi_scale = roi_scale or (1.0, 1.0)
在解析2D框时应用转换:
# 先缩放
x1 *= self.roi_scale[0]
x2 *= self.roi_scale[0]
y1 *= self.roi_scale[1]
y2 *= self.roi_scale[1]
# 再偏移
x1 += self.roi_offset[0]
y1 += self.roi_offset[1]
x2 += self.roi_offset[0]
y2 += self.roi_offset[1]
2. 更新Evaluator和eval.py
添加roi_offset和roi_scale参数传递。
3. 更新命令行参数
--roi 0 120 1920 1080 # ROI区域
--roi-input-size 704 352 # ROI输入尺寸
验证结果
修复前
GT bbox range: x=[18.0, 1919.0], y=[465.0, 751.0]
Det bbox range: x=[9.5, 704.6], y=[126.1, 236.8]
IoU: 0.0000
Matches: 0
修复后
GT bbox range: x=[18.0, 1919.0], y=[465.0, 751.0]
Det bbox range (scaled): x=[25.9, 1921.6], y=[463.9, 765.8]
Matches: 16/20
First match IoU: 0.8397
评测结果(100帧测试)
2D Metrics:
Precision: 0.9141
Recall: 0.6105
mAP: 0.2066
3D Metrics:
pedestrian: Lat=0.795m, Long=1.726m, Head=1.140rad (n=8)
vehicle: Lat=0.987m, Long=1.731m, Head=0.247rad (n=995)
使用方法
完整评测(81443帧)
bash eval_tools/run_evaluation_example.sh
快速测试(100帧)
bash eval_tools/run_evaluation_quick_test.sh
手动运行
python eval_tools/eval.py \
--det-path /path/to/detections \
--gt-path /path/to/gt \
--output-dir results \
--img-width 1920 \
--img-height 1080 \
--roi 0 120 1920 1080 \
--roi-input-size 704 352
注意事项
- ROI1的参数不同:如果评测ROI1的结果,需要修改ROI参数
- 不同模型的输入尺寸可能不同:根据实际模型调整
--roi-input-size - 大数据集评测耗时:81443帧约需10-20分钟,建议先用quick test验证
相关文件
eval_tools/evaluator/parser.py- 添加ROI转换逻辑eval_tools/evaluator/evaluator.py- 传递ROI参数eval_tools/eval.py- 命令行参数处理eval_tools/run_evaluation_example.sh- 完整评测脚本eval_tools/run_evaluation_quick_test.sh- 快速测试脚本