第11名方案 - AttentionHeads
作者: Vlad Shmyhlo (团队成员: dempton, ddanevskyi, orgunova, cutlass90)
比赛排名: 第11名
AttentionHeads
首先,非常感谢我的队友 @dempton、@ddanevskyi、@orgunova 和 @cutlass90。同时祝贺 @dempton 获得他的 Grandmaster 徽章。
这是我们(相当简单)的方法。
模型
- 集成模型:由 2 个 EfficientNets 组成:B0 和 B5。
- 6 通道输入,将第一个卷积层替换为 6 通道版本。
- 在第一个卷积层之前使用 Batch Normalization(批归一化)。
- 我们使用在实验中所有图像上计算的均值/标准差对每张图像进行归一化。
训练
- 尽可能简单的方法:3 折交叉验证(3-fold split),按细胞类型以及视觉外观进行分层:我们对细胞类型内的实验进行了简单的可视化,并尝试将外观相似的实验分到不同的折中,以便每一折中都包含各种类型的图像。
- 没有使用智能采样或特殊的损失函数,仅使用基本的 Cross Entropy(交叉熵),没有标签平滑或度量学习。
- SGD 配合 LookAhead 优化器 (a=0.5, k=5) 和 4 步梯度累积。
- 使用 1cycle 策略和学习率范围测试 来寻找训练的最佳学习率。
- Polyak averaging(Polyak 平均)(指数加权版本)。在评估模型时,我们使用模型参数的指数加权平均值,而不是最后/最佳的参数。这对最终模型的性能没有任何提升,但对指标/损失曲线有非常愉快的平滑效果,并且在除最后阶段外的几乎所有训练步骤中都带来了巨大的性能提升,而在最后阶段,其性能与未使用平均的模型相同。

- 数据增强:随机采样位点并应用翻转和转置,以及随机的通道重加权(只需将每个通道乘以某些正值,限制条件是它们的总和为 6)。
- 训练期间的渐进式调整大小:从大小为 224 的随机裁剪开始,我们将裁剪大小线性缩放到 512。这在不降低性能的情况下使训练速度提高了 2 倍。
- 1 轮伪标签。我们只选择了预测置信度最高的 top-K 样本,将它们添加到每一折的训练集中,并对我们的模型进行了几个额外 epoch 的微调。
后处理
- 在每个实验中使用 LAP solver(线性分配问题求解器)将类别分配给图像。
- Softmax Temperature(Softmax 温度)。只需在取 softmax 之前将 logits 乘以某个正数
(logits * t).softmax(),这会锐化或软化分布,当与 LAP 一起使用时对性能有巨大影响。可以在验证集上选择温度值。
- “每个板块 277 个类别”的技巧。这可能与其他参与者的做法不同,但基本上我们做了以下工作:
- 搜索最佳温度以最大化指标。
- 在实验中使用 LAP 获得模型预测。
- 现在我们需要决定:在每个实验内,应该将哪些 sirna 组分配给每个板块。下一步是将不属于该组的类别的概率归零。
- 再次运行 LAP。
TTA (测试时增强)
工具和硬件
- PyTorch
- 大部分时间使用 1-2 块 1080ti,最后 2-3 天使用了大约 8 个 GPU。
- LAP solver