返回列表

1st Place Solution

623. ISIC 2024 - Skin Cancer Detection with 3D-TBP | isic-2024-challenge

开始: 2024-06-27 结束: 2024-09-06 医学影像分析 数据算法赛
第一名解决方案 - ISIC 2024
作者: Ilya Novoselskiy (ilya9711nov)
发布日期: 2024-09-09
竞赛: ISIC 2024 Challenge
排名: 第 1 名

第一名解决方案

祝贺所有的获奖者和参与者!我简直不敢相信我正在写一篇“第一名解决方案”的帖子。我非常感谢组织者举办了这次竞赛,也感谢所有的 Kaggle 参赛者,特别是 @greysky 的公开 Notebook,这是我实验的起点(ISIC 2024 | Only Tabular Data)。大约在三周前,也就是 LMSYS 竞赛结束后不久,我开始基于此进行实验。

解决方案概述

我的解决方案与大多数参与者一样,基于集成各种 GBDT 模型的实现以及图像模型。对于图像模型,我使用了两种架构:EVA02-small (eva02_small_patch14_336.mim_in22k_ft_in1k) 和 EdgeNeXt (edgenext_base.in21k_ft_in1k)。此外,我还花费了大量时间生成合成数据,并尝试将以往竞赛的数据纳入当前的 pipeline 中。

交叉验证策略

我使用了简单的 5 折 Stratified Group KFold,没有进行特定的调整。对于性能评估,我应用了 @daniel89 曾在 Mercedes-Benz Greener Manufacturing 竞赛 中描述过的策略。就像他所做的那样,我使用了不同的种子运行 CV 10 次,计算 t 统计量(使用 scipy.stats.ttest_rel),并使用 p 值来指导我的决策。为了解决多重比较问题,我只使用这种方法测试了最显著的变化。如果 CV 显示出任何显著的改进,我会在公共 leaderboard 上进行测试,如果那里也有改进(几乎总是如此),这些变化就会被添加到最终解决方案中。

然而,在竞赛接近尾声时,当我卡在 0.185-0.186 的分数(私有榜 0.173)左右时,我偏离了这个规则(看到自己从第 23 名掉下来令人沮丧),开始测试甚至很小的假设,将 p 值阈值降低到 0.2,主要依赖公共 leaderboard。这导致我的最终解决方案在公共 leaderboard 上表现更好,但在私有 leaderboard 上略差。

GBDT 模型

参数与集成

我使用了 CatBoost、LGBM 和 XGBoost。每个模型都在 GPU 上使用 Group K-Fold(5 折)训练 10 次,模型和数据拆分使用不同的种子。这总共产生了 150 个模型。老实说,与只有 45 个模型的基础设置相比,这并没有提供显著的改进,但由于模型训练相当快(总训练时间不到 20 分钟),我决定增加集成的大小,即使收益很小。

对于每个模型,预测值进行排名 (.rank(pct=True)) 并以相等的权重平均。所有模型都使用 @daniel89 公开 Notebook 中的默认参数进行训练,包括欠采样和过采样。唯一的例外是 CatBoost,它训练了 1000 步,并根据验证集进行早停(od_wait = 100)。对于 CatBoost,我使用了以下参数:

1. 'learning_rate': 0.026
2. 'l2_leaf_reg': 18
3. 'random_strength': 4.7
4. 'depth': 6
5. 'bagging_temperature': 0.874
6. 'border_count': 256
7. 'grow_policy': 'Lossguide'
8. 'min_data_in_leaf': 38

这些参数最初是使用 Optuna 选择的,仅基于表格数据。不幸的是,在引入基于 CV 模型的特征后,我没有时间重新调整它们。我也没有优化其他模型的参数。

特征工程

大多数技术采纳自 这里
此外,我添加了:

  • 每位患者以及每位患者 & 一般解剖部位 (anatom_site_general) 的病变总面积

虽然大多数特征描述的是绝对病变参数,但我旨在添加额外的相对信息(例如,描述特定病变对患者来说有多异常)。为了实现这一点,我根据 CatBoost 的特征重要性选择了顶级特征,并计算了每位患者病变的局部异常因子 (Local Outlier Factor) 分数。这使我的 CV 分数显著提高(从 0.18149 到 0.18185),并在 leaderboard 上也有所反映。

未生效的尝试

另一个尝试是使用最重要的特征对痣进行聚类,并计算每个痣在聚类内的 Z-score。这略微提高了 CV 和公共 leaderboard 的分数,但在私有 leaderboard 上没有产生显著改进。

