返回列表

25th place solution

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

开始: 2020-11-19 结束: 2021-02-18 作物智能识别 数据算法赛
第25名方案

第25名方案

作者: SHih Chieh Lai
原文发布日期: 2021-02-21

抱歉这么晚才写出总结 😅

首先,我要感谢 Kaggle 组织了这次比赛以及伟大的 Kaggle 社区。特别感谢 @khyeh0719@piantic 以及许多我没有提到的优秀 Notebook 作者。

这是我第一次参加比赛,这是一段疯狂的学习之旅。

摘要

我最终提交的两个方案分别是 EfficientNet B4 和 ViT 模型的堆叠集成(第1次提交)以及仅使用 ViT 模型(第2次提交)。与其他参赛者相比,我的方案相对简单。

数据集

EfficientNet 仅使用了 2020 年的数据。我尝试同时使用两年的数据,但效果不佳。我认为这与 2019 年图像的尺寸有关,因为我必须在增强过程中先调整图像大小。

对于 ViT、Deit、R50+ViT,我使用了 2020 年 + 2019 年的数据(仅包含类别 0、1、2、4 的数据)。类别 3 已经有很多图像(比其他类别多 6 倍)。

模型架构

模型 Public LB Private LB
Efficientnetb4 0.9023 0.8977
Deit_base_patch32_38 0.9018 0.8980
Vit_base_patch32_38 0.9061 0.8978
R50+ViT-B 0.9009 0.8975

数据增强

我花了几天时间试图找到最好的增强方法。这是我最终的增强策略:

  • RandomResizedCrop(随机调整大小裁剪)
  • Transpose(转置)
  • HorizontalFlip(水平翻转)
  • VerticalFlip(垂直翻转)
  • ColorJitter (brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2, always_apply=False, p=0.5)
  • OneOf([MotionBlur(blur_limit=3), MedianBlur(blur_limit=3), GaussianBlur(blur_limit=3),], p=0.5)
  • Normalize(归一化)
  • CoarseDropout(粗粒度 Dropout)
  • Cutout(挖空)

我尝试过 CutMix、MixUp、FMix、SnapMix,但它们对我的模型不起作用。我认为 CoarseDropout 和 Cutout 已经是相当重的增强了。

训练参数

我尝试了 @piantic 分享的 Notebook 中所有可用的损失函数。还有一些基本的损失函数组合(主动和被动)。标签平滑设置为 0.3 给了我最好的结果。

调度器:CosineAnnealingWarmRestarts

优化器:AdamP

训练 10 个 Epoch + 4 个 Epoch 的微调。

模型集成

我尝试了 2-4 个模型的不同组合。只有 ViT 和 EfficientNet 有很好的协同作用。

我的两次提交如下:

  1. ViT base 16(10 折),两种学习率 1e-2 和 1e-6 = Public LB 0.906,Private LB 0.8984。许多 Kagglers 报告说 ViT 获得了很高的 Public LB 但 CV 很低,所以我并不感到惊讶。
  2. EfficientNet (权重 0.4) 和 ViT (权重 0.6) = Public LB 0.9068,Private LB 0.9011。

我最好的 Private Score 是 0.9017,这是 EfficientNet (权重 0.4) 和 ViT (权重 0.6) 的组合,但其中的 ViT 模型是仅使用 2020 年数据集训练的。

我还有很长的路要走,

同比赛其他方案