434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification
感谢 Kaggle 和主办方组织了这场关于弱监督学习方法的比赛。我从这次经历中学到了很多。
由于这是一个弱监督学习任务,且 HPA 细胞分割模型能够提供实例掩码,我选择在这里使用多示例学习(MIL)方法。这是合理的,因为图像级别的标签并不精确,且通过讨论可以清楚地了解到,图像中可能存在属于负类但在图像级别标签中未被提及的细胞。
在这里,我使用 Effb4 和 resnest50 作为 CNN 骨干网络。训练设置包括从图像中提取单个细胞,并随机选择 16 个细胞(最大数量,否则重采样以凑齐 16 个)作为图像包使用。目标与图像级别标签相同。这里我使用 16 个细胞只是为了确保我至少有一些对应标签的细胞实例。(在阶段 0,我们无法确定细胞标签)
该方法的魔力在于注意力池化层,它通过根据单个细胞对图像级别标签的贡献提供重要性分数,来对 16 个细胞特征嵌入进行加权。这使我能够训练一个模型,该模型可以通过查看图像级别标签来找到合适的细胞级别标签。
在训练了阶段 0 模型后,我们现在有了一个能够提供细胞级别蛋白分数的模型,可以提交给比赛。与此同时,我们还有一个训练良好的注意力层,可以作为一个模块来对单个细胞进行评分。这可以用作伪标签生成器。我使用这种方法在图像中找到缺失的细胞标签,并将其附加到图像级别标签上。这有助于找到包含负类但未正确标记的图像。这也有助于减少每张图像的细胞数量,因为现在我们对图像上存在的细胞类别更加确定。
我们可以清楚地看到,由于减少了细胞数量,训练时间是如何下降的。
我的最终推理包含 5 个模型,其中使用了 3 个阶段 0 模型和 2 个阶段 1 模型。我确实使用了 4 次 TTA(测试时增强)来使我的模型预测更加稳健。
我很高兴我的这次提交的公开分数和私有分数没有太大变化,Private 0.515,Public 0.514。我确实因为 GPU 硬件的变化而遭受了精度下降。我在 Volta 架构的 GPU 上训练了我的模型,而 Kaggle 使用的是 P100 (Pascal)。通过从 Volta GPU 生成提交文件,我在公开数据集上获得了 0.524 的分数。这对我来说是个惊喜。我确实尝试计算 GPU 提交文件之间的差异均值,并用它来修正我的最终提交分数。这确实帮了我一点忙,但我仅仅因为硬件差异就损失了很多分数。
总的来说,我在处理弱监督学习问题方面获得了很好的经验。再次感谢。