anokas作者思源 路雪 晓坤参与

16 岁高中生夺冠 Kaggle 地标检索挑战赛!而且竟然是个 Kaggle 老兵

图像检索是计算机视觉中的一个基础问题。在 Kaggle 的这项地标检索挑战赛中,给定一张查询图像,参赛者需要在数据库中检索到包含查询地标的所有图像。而获得该项竞赛第一名的是年仅 16 岁的英国高中生 anokas 及其团队,anokas 在 Kaggle 上分享了他们获得第一名的解决方案。本文简要介绍了这名 16 岁的高中生及他们所设计的图像检索解决方案。

anokas 赢得了谷歌地标检索挑战赛,在 Reddit 上引起了非常多的讨论,大家都非常关心他的年龄以及是否有其他人帮助。不过在 anokas 的 Kaggle 主页中,他过去一年的活跃度非常高。虽然 anokas 这次与他的爸爸组成团队在图像检索挑战赛中获胜,但在他参与的 50 项挑战赛中有 40 项都是单独完成的。

anokas 两年前就已经开始参加 Kaggle 竞赛,在完成的 48 项竞赛中,他一共获得了 5 块金牌、7 块银牌和 5 块铜牌。除了这一项地标图像检索,他还获得了谷歌云与 YouTube-8M 视频理解挑战赛的第七名。以下是他排名比较靠前的竞赛:

除了上述获得的荣誉,anokas 昨天还在 Kaggle 分享了他们获胜的方案,如下机器之心将介绍这一份解决方案。

以下是我们团队在竞赛中所使用解决方案的细节总结,我们的解决方案包含两个主要的组件:第一个是创建一个高性能的全局描述子,以用奇异值向量表征数据集中的图像,第二个组件即构建一个高效的策略以匹配这些向量,从而搜索到最可能的匹配条目,并提交到排行榜。

下图展示了整体的流程图,在每一个应用步骤中都标记了 LB 分数,后面我们详细介绍这些步骤。

全局描述子

我们解决方案的主要部分涉及到一些全局描述子,它们是描述整体图像的向量。整体架构首先从两个预训练的 CNN 模型开始(ResNet 和 ResNeXt),然后使用四种顶尖的聚合方法以从这些模型生成全局描述子。以下是每种方法及它们「原始」性能的简要细节,原始性能即不带查询扩展和数据库扩展等方法的性能:

  • 基于区域熵的多层抽象池化(REMAP)[42.8% mAP]:这是我们全新设计的全局描述子,它聚合了来自不同卷积层的层级化深度特征,并训练表征多个互补的层级视觉抽象。我们计划在即将来到的 CVPR Workshop 中展示 REMAP 架构的细节。

  • 最大卷积激活值(MAC)[32.9% mAP]:MAC 描述子编码了最后层中每一个卷积核的最大局部响应。在 MAC 架构中,ResNeXt 的最后卷积层会接一个最大池化层、L2 正则化层和 PCA + 白化层。

  • 卷积的池化和(SPoC)[31.7% mAP]:在 SPoC 流程中,ResNeXt 的最后卷积层会接一个池化求和层、L2 正则化层和 PCA + 白化层。

  • 卷积的区域最大激活值(RMAC)[34.7% mAP]:在 RMAC 中,ResNeXt 的最后卷积特征图是通过在多尺度重叠区域上做最大池化而得出。基于区域的描述子是 L2 正则化、PCA + 白化和另一个 L2 正则化,描述子最后会求和汇聚到一个单描述子。

基本的 CNN 网络(ResNet 与 ResNeXt)都是在 ImageNet 数据集上进行预训练,并在地标数据集上进行精调。该地标数据集由 Babenko 等人开发,包含了大约 120k 张图像和 650 个著名的地标。

这个数据集中的图像是通过在一个图像搜索引擎进行文本查询而收集的,没有经过彻底验证。因此,它们包含大量的无关图像,我们将其过滤出来并删除了。这个过程是半自动化的,依赖于使用 Hessian-affine 检测器检测到并使用 RVD-W 描述子聚集的密集 SIFT 特征。清理完成之后,数据集中还剩下 650 个地标的 25000 张图像。

我们没有使用来自地标分类姊妹竞赛的数据来训练,因为我们想弄清楚该解决方案泛化到其它数据集的能力(相对于为该数据集而特定设计的解决方案)。

组合描述子

我们最终的全局描述子通过级联 6 个按上述方式训练调整好的全局描述子的方式来构建(下列括号中是 LB 分数):

  • ResNeXt+REMAP (42.8%)

  • ResNeXt+RMAC (34.7%)

  • ResNeXt+MAC (32.9%)

  • ResNeXt+SPoC (31.7%)

  • ResNet+REMAP (35.8%)

  • ResNet+MAC (30.4%)

我们将描述子通过固定的 L2 范数缩放,从而为每个描述子分配权重,并按下列方式级联描述子:

XG = [2× ResNeXt+REMAP; 1.5× ResNeXt+RMAC; 1.5× ResNeXt+MAC; 1.5× ResNeXt+SPoC; ResNet+MAC; ResNet+REMAP]

权重是点对点选取的,以反映每个方法的相对性能。之后,我们执行 PCA,将描述子的维度降低到 4K(不只是为了节约计算量,还为了删除噪声维度),并使用白化处理,使所有维度具备相同的方差。尽管 PCA 和白化只带来少许改进,但它将查询扩展步骤的结果提升了几个百分点。

最近邻搜索

在创建好描述子之后,每张图像都用 4096 维的描述子来表征。接下来,我们使用穷尽 k 最近邻搜索来找出每张图像的 top 2500 近邻和 L2 距离。在这一阶段提交每张测试图像的 top 100 近邻获得了 47.2% 的分数。

