返回列表

7th Place Solution

440. iWildcam 2021 - FGVC8 | iwildcam2021-fgvc8

开始: 2021-03-10 结束: 2021-05-28 农业遥感 数据算法赛
第7名解决方案

第7名解决方案

作者:Devashish Prasad | 排名:第7名

我创建了一个具有与原始数据集相同类别比例的小型数据集(占原始数据集的10%),并进行了大量实验以便在比赛中快速推进。

1) 预处理

在我的初步实验中,我发现与其直接裁剪和调整检测框的大小,不如使用反射填充来裁剪和填充检测框,这样可以提高分数。因此,我的最终解决方案在训练和测试中都使用了反射填充。我的预处理流程如下:

裁剪检测框 -> 反射填充 -> 数据增强 -> 标准化

2) 数据增强

在我的实验中,添加任何类型的数据增强都会降低我的验证分数。因此,我保留了强度非常低的简单增强。我使用的增强方法如下:

  • 随机水平翻转 (p=0.5)
  • 颜色抖动:亮度和对比度 (0.9 到 1.2)
  • 灰度化 (p=0.5)
  • 高斯模糊 (sigma = 0.0 到 0.8)

3) 处理数据不平衡

我是这样处理不平衡问题的:https://www.kaggle.com/c/iwildcam2021-fgvc8/discussion/242455

4) 模型架构

对于我的小型数据集,我实验了 EfficientNet B2 Noisy Student。对于最终提交,我使用了 EfficientNet B5 Noisy Student。我没有使用 ImageNet 预训练权重。

5) 提交流程

在一个公开的内核中,我看到了“最大计数逻辑”。在这种逻辑中,序列中图像的最大检测数量(最大计数)被视为该序列的预测值。我修改了这个逻辑,同时也考虑了最大频率。例如——在一个只有一种动物的9张图像序列中,每张图像的检测数量为 [1,1,1,1,2,2,2,4,2]。最大计数逻辑将预测为4,而最大计数 + 最大频率逻辑将预测为2。很有可能存在误检,因此检测到4个目标的第8张图像(其中可能包含2个误检)会被消除。1和2的频率相同,因此将考虑最大计数,即2。我看到使用最大计数 + 最大频率逻辑后,验证准确率和公开分数都有所提升,因此在最终提交中使用了该方法。

此外,更高的 MegaDetector 检测置信度阈值效果更好,因此我在最终提交流程中使用了 0.7 作为检测置信度。

6) 训练

我尝试了混合精度训练,但不使用混合精度的训练对我来说效果更好。我在小型数据集实验中没有使用任何学习率调度器。但在最终训练 EfficientNet B5 Noisy Student 时,我使用了“平台期降低”。我低估了 EfficientNet B5 Noisy Student 所需的训练时间。我在最后一周耗尽了剩余的26小时 GPU 时间来训练 EfficientNet B5 Noisy Student,但它仍然有点欠拟合,验证准确率约78%,训练准确率82%。在耗尽我的 Kaggle GPU 配额后,我切换到 Colab 继续训练。这次我更改了一些超参数,如批次大小和学习率,但由于时间不足(截止日期临近),我只能达到82%的验证准确率和85%的训练准确率。但我无法使用 Colab 进行提交,因为我后来意识到测试集有30GB,而在 Colab 上我只有28GB的磁盘空间。我甚至无法在那里下载压缩包。所以我的最终模型仍然欠拟合(即它需要更多的训练)。

同比赛其他方案