返回列表

41st Place Solution: Cell-based RoI Pooling + Transformer Encoder

434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification

开始: 2021-01-26 结束: 2021-05-11 生命科学 数据算法赛
第41名方案:基于细胞的RoI池化 + Transformer编码器

第41名方案:基于细胞的RoI池化 + Transformer编码器

作者:Martin Chobanyan
比赛排名:第41名

各位Kaggle参赛者,大家好!

我在这个独特的比赛中获得了很多乐趣,也很期待看到大家对这个问题的解决方案。以下是我最终方法的概述 + 代码链接(请在新标签页中打开图片以查看更高分辨率):

Cell Transformer Overview

首先,在我所有的模型中,我都使用了 @bestfitting 在上一场比赛中获胜的 DenseNet-121 模型的预训练骨干 CNN(3个不同的预训练版本)。我将所有的彩色染色层堆叠成4通道图像,并将它们调整为 1536x1536,然后通过骨干 CNN 进行处理,得到 1024 个特征图。

随后,我利用 HPA 细胞分割器生成的细胞分割掩码,对特征图执行感兴趣区域池化,从而为图像中的每个细胞提取特征向量。池化层由平均池化和最大池化特征的拼接组成(每个细胞产生一个 2048 维的向量)。我还对细胞掩码应用了自适应平均池化,将其缩减为 8x8,然后将其展平。这些下采样、展平的掩码作为细胞区域的位置编码(见下图):

RoI Pool Overview

在这个阶段,我们拥有了一个细胞向量序列,这使我们能够探索 Transformer 模型的使用。细胞特征向量通过一个前馈层,将其映射到 1024 维的嵌入。然后,应用了四个编码器层,其定义与原始 Transformer 论文中的一致。最后的一个前馈层将每个细胞映射为一个 18 维的 logit(逻辑值)。

为了预测图像级别的标签,应用了一个 log-sum-exponential(对数-求和-指数)层,其定义为 f(x) = (1/r) * ln(mean(e^(r*x))),在我们的案例中 r=5。这作为一种机制,可以在不同的 r 值下在平均池化和最大池化之间进行插值。

在训练中,我使用了带有 Sigmoid 激活函数的 Focal Loss(焦点损失),并进行了翻转/旋转/裁剪增强。在推理过程中,我提取了细胞级别的 logit,并在将其缩减为图像级别标签之前应用 Sigmoid 激活。细胞的最终类别预测是所有三个模型(三个不同的预训练骨干)的平均值。

我还探索了使用 峰值响应图 作为解决该问题的基于 CAM(类激活映射)的方法。虽然定位效果看起来不错,但模型对图像中不存在的类别过于敏感。

如果有更多时间我会尝试的事情:

  • 与细胞级分类器进行集成。
  • 探索更多将峰值响应图结果与细胞 Transformer 模型合并的方法。
  • 对公共测试集进行域适应(因为我们知道,与训练集相比,测试集在给定图像内的蛋白质位置具有更高的变异性)。
同比赛其他方案