[86.385] 第10名方案
[86.385] 第10名方案
作者:Ashish Goswami
发布时间:2021-05-28
首先,感谢组织者和Kaggle团队举办这次比赛,并祝贺所有获得高分的选手。这是一次很棒的学习经历,我阅读了一些很棒的论文并尝试实现其中的一部分,最终取得了令人满意的成绩。
我从一开始就参加了,中间休息了一段时间,然后在最后阶段重新加入。我的解决方案非常简单,但这里有一些关键点供那些可以从中受益的人参考!
方法 :
- 数据:
- 我使用了调整为640x640的TFRecord格式比赛数据。链接
- 重复和误导性的图像没有被移除 🙃
- 模型:
- 我尝试了Effnets (B0-B7)、EffnetV2s、SeResNext-50、MobileNets、ViTs等,以及不同的图像大小(640, 512, 224)等。其中Effnet B5 (imagenet) 是我最好的单一模型(Public: 84.2, Private: 86.38)。B6s 和 B7s 过拟合非常严重!
- 在我的实验中,Noisy student 权重的表现较差。
- 最佳模型:
- EffnetB5(imagenet),所有BatchNormalization层保持冻结,GlobalAveragePooling,后接Dropout和包含6个sigmoid节点的输出层。
- 损失函数
- 这在流程中起到了重要作用,普通的交叉熵效果不佳,可能是因为它通过对错误分类样本施加更多惩罚从而抑制了早期阶段的学习。
- Focal loss 效果似乎不错,结果始终如一。
- 取自这里的 Asymmetric loss 虽然有助于提高CV分数,但无法提高LB分数(这可能使过拟合变得容易,或者也许是我从PyTorch转换为TensorFlow时翻译得不好 😂)。
- 最有希望的损失函数是使用这篇精彩文章中描述的可微分版本的MacroF1。
- 数据增强
- 其他细节
- 使用 Adam 优化器。
- 基于余弦衰减的学习率。
- 5折交叉验证方案。
- Batch Size = 32(每个TPU副本)。
- 推理方案
最后,我选择了一个基于集成的提交 [Effnet B5, MobileNetv3 large (Crop net权重初始化), SeResNext50 等](Public: 82.9, Private 85.313),没有太多时间创建更多样化的集成,以及我最好的 EffNet B5。
- 我本可以调整推理流程以找出最佳阈值(仅通过调整阈值,我在Private LB上获得了0.2的增长,但我没有选择它作为最终提交)。
整理完代码后,我会放上链接。
总的来说,我很享受参加这次比赛,也很想知道其他人是如何解决这个问题的。如果对我如何改进有任何建议,请评论!
在其他比赛中再见!😄