第二名解决方案
作者: daiwakun (Grandmaster)
竞赛排名: 第 2 名
发布时间: 2025-09-03
第二名解决方案
首先,感谢组织者和主持人举办了一场有趣的比赛,也感谢社区提供的 insightful 讨论和 Notebook。
概述
- 如果你关注了榜单 (Leaderboard),你可能注意到了最后的分数跃升:我在截止日期前四天发现了一个数据集技巧,并通过后处理大幅提高了分数。
- 没有后处理的情况下,我的模型得分为:公共榜 0.865 / 私有榜 0.858。
- 下面我将首先描述模型(数据处理、特征、架构、训练),然后介绍带来巨大差异的后处理步骤。
模型
缺失值处理
- 当某些传感器缺失时,训练独立的模型能获得更好的准确率。
- 根据 IMU 旋转数据是否缺失以及 THM/TOF 是否缺失,我训练了四种变体(旋转 存在/缺失 × THM 和 TOF 存在/缺失)。
特征工程
- IMU
- 加速度 acc(x/y/z)
- 四元数 6D 表示(以避免不连续性)
- 角速度 angular velocity(x/y/z)
- 线性加速度 linear acceleration(x/y/z)
- THM/TOF
- 将 NaN 和 -1 填充为零。
- 我没有使用 THM 数据。
- 左撇子受试者
- 乘以 −1:acc_x, linear_acc_x, 角速度 y 和 z,以及四元数 6D 表示的第 0 和第 4 分量。
- 交换 tof_3 和 tof_5,并水平翻转 2D TOF 网格的左右方向。
- 受试者特定校正
- 在训练数据中,来自 SUBJ_019262 和 SUBJ_045235 的数据围绕 z 轴旋转了 180°。
- 我将所有通道乘以 −1,除了 acc_z 和 linear_acc_z。
- 我找不到可靠的 TOF 校正方法,因此将这些受试者的 TOF 设置为 NaN。
模型架构
- 基于公开 Notebook:残差 SE-CNN 块 + 注意力机制模型 (Residual SE-CNN Block + Attention)。
- 模态特定主干 (Modality-specific stems):
- 为以下各项使用独立的 1D CNN 分支:acc, 四元数 6D, 角速度,linear_acc,以及每个 tof1~5;然后拼接。
- TOF 处理:
- 在 1D CNN 分支之前,我对每帧的 TOF 网格使用 2D CNN,随后进行均值池化以获得每步特征。
- 阶段感知注意力 (Phase-aware Attention)
- 普通的时间注意力可能会过度关注长阶段(例如通往目标的长过渡期)。
- 我在每个时间步添加了一个辅助的 3 类阶段预测器:
- (放松并)移动手到目标位置
- 手在目标位置
- 执行手势
- 我构建了三个注意力机制,每个阶段一个,并用相应的阶段概率加权每个注意力分数。这样可以提取特定于每个阶段的特征,而不是让长阶段占据主导地位。
预测目标
- 我预测一个复合标签:(初始行为 ∈ {放松&移动 / 移动}, 方向,手势)。
- 这个选择对于后处理步骤很重要。
Mixup 数据增强
- 简单的线性 mixup,但与阶段对齐以避免混合行为:
- 将每个序列分为上述三个阶段,仅在同一阶段内混合。
- 特别是对于“移动到目标”,我对齐阶段的结束点,以便在混合前同步到达目标的动作。
训练细节
- 优化器:Adam (lr=1e-3, wd=1e-4)
- 调度器:余弦退火 (Cosine Annealing)
- Batch size: 32
- Epochs: 50
- 折数 (Folds): 10
- 最终模型:3 个变体的集成(1D CNN 的不同深度/层数)
在线伪标签 (Online Pseudo-Labeling)
- 大约有 8k 训练序列和 3.5k 测试序列,伪标签有所帮助。
- 提交 API 一次预测一个序列,所以我执行了测试时更新:每当积累一批大小的测试序列时,我就使用伪标签以小学习率 (5e-5) 微调一步。
后处理
来自 train.csv 的关键观察:
- 有 4 个方向 × 18 个手势 = 72 个可能的 (方向,手势) 对,但实际上只出现了 51 个。
- 对于每个受试者,数据集恰好包含这 51 对,每对记录有两种可能的初始行为(放松&移动 / 移动),总计每个受试者 51 × 2 = 102 个序列。
- 基于此,我训练模型预测 102 个类别(上述描述的复合标签)。
最大化条件联合概率(带有不重复约束)
- 对于每个受试者,我保留其所有序列的预测类别概率。
- 当预测该受试者的第 N 个序列时,我不是独立地取第 N 项的 argmax,而是选择长度为 N 的类别序列,以最大化联合概率(对数概率之和),前提是“没有标签被使用两次”。
- 因为标签是在每个受试者下联合分配的,且有不重复约束,早期的高置信度选择会锁定其标签;当后来的样本对某个已被占用的标签只有中等置信度时,会选择替代方案以产生更高的联合对数似然。
- 在计算上,这是一个分配问题,可以使用负对数概率作为成本,通过高效算法(例如匈牙利算法)解决。
得分
| 方法 |
公共榜 |
私有榜 |
| 无伪标签 / 无后处理 |
0.862 |
0.854 |
| 有伪标签 / 无后处理 |
0.865 |
0.858 |
| 无伪标签 / 有后处理 |
0.891 |
0.875 |
| 有伪标签 / 有后处理 |
0.900 |
0.878 |