665. CMI - Detect Behavior with Sensor Data | cmi-detect-behavior-with-sensor-data
非常幸运能与 lightsource 组队。我的解决方案还不错,但我的 IMU 建模能力严重不足,而他的非常强。我们组队比较晚,所以幸运的是,当我们向彼此展示我们的方案时,我们拥有很好的互补部分。我们解决方案的主要主题是优化的建模,然后在顶部稍加后处理以获得不错的提升。主要的后处理见解在这里。我们的集成保持相对简单, just 50/50 平均 between 我们的方法。我们组队足够晚,以至于我们使用了完全不同的代码库,只是分别运行它们然后平均结果。
分析后处理如何与每个受试者朝向最多 2 个手势限制的不同放松一起工作的图表
完整代码:github 链接
使用:
acc_x/y/z, rot_w/x/y/z)acc_mag, rot_angle, acc_mag_jerk, rot_angle_vel, linear_acc_x/y/z, linear_acc_mag, linear_acc_mag_jerk, angular_vel_x/y/z, angular_distance未成功的实验:
使用:
未成功的实验:
两个模型:
分支:
acc_x/y/zrot_w/x/y/z提取器:
聚合:
输出头:
未成功的实验:
使用:
未成功的实验:
使用:
未成功的实验:
完整代码:github
与 lightsource 几乎相同,主要是来自公开内核的内容。我尝试了许多不同的特征处理。尝试将它们制成频谱图,变成随机曲线图,像这篇论文中那样,但去除重力后的常规特征及其导数似乎最有用。我尝试将事物转换到世界坐标系或起始方向始终一致的表示,但没有发现成功。
我的模型有许多不同的变体。有些是仅 IMU 和仅全传感器,但大多数它们在两种场景下都能工作。使用重度传感器 Dropout 训练它们,以便对许多传感器被置空或仅作为 IMU 具有鲁棒性。
我在建模方面的主要结论是,我们真的不需要深度和高特征交互,我们也不需要鼓励全局模式的方法。一个早期的实验对我来说非常具有启发性,即训练一个模型,该模型在应用任何卷积之前有一个学习特征交互的线性层。这拟合得太快并立即过拟合。我们真的想要简单的方法,分别从每个通道和通道组中最好地学习。
这让我找到了一个与 lightsource 和公开内核相似的解决方案,即有多个不同的分支,后期融合。我最好的模型是一个有很多分支但深度很浅的模型。它有一个不同的分支,具有内核大小为 3、5、9 的两个 conv1d 层。同样对于分组卷积,所以只有特征组之间获得交互。然后它还有 lstm、gru 和两层 transformer 的分支。所有这些都输入到一个 conv1d 层,最终合并并交互这些特征。我在每一层之间使用了某种形式的分支 Dropout 以及一些时间和通道 Dropout。真的试图鼓励它不被任何单一分支主导,不从特定时间步或特征学习。
我尝试了大量选项,但除了 mixup 外没发现真正有用的。我最终使用了非常高比例的 mixup。alpha 为 0.4 和 0.8 之间的差异在损失和验证 F1 方面都相当大。
我尝试了各种形式的扭曲、旋转、缩放、噪声、传感器漂移、手部翻转,但我似乎没有找到任何能提升效果的东西。
我认为我对团队的主要贡献是我的后处理。我的建模还可以,但 lightsource 的在 IMU 上显著更好,我的整个集成接近相似的全性能,但这是通过暴力集成和许多模型一起集成实现的。当我们合并我们的解决方案之间的简单平均时,给了我们巨大的提升,但当我将我的后处理移植到我们的组合解决方案时,那是我们能够暂时取得第一名的时候。最大的事情只是利用受试者手势朝向约束之间的关系。我们从训练数据中看到,每个朝向最多只做两个手势,锁定这一点显著帮助了我们的分数。在此基础上的第二件事是确保从不预测非法组合。21 种朝向手势组合在我们的数据中从未做过,所以关闭这些没有巨大影响,但参考 leaderboard 的接近程度,这仍然是一个不错的增益。
当我们将之前平均的概率转换为排名时,我们获得了另一个巨大的提升。这相当简单。只是将 18/18 分配给置信度最高的类别,17/18 给下一个,16/18 给第三个,依此类推。令我惊讶的是,这比给模型一些表达能力(给每个类别概率)更好,但也许这有助于校准每个模型的预测。我注意到 lightsource 的预测自信得多。我的通常极其模糊的决策边界,可能是因为极高的 mixup。