535. RSNA Screening Mammography Breast Cancer Detection | rsna-breast-cancer-detection
该解决方案基于 Tensorflow 框架,结合 Pytorch 图像预处理和 XGB GPU/Cuda 分类器。
最佳提交成绩 - 公榜 0.46 私榜 0.59 - 2x4 折集成 (100 折分割 ~ 所有数据)
最佳私榜提交(仍有提升空间) - 公榜 0.48 私榜 0.52 - 2x4 折集成 ( 5 折分割) + 2 个 XGB 集成。 ( CV 0.55 - 聚合方法为中位数,阈值 0.243 )
使用了 @awsaf49 从原始比赛数据集中裁剪的 2048x1024 数据集,以及相应的训练代码作为基础。
使用 T4 x2 混合精度推理。
这是我投入大部分比赛时间和精力的地方。
我使用了 NVIDIA Dali 进行更快的推理,以加速图像处理。
针对训练中的裁剪数据集和配置做了一些修改。由于 Pytorch 和 TF 不能在同一个 GPU 进程内存中很好地运行,我在单独的内核/notebook 中运行此图像处理步骤。
上述步骤对所有解决方案都是通用的,但下面有趣的部分才是分数提升的关键。
为 B5 和 ConvNext 训练使用了更多数据,验证数据较少。与 5 折分割相比,这带来了提升,但限制了方案 2 的选项。尽管如此,如果第二个更复杂的方案失败,我将其作为方案/提交 1 使用。
我在推理时增加了尺寸大小,这通常会提升分数,这里也是如此。
这里的想法是利用所有其他信息(META 等),连同视觉模型的特征一起输入到 XGB 模型中,这是处理不平衡和混合特征信息的 SOTA 方法。我们还拥有负类的信息,可用于平滑不平衡情况,例如创建更多类别。
为了创建额外的特征和类别,我从 SIIM-ISIC 黑色素瘤分类比赛的第 1 名解决方案中获得了灵感。
XGB 训练和推理的特征包括:
'site_id', 'laterality', 'view', 'age', 'implant', 'n_images', 'image_size' + 从每个模型最后一个全连接层提取的信息(而不是嵌入),以最小化视觉信息和特征的大小(32 vs 64 个特征)。
我根据训练数据中的信息总共创建了 9 个类别:"neg", "pos", "diffneg", "rneg", "negA", "negB" 等。这些数据在测试数据中未出现,但这没关系,因为你只需要训练 XGB 对它们进行分类,这有助于整理负类区域内的信息,使其不再那么不平衡。
对于每个视觉模型的两个 XGB 模型的训练,我使用了自定义版本的 Autoxgb 框架作为基础。我对其进行了许多更改以适应问题:更新了 Prune 以提高 HPO 速度,将比赛指标添加到图像级别的 XGB 验证中,并让 Optuna 指标在每次 Optuna 试验中模拟最终的非图像级别聚合后处理。将所有 XGB 参数添加到 Optuna HPO 中,以及其他操作,例如仅在 9 个类别中对癌症类别进行上采样。
在推理时,我使用了 HPO 得出的最佳参数和设置,并将所有 4 折视觉模型数据合并为一个大的 O