读懂评估指标:action-detection 中 mAP、IoU 与时序 NMS 全解析

📅 2026/8/21 12:46:49
读懂评估指标:action-detection 中 mAP、IoU 与时序 NMS 全解析
读懂评估指标action-detection 中 mAP、IoU 与时序 NMS 全解析【免费下载链接】action-detectiontemporal action detection with SSN项目地址: https://gitcode.com/gh_mirrors/ac/action-detection对于时序动作检测temporal action detection项目 action-detection 而言训练出模型只是第一步真正衡量模型好坏、让结果可复现可比较的是一套严谨的评估指标。本文面向新手用通俗的语言带你彻底搞懂这个项目中三个最核心的概念mAP平均精度均值、IoU交并比与时序 NMS非极大值抑制并说明它们如何配合工作、如何读懂实验结果。一、为什么评估指标如此重要时序动作检测的任务是让模型在一段未裁剪的视频中找出什么动作在什么时间区间发生。模型输出的是一个带置信度分数的片段集合比如0.5s~3.2s打棒球置信度 0.87。光看输出还不够我们需要一把尺子来回答三个问题检测得准不准—— 时间区间和真实标注Ground Truth对得上吗排序得好不好—— 置信度高的结果真的更可靠吗重复检测了吗—— 同一个动作是否被输出了很多个重叠片段在 action-detection 中这三个问题分别由IoU、mAP和时序 NMS来回答。二、IoU衡量时间区间重合度的标尺 什么是 IoUIoUIntersection over Union交并比本来来自图像目标检测衡量两个框的重叠程度在时序动作检测中被推广到一维把每个动作片段看作数轴上的一个区间[start, end]IoU 就是两个区间的交集长度 ÷ 并集长度。在项目源码 ops/detection_metrics.py 中temporal_iou(span_A, span_B)函数就实现了这个计算逻辑非常直观IoU 交集长度 / 并集长度两个区间完全重合IoU 1.0两个区间互不相交IoU 0部分重叠IoU 在 0~1 之间IoU 阈值的作用评估时我们会设置一个IoU 阈值如 0.5当预测片段与某个真实动作片段的 IoU大于等于该阈值就认为这个检测是命中Positive否则视为误检False Positive。不同数据集采用不同的评估标准THUMOS14在 0.1~0.9 的多个 IoU 阈值上分别计算 AP见 eval_detection_results.pyActivityNet v1.2在 0.5~0.95 之间以 0.05 为步长取多个阈值阈值越高要求越苛刻mAP 自然越低这也是为什么你会看到论文中总是标注mAP0.5这样的字样。三、mAP综合评价检测精度的核心指标 从 Precision / Recall 说起在某个 IoU 阈值下我们可以统计出精确率 Precision预测为正的样本中真正命中的比例召回率 Recall所有真实动作中被正确找出的比例模型输出的每个片段都有置信度分数。把片段按分数从高到低排序每多取一个片段就得到一个 (Precision, Recall) 点连起来就得到PR 曲线曲线下的面积就是APAverage Precision一个类别的检测质量就浓缩成这一个数字。mAP 所有类别 AP 的平均值mAPmean Average Precision就是把数据集中每个动作类别如扣篮、标枪的 AP 加起来取平均mAP (AP_类别1 AP_类别2 ... AP_类别N) / N在 action-detection 中评估脚本 eval_detection_results.py 会加载模型输出的检测结果pickle 文件对每个类别、每个 IoU 阈值调用compute_average_precision_detection计算 AP输出一张漂亮的IoU 阈值 vs mean AP表格最终你会在终端看到类似这样的输出| IoU thresh | 0.10 | 0.20 | ... | 0.90 | Average | |------------|------|------|-----|------|---------| | mean AP | 0.51 | 0.42 | ... | 0.09 | 0.32 |读懂官方性能表格项目的 README.md 给出了参考模型的性能例如在 THUMOS14 上模型RGBFlowmAP0.5 IoUBNInception27.36%BNInceptionKinetics 预训练32.50%InceptionV3Kinetics 预训练33.15%可以看出双流融合RGBFlow明显优于单流Kinetics 预训练能显著提升检测性能——这就是读 mAP 表格最直接的收获。四、时序 NMS消灭重复检测的去重神器 为什么要 NMS模型可能对同一个动作输出十几个高度重叠的片段比如打棒球从 10s 到 20s模型同时输出了 [10.1, 19.8]、[10.5, 20.0]、[12.0, 18.0]……如果不处理评估时会出现大量冗余的误检拉低 mAP。NMSNon-Maximum Suppression非极大值抑制的目标就是在重叠度较高的片段中只保留分数最高的那个。时序 NMS 的工作流程在 ops/utils.py 的temporal_nms(bboxes, thresh)中流程是这样的按分数从高到低排序所有片段取出当前最高分片段直接保留计算它与其余片段的 IoU删除 IoU 超过阈值的片段因为它们与最高分片段太像了对剩余片段重复上述过程直到没有片段剩下这样密集重叠的检测结果就变成了一条条高置信度、互不重叠的干净输出。阈值怎么调看数据集配置不同数据集对 NMS 阈值的要求不同配置文件 data/dataset_cfg.yaml 中写得很清楚THUMOS14nms_threshold: 0.2即重叠超过 20% 就抑制非常严格ActivityNet v1.2nms_threshold: 0.6相对宽松因为该数据集动作长、标签稀疏评估时你也可以通过--nms_threshold参数覆盖默认值亲自感受阈值变化对 mAP 的影响这是理解 NMS 的最佳实验。五、三者的关系一条完整的评估流水线 在 action-detection 中从模型输出到最终 mAP要经历完整的后处理与评估流水线模型输出(proposal 分数) ↓ 1. 分数融合RGB Flow 加权平均 ↓ 2. 时序 NMS 去重ops/utils.py ↓ 3. 位置回归修正起止时间 ↓ 4. 按 IoU 阈值判定命中ops/detection_metrics.py ↓ 5. 逐类计算 AP → 平均得 mAPeval_detection_results.py一次完整的评估只需两步命令详见 README.mdpython ssn_test.py DATASET MODALITY CHECKPOINT RESULT_PICKLE—— 提取检测分数python eval_detection_results.py DATASET RESULT_PICKLE—— 计算并打印 mAP 表格六、新手常见疑问速查 ❓疑问解答mAP 越高越好吗是的mAP 越高说明检测越准但要结合 IoU 阈值看阈值越苛刻 mAP 越低IoU 阈值如何选择跟随数据集惯例THUMOS14 常用 0.5ActivityNet 报告多个阈值的平均NMS 阈值调大/调小有什么影响调大则保留更多重叠片段可能冗余调小则删除更多可能漏检需在配置中权衡RGB 和 Flow 结果怎么合并评估脚本支持多份分数按权重平均融合双流融合通常显著提升 mAP总结评估指标是模型进步的仪表盘 理解mAP、IoU 与时序 NMS就等于掌握了读懂 action-detection 实验结果的全部钥匙IoU定义什么算检测对了mAP用单个数字总结整体检测质量时序 NMS在评估前清理冗余输出保证指标公平可靠当你训练完自己的 SSN 模型运行一次eval_detection_results.py看到终端里那张 IoU 阈值与 mean AP 对照的表格时你就能自信地说出这张表我完全读得懂。建议动手实践把 THUMOS14 的 NMS 阈值从 0.2 调到 0.5 再评估一次观察 mAP 的变化你会对这套评估体系的理解更加深刻。祝你在时序动作检测的路上越走越顺【免费下载链接】action-detectiontemporal action detection with SSN项目地址: https://gitcode.com/gh_mirrors/ac/action-detection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考