339. Recursion Cellular Image Classification | recursion-cellular-image-classification
首先,我要感谢 Recursion 和 Kaggle 组织了这场有趣的挑战,也要感谢 Double strand 团队的贡献。
以下是我方案的总结。
是细胞、实验还是板?
我的 EDA(探索性数据分析)显示 [domain==experiment]。但在实际操作中,[domain==plate] 的效果更好。这是合理的,因为批次效应和板效应确实存在。
简而言之,不要用跨域的批次来挑战你的模型(带有BN层的模型)。
在训练中,使用域感知的批次采样。
在测试中,在 BN 层中使用域批次统计信息。
只要正确处理了批归一化,这场比赛立即就变成了一个常规的分类挑战:训练收敛顺畅,而且我的验证集/LB 分数也很一致(除了 HUVEC-05)。
我早期实验的一些结果,使用 ResNet50,224x224 输入,超参数相同:
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 标签更多的监督信息。

样本记忆 完美契合这种结构。
使用 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 进行线性分配。
| Public | Private | Public (leak) | Private (leak) | |
|---|---|---|---|---|
| 仅训练数据 | 0.92620 | 0.97325 | 0.98307 | 0.99303 |
| + 样本记忆微调 | 0.95531 | 0.98321 |