返回列表

21st place solution

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

开始: 2024-06-27 结束: 2024-09-06 医学影像分析 数据算法赛
第 21 名解决方案 - ISIC 2024

第 21 名解决方案

作者: Rushali Grandhe
发布日期: 2024-09-07
竞赛排名: 21

感谢组织者举办这次比赛,也感谢所有分享想法和 Notebook 的人!考虑到正样本数量较少,我本以为会出现某种排名波动,但私有 leaderboard 的跳跃还是让我有点惊讶。我选择了一个最佳 CV 的提交和一个最佳 LB 的提交(两者具有不错的 CV-LB 相关性)。

方法

我的方法是一个堆叠模型,其中图像分类器的类别预测作为特征输入到 boosting 模型(如 xgboost, catboost 和 lgbm)中。最终,这 3 个模型的加权平均值作为输出。权重是通过它们 OOF 预测的最佳结果找到的。

交叉验证 (CV)

我使用了按患者 ID 分组的 GroupKFold(5) 进行交叉验证。

特征工程与选择

我使用了大多数公开 Notebook 中共享的特征。感谢所有人的分享。我进行了特征选择,因为存在许多相关特征。我过滤了与任何其他特征相关性 > 0.8 的特征,最终留下了 116 个特征。

图像分类器

我尝试了几种图像分类器,如 resnet, efficientnet 及其变体,但观察到 timm 库中的 swin 模型效果更好。我冻结了 swin 模型的前 39 层,使用 lr=2e-5。图像大小为 224x224,并使用下面列出的增强方法,以及 patience=2 的早停。对于每个 fold 的训练数据,我使用了 1:5 的正负样本比例。我使用 focal loss(alpha=0.2, gamma=2) 来处理类别不平衡。我使用除以 255 的归一化方法,而不是使用 imagenet 的均值和标准差。

A.Compose([
        A.Resize(CONFIG['img_size'], CONFIG['img_size']),
        A.HorizontalFlip(p=0.5),
        A.VerticalFlip(p=0.5),
        A.Rotate(limit=90, p=0.5),
        A.CoarseDropout(max_holes=5, max_height=20, max_width=20, min_holes=1, min_height=10, min_width=10, p=0.3),
        A.HueSaturationValue(hue_shift_limit=10, sat_shift_limit=20, val_shift_limit=10, p=0.2),
        A.MotionBlur(blur_limit=5, p=0.3),
        A.MedianBlur(blur_limit=5, p=0.3),
        A.GaussianBlur(blur_limit=5, p=0.3),
        ToTensorV2()], p=1.),

Boosting 模型

我使用了 3 个模型:xgboost, catboost 和 lgbm。对于每个 fold,我使用了此处共享的平衡采样方法,以对抗正负样本的不平衡。我在训练 boosting 模型时,在 swin 模型的 OOF 中加入了一点高斯噪声,以防止过度依赖其预测。我使用 optuna 对 boosting 模型进行了超参数优化。

我还确保图像分类器和 boosting 模型的 folds 保持一致,以防止信息泄露。

同比赛其他方案