「赛题名称:」Image Matching Challenge 2023

「赛题链接:」https://www.kaggle.com/competitions/image-matching-challenge-2023/overview/timeline

赛题背景

图像集合重建环境的 3D 模型的过程称为运动结构 (SfM)。这些图像通常由训练有素的操作员捕获,或使用其他传感器数据捕获,例如Google地图使用的汽车。这确保了同构、高质量的数据。考虑到各种各样的视点,以及照明、天气和其他变化,从各种图像构建 3D 模型要困难得多。

竞赛主办方谷歌在许多谷歌地图服务中采用了SfM技术,例如从街景和航拍图像创建的3D模型。为了加速对这一主题的研究并更好地利用已经公开的数据量,谷歌与Haiper和Kaggle合作举办了这项竞赛。

参赛者在帮助构建精确的 3D 模型方面的工作可能适用于摄影、文化遗产保护以及 Google 中的许多服务。

赛题方向

CV-三维重建

赛题任务

本次比赛的目标是重建精确的3D地图。去年的图像匹配挑战赛侧重于双视图匹配。今年将更进一步:参赛者的任务将从许多不同的视图重建3D场景。

参赛者将从各种嘈杂的数据源(例如用户上传到Google地图等服务的图像)中解锁地图世界的关键。

评估指标

提交的内容根据估计姿势的平均准确度 (mAA) 进行评估。给定一组相机,由它们的旋转矩阵和平移向量参数化。

数据描述

本次比赛中面临的挑战是从显示不同类型场景的图像集中生成 3D 重建,并准确地摆出这些图像的姿势。

预计在隐藏的测试集中找到大约 1,100 张图像。场景中的图像数量可能从 <10 到 ~250 不等。

  • sample_submission.csv 随机生成的有效样本提交

  • [train/test]/*/*/images 一批图像都在同一位置附近拍摄。一些训练数据集可能还包含一个名为 images_full 的文件夹,其中包含其他图像。

  • train/*/*/sfm 这批图像的 3D 重建,可以使用 colmap 打开,colmap 是本次比赛捆绑的 3D 结构运动库。

  • train/*/*/LICENSE.txt 此数据集的许可证。

  • train/train_labels.csv 这些数据集中的图像列表,带有标签

赛题奖金

  • 第一名 - $12,000

  • 第二名 - $10,000

  • 第三名 - $10,000

  • 第四名 - $10,000

  • 第五名 - $8,000

金牌方案

第一名

https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/417407

「稀疏+密集匹配,基于置信度的合并,SfM,然后迭代细化」

「1.概述」

我们提出了一个从粗到细的SfM框架,以从最近无检测器匹配器的成功中获益,同时解决无检测器匹配器的多视图不一致问题。

图片

 「2.方法」
2.1 图像对构建

对于每个图像,我们使用图像检索方法选择k个相关图像。在这里,我们没有发现不同检索方法之间的显着差异。这可能是因为评估数据集中图像或场景的数量相对较少。

2.2 匹配

2.2.1 旋转检测

比赛数据集中有一些场景包含旋转图像。由于许多流行的基于学习的匹配方法无法有效地处理这种情况,我们的方法与许多其他参与者的方法类似,涉及多次旋转其中一个查询图像[0, π/2, π, 3π/2]并将其分别与目标图像匹配。这有助于缓解由图像旋转引起的匹配点数量的急剧减少。

2.2.2 重叠检测

与去年的解决方案一样,估计重叠区域是一种常用的技术。我们使用第一轮匹配来获取重叠区域,然后在其中执行第二轮匹配。根据面积比,我们在一张图像中调整较小区域的大小,并将其与较大的区域对齐。我们发现稀疏匹配器能够平衡效率和有效性。

2.2.3 匹配

我们发现多种方法的集合往往优于任何单个方法。由于时间限制,我们选择一种稀疏方法(SPSG)和一种密集方法(LoFTR)的组合。我们还发现,DKMv3的替代LoFTR在这场比赛中表现更好。

2.3 多视图不一致问题

 如图2所示,图像中无检测器匹配器(例如LoFTR)的结果特征位置取决于另一图像。这种成对依赖的性质导致在多个视图上运行成对匹配时出现碎片特征轨迹,这使得无检测器匹配器不能直接适用于现有的SfM系统(例如COLMAP)。

此外,对于稀疏检测和匹配部分,由于裁剪后的图像重叠区域也与其他图像相关,因此重新检测裁剪图像上的关键点以进行匹配也存在相同的多视图不一致问题。

