ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

边界精修指南:action-detection 中位置回归与提案评分机制详解

2026/8/21 16:47:43 拓冰建站 浏览量
边界精修指南:action-detection 中位置回归与提案评分机制详解 边界精修指南action-detection 中位置回归与提案评分机制详解【免费下载链接】action-detectiontemporal action detection with SSN项目地址: https://gitcode.com/gh_mirrors/ac/action-detection时序动作检测Temporal Action Detection的目标是在未剪辑的长视频中同时回答两个问题动作在哪时间边界和动作是什么类别。而边界精修正是决定检测精度上限的关键一环。本文将带你深入 action-detection 项目基于 ICCV 2017 的 Structured Segment Networks简称 SSN的源码逐行拆解其中的位置回归与提案评分两大机制帮助你理解提案如何被粗筛、又如何被精修的完整链路。为什么需要边界精修粗提案的精度瓶颈任何两阶段检测器都遵循同一逻辑先用廉价手段生成大量时序提案proposal再用网络打分筛选。但无论是滑窗、还是基于 actionness 的 TAG 提案边界都只是大概齐——它们可能只覆盖了动作的中间部分也可能多框进了前后几秒的无关内容。评测指标 mAP 按 IoU 阈值衡量边界吻合度IoU 阈值越高如 0.5、0.7边界误差对分数的影响越大。SSN 的解决办法是双管齐下位置回归Location Regression让网络预测边界偏移量把提案推向真实动作区间提案评分Proposal Scoring用更丰富的结构化特征区分完整动作、不完整动作与纯背景。这两步分别对应 ssn_models.py 中的回归头与分类头下面逐一展开。三段式结构SSN 如何为精修建模SSN 把每个提案按比例切成三段起始段starting、主体段course、结束段ending。在 ssn_models.py 中默认配置为 2 段起始 5 段主体 2 段结束配合 ops/ssn_ops.py 中的 STPPStructured Temporal Pyramid Pooling做金字塔池化。结构上的精妙之处在于三路分支各司其职分支输入特征输出作用活动度分类器主体段特征背景 各类别概率判断是不是这个动作完整度分类器三段全量特征各类别完整度分数判断边界是否框准位置回归头三段全量特征各类别中心偏移 时长缩放修正时间边界这段结构化的粗到细设计是后续所有精修逻辑的基石。位置回归机制中心偏移与时长缩放回归目标的构造回归目标在 ssn_dataset.py 的compute_regression_targets中生成核心只有两行中心偏移loc_reg (gt_center - prop_center) / prop_size即真实动作中心相对提案中心的偏移量除以提案时长做归一化时长缩放size_reg log(gt_size / prop_size)真实时长与提案时长的对数比。这两者的物理意义很直观回归头输出的不是绝对帧号而是提案自身比例尺上的相对修正天然与提案长度解耦。在训练前ssn_dataset.py 还会统计所有前景提案的均值与标准差把回归目标标准化z-score避免量纲差异干扰训练。分类别回归与 Smooth L1 损失回归头输出维度为2 * num_class即每个类别预测一组 (中心偏移, 时长缩放)。ops/ssn_ops.py 中的ClassWiseRegressionLoss先按样本的真实标签取出对应类别的预测再用Smooth L1计算损失——它对离群点更鲁棒是边界回归任务的标准选择。推理时的边界重算评估阶段eval_detection_results.py 的perform_regression把预测值还原为新的边界new_center center duration * loc_score new_duration duration * exp(size_score)新的起止时间 新中心 ± 新时长的一半并裁剪回 [0, 1] 的相对坐标范围。注意这一精修发生在NMS 之后、对每个类别分别执行——先筛掉冗余再精修幸存者既省计算又稳。提案评分机制活动度 × 完整度的乘积融合三路分数如何合成最终得分SSN 在 eval_detection_results.py 中这样融合三路输出combined_scores softmax(activity_scores)[:, 1:] * exp(completeness_scores)softmax(activity_scores)剔除背景类后得到是某类动作的概率exp(completeness_scores)把完整度分数映射为正数作为边界吻合度的置信权重。两者相乘既要求类别正确又要求边界完整缺一不可。这也解释了为什么 SSN 能比单纯分类器在边界精度上高出一截。完整度分类器的 OHEM 训练完整度分类器要区分三种样本前景IoU 0.7、不完整0.01 IoU 0.3 且覆盖了动作的部分时段、背景IoU 极低。其中不完整样本最有教学价值——它告诉网络框只框了一半该给低分。ops/ssn_ops.py 中的OHEMHingeLoss实现了在线难例挖掘对每个批次的负样本按损失降序排序只回传前 17%默认ohem_ratio0.17的梯度让训练聚焦在最难区分的不完整提案上。双流分数融合RGB 与 Flow 两个模态各自产出分数后eval_detection_results.py 的merge_scores按权重加权求和这也是 THUMOS14 上 RGBFlow 能把 mAP0.5 从单流 22.50% 提升到 27.36% 的原因。关键阈值与采样配置精修的数据地基回归目标的质量取决于采样策略data/dataset_cfg.yaml 中为 THUMOS14 / ActivityNet v1.2 分别配置了关键阈值fg_iou_thresh: 0.7IoU 超过该值的提案才被视为前景并计算回归目标incomplete_iou_thresh: 0.3低于该值且覆盖动作主体部分的判为不完整样本bg_iou_thresh: 0.01低于该值视为纯背景。每个视频每批采样 8 个提案前景:背景:不完整 1:1:6可见不完整样本占比极高——这正是边界精修能学到东西的关键数据来源。在 ssn_dataset.py 中起始段和结束段还会向外扩展提案时长的 50% 并记录缩放系数scaling用于 STPP 池化时对齐不同长度的上下文。完整运行链路训练、测试与评估三步训练 SSN在 ssn_train.py 中总损失为三者加权loss act_loss comp_loss * weight reg_loss * weight启动训练以 THUMOS14、RGB 模态为例git clone --recursive https://gitcode.com/gh_mirrors/ac/action-detection python ssn_train.py thumos14 RGB -b 16 --lr_steps 20 40 --epochs 45测试与评估ssn_test.py 对每个提案输出活动度、完整度、回归三类分数eval_detection_results.py 随后完成分数融合、top-k 截断、时间维 NMS阈值 0.2、位置回归精修最后调用 ActivityNet 工具包计算各 IoU 阈值下的 mAP。如果想对比精修到底有多大用可以加--no_regression跑一遍直接感受位置回归对边界精度的提升。小结一条值得记住的精修公式把整条链路浓缩成一句话粗提案 → 三段结构化建模 → 活动度×完整度评分 → 位置回归重算边界 → NMS 输出。位置回归负责推边界评分机制负责筛好坏二者协同才构成完整的边界精修闭环。理解了这个机制再去看 ssn_models.py、ops/ssn_ops.py 和 eval_detection_results.py 的源码你会发现每个模块都严丝合缝地服务于同一目标——把时间边界修得更准。【免费下载链接】action-detectiontemporal action detection with SSN项目地址: https://gitcode.com/gh_mirrors/ac/action-detection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考