Appearance
SwitchSnap:开关响指
- 来源:
noai-train/联合训练/Day2/T4 SwitchSnap 杨其非 - 类型:CV / video action localization
- 原始资料:
statement.md、solution.md、baseline.ipynb、metrics.py - 题面完整性:完整
- 解法资料完整性:完整,有参考题解
题面大意
给定固定视角彩色视频抽帧,识别人手指向哪盏灯,以及每一帧是否发生响指。房间内 3 盏灯编号为 0、1、2;视频无音频,灯始终保持亮着,不能通过亮灭判断。训练集有每帧手部框和 lights 状态,测试集没有手部框。提交每个测试视频逐帧 JSON,包含 light 和 tag。评分由响指帧定位 IoU 占 70%、指向灯分类准确率占 30%。
数据特点
原始帧分辨率高达 1920 x 1080,但有判别力的信息集中在手和手指局部。训练视频数量有限,直接全图端到端训练容易记背景和人物。响指是短时动作,单帧静态图很难区分“准备响指”和“刚响指”。训练标签没有直接给 tag,需要由相邻帧 lights 变化推导。
考点
考点是视频动作定位的任务拆解。参考题解明确采用阶段化方案:先预测手部框,再提取关键点,再用 crop/diff/bone 判断响指,最后单独预测灯编号。它考察参赛者是否能把复杂视频任务拆成局部可学的子问题,而不是堆一个大 CNN。
涉及知识点
- 手部检测与 bbox 回归。
- MediaPipe Hands 21 点关键点。
- 帧间差分和短时动作检测。
- 多分支 CNN:crop 分支、diff 分支、bone 分支。
- 事件去重:连续正帧压缩为单个响指事件。
解法思路
参考方案分四阶段。Stage 1 用 resnet18 预测手部 bbox,并对 train/test 都生成预测框,保证训练和测试流程一致。Stage 2 在预测框 crop 上用 MediaPipe 提取 21 个手部关键点。Stage 3 用当前手部 crop、相邻帧差分和关键点结构图三路输入判断响指概率。Stage 4 用全图或带位置编码的手部 crop 判断当前帧指向 0/1/2 哪盏灯。
训练响指标签时,比较相邻帧 lights 是否变化;评分允许 1 帧误差,因此可以把变化帧附近窗口作为正样本。推理时用阈值筛出 tag=1,再把连续多个正帧压成第一个,避免一个响指重复报多次。
可选/多种解法
参考分阶段解法:手部框 -> 关键点 -> 响指检测 -> 灯分类,最稳。
端到端时序模型:连续几帧 crop 输入 3D CNN/LSTM/Transformer,理论上可行,但小数据下过拟合风险大。
规则关键点法:若 MediaPipe 稳定,可以直接根据拇指、中指、食指尖距离和速度设计响指特征,再训练轻量分类器。
特殊技巧
先 crop 是关键。整图 resize 会把手指细节抹掉,响指这种高频局部动作会消失。指向灯分类和响指检测最好拆开,因为前者依赖手在房间几何中的位置,后者依赖局部手指变化。对灯分类,可使用 RGB + x + y 位置编码的 crop,使模型既看到清晰手部,又知道手在全图位置。
调参优化
题解中的主要超参数是事件窗口和阈值。训练时可调正样本窗口半径、帧间差分特征、图像/状态分支权重、loss 正负样本权重和学习率;推理时重点扫描响指概率阈值、连续正帧合并窗口、最小事件间隔和灯光变化确认规则。评分允许 1 帧误差,因此窗口不能过窄,但过宽会导致重复报点。验证时应同时统计漏检、重复检测和偏移帧数,最终以提交评分为准。
注意事项
分类准确率只在标准响指帧上计算;非响指帧的 light 不参与分类分,但仍需合法。响指帧匹配允许 1 帧误差,但重复报会降低 IoU。训练集中 bbox 可用于训练检测器,测试集不能直接获得 bbox。
推广意义
这题是小数据视频任务的范例:先定位、再建模动作、最后做事件级后处理。类似方法可用于手势交互、工业动作检测、体育片段定位和医疗动作分析。