此问题已通过以下从粗到细的 SfM 框架解决。

2.4 粗略的 SfM

在此阶段,我们首先通过合并来重建初始粗略的SfM模型,该模型将在细化阶段进一步完善以提高姿态精度。

2.4.1 置信度引导的合并

匹配后,我们根据置信度合并每个图像上的匹配项,以提高 SfM 匹配的一致性(可重复性)。对于每个图像,我们首先将其所有匹配项与其他图像聚合,然后执行窗口大小为 5 的 NMS,以将匹配项合并为具有局部最高置信度的点,如图 1(2) 所示。在NMS之后,可以显著减少2D点的数量,如果总点仍然大于阈值,则通过对置信度进行排序来为每个图像选择前10000个点。

2.4.2 映射

基于合并的匹配,我们通过COLMAP执行粗SfM。请注意,由于 RANSAC 是在匹配阶段执行的,因此将跳过几何验证。对于具有大量图像(本次竞赛中为 ~250)的场景重建,我们在 COLMAP 中启用了并行丛平差 (PBA)。具体来说,由于PBA使用PCG求解器,这是BA问题的不精确解,并且与Ceres中默认使用的Levenberg-Marquardt(LM)求解器的精确解不同,我们仅在注册大量图像(即>40)后启用PBA。这是基于重建开始至关重要的直觉,PBA的不精确解可能会导致场景初始化不佳。

2.5 迭代细化

我们继续完善初始SfM模型,以获得改进的相机姿势和点云。为此,我们提出了一个迭代优化管道。在每次迭代中,我们首先使用基于变压器的多视图细化匹配模块来提高特征轨迹的准确性。

然后将这些优化的特征轨迹输入几何细化阶段,该阶段联合优化相机姿势和点云。几何细化在几何 BA 和轨迹拓扑调整(包括完整轨迹、合并轨迹和过滤器观测值)之间迭代。细化过程可以多次执行,以提高准确性。

我们的特征轨道细化匹配模块是在MegaDepth上训练的,更多细节在我们的论文中,很快就会在arXiv上找到。

第二名

https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/416873

我们解决方案的关键步骤如下:

  • 最初,使用从场景集生成的所有可能的唯一图像对。移除用于查找和排名场景中相似图像的模型和逻辑。定义每个图像对需要有的最小匹配数为100。如果少于这个数,我们丢弃该对。

  • SP/SG设置:无限制的关键点数,关键点阈值是0.005,匹配阈值是0.2,sinkhorn迭代次数是20。

  • SP/SG的半精度浮点运算帮助减少了占用的内存而不损失明显的精度。另一个很好的性能技巧是缓存SP为每个图像生成的关键点/描述子,然后缓存每个图像对的SG匹配。这大大减少了运行时间。

  • TTA。不同尺度图像上提取的匹配的集成。在我们的本地实验中,组合[1088, 1280, 1376]获得了最佳结果。我们使用np.concatenate来连接不同模型的匹配,这在过去的IMC竞赛中很常见。

  • 如果必要,对场景中的图像应用旋转检测器来解旋转。我们发现训练数据集中的一些场景(塞浦路斯,迪奥斯库里)有许多90/270度旋转的图像。一些图像具有EXIF元信息。不幸的是,在查看训练数据集时,我们没有发现任何关于图像拍摄方向的具体信息。为了解决这个旋转问题,我们使用这个solution重新旋转图像到它的自然方向。我们在没有任何阈值的情况下使用它,并查看我们需要对图像应用的旋转次数。应用旋转后,塞浦路斯场景的分数从~0.02大幅提升到~0.55。RotNet的实现对我们不起作用。

  • 为COLMAP重建明确设置初始图像。对于每个图像,我们存储它出现的图像对数量以及这些对产生的匹配数。然后我们选择具有最高对数的图像。如果多个图像满足此条件,我们选择匹配数最高的。这有助于提高分数。

  • 为了减少分数的随机性,我们决定做一些类似多次调用match_exhaustive的平均。思想是对原始匹配数据库调用match_exhaustive N次。然后我们只取出现在8/10场景中的那些匹配,其他匹配被忽略。这是以粗鲁的方式完成的,有数据库复制、读写等。

  • 使用不同的匹配器阈值,例如[100,125,75,100],从头开始多次运行重建。通过查看注册的图像数量和3D点云的点数,我们选择最佳重建。这种技巧不仅可以通过为匹配找到更好的阈值来找到更好的重建,而且还可以减少随机效应,并作为对抖动的对策。由于其运行时间复杂性,我们只在包含不超过40-45张图像的场景中使用此策略。这是我们解决方案中的最后一步,帮助我们将分数从0.497/0.542提升到0.506/0.562。我们还试验了使用类似思想的pycolmap.incremental_mapping,但那种情况没有奏效。

