623. ISIC 2024 - Skin Cancer Detection with 3D-TBP | isic-2024-challenge
首先,感谢 Kaggle 和组织者举办这次有趣的竞赛。这让我想起了 2020 年的黑色素瘤竞赛,在那里我赢得了我的第一枚 solo 金牌。那段经历在我心中仍然占有特殊的地位。
本解决方案结合了多种基于树的模型、自定义特征工程、采样技术以及多种基于图像的特征。
我开始采用一种简单的方法来衡量图像模型在皮肤图像上的基础能力。为此,我实验了几种模型,提取它们的特征图并将其 fed 入基本的线性和 GBDT 模型,而不进一步微调骨干网络。这种方法让我直观地了解了应该专注于哪些模型进行微调和进一步开发。
在这些实验中,我收集了几个模型的 CV 分数,平均分约为 0.15。我发现表现最好的模型是 eva_large_patch14_196,所以我开始以这个模型进行最初的图像微调工作。
在这一部分,我基于直觉实验了许多变量。让我们从图像变换开始:每个图像模型都需要不同的输入图像大小,所以我必须动态转换它们。然而,我认为在不保持图像纵横比的情况下改变形状可能会产生不利影响,因为我们处理的是皮肤 lesion,其形状对诊断可能非常重要。因此,在我的调整大小过程中,我保持了相同的纵横比,并在需要时填充图像的其余部分。
第二点是处理类别不平衡。我注意到 Vision Transformer 模型在小 batch size 下表现更好,但在使用完整数据集时,我用完全由类别 0 样本组成的 batch 更新梯度。为了解决这个问题,我决定下采样多数类并上采样少数类(当然是在训练 fold 内)。然而,这种方法会在相同的 batch 中引入重复的正类样本。为了缓解这个问题,我应用了重度增强,确保即使在同一 batch 中有重复,我也有每个图像的不同版本。
为了将图像增强再推进一步,我在训练循环中实现了 MixUp 增强。这种方法使模型在最后阶段生成 logits 时更加谨慎。
我选择用于下一步的最终模型列表包括:
这些模型 individually 都实现了超过 0.155 的 OOF CV 分数,其中 eva_large 最成功,得分为 0.164。为了保持在 Kaggle 的推理时间限制内,我使用两个 T4 GPU 以半精度和 512 的 batch size 实现了并行推理。
对于这一部分,我没有偏离公开 Notebook 太多,只做了一些小调整。也许使用与图像训练相同的验证 fold 是一个关键点。本质上,我创建了一个基于 LightGBM、XGBoost 和 CatBoost 的投票分类器,遵循了 @greysky 优秀的表格 Notebook 的类似方法。
我没有花很多时间创建表格特征,而是使用了公开可用的特征。然而,在分析这些特征时,我注意到有很多无用的相关、低方差或噪声特征。因此,我想量化这些特征对最终分数的影响。
使用来自单个 GBDT 模型的特征重要性(基于树的增益或分裂)对我来说似乎不合逻辑,因为它们倾向于过拟合,并且在带有软投票分类器的最终集成中并没有太多意义。
相反,我实现了一个置换特征重要性方案。对于不熟悉此方法的人,它涉及将每个特征洗牌 n 次,并检查它平均如何影响最终 fold 分数。这种方法允许我直接在投票分类器设置中量化特征的效果,而不依赖于单个模型。
基于这个置换测试,我丢弃了大量特征。总共我从表格数据中删除了大约 190 个特征。
这个特征缩减导致 CV 分数大幅提高,从 0.179 增加到 0.183。这个改进的模型目前是我表现最好的私有模型,达到了金牌状态!