434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification
我们是一个由计算机科学家和医学博士/学生组成的多元化团队。非常荣幸能参与这项极具挑战性的比赛。希望我们的解决方案对大家有所帮助或能引发兴趣。
测试集是基于该分割器生成的,因此花费大量时间创建自定义分割器没有意义,反而可能降低 IoU。比赛主办方表示分割器的输出仅做了10%的修改。
我们的数据集由 Train & PublicHPA 的 16-bit 图像创建而成。看来大多数团队最终使用的是 8-bit 图像。
最终数据集中的每张图像都是基于分割器生成的细胞掩膜的 512x512 细胞图像。使用填充(至正方形)来保持原始高/宽比。未使用周围的像素(非细胞掩膜像素)。我感觉使用稍大的周围区域可能会更好,但没有时间测试(这对某些类别如细胞膜可能有好处)。
我们决定使用大图像 (512x512),因为某些标签/细胞器需要更高的分辨率,且其大小随细胞大小和重新缩放变化很大。例如,有时细胞核非常小,有时则像整张图像一样大。我们甚至尝试在基于细胞核掩膜的图像上训练细胞核细胞器,但由于截止日期临近,决定不再在此方法上投入更多时间。
我很想知道将问题分为细胞核和细胞质细胞器分类是否会带来更好的结果。我认为对细胞核内的细胞器进行分类会更容易,因为这样每个细胞图像的细胞核大小大致相同。
我们使用简单的启发式方法来确定细胞核在图像外部的程度,并相应降低其最终预测置信度。所有细胞核未几乎完全出现在裁剪图像中的图像均从训练集中移除。
同样,我们尝试通过基于红色通道以及蓝色和黄色通道乘积寻找异常值来确定分割的假阳性。推理时的异常值其置信度大幅降低。训练数据集中的异常值被完全移除。我估计这种启发式方法的准确率约为 50%。由于假阳性是分数的大杀手,这似乎是可以接受的。
我们从训练集中丢失了大约 20% 的图像。
HPA-Cell-Segmentation 耗时较长,因此我们决定并行化大部分工作。即使只有两个核心,我们也获得了提交时间的提升。
第一个提升是并行运行 label_cell 函数。第二个提升是并行运行所有前面提到的启发式方法和图像裁剪。
这为我们留出了超过 3 小时的推理时间。
我们人工标注了较小的类别或在初始图像中出现比例较小的类别(例如有丝分裂纺锤体、聚集体、中间丝和肌动蛋白丝...)。我们制作了一个简单的 GUI,一次仅重新标注图像的一个标签。
大多数情况下,我们会给出 1 到 5 的分数,表示我们对给定细胞图像包含图像级标签的信心程度。这些分数被转换为软标签。每个映射都不同(例如 1:0.0, 2:0.2, 3:0.7, 4:0.9, 5:1.0)。
最后,我们尝试以同样的方式创建一个高质量的验证集。我们设法为大多数类别获取了几千个样本。
受 Meta Pseudo Labels 论文的启发,我们希望消除一些假阳性并帮助模型避免过拟合。0.3 的阈值似乎能以高准确率移除大约 15% 的图像。这里我们使用了一个欠拟合的 ResNet18。
后来我们使用更好的模型以类似方式寻找更多有丝分裂纺锤体的例子,但在未分配有丝分裂纺锤体的图像中寻找。我想我们找到了大约 100 个额外的有丝分裂纺锤体,相比之下我们在标注图像中找到了大约 250 个。
最后,我们没有对其他类别这样做。我想我们找到了几个聚集体,并很快决定跳过正样本标注。
这个网络简直太棒了 :) 我非常喜欢用简单的模型解决问题,所以当 EfficientNetB0 似乎足以应对这个挑战时,我