623. ISIC 2024 - Skin Cancer Detection with 3D-TBP | isic-2024-challenge
感谢组织者举办这次比赛,也感谢所有分享想法和 Notebook 的人!考虑到正样本数量较少,我本以为会出现某种排名波动,但私有 leaderboard 的跳跃还是让我有点惊讶。我选择了一个最佳 CV 的提交和一个最佳 LB 的提交(两者具有不错的 CV-LB 相关性)。
我的方法是一个堆叠模型,其中图像分类器的类别预测作为特征输入到 boosting 模型(如 xgboost, catboost 和 lgbm)中。最终,这 3 个模型的加权平均值作为输出。权重是通过它们 OOF 预测的最佳结果找到的。
我使用了按患者 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.),
我使用了 3 个模型:xgboost, catboost 和 lgbm。对于每个 fold,我使用了此处共享的平衡采样方法,以对抗正负样本的不平衡。我在训练 boosting 模型时,在 swin 模型的 OOF 中加入了一点高斯噪声,以防止过度依赖其预测。我使用 optuna 对 boosting 模型进行了超参数优化。
我还确保图像分类器和 boosting 模型的 folds 保持一致,以防止信息泄露。