返回列表

Private LB 36th place/Public LB 1138th place [Silver medal] solution

420. Cassava Leaf Disease Classification | cassava-leaf-disease-classification

开始: 2020-11-19 结束: 2021-02-18 作物智能识别 数据算法赛
Private LB 36th place/Public LB 1138th place [Silver medal] solution

Private LB 第36名 / Public LB 第1138名 [银牌] 解决方案

作者: ilovescience | 发布时间: 2021-02-19

哇,真是一场精彩的比赛!我们从公开排行榜的第1138名跃升至私有排行榜的第36名,获得了一枚银牌。我们的解决方案非常简单,我们没有使用任何技术来处理噪声。我有没有提到我们的提交是在截止日期前几分钟才完成的?

解决方案:

我们银牌解决方案的组成部分:

  1. EfficientNet-B7
  2. 来自 timm 库的 EfficientNet-B3a
  3. SE-ResNext50

EfficientNet-B7:

这与这个 Kernel 基本相同,但使用了 EfficientNet-B7 模型,训练了 20 个 Epoch,图像大小为 512x512。5折交叉验证分数为:

该模型提交时使用了 3倍 TTA(测试时增强),增强策略如下:

    RandomResizedCrop, 
    Transpose(p=0.5), 
    HorizontalFlip(p=0.5), 
    VerticalFlip(p=0.5), 
    RandomBrightnessContrast(
        brightness_limit=(-0.1,0.1), 
        contrast_limit=(-0.1, 0.1), 
        p=0.5
    ),

我们要注意的是,在私有提交泄露期间(约1.5个月前),我们注意到该模型在排行榜上的提交排名是第9位。

EfficientNet-B3a:

该模型的训练受到了这个 Kernel 中训练过程的启发(但没有进行标签校正)。基本上,使用 EfficientNet-B3a(由 Ross Wightman 训练权重的 EfficientNet-B3 版本),冻结模型主体并解冻 fastai 模型头部,训练了 3 个 Epoch。随后,解冻整个模型并训练 10 个 Epoch。使用 512x512 的图像,Batch Size 为 32。使用的增强策略如下:

   Dihedral(p=0.5),
   Rotate(p=0.5, max_deg=45),
   RandomErasing(p=0.5, sl=0.05, sh=0.05, min_aspect=1., max_count=15),
   Brightness(p=0.5, max_lighting=0.3, batch=False),
   Hue(p=0.5, max_hue=0.1, batch=False),
   Saturation(p=0.5, max_lighting=0.1, batch=False),
   RandomResizedCropGPU(size, min_scale=0.4),
   CutMix()

使用了标签平滑损失函数和 Ranger 优化器。CutMix + 标签平滑非常有帮助,我们注意到因此有了显著的 CV 提升。保存了验证损失最佳的模型。这产生了一个 5折交叉验证分数为 0.8914 的模型。

该模型提交时使用了 5倍 TTA,采用训练时的增强策略 (learn.tta(n=5,beta=0))。

SE-ResNext50:

我只是将之前流程中的模型换成了 SE-ResNext50。5折交叉验证分数为:0.8938。

这三个模型被集成并提交。

  • Public LB: 0.898
  • Private LB: 0.900

我们还有一个具有不同增强、学习率策略等的 SE-ResNext50 模型,以及在训练结束时进行的随机权重平均。该模型与 EfficientNet-B3a 和 EfficientNet-B7 一起集成提交,结果为 Public LB: 0.897, Private LB: 0.901(潜在的金牌区域),但不幸的是没有被选中。不过,我们很感激我们甚至成功实现了 1135 名的排名飞跃!

我们尝试过的其他几件事:

  • 尝试了双温度逻辑损失,观察到 CV 没有提升
  • 尝试了渐进式标签校正,观察到 CV 没有提升
  • 尝试在测试集上进行伪标签,这是最后一分钟的想法,Public LB 分数为 0.139,可能是实现有误

反思:

  • 这场比赛非常有趣,尽管数据集相当混乱且充满错误