第7名解决方案 -> 基于2步MIL的策略
第7名解决方案 -> 基于2步MIL的策略
作者:tdiceman
比赛排名:第7名
对我来说,这是一次很好的入门体验,能取得这样的成绩很大程度上归功于新手的好运。尽管如此,我学到了很多东西,最终的方法论结合了所有的学习成果并发挥了最佳效果,这让我感到非常满意。感谢所有在比赛期间分享提示、技巧和建议的人。以下是所用方法论的总结:
预处理 - 图块创建与选择
开始时尝试了很多方法,但最终确定使用缩小6倍的图像来创建图块,以平衡信号丢失和可控的图块数量。创建和选择图块的方法如下:
- 创建形状为 (224,224,3) 的图块,并对图像数组的唯一值及其计数应用简单的阈值处理——用于去除大部分单色和背景图块。
- 通过 EfficientNetB0(预训练,ImageNet权重)运行图块进行评分,并为每张全切片图像(WSI)选择前 50-60% 的图块,从而进一步减少图块数量(这在每张图像的图块数量上产生了另一个问题,将在最后解决)。
- 通过简单地填充图像并在两个方向上将图像中的图块位置移动 tile_size/2,为 LAA 类别增加了增强数据。
MIL - 基于伪标签图块的特征提取器训练、特征聚合与分类器
遵循了图块特征嵌入,然后在切片级别进行聚合以进行进一步分类的方法。主要有两个步骤:
1. 特征提取器训练
此笔记本包含该部分的详细实现。主要点如下:
- 从 ImageNet 权重开始训练 EfficientnetB0,第一个 epoch 使用带有切片级别标签的所有图块。
- 对图块添加了随机色调增强(详情见后文)。
- 定义了一个特征提取器,它是最后一个全连接分类层之前的整个网络(形状为 (1,1280))。
- 使用提取器生成的图块特征应用基于聚类距离的伪标签,用于下一次迭代的图块标记。
这里使用的逻辑是试图赋予特征提取器能力,使其不仅能为两个类别提供高输出,还能为类外或非关键图块提供低输出。因此,我使用带有目标 [0.0] 的 'Other' 标签图块,LAA 和 CE 分别对应 [1,0] 和 [0,1],并使用 sigmoid 激活和 BCE 损失。每次训练 epoch 时,都会生成特征,执行聚类,并根据与负类的最小距离对图块进行评分——即对于 CE 图块,距离 LAA+Other 特征聚类最小距离最大的前 20% 标记为 [0,1],最小距离最小的后 10% 标记为 [0,0]——LAA 图块伪标签则反之。希望这能区分两个类别以及关键和非关键图块。主要的聚类思想受此论文启发。
- 使用 CE 类别的随机采样来平衡类别,并使用了一个简单的指标在切片级别进行训练评估——最大池化 AUC 分数,即取切片中任何图块对两个类别的最大预测值的 AUC 分数。4折交叉验证 AUC 分数为 0.6-0.65。
2. 特征聚合、分类与推理
从特征提取器获取图块级别特征,并采用此论文的方法在切片级别进行特征聚合,该方法基于对具有最大输出 logit 的图块的注意力机制。
- 使用切片级别的聚合特征构建了一个简单的随机森林分类器,并将切片级别的最大预测值(任何图块)作为额外特征。
- 仅使用任何图像中前 25 个深色图块来训练分类器和进行推理。
- 推理:从大小不超过 2.2 Gb 的图像中选取前 25 个深色图块,从提取器创建特征并从分类器头获取最大 logits,聚合并预测分类器概率。
一些重要的观察
- 发现图块选择非常重要,特别是如果你使用较小的图块。观察到在某一点上,较大的图像给出了更好的 log_loss 分数,但有更多较小的图像需要推理(至少在训练数据集中)。因此,我调整了从较大图像中选择的图块顶部百分比,特别是因为 LAA 类别有大图像,且一些图像在图块数量上占主导地位并导致过拟合。这绝对有助于控制大量图像上的不良 log_loss 惩罚。训练数据上的 log loss 分布与每张切片图像的图块数量对比示例(每张图像的图块数量代表创建的原始数量,代表图像大小而非选作训练的图块数量):
同比赛其他方案