401. Google Landmark Recognition 2020 | landmark-recognition-2020
感谢主办方,祝贺所有获奖者!我们的解决方案是一种纯全局特征度量学习方法,并包含一些技巧。
在过去的两年里,ArcFace (论文) 已成为 Kaggle 上标准的度量学习方法。在本次比赛中,我们使用了子中心 ArcFace (论文),这是同一作者对 ArcFace 的最新改进。其核心思想是每个类别可以拥有不止一个类中心。例如,某个地标的照片可能包含几个不同的簇(例如来自不同角度)。子中心 ArcFace 的权重存储了多个类中心的表示,这可以提高分类准确率并改善全局特征的质量。
GLD 数据集中的类别极度不平衡,存在长尾分布。为了在严重不平衡的情况下让模型更好地收敛,较小的类别需要更大的边界,因为它们更难学习。我们没有根据类别大小手动设置不同的边界级别,而是引入了动态边界,这是一族将类别大小映射到边界级别的连续函数。这给我们带来了显著的提升。细节将在论文中描述。
我们仅使用 ArcFace 损失来训练模型。
分层 5 折交叉验证。使用 4 折进行训练,仅在 1 折的 1/15 数据上进行验证以节省时间。对于不同的单一模型使用不同的折,以便在集成中实现最大的多样性。
我们使用 GAP 指标进行验证。CV GAP 相比 LB(排行榜)非常高。所有模型的 CV GAP 都超过了 0.967。好消息是 CV GAP 和 LB 具有很高的相关性。
0.9**8 + 0.5**8 = 0.434;类别 2 的总分是 0.8**8 + 0.7**8 = 0.225。所以我们预测类别 1,p=0.434。
(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。
我们将所有图像调整为正方形形状,不进行裁剪。
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