第三名

https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/416918

「概述」

SuperPoint/SuperGlue 在准确性和速度方面表现异常出色。

我的代码部分基于主办方提供的基准代码和 @chankhavu 在 IMC 2022 中的笔记本的组合。我要感谢他们提供的代码。

「主要流程」

基于匹配数量的筛选过程

考虑到大量图像组合,需要一种有效的筛选方法。我注意到当图像对不适合进行立体匹配时,SG 生成的匹配数明显较低(<10)。因此,如果 SG 生成的匹配数(longside = 1200)低于一定阈值(在这种情况下是30个匹配),我会绕过匹配过程。这一策略显著减少了处理时间,在给定时间范围内进行了更多的匹配尝试,从而导致明显的改进(LB:+0.08)。

筛选过程中的旋转

从像塞浦路斯这样的图像方向未排序的图像对中获得有意义的匹配是具有挑战性的。因此,我在筛选过程中加入了旋转步骤,进一步改进了结果(LB:+0.04)。

图像分割

将每个图像分割成四个部分,每个部分生成自己的关键点,然后在 SP/SG(longside = 1400)中执行所有图像对的匹配(4x4 = 16 对)。通过图像分割,匹配数增加了将近三倍,如下所示,这实际上不取决于图像的原始大小。仅仅增加图像的输入尺寸是无法实现这种增加的。我在其他场景中也获得了类似的好处。在我的情况下,这种方法比传统的TTA(Test Time Augmentation)更加有效和节省时间(LB:+0.01~0.02)。

与 DKM(Deep Keypoint Matching)的集成

在比较了多个模型后,DKM v3 在与 SG 结合时成为相对轻量级和有效的选择(LB:+0.01~0.04)。SuperGlue 在下面的图像对中无法正确匹配楼梯(见黄色区域),但在其他对象(如拱门和柱子)上提供了良好的匹配。另一方面,DKM 能够检测到楼梯的正确对应点,这表明这些匹配器彼此互补。

独立匹配和映射过程的并行执行

匹配和映射/重建都是耗时的任务。然而,前者利用了 GPU 和单个 CPU,而后者只需要 CPU 资源。因此,使用队列库实现并行处理提高了时间效率,约为 20~30%。这个概念的灵感来自于 IMC 2022 中的一个金奖解决方案。请记得设置 mapper_options.num_threads = 1,这也有助于避免在重建过程中的 OOM(Out of Memory)问题。

「最终分数:」
  • urban / kyiv-puppet-theater(26 张图像,325 对图像对)-> mAA=0.921538,mAA_q=0.987385,mAA_t=0.921538

  • urban -> mAA=0.921538

  • heritage / dioscuri(174 张图像,15051 对图像对)-> mAA=0.594950,mAA_q=0.689662,mAA_t=0.602279

  • heritage / cyprus(30 张图像,435 对图像对)-> mAA=0.706437,mAA_q=0.727126,mAA_t=0.724828

  • heritage / wall(43 张图像,903 对图像对)-> mAA=0.805980,mAA_q=0.935105,mAA_t=0.824917

  • heritage -> mAA=0.702456

  • haiper / bike(15 张图像,105 对图像对)-> mAA=0.933333,mAA_q=0.999048,mAA_t=0.933333

  • haiper / chairs(16 张图像,120 对图像对)-> mAA=0.981667,mAA_q=0.999167,mAA_t=0.981667

  • haiper / fountain(23 张图像,253 对图像对)-> mAA=0.999605,mAA_q=1.000000,mAA_t=0.999605

  • haiper -> mAA=0.971535

  • 最终指标 -> mAA=0.865176

第四名:https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/416816

第五名:https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/417045

第七名:https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/427143

第九名:https://www.kaggle.com/competitions/image-matching-challenge-2023/discussion/416842

关注下方【学姐带你玩AI】🚀🚀🚀

回复“比赛”获取190+场竞赛top方案(kaggle、ccf、天池...)

码字不易,欢迎大家点赞评论收藏!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