视觉模型

  • 数据增强取自 以往的竞赛。我使用了 EVA02 small 和 EdgeNeXt base 作为模型。它们在指标和推理时间之间展示了良好的平衡。
  • 为了解决显著的类别不平衡问题,训练批次中不同类别的样本以 1:1 的比例平衡。两种架构都使用不同的种子,按照前面描述的 5 折 Stratified Group KFold 方案进行训练,并根据验证集进行早停(200 个 epoch,早停容忍度 = 10 次验证检查)。实际上,大多数模型很少训练超过 100 个 epoch。
  • 此外,由于在整个验证数据集上验证模型比使用加权采样训练一个 epoch 花费的时间要多得多,在大多数实验中,最初每 5 个 epoch 进行一次验证,然后每 4 个 epoch 一次,以此类推,减少检查频率,直到第 50 个 epoch 时每个 epoch 都进行验证。所有 resulting 模型都用于测试数据的推理。获得的 OOF 预测用于训练 GBDT 模型。

将模型预测集成到 GBDT 模型中

  • 表现最好的方法涉及使用标准化的模型预测,其中标准化独立应用于每个模型的预测。 resulting 特征变化范围为 p1: -0.44 和 p99: 4.99。在推理期间,相同类型模型的预测被平均。
  • 然而,由于模型倾向于因基于验证数据的早停而略微过拟合测试数据集,因此在训练 GBDT 时,向模型预测中添加了标准差为 0.1 的正态分布噪声。我通过 leaderboard 探测测试了 0.02、0.05、0.08 和 0.12 的噪声值(这是少数没有通过 CV 测试的事情之一)。
  • 此外,计算了每个预测与该患者所有痣的平均预测的比率,这始终提高了 CV 和 leaderboard 的性能。噪声以与上述相同的方式添加到这些特征中。

未生效的尝试

  • 我尝试在形成批次时更频繁地从负类中选择困难样本,其中选择概率基于难度增加。难度是使用 OOF 预测的 LogLoss 评估的。
  • 我还尝试了在以往竞赛的数据和 其他来源 上进行预训练,但这没有产生显著的改进。
  • 对几个增强样本变体的模型预测进行平均也没有产生任何积极结果。

使用以往竞赛的数据

由于正样本数量极少,预计模型将难以识别皮肤病变的边界情况。为了解决这个问题,在集成基于本次竞赛图像训练的模型之前,我使用从 repo 获得的数据,使用 EVA02 small 训练了一个 3 类分类模型(bkl/melanoma/nevus)。然后我根据 diagnosis_pr 应用了以下规则:

nevus -> nevus
melanoma -> melanoma
basal cell carcinoma -> bkl
seborrheic keratosis -> bkl
solar lentigo -> bkl
lentigo NOS -> bkl

所有剩余样本被标记为 benign_malignant == 'benign',但 diagnosis_pr != 'bkl' 的被标记为 'nevus'。

将此模型的预测添加到仅基于表格数据的模型中,显著提高了 CV 和 leaderboard 分数。CV: 0.1756 -> 0.1760, 公共榜:0.180 -> 0.182, 私有榜:0.163 -> 0.165。

同时,在最终模型中,添加这些特征略微提高了 CV: 0.18185 -> 0.18195。然而,公共和私有 leaderboard 分数也有 slight 改进。

合成数据(大部分时间花在这里)

我对使用合成正样本提高模型性能的潜力特别感兴趣,这也是我决定参加竞赛的主要原因之一。类似的方法在 Derm-T2IM 中实施。
生成合成数据的过程概述如下。
合成数据生成流程

下面,您可以比较恶性病变的真实照片、Derm-T2IM 模型生成的示例以及在竞赛数据上训练的模型。
病变图像对比

单个模型级别的平均指标证明了合成数据的有效性。
模型指标对比图 1

很明显,在合成数据上训练的模型的 CV 分数始终更好。Leaderboard(公共和私有)结果略好,平均而言,在合成数据上训练的模型表现更好。

模型指标对比图 2
模型指标对比图 3

例如,在合成数据上训练的模型集成在私有榜上显示出略好的结果(0.140 vs 0.142),在公共榜上也略好(在 0.157 范围内)。然而,不幸的是,添加在合成数据上训练的模型并没有改善最终集成,因此它们未包含在最终解决方案中。
如果有人有兴趣继续这方面的实验,我附上了我的一个 合成痣图像数据集

同比赛其他方案