返回列表

18th place solution

483. Happywhale - Whale and Dolphin Identification | happy-whale-and-dolphin

开始: 2022-02-01 结束: 2022-04-18 计算机视觉 数据算法赛
第18名方案

第18名方案

作者: Nikita Rozhnev (achilles38) | 比赛排名: 18th

简介

在这次比赛中,我们看到了几种预处理比赛数据集的方法。这包括全身裁剪、背鳍裁剪及其去除背景的变体。
全身和背鳍裁剪方法彼此独立,都非常有价值。当我们发现基于背鳍数据集训练的模型在更大的图像尺寸下表现更好(最佳图像尺寸约为 768x768)时,我们得出了这个结论。因此,不可能在保持背鳍尺寸接近 768x768 的同时训练全身图像模型,而且仅使用背鳍图像进行最终预测也是不合理的,因为身体色素沉着和其他身体特征有助于识别。这就是为什么你 100% 需要针对全身裁剪和背鳍裁剪分别训练至少两个独立的模型,并进行后续的集成机制。

MLP (多层感知机)

因此,我们在不同的数据集上训练了几个分类器,并使用多层感知机(MLP)集成了它们的嵌入向量。选择 MLP 是因为它具有更好的潜力,可以从在不同数据集来源上训练的模型的嵌入中获取洞察。具体来说,我们在将不同模型的特征输入 MLP 之前将它们连接起来。它使用 ArcFace 进行训练。该模型非常浅,开头有 Dropout(0.15),结尾也有 Dropout(0.50)。你可以在附带的 GitHub 仓库中找到更多详细信息。总的来说,MLP 大致为我们表现最好的 CNN 分类器带来了 +5% 的提升。

CNNs

我们总共有 8 个 CNN 分类器用于 MLP 训练。

模型 训练集图像 测试集图像 LB 分数
efficientnetv1-b7 混合数据集 全身 81.6%
efficientnetv1-b6 混合数据集 全身 79.8%
eca_nfnet_l2 混合数据集 全身 79.3%
eca_nfnet_l2 混合数据集 全身 81.2%
efficientnetv1-b6 背鳍 背鳍 77.8%
efficientnetv1-b6 混合数据集 背鳍 80.0%
efficientnetv1-b7 原始图像 原始图像 66.0%
efficientnetv1-b7 全身 全身 76.8%

混合数据集

一个巨大的改进来自于我们称之为“混合数据集”的方法。在混合数据集训练过程中,我们的数据加载器从不同的数据源(背鳍和全身图像)采样图像,但测试图像始终来自单一数据源。仅在背鳍图像上训练和测试的 Efficientnetv1-b6 LB 分数为 77.8%,但在混合数据集上训练并在背鳍图像上测试的相同模型(具有相同的超参数)LB 分数为 80.0%。
在我的理解中,这种方法引入了更多的训练多样性并防止模型过拟合。过拟合显然发生在我们的训练过程中,因为大多数时候我们看到 >99% 的训练准确率和极小的训练损失。

类别平衡

我们有两个技巧来改进 MLP 模型生成的预测。在预测 .csv 文件中,我们有 5 个潜在的匹配候选者,按置信度从高到低排序。

  1. 在每一行中,如果我们看到第一个元素也是其他超过 10 行中的第一个元素,而第二个元素从未在其他行中排第一,那么我们交换它们。
    [ind_1, ind_2, ind_3, …] -> [ind_2, ind_1, ind_3, …]
  2. 如果行中的第一个元素是 new_individual(新个体),而行中的第二个元素从未在其他行中排第一,那么我们交换它们。
    [new_ind, ind_1, ind_2, …] -> [ind_1, new_ind, ind_2, …]
    没有类别平衡的 MLP LB 分数为 0.865,有类别平衡的 MLP LB 分数为 0.
同比赛其他方案