第五名解决方案 - ISIC 2024
第五名解决方案
首先,我想非常感谢 Kaggle 团队和 ISIC 举办了如此精彩的比赛。这是一次很棒的学习经历,也非常有趣!
简要总结 (TLDR):
- 图像和表格建模(包含和不包含过往比赛数据)
- 模型划分(已知和未知归属机构)
- 信任交叉验证 (Trust CV)
代码
验证策略
我们使用了基于 Patient_id 的 StratifiedGroupKFold。许多公开 Notebook 由于图像和表格之间的分割不同而导致泄露,因此那不是准确的 CV。
另一方面,规定测试集中将包含未知医院(讨论链接),但这种分割方法无法模拟这一点。因此,未知归属机构的性能是通过公共 LB 检查的。
模型
总结
这张图片是我们解决方案的总结。
更多细节如下。
图像模型
概述
- 我们创建了两个模型:一个使用过往数据,另一个仅使用本次竞赛的数据。
图像模型 1 (不使用过往数据)
- 数据集
- 无额外数据
- 将负样本下采样至与正样本相同的大小
- 每个 epoch 重新采样负样本
- 训练设置
- 30 个 epochs (无早停)
- 无辅助损失
- 骨干模型
- convnext_base.fb_in22k_ft_in1k
- eva02_small_patch14_336.min_in22k_ft_in1k
- 数据增强
- Resize, RandomRotate90, ShiftScaleRotate, HueSaturationValue, RandomBrightnessContrast
- 优化器
- 调度器
- batch_size
- 为了减少推理时间,不使用 5 折图像模型,而是使用全量数据训练单个模型
图像模型 2 (使用过往数据)
- 数据集
- 基于 Patient_id 的 StratifiedGroup 5 折 (与表格模型相同)
- 过往数据
- 训练和验证都使用了过往竞赛数据
- 数据集
- 目标
- benign, indeterminate, indeterminate/benign 映射为 0
- indeterminate/malignant, malignant 映射为 1
- 无下采样或上采样;使用整个数据集
- 训练设置
- 5 个 epochs (无早停)
- 包含每个图像是否有 lesion_id 以及数据是否为过往数据作为辅助损失
- 骨干模型
- convnext_small.fb_in22k_ft_in1k
- resnet18.fb_swsl_ig1b_ft_in1k
- swin_small_patch4_window7_224.ms_in22k_ft_in1k
- resnet152.tv2_in1k
- 数据增强
- Resize(256 或 224), ShiftScaleRotate, VerticalFlip, HorizontalFlip, RandomBrightnessContrast, OneOf [GridDistortion, OpticalDistortion], Normalize, CoarseDropout
- 优化器
- optimizer : Adam
- lr_head : 2e-4
- lr_backbone : 2e-5
- 调度器
- 带 warmup 的 CosineAnnealing
- batch_size
- 推理
- 每个批次随机使用 5 折模型中的 2 个
- LB 0.164, 私有排行榜 0.153 仅图像模型平均 (本地 CV 使用过往数据 0.187 ~ 0.191)
带有图像特征的表格模型
- 表格模型 3
- 特征工程 (约 600 个特征)
- 使用过往元数据训练
- 目标是解决训练数据中标签数量少以及本次竞赛分发数据中未出现的归属机构问题
- 验证集不包含过往数据
- 调整 LightGBM 和 XGBoost 的
scale_pos_weight 参数以处理正负样本比例的差异
- 使用图像 OOF (4 个使用过往数据训练的模型) 进行训练,并使用 XGBoost 和 LightGBM
- 创建两种模式,排除或包含归属特征,并更改用于推理的模型
- cv 0.183 公共 LB 0.175 私有排行榜 0.165
- 表格模型 2
- 特征工程 (通过 Polars 约 3000 个特征):
- 新的聚合粒度:添加按 patient_id, tbp_lv_location, attribution, tile_type 及其子集的 num_cols 新聚合
- 移位特征:按 patient, anatom_site_general, age_approx 聚合 num_cols,并在同一分组内将 age_approx 从 -5(过去) 移位到 +5(未来) 单位,以及它们的差值 (现实中我们无法使用未来数据...)
- 过往元数据整合:包含同时参与本次和以往竞赛的患者信息
- 软标签:indeterminate malignant 记录为 target=1 且 sample_weight=0.5
- 特征选择:丢弃所有折拆分中重要性为零的列或不丢弃
- 创建两种模式,排除或包含归属特征,并更改用于推理的模型
- 使用图像 OOF (6 个模型) 进行训练,并使用 XGBoost 和 LightGBM
- 仅元数据模型 -> cv: 约 0.175 lb: 0.176, 私有排行榜:0.165
- 带图像集成 -> cv: 0.1837 lb: 0.181, 私有排行榜:0.172
- 表格模型 1
- 特征工程 (约 300 个特征)
- 分组聚合
- 分组
- patient_id
- patient_id + tbp_lv_location
- attribution
- attribution + tbp_lv_location
- 聚合
- mean (均值)
- std (标准差)
- 标准化特征; (numerical - mean) / std
- 模型
- lgb
- learning rate 0.05, max_depth 4
- 无进一步参数调优
- 无图像预测特征输入 (与图像预测加权平均效果更好)
- 创建两种模式,排除或包含归属特征,并更改用于推理的模型
- cv 0.171 公共 LB 0.177
集成
- 加权平均:使用 Optuna 优化权重,以确保它们的权重在所有模型中尽可能均匀分布。
(包含带图像输出的表格模型和仅图像输出模型)
- cv: 0.1839 lb: 0.181, 私有排行榜:0.172 (最佳 0.174…)