返回列表

2nd place solution

439. Herbarium 2021 - Half-Earth Challenge - FGVC8 | herbarium-2021-fgvc8

开始: 2021-03-10 结束: 2021-05-26 作物智能识别 数据算法赛
第二名方案

第二名方案

作者: HaeC | 比赛排名: 第2名

首先,感谢主办方筹备了如此精彩的比赛。

比赛的难点:

  1. 本次比赛的数据集非常大,需要大量的GPU计算资源。因此,我无法进行大量的实验。
  2. 因此,我无法对模型进行很多轮次的训练。这很难说模型已经完全收敛了。

网络结构

网络架构基于去年获得好成绩(第2名)的配置。我在此基础上添加了一些网络层。

输入 -> 主干网络(特征提取器) -> GAP -> FC (2048x2048) -> BN -> Leaky ReLU -> FC2 (2048x512) -> BN -> Leaky ReLU -> FC3(512x64500)

损失函数

度量损失

  • SoftTriple Loss 应用于 FC2 的输出。(在我的实验中,SoftTriple 比 ArcFace 效果更好)

分类损失

数据增强

训练阶段

  • 图像尺寸:448x448
  • AugMix(不含 JSD Loss,使用 Albu 自定义实现)
  • 流程如下:
A.Resize(random.randint(CFG.img_size[0] + 32 , 
                   CFG.img_size[0] + 128), 
                   CFG.img_size[1]),
A.RandomCrop(CFG.img_size[0], CFG.img_size[0]),
A.HorizontalFlip(p=0.5),
RandomAugMix(severity=3, width=3, alpha=1.0, p=1.0),
A.Cutout(p=0.5),
ToTensorV2()

测试阶段

  • TTA 5 折
A.Resize(random.randint(CFG.img_size[0] + 16, 
                                CFG.img_size[0] + 64), 
                                CFG.img_size[1]),
A.RandomCrop(CFG.img_size[0], CFG.img_size[0]),
A.HorizontalFlip(p=0.5),
A.Normalize(
                mean=[0.485, 0.456, 0.406], 
                std=[0.229, 0.224, 0.225], 
                max_pixel_value=255.0, 
                p=1.0)

优化器及其他技巧

  • AdamP : lr=0.001, 无权重衰减
  • CosineAnnealingLR
  • 指数移动平均
  • AMP (fp16 混合精度训练)

训练与验证策略

  • 我在第一阶段(30轮)和第二阶段(5轮)总共训练了35个epoch。
  • 如果有足够的时间并训练更多的epoch,模型表现会更好。
  • 当我尝试 80:20 的训练-验证划分时,我发现在训练期间(40个epoch内)没有出现过拟合的结果。因此,模型是在没有验证集的情况下训练的。

后处理 (切换策略)

当满足以下两种情况时,我会交换第1和第2置信度的类别。

情况 1:

  • top_2_conf >= (top_1_conf * 0.7)
  • top_2_class 不在 top_1_conf 列表中
  • top_1_class 在 top_1_conf 中出现超过 2 次

情况 2:

  • top_2_conf >= (top_1_conf * 0.6)
  • top_2_class 不在 top_1_conf 列表中
  • top_1_class 在 top_1_conf 中出现超过 15 次

模型分数