返回列表

2nd place solution

680. MABe Challenge - Social Action Recognition in Mice | MABe-mouse-behavior-detection

开始: 2025-09-18 结束: 2025-12-15 智慧养殖 数据算法赛
第二名解决方案 - MABe 鼠标行为检测
竞赛: MABe - 鼠标行为检测 (MABe - Mouse Behavior Detection)
排名: 第 2 名
作者: tenten (takatoyoshikawa), Fishmans (oygdri)
发布日期: 2025-12-16

第二名解决方案

我们想真诚地感谢组织者和 Kaggle 团队举办了如此引人入胜且愉快的竞赛。

概述

Overview Image

我们为单独行动和配对行动训练了独立的模型

  • 输入:形状为 (T = 512, num_features) 的时间序列
  • 损失函数:二元交叉熵 (Binary Cross Entropy)
  • 最终预测使用实验室 × 动作特定的阈值获得

数据预处理

  • 所有跟踪数据均转换为 30 FPS
    • 特征:线性插值
    • 标签:最近邻插值
  • 距离/速度/加速度使用预计算统计数据进行标准化
  • 缺失值通过线性插值填充
    • 缺失的身体部位特征被替换为同一帧中现有身体部位特征的平均值。

处理 AdaptableSnail 的 25 FPS 跟踪数据

参考链接:https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/612531#3305943

问题:

  • 标签提供为 30 FPS
  • 发生鼠标 ID 交换

修复:

  • 标签帧率相应调整
  • 通过目视检查跟踪可视化视频手动纠正鼠标 ID

输入特征

元特征(跨帧共享)

特征 通道数
性别 (Sex) 单独=1, 配对=2
帧率缩放 (Frame-rate scale) 1
实验室 ID (通过嵌入层) 16
候选动作标签 类别数(单独=11, 配对=26)

每帧特征

单独行动 (Solo)

特征 通道数
身体部位距离 num_bodyparts²
速度 num_bodyparts
加速度 num_bodyparts


配对行动 (Pair)

特征 通道数
跨鼠标身体部位距离 num_bodyparts²
速度 2 × num_bodyparts
加速度 2 × num_bodyparts

模型架构

我们使用了两个架构家族。

CNN + RNN / Transformer

输入
 → 多尺度卷积 (k =3,5,7,9)
 → 卷积融合
 → 双向 GRU 或 Transformer
 → 线性层
 → 输出

SqueezeFormer

输入
 → SqueezeFormer
 → 输出

我们训练了 5 个变体,具有不同的深度和超参数。


训练

  • 5 折分层交叉验证
    • 折仅使用测试集中出现的实验室 ID 数据创建
    • 实验室 ID 被分层,以便它们的分布在各折中保持一致
    • 来自 CalMS21* 和 CRIM13 的实验室始终包含在训练集中
  • 每个动作使用 BCE 进行一对多 (One-vs-rest) 训练
  • EMA 衰减 = 0.999
  • 带 warmup 的余弦学习率调度
  • 在每个 epoch,在验证集上优化每个实验室 - 动作对的阈值,并根据 resulting score 应用早停。

数据增强

  • 高斯噪声
  • 时间拉伸
  • 帧偏移(仅 shift 特征;标签不变)
  • 左右身体部位翻转
  • Mixup

推理

  • 滑动窗口推理,步长 = 128
  • 我们丢弃两个窗口边界处的 32 帧,并平均剩余预测。
  • 翻转测试时增强 (TTA)

后处理

阈值处理

  1. 最佳阈值独立计算于每个折和每个实验室 × 动作对,最终阈值通过平均特定于折的阈值获得。
  2. 对于每一帧,在超过阈值的动作中,选择得分最高的动作

AdaptableSnail 25 FPS 调整

  • start_framestop_frame 乘以 30 / 25
  • 当跟踪数据中存在鼠标 ID 交换时,此调整没有意义
  • 私有数据集似乎包含没有鼠标 ID 交换的跟踪序列
    • 对于这些序列,预测与 30 FPS 标签对齐
    • 这导致私榜分数提高了 +0.009

结果

模型 交叉验证 (单独) 交叉验证 (配对) 公榜 私榜
集成模型 0.069 0.499 0.542 0.521
+ AdaptableSnail 后处理 0.542 0.530
同比赛其他方案