623. ISIC 2024 - Skin Cancer Detection with 3D-TBP | isic-2024-challenge
祝贺所有获奖者!感谢 Kaggle 和 ISIC 组织这次比赛并向我们介绍了这个有趣的问题。距离我上次回到 Kaggle 已经有一年多了,我很高兴能赢得这次比赛。
特别感谢 @greysky 提供了 惊人的表格 notebook,我在解决方案中使用了你的特征。
如果觉得有用请给我点个星!😀 https://github.com/dungnb1333/ISIC-2024
我的解决方案如下所述
我觉得更细粒度的类别会创建更好的特征表示,有助于提高性能。我使用了 5 个类别目标 (MEL, BCC, SCC, NV) 进行训练,并使用目标类别的 sigmoid 概率进行预测。为了将 ISIC 2019, 2020, 2024 和 PAD UFES 标签映射到上述 5 个类别,我使用了以下规则:
2019 MEL, BCC, SCC, NV -> MEL, BCC, SCC, NV
2020 melanoma -> MEL
2020 nevus -> NV
PAD UFES 20 MEL, BCC, SCC, NEV -> MEL, BCC, SCC, NV
2024 Basal cell carcinoma in iddx_full metadata -> BCC
2024 Melanoma in iddx_full metadata -> MEL
2024 Squamous cell carcinoma in iddx_full metadata -> SCC
2024 Nevus in iddx_full metadata -> NV
如果其中一个类别 (MEL, BCC, SCC) 为 1,则 Target 设为 1。
transform_train = albu.Compose([
albu.Resize(self.image_size, self.image_size),
albu.ImageCompression(quality_lower=80, quality_upper=100, p=0.25),
albu.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.1, rotate_limit=15, border_mode=0, p=0.5),
albu.Flip(p=0.5),
albu.RandomRotate90(p=0.5),
albu.OneOf([
albu.MotionBlur(blur_limit=5),
albu.MedianBlur(blur_limit=5),
albu.GaussianBlur(blur_limit=5),
albu.GaussNoise(var_limit=(5.0, 30.0)),
], p=0.5),
albu.RandomBrightnessContrast(p=0.5),
albu.CoarseDropout(num_holes_range=(1,1), hole_height_range=(8, 32), hole_width_range=(8, 32), p=0.25),
albu.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
ToTensorV2(),
])
transform_val = albu.Compose([
albu.Resize(self.image_size, self.image_size),
albu.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
ToTensorV2(),
])
对于提交,我使用 ema checkpoint (使用完整数据训练 - 无验证集) 在第 8->15 个 epoch,无 TTA。
我使用了 3 个模型:LightGBM, CatBoost, XGBoost。我结合了来自图像 pipeline 的 10 个特征和来自 惊人的表格 notebook 的所有特征。再次感谢 @greysky!
lgbm_params = {
'objective': 'binary',
'verbosity': -1,
'n_estimators': 300,
'early_stopping_rounds': 50,
'metric': 'custom',
'boosting_type': 'gbdt',
'lambda_l1': 0.08758718919397321,
'lambda_l2': 0.0039689175176025465,
'learning_rate': 0.03231007103195577,
'max_depth': 4,
'num_leaves': 128,
'colsample_bytree': 0.8329551585827726,
'colsample_bynode': 0.4025961355653304,
'bagging_fraction': 0.7738954452473223,
'bagging_freq': 4,
'min_data_in_leaf': 85,
'scale_pos_weight': 2.7984184778875543,
"device": "gpu"
}
cb_params = {
'loss_function': 'Logloss',
'iterations': 300,
'early_stopping_rounds': 50,
'verbose': False,
'max_depth': 7,
'learning_rate': 0.06936242010150652,
'scale_pos_weight': 2.6149345838209532,
'l2_leaf_reg': 6.216113851699493,
'min_data_in_leaf': 24,
'cat_features': cat_cols,
"task_type": "CPU",
}
xgb_params = {
'enable_categorical': True,
'tree_method': 'hist',
'disable_default_eval_metric': 1,
'n_estimators': 300,
'early_stopping_rounds': 50,
'learning_rate': 0.08501257473292347,
'lambda': 8.879624125465703,
'alpha': 0.6779926606782505,
'max_depth': 6,
'subsample': 0.6012681388711075,
'colsample_bytree': 0.8437772277074493,
'colsample_bylevel': 0.5476090898823716,
'colsample_bynode': 0.9928601203635129,
'scale_pos_weight': 3.29440313334688,
"device": "cuda",
}
| 特征 | LGB pAUC | CB pAUC | XGB pAUC | Gmean pAUC |
|---|---|---|---|---|
| 元数据特征 | 0.17806 | 0.17498 | 0.17954 | 0.17879 |
| 10 模型特征 | 0.18650 | 0.18669 | 0.18647 | 0.18703 |
| 2 模型特征 | 0.18406 | 0.18378 | 0.18328 | 0.18438 |
| 提交描述 | 公共 LB | 私有 LB | 奖项 |
|---|---|---|---|
| Sub1-GPU: 0.2*(仅元数据) + 0.8*(10 模型特征) | 0.18229 | 0.17225 | 第四名排行榜奖项 |
| Sub2-CPU: 0.2*(仅元数据) + 0.8*(2 模型特征) | 0.18094 | 0.17011 | 前 15 名检索灵敏度奖项 |
那是我的总结。我有一个通过更改图像模型选择达到私有 LB = 0.1732 (第 1 名) 的提交,但那不是我的最佳 CV 分数。