第5名解决方案
第5名解决方案
作者:Gary (Grandmaster) | 比赛排名:第5名
恭喜大家!这是我的解决方案,并不复杂。
模型
- efficientnet-b0
- efficientnet-b1
- efficientnet-b2
- efficientnet-b3
我只是将分类和回归任务结合在一起,多重损失可能不容易过拟合。但在测试阶段只使用了回归的预测结果,代码如下:
数据预处理与增强
- 没有特殊的预处理方法,我只是裁剪了图像上的黑色背景。
- 图像尺寸:384x384
- 仅使用了左右翻转、上下翻转、随机旋转(0, 360)、缩放(1.0, 1.35)以及自设计的透视变换方法。
训练策略
- 5折交叉验证 (5 fold CV)
- 根据较好的公共榜单分数,我没有先在2015数据上预训练再在2019数据上微调,而是将2015数据和2019数据合并在一起训练模型,并在2015私有测试数据和2019验证数据上进行验证。
- 学习率策略:Adam优化器,学习率列表=[5e-4, 1e-4, 1e-5, 1e-6],学习率衰减节点为[10, 16, 22],共训练25个epoch。
- 2次测试时增强 (2*TTA)
- 阈值:[0.5, 1.5, 2.5, 3.5]
伪标签
- 我认为伪标签是赢得这场比赛最关键的要素。我的想法是,因为我们不知道2019私有测试集的分布,它可能类似于2015数据,或者2019训练数据,亦或是2019公共数据。所以我将三种不同分布的数据结合起来训练模型,使模型能够识别这三种不同分布的数据。
- 我没有使用所有的2019公共数据作为伪标签样本,我选择了置信度较高的样本,代码如下:

- 伪标签帮助我降低了本地的MSE损失并提高了QWK分数。
总结
- 这次比赛的训练数据很奇怪,大多数Kaggler都遇到了一些奇怪的问题,比如公共榜单不稳定,找不到本地CV和公共榜单之间的关系等等……
- 但最终结果表明,我们仍然可以信任我们的本地CV。