返回列表

3rd Place Solution — A Pure Global Feature Approach

401. Google Landmark Recognition 2020 | landmark-recognition-2020

开始: 2020-07-29 结束: 2020-09-29 计算机视觉 数据算法赛
第三名方案 — 一种纯全局特征方法

第三名方案 — 一种纯全局特征方法

作者: Bo (Team: haqishen, boliu0, garybios, alexanderliao)
比赛: Google Landmark Recognition 2020
排名: 3rd Place

感谢主办方,祝贺所有获奖者!我们的解决方案是一种纯全局特征度量学习方法,并包含一些技巧。

架构:带有动态边界的子中心 ArcFace (Sub-center ArcFace)

在过去的两年里,ArcFace (论文) 已成为 Kaggle 上标准的度量学习方法。在本次比赛中,我们使用了子中心 ArcFace (论文),这是同一作者对 ArcFace 的最新改进。其核心思想是每个类别可以拥有不止一个类中心。例如,某个地标的照片可能包含几个不同的簇(例如来自不同角度)。子中心 ArcFace 的权重存储了多个类中心的表示,这可以提高分类准确率并改善全局特征的质量。

GLD 数据集中的类别极度不平衡,存在长尾分布。为了在严重不平衡的情况下让模型更好地收敛,较小的类别需要更大的边界,因为它们更难学习。我们没有根据类别大小手动设置不同的边界级别,而是引入了动态边界,这是一族将类别大小映射到边界级别的连续函数。这给我们带来了显著的提升。细节将在论文中描述。

我们仅使用 ArcFace 损失来训练模型。

验证方案

分层 5 折交叉验证。使用 4 折进行训练,仅在 1 折的 1/15 数据上进行验证以节省时间。对于不同的单一模型使用不同的折,以便在集成中实现最大的多样性。

我们使用 GAP 指标进行验证。CV GAP 相比 LB(排行榜)非常高。所有模型的 CV GAP 都超过了 0.967。好消息是 CV GAP 和 LB 具有很高的相关性。

测试集预测策略

  • 如果我们使用模型的 ArcFace 分类头来预测测试集,我们最佳单折模型的公共 LB 仅为 0.564
  • 一个更好的策略是计算每个 [私有训练图像,私有测试图像] 对的全局特征余弦相似度,并使用每张测试图像的 top1 邻居及其对应的余弦相似度作为预测。对于相同的单折模型,这使我们的公共 LB 达到了 0.604
  • 不仅仅使用 top1 邻居,我们可以通过结合 top5 邻居及其相似度来改进。最佳的组合函数是 8 次方。
    例如,假设测试图像 A 的 top5 邻居及其余弦相似度为:类别 1 (0.9),类别 2 (0.8),类别 2 (0.7),类别 1 (0.5),类别 3 (0.45)。那么类别 1 的总分是 0.9**8 + 0.5**8 = 0.434;类别 2 的总分是 0.8**8 + 0.7**8 = 0.225。所以我们预测类别 1,p=0.434。
    LB 提升至 0.610
  • 我们可以通过结合 ArcFace 分类头的预测(使用 12 次方)进一步改进。在上面的例子中,假设图像 A 的 ArcFace 分类头给出类别 1 的分数 = 0.75,类别 2 的分数 = 0.88。那么类别 1 的总分变为 (0.9**8 + 0.5**8) * 0.75**12 = 0.0138;类别 2 的总分变为 (0.8**8 + 0.7**8) * 0.88**12 = 0.0486。现在我们预测类别 2,p=0.0486。
    LB 提升至 0.618

数据增强

我们将所有图像调整为正方形形状,不进行裁剪。

import albumentations as A
A.Compose([
        A.HorizontalFlip(p=0.5),
        A.ImageCompression(quality_lower=99, quality_upper=100),    
        A.ShiftScaleRotate(shift_limit=0.2, scale_limit=0.2, rotate_limit=10, border_mode=0, p=0.7),
        A.Resize(image_size, image_size),
        A.Cutout(max_h_size=int(image_size * 0.4), max_w_size=int(image_size * 0.4), num_h