434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification
感谢 Kaggle 和 HPA 举办了这场比赛,并祝贺所有的获胜者。
在我的 Kaggle 旅程中,我对待这次比赛比以往任何一次都要认真。这篇文章将简要介绍我的方法,这是一种高度以数据为中心的方法。虽然我的排名不是最顶尖的,但我希望这篇文章能提供一个独特的视角。
由于我们需要预测每个细胞的标签,我将所有精力完全集中在构建最好的细胞级图像分类器上。鉴于 HPA 数据集的规模,我们可以提取大量的细胞图像。但是,将图像级标签分配给细胞级图像会导致许多细胞级图像被错误标记。我最初在具有单一标签的图像上训练模型,因为它们的噪声最少。我最多能将公共分数提高到 0.376。
然而,很快就很清楚,为了进一步提高我的分数,仅靠单一标签的图像是不够的。因此,我开始使用具有 2 或 3 个不同标签的图像。如前所述,将图像级标签分配给细胞级图像会产生嘈杂的数据集。而且,手工重新标记数十万张细胞级图像是乏味的。因此,我想出了针对每个类别的各种启发式方法,我可以用它们来评估图像是否属于特定类别。这些启发式方法帮助我从大量的标签组合中选择最佳图像,并制作了一个噪声较小的数据集。使用这个数据集,我训练了 3 个模型:inception v3、mobilenet 和 densenet121。这些模型的集成给出了 0.458 的私有分数和 0.464 的公共分数。
这个数据集最好的一点是它们都来自同一个领域。我的意思是它们都是细胞的图像。而且,作为奖励,我们有细胞分割工具。从图像和 HPACellSeg 中,我们可以获得细胞的以下重要位置:细胞掩膜(来自分割器)、细胞核(来自分割器)、细胞质(细胞掩膜异或细胞核掩膜)、微管(红色)和内质网(黄色)。通过查看这些区域中绿色通道的强度,我们可以高置信度地判断图像是否属于特定类别。以下是我的一些最佳启发式方法:
这些启发式方法并不完美,但它们确实有助于去除错误标记的图像和异常值。举个例子,考虑标签 '2|16'。该标签的高质量细胞级图像应该在核仁和细胞质中有高绿色染色。因此,我们可以丢弃没有这两者的图像。举个更具体的例子,这张图像在这两个位置都有较高的绿色染色,而这张则较低。因此,我们可以保留像第一张这样的图像,并丢弃与第二张相似的图像。
我无法为所有类别想出惊人的启发式方法。对于像有丝分裂纺锤体这样的稀有类别,我不得不依靠手工标记。我最终得到了一个包含约 25 万张细胞级图像的数据集,其中包含大约 144 种独特的标签组合。我用它来训练 inception v3、mobilenet 和 densenet121。图像被调整为 448 x 448,并使用了简单的增强(旋转、翻转)。这些模型的集成给出了 0.458 的私有分数和 0.464 的公共分数。
由于时间和资源的限制,我无法尝试太多其他模型。结合图像级和细胞级预测似乎是几乎所有人使用的方法,但我在没有图像级模型的情况下获得了上述分数。我的细胞级模型提交仅改善了一点点(并且有一次下降了)。显然,我在结合图像级预测方面并没有太大的成功。但是,似乎那些能够使用图像级和细胞级图像的人获得了最好的分数。
你可能会说这是对数据的极端关注,确实如此。但是,我觉得如果我想获得好成绩,这对我来说是必要的,因为我没有昂贵的硬件(我不得不依靠我的 HP 笔记本电脑、Kaggle GPU 和 Colab)。过滤图像提高了数据集的质量,同时使用了较少的图像数量,而不会牺牲模型性能。
与其他顶级解决方案相比,我的模型更简单