第一名解决方案
第一名解决方案
作者: khyeh (Grandmaster) | 排名: 第1名
感谢 Mayo Clinic 和 Kaggle 举办这次比赛。我很享受这次比赛的过程。同时也要感谢我的队友 @evilpsycho42 提供的所有支持。尽管我一个月前就决定停止在这个项目上的工作,但我还是会在这里尝试说明我的解决方案……
数据
单模型
- 主干网络:
swin_large_patch4_window12_384 + 自定义头部
- 分类头:自定义,用注意力池化 替代平均池化。
损失函数/评估指标
交叉验证策略
- 5折分层分组 KFold (5-fold Stratified Grouped KFold)
有效的方法
- 注意力池化:5折交叉验证平均值从 0.69 提升至 0.66
- moco-v3 预训练:5折交叉验证标准差从 0.30 降低至 0.15
- 模型集成:5折交叉验证平均值从 0.662 提升至 0.658(提升非常小)
无效的方法
- 更多的切片
- 不同的预处理方式
- 选取像素偏差最高而非最暗的前16个切片
- 染色归一化
最终解决方案
- 集成
swin_large_patch4_window12_384 和 coat_lite_medium
- 一些运气 🙏
从其他比赛中学到并应用到这里的一些经验:
- 由于公共排行榜 包含的样本很少,我们必须进行正确的交叉验证 (CV),这是我们可以做且依赖的依据。
- 我调整模型不仅是为了提高平均 CV 分数,也是为了降低 5折 CV 的标准差,这样模型在未见过的测试集中表现会更稳定。
- 实现正确的损失函数和评估指标:我发现很多公开的 Kernel 使用 logloss 作为训练损失,甚至直接作为评估指标,而不是实现比赛指标并将其作为建模的损失函数。
- Logloss 作为评估指标时,其表现与比赛指标有很大不同。
- Logloss 作为训练损失导致我的验证集中的比赛指标变差。
- 尽人事,听天命。
- 我们尽力做到正确的 CV,在降低不确定性的同时提高 CV 分数。
- 我们抱最好的希望,因为数据集不够大,无法区分最后几位数字的差异,所以正如预期那样总会有排名波动。保持乐观的心态,继续前进(这样即使遇到糟糕的排名波动也不会那么痛苦)。
我拥有的最高平均值和最低标准差的最佳 CV 也取得了最好的私人排行榜分数。
