返回列表

7th Place Solution - A good CV is all you need

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

开始: 2024-06-27 结束: 2024-09-06 医学影像分析 数据算法赛
第 7 名解决方案 - 一个好的交叉验证(CV)就是一切

第 7 名解决方案 - 一个好的交叉验证(CV)就是一切

比赛: ISIC 2024 Challenge

排名: 第 7 名

作者: Phạm Ngọc Thiên Ân (@pntan17)

团队成员: minhtu123, mathormad, linhlethuy

发布日期: 2024-09-07

大家好,

我想感谢组织者举办这次比赛。代表我的团队,我想分享我们的方法:

交叉验证 (CV):

我们尝试了三种不同的 CV 策略:(1) 基于 patient_id 的 GroupKFold,(2) 基于 patient_id 并按归属机构(医院)分层的 GroupKFold。然而,这两种 CV 有时与排行榜(LB)不相关。因此,我们提出了第三种也是最终的 CV (3),它模拟了测试集中仅出现两家新医院的场景,正如该讨论所述。具体来说,我们在来自五家医院的数据上训练,并在七家医院的数据上预测。设计此策略的直觉是我们想要评估模型在旧医院和新医院上的性能,因为不同医院之间的数据和标签可能不同(由于测量误差、医生偏差等)。我们发现第三种 CV 与公开排行榜之间存在非常高的相关性,因此我们直到最后都使用了这个 CV。

解决方案:

我们的解决方案是三个基于树的模型的加权集成。在每个基于树的模型中,我们使用元数据和 CNN 模型的预测作为特征。对于 CNN 模型,我们使用变体骨干网络训练了多头模型(1 个用于分类目标,1 个用于预测 lesion_id)。

1. CNN 模型:

  • 我们使用 ResNet18、EfficientNetB0、EfficientNetB1 和 Swin_Small 作为骨干网络。
  • 在探索特征期间,我们注意到所有正样本都有 lesion_id 字段(仅在训练数据中可用),这意味着具有 lesion_id 的样本比其他样本更可疑。因此,我们通过向 CNN 添加另一个头来利用这个 lesion_id 信息。与仅使用分类目标相比,这有助于提高 CNN 的 PAUC。
  • 在以前的 ISIC 比赛数据上进行预训练。
  • 尝试了各种策略,例如使用加权采样器、双重采样器训练和使用 PAUC 损失,但只有加权采样器被证明是有效的。
  • 结合图像和表格数据的结果优于仅使用图像数据。然而,这些模型的推理过程非常耗时,所以我们决定不在最终提交中包含它们。

2. 基于树的模型:

  • 3 种变体的提升树:CatBoost、XGBoost 和 LGBM。
  • 使用来自公开 Kernel的公共特征工程。
  • patient_idtbp_lv_locationattribution 分组和聚合信息。
  • 样本权重:负样本为 1,lesion 为 x,正样本为 y(x 和 y 的调优值因不同的树库而异)。
  • 来自 CNN 模型的交叉特征(OOF 预测)。

3. 最终提交:

  • 最终提交是三个基于树的模型和表格数据上的神经网络模型的加权集成。
  • 因为我们 100% 信任我们的 CV,所以我们选择的 2 个提交在 CV 和排行榜上都泛化良好。我们在 CV 上得分最高的提交也是在公开排行榜和私有排行榜上得分最高的。

4. 无效的方法:

  • 带有目标和置信度分数的 CNN 模型多标签。
  • Stacking 很复杂,不如加权集成好。
  • SVM、TabNet 和其他分类器。
  • 使用 OpenCV 从皮肤图像中去除毛发,如该讨论所示。
  • 公开 Kernel 中建议的欠采样。

我们每天都有大量工作要完成,我们还有每日会议来回顾已完成的工作并确定接下来需要做什么,这真的有助于让我们保持正轨并继续前进。

这次比赛是一段非常棒的旅程,我从中学到了很多。我想向 Duc 先生 @mathormad、Tu 先生 @minhtu123 和 Linh 女士 @linhlethuy 表示诚挚的感谢,感谢他们教导我不懈地帮助我修复 bug 长达数小时甚至数天。我真的很感激。

我也要感谢 Kagglers 宝贵的讨论和见解。

努力终有回报!

同比赛其他方案