这一步使用优化 NumPy 代码来实现,耗时两小时为 120 万张图像中的每一张找出 top 2500 近邻(我们需要索引集执行最近邻,以备后续使用)。

数据库增强

下一步是执行数据库增强(DBA),即用图像描述子的加权组合及其 top 10 近邻来替换数据库(包括查询)中的每个图像描述子。目标是通过利用近邻特征来提高图像表征的质量。更准确地来说,我们对描述子执行加权求和,使用以下函数来计算权重

weights = logspace(0, -1.5, 10)

有趣的是,尽管我们在其他数据集上发现,使用两个以上近邻来增强查询会损害分数,而 10 个近邻对数据集中的查询和数据库图像来说却是最好的。

我们需要注意:DBA 是该流程的最后一项,尽管它大大提高了分数,但是与查询扩展步骤结合时,改进仅有 1-2%。我们认为原因在于数据库扩展与查询扩展方法的第一级别类似。

查询扩展

查询扩展是图像检索问题中的基础技术,通常会带来性能的极大提升。它遵循该原则运行:如果图像 A <-> B、B <-> C,则 A <-> C(即使描述子 A 和 C 并非明确匹配)。一个简单的示例是有三个部分重叠的图像的情况:

在这种情况下,查询扩展机制能够帮助我们匹配 A 和 C 在同一个场景中,尽管它们的描述子(尤其是全局描述子)可能非常不匹配。这对其他情况也有好处,比如我们有多张视角或亮度条件略微不同的图像时,中间图像可以帮助我们将它们连接起来。

在这场竞赛中,我们设计了一种新的快速技术用于查询扩展,它可以通过多个中间步骤递归地运行来捕捉图像之间的长程连接(long-distance connection)。这使得该技术非常适用于这类问题,因为很多地标有很多图像,只有一张图像需要与查询相匹配,同一地标的其它图像被附加到 top-100 列表中。

我们决定不在这里讨论具体的方法,而仅限于解释,在之后的论文中将深入介绍方法。但其基本原则和其它成熟的查询扩展技术是相同的。我们的查询扩展在运行一次迭代后带来了大约 11% 的提高,在递归运行(30 分钟的运行时)后带来了 14% 的提高(当结合 DBA 的时候有所降低)。

简化模型

在产品级机器学习环境中,由于收益递减原则,很少使用怪兽级别的多模型集成。通常使用较小规模的模型集成就可以实现大部分性能。我们期望得到原来解决方案的简化版本,其仅使用 ResNet-REMAP 和查询扩展,在从下载数据到提交结果不到 12 小时的运行时内(在 4 块 GPU 上)达到 56%~57% 的分数,由于它并不需要特定地为该竞赛进行训练,为此也带来了很多好处。

未发挥作用的方法

局部描述子(local descriptor):在竞赛中,我们对此最为吃惊。我们尝试了多种基于不同局部描述子的方法,包括使用或不使用几何验证的方法,例如用于对我们的结果重排序(降低性能),或用于遍历顶部的数千个全局近邻来寻找可靠的、被基于 CNN 的全局描述子所忽略的局部匹配(有帮助,但对性能的提高不到 0.1%)。我们很好奇其它团队是否在这场竞赛中利用了局部描述子的威力。可能基于 CNN 的全局描述子的性能太好,以至于局部描述子已经过时了?

处理旋转图像:浏览一下数据集,我们就可以发现有很多图像都经过了旋转。我们以多种方式考虑了这个问题,例如在 kNN 过程中对比旋转和非旋转描述子,并为每对图像取最接近的匹配,然而这并没有提高我们的分数。这可能是因为这个数据集有很多的干扰项,假正类的增加超过了真正类的收益。

集成:我们尝试了多种方法来结合不同的模型和方法,例如排序平均和交错预测等,然而得到的收益非常小。也许在解决方案的早期阶段进行模型集成会比在最终阶段集成更好。


原文链接:https://www.kaggle.com/c/landmark-retrieval-challenge/discussion/57855

工程Kaggle计算机视觉CNN
1
相关数据
范数技术
Frobenius Norm

范数(norm),是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大小。半范数反而可以为非零的向量赋予零长度。

机器学习技术
Machine Learning

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

最近邻搜索技术
Nearest neighbor search

最邻近搜索(Nearest Neighbor Search, NNS)又称为“最近点搜索”(Closest point search),是一个在尺度空间中寻找最近点的优化问题。问题描述如下:在尺度空间M中给定一个点集S和一个目标点q ∈ M,在S中找到距离q最近的点。很多情况下,M为多维的欧几里得空间,距离由欧几里得距离或曼哈顿距离决定。

规范化技术
Normalization

规范化:将属性数据按比例缩放,使之落入一个小的特定区间,如-1.0 到1.0 或0.0 到1.0。 通过将属性数据按比例缩放,使之落入一个小的特定区间,如0.0到1.0,对属性规范化。对于距离度量分类算法,如涉及神经网络或诸如最临近分类和聚类的分类算法,规范化特别有用。如果使用神经网络后向传播算法进行分类挖掘,对于训练样本属性输入值规范化将有助于加快学习阶段的速度。对于基于距离的方法,规范化可以帮助防止具有较大初始值域的属性与具有较小初始值域的属相相比,权重过大。有许多数据规范化的方法,包括最小-最大规范化、z-score规范化和按小数定标规范化。

池化技术
Pooling

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

查询技术
Query

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

权重技术
Weight

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

李亚洲
李亚洲

too young, too simple.

推荐文章