680. MABe Challenge - Social Action Recognition in Mice | MABe-mouse-behavior-detection
首先感谢主办方和 Kaggle 举办这次比赛!此外,还要特别感谢 @tomirol 和 @aerdem4 在本次挑战中的合作与努力!
我们的解决方案基于针对每个实验室训练的不同设置和参数的神经网络 (NN) 和 XGB 模型。对于大多数实验室,我们 simply 选择该实验室交叉验证 (CV) 分数最高的模型,除了 "LyricalHare"、"InvincibleJellyfish" 和 "ElegantMink",我们在这些实验室上执行逐帧多数投票。
我们模型的每个实验室 CV 分数如下:
我们的代码最初 fork 自 @ravaghi 的优秀的 公开 Notebook,这已经是一个相当强的基线。
下面我们要列出我们解决方案的主要点以及与原始 Notebook 的不同之处:
nose, ear_left, ear_right, body_center 和 tail_base。
body_center 的实验室,我们可以从 hip_left + hip_right 或 lateral_left + lateral_right 推导出来。作为最后的手段(仅 2 个实验室),我们从 tail_base + ears_l+r 插值得到。nose 的实验室,我们简单地用 head 替换。lab_id 和 action 训练 3 组 4 个模型(4 折 CV,按视频分组并按动作标签分层),即每个动作一个二分类器。
action 阈值。residual_action_i = pred_action_i - threshold_action_i,然后在所有 residual_action_i 中取 argmax。最后,对于最高残差,我们只需检查 residual_action_i > 0 以在 action_i 和无动作之间进行选择。group["x"] = group["x"].interpolate(method="linear", limit_direction="both")) 预处理关键点,以减少输入中大量的 NaN。
对于单鼠模型,我们进行的特征工程侧重于以下主题:
对于一对老鼠,我们 simply 尝试创建能够捕捉老鼠之间关系的特征:
is_same_sex, is_same_color 等。虽然我们的特征工程管道的一部分已经捕捉到了不同窗口的一些特征,但我们发现简单地“借用”邻近帧的特征也非常有益。我们通过两种不同的方式做到了这一点:“简单复制”和“窗口统计”。
我们尝试的第一件事是 simply 使用滑动窗口复制 frame_i 周围帧的特征。例如,我们应用 window=4 和 stride=5,意味着对于 frame_i,我们将拼接来自帧 [frame_i-20, frame_i-15, frame_i-10, frame_i-5, frame_i, frame_i+5, frame_i+10, frame_i+15, frame_i+20] 的特征。
当然,这种方法导致特征数量急剧增加,但我们发现 XGB 对高维性非常 robust。我们在带有分数的图片中将使用这种“简单复制”方法训练的模型称为 "Matheus XGB"。
我们尝试的第二种时间特征选项是计算每个窗口的统计信息,而不是原样复制帧特征。我们使用 median, min, max 和 std 作为每个窗口的聚合器。此模型使用 window=2 和 stride=15,在图片中表示为 "Edu XGB"。
与我们的 XGB 流程类似,我们通过以下方式标准化传感器关键点:
lateral_left -> hip_leftlateral_right -> hip_righthead -> noseheadpiece 和 spine对于每 24 帧,我们计算以下特征并将其作为主要输入提供给模型:
在初始特征提取骨干网络之后,我们将额外特征后期注入到模型中:
关于我们的架构,我们选择了以下设计选择:
GroupNorms 后具有残差连接的不同膨胀率的卷积InstanceNorm3dELU 激活函数softmax对于我们的训练,主要考虑因素如下:
(batch_size, features, n_mice, n_mice, seq_len) 的张量BCEWithLogitsLoss 用作掩码目标的损失函数(不对 NaN 目标进行反向传播)sqrt(binary_label_mean) 加权以平衡稀有类别argmax对于我们的最终解决方案,我们 simply 为每个实验室选择了 CV 最高的模型(参见图片参考)。
唯一的例外是 "LyricalHare", "InvincibleJellyfish" 和 "ElegantMink",我们发现对所有 3 个模型执行多数投票是有益的。