返回列表

10th place solution

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

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

第10名解决方案

作者:Yiemon773 (Grandmaster) | 排名:第10名

恭喜所有的获奖者。感谢 Kaggle 主办方和所有参与者带来了这场激动人心的比赛。
这是我获得的第一枚单人金牌。
能在众多 Kaggle 特级大师和大师中获得金牌,我感到非常荣幸。

以下是我的第10名解决方案。

数据集

我使用了两种类型的数据集,特别感谢 @jpbremer,因为他分享了非常有价值的方法和数据集。

  • 全身数据集
    • @jpbremer 提供的公共数据集
    • 私有数据集
      • 训练了 YOLOv5,并使用 Detic 生成的边界框进行 WBF(加权框融合)
  • 背鳍数据集

模型

我训练了两种类型(全身/背鳍)的模型,图像大小为 512 或 784。
全身/背鳍模型:分别使用全身/背鳍数据集进行训练。

当我们搜索最近邻时:

  • 对于有背鳍的物种 -> 使用全身模型和背鳍模型的拼接嵌入向量

  • 对于没有背鳍的物种(如白鲸等) -> 使用全身模型的嵌入向量

    • 主干网络
    • efficientnetv2_m
    • efficientnetv2_l
    • convnext_base
    • convnext_large

在我的实验中,EfficientnetV2 > EfficientnetV1 ≧ ConvNext,但将它们集成提升了我的 CV/LB 分数。
此外,我将池化层之前的卷积层输出进行了拼接,然后将其输入到模型的颈部。效果不错。

数据增强

主要的数据增强如下:

  • 水平翻转
  • 图像压缩
  • 平移缩放旋转
  • 随机亮度对比度
  • 色调饱和度明度
  • 运动模糊

Mixup

  • 混合嵌入向量(而非图像)并结合软标签的 Arcface 有效(CV:+0.003-0.005)

损失函数

在我的案例中,一些辅助损失有所帮助。
Loss = ArcfaceLoss + FocalLoss + SpeciesLoss

  • SpeciesLoss:26个物种的分类损失

渐进式动态边距

在某些早期 epoch,如果边距较大,训练效果不佳。
https://arxiv.org/pdf/2010.05350.pdf 启发,我重新设计了函数以逐渐增加边距。

  • 1~5 epoch:将边距系数从 0.2 线性增加到 1
  • 6~20 epoch:边距系数 = 1(即此函数等同于原始动态边距)

伪标签

这也是提高分数的关键。
首先,我在伪标签上训练模型,
然后使用这些预训练权重在原始训练数据集上进行训练。

模型集成

我拼接了加权嵌入向量,此操作有一点效果(CV:+0.001-0.002)

阈值设定

为了预测 new_individual_id,通过验证数据集上的预测 Top1 物种搜索最佳阈值。

感谢您的阅读。
欢迎提问!

同比赛其他方案