返回列表

5th place solution. AdaBN[domain==plate]

339. Recursion Cellular Image Classification | recursion-cellular-image-classification

开始: 2019-06-27 结束: 2019-09-26 药物研发 数据算法赛
第5名方案:AdaBN[domain==plate]

第5名方案:AdaBN[domain==plate]

作者:tascj | 发布时间:2019-09-27

首先,我要感谢 Recursion 和 Kaggle 组织了这场有趣的挑战,也要感谢 Double strand 团队的贡献。

以下是我方案的总结。

本次竞赛中,我们面对的是一个多源和多目标域的数据集。并且我们拥有域标签。

在这个数据集中,“域”是什么?

是细胞、实验还是板?

我的 EDA(探索性数据分析)显示 [domain==experiment]。但在实际操作中,[domain==plate] 的效果更好。这是合理的,因为批次效应和板效应确实存在。

如何使用域标签?简单来说就是 AdaBN

简而言之,不要用跨域的批次来挑战你的模型(带有BN层的模型)。

在训练中,使用域感知的批次采样。

在测试中,在 BN 层中使用域批次统计信息。

只要正确处理了批归一化,这场比赛立即就变成了一个常规的分类挑战:训练收敛顺畅,而且我的验证集/LB 分数也很一致(除了 HUVEC-05)。

我早期实验的一些结果,使用 ResNet50,224x224 输入,超参数相同:

  • 随机批次采样,验证准确率 40+%
  • 在同一细胞类型中采样批次,验证准确率 50+%
  • 同一实验中采样批次,验证准确率 60+%
  • 同一板中采样批次,验证准确率 70+%

模型

Sequential(BatchNorm2d(6), backbone, neck, head)

backbone(骨干网络): DenseNet201, ResNeXt101_32x8d, HRNet-W18, HRNet-W30

neck(颈部): gap 或 gap+bn

head(头部): 5 个全连接层(1 个共享层和 4 个用于不同细胞的层)

损失函数:

ArcFaceLoss(s=64, m=0.5) 用于 gap+bn neck

ArcFaceLoss(s=64, m=0.3) 用于 gap neck

样本记忆

在这个数据集中,我们可以获得比 siRNA 标签更多的监督信息。

Dataset Structure

样本记忆 完美契合这种结构。

使用 19 个样本记忆模块(HUVEC-05 和 18 个测试实验)进行微调,给了我约 1% 的 LB 提升,并且 HUVEC-05 的验证准确率从约 35% 提高到了约 46%(通过 277 线性分配达到约 65%)。

训练

仅使用处理过的 1108 路分类器。

输入 512 -> 随机裁剪 384 -> 随机 rot90 -> 随机 hflip

loss = 0.5 * loss_fc_cell + 0.5 * loss_fc_shared

未使用伪标签。

预测

输入 512

使用 fc_cell。

无 TTA(测试时增强)。

对两个位点取平均。

使用 lapjv 进行线性分配。

DenseNet201 结果

Public Private Public (leak) Private (leak)
仅训练数据 0.92620 0.97325 0.98307 0.99303
+ 样本记忆微调 0.95531 0.98321