返回列表

4th Place Solution: ALIKED+LightGlue is all you need [Prize Eligible]

611. Image Matching Challenge 2024 - Hexathlon | image-matching-challenge-2024

开始: 2024-03-25 结束: 2024-06-03 计算机视觉 数据算法赛

第四名方案:ALIKED+LightGlue 正是你所需要的 [获奖资格]

作者:tmyok(Master) | 竞赛排名:第4名

我很高兴能够再次参加图像匹配挑战赛,距离上一次2022年的参赛已经两年了。我要向主办方和Kaggle团队组织本次比赛表示感谢。我也要向所有同场竞技、共同完成挑战的选手们致以敬意。

与IMC2022相比,今年的比赛在图像质量方面更具挑战性。值得评估最新的机器学习技术的表现。此外,我了解到分发的数据中包含一些已经消失的场景,例如巴尔沙敏神庙(Temple of Baalshamin)。这凸显了使用三维重建技术进行数字归档的重要性,并进一步强调了本次比赛的社会意义。

1. 具体挑战

1.1 旋转图像

除了拍摄环境相关的条件外,举办方可能故意旋转了一些图像。由于EXIF信息被移除,我只能依赖图像本身来解决这个问题。

1.2 透明场景

基准代码表明,它几乎无法处理透明物体。图像缺乏纹理,产生反射和镜面反射。

2. 解决方案

2.1 概述

与其他团队一样,我的方案将透明和非透明场景分别进行处理。分别处理后,使用各自的匹配结果进行COLMAP三维重建。

overview

2.2 非透明场景

2.2.1 关键点检测

在每次将图像旋转90度时生成并缓存关键点。使用ALIKED-n16,并保留每个旋转角度的关键点。

2.2.2 匹配阶段

使用LightGlue来评估匹配。对于固定的key1,key2的关键点在四种模式下进行评估,并采用匹配数最高的组合。参考IMC2023第二名方案(链接),匹配阈值分别在100和125两种模式下进行评估。

2.3 透明场景

2.3.1 前景分割 – “瓶子”类就是你需要的

cylinder_matching_initial

通过仔细观察透明场景中的失败案例,发现很多关键点出现在背景区域,导致相机姿态估计失败。为了抑制背景区域的关键点,我研究了前景提取方法。使用DINOv2分割器(链接),我发现VOC2012模型将class5分配给前景。根据链接,class5对应于“瓶子”。将该类视为“透明”,我假设可以实现高精度的分割。

cylinder_segmented

2.3.2 使用原始尺度的关键点检测

透明场景的图像相对较大且尺寸统一,因此我决定在原始尺度上检测关键点,不进行缩放。考虑显存和处理时间,关键点在1024×1024的网格单元中检测。结合DINOv2分割器,仅在前景区域检测关键点。

keypoints initial

keypoints proposed

2.3.3 特征匹配

鉴于本次拍摄条件,我判断无需大范围搜索匹配。因此,仅在关键点检测时对应的网格之间搜索对应点。这显著缩小了搜索范围。

cylinder_matching_proposed

2.4 其他技巧

2.4.1 穷举获取图像对

由于IMC2024每个场景的图像数量不大,我对所有图像对进行穷举匹配,而不是使用DINOv2或EfficientNet来搜索配对。这降低了因基于嵌入的相似度较低而错过匹配的风险。

2.4.2 使用所有图像

“我认为如果增加图像数量,分数自然会提升,因为这会使三角化更容易。”

受Camaro的评论(链接)启发,我想知道使用submission.csv之外的图像是否可以帮助更简单的三维重建。简单的LB探测显示,测试数据图像文件夹中存在除submission.csv之外的图像。使用最多100个图像集进行验证显著提升了验证分数,因此预计在LB上也会有效。

3. 结果

比赛结束后,我进行了多次延迟提交,以评估每项附加技术对提升排行榜(LB)分数的贡献。本地验证使用了约50张图像的子集,使用以下notebook生成。

https://www.kaggle.com/code/tmyok1984/imc2024-validation

编号 透明技巧 穷举匹配 使用所有图像 私有 LB 公开 LB 验证(平均) 教堂 狄俄斯库里 蜥蜴 巴尔沙敏神庙 池塘 玻璃杯 玻璃圆柱
1 0.149 0.136 0.26 0.24 0.47 0.54 0.42 0.10 0.02 0.03
2 0.184 0.171 0.32 0.24 0.47 0.54 0.40 0.09 0.02 0.47
3 0.186 0.176 0.34 0.24 0.52 0.51 0.42 0.17 0.02 0.47
4 0.197 0.194 0.43 0.31 0.56 0.79 0.41 0.46 0.02 0.47
  • 基准 (1):私有 LB=0.149(约第300名),公开 LB=0.136(约第300名)
  • 添加透明技巧 (1+2):私有 LB=0.184(约第8名),公开 LB=0.171(约第50名)
  • 添加穷举匹配 (1+2+3):私有 LB=0.186(约第7名),公开 LB=0.176(约第30名)
  • 添加全部图像 (1+2+3+4):私有 LB=0.197(第4名),公开 LB=0.194(约第7名)

该消融研究揭示了以下几点:

  1. 透明技巧的效果:在透明场景中添加该技巧显著提升了私有 LB 分数(从0.149提升到0.184),表明处理透明场景对整体性能提升贡献巨大。
  2. 穷举匹配的效果:对所有图像对添加穷举匹配方法进一步略微提升了分数,表明因嵌入相似度低而遗漏匹配的风险被有效降低。
  3. 使用全部图像的效果:使用submission.csv之外的数据图像带来了最显著的分数提升,证实利用额外图像信息极大地提升了三维重建的精度。

总体而言,处理透明场景和使用所有可用图像是排行榜上取得高排名的关键因素。

4. 实现

本节分享与实现相关的技术。

4.1 多进程 / 多GPU

如前几届方案所指出的,IMC的显著特点是CPU和GPU计算成本都很高。并行运行CPU和GPU可以潜在地使处理速度翻倍。此外,使用两张T4 GPU可以并行化GPU处理,从而将处理能力翻倍。

虽然这些方面的重要性在之前的方案中已被提及,但公开参考代码并不常见。作为我对社区的贡献,本次我分享了所使用的代码。该实现的基础部分可以用于IMC之外的任务,请参阅以下链接。

https://www.kaggle.com/code/tmyok1984/imc2024-exp556

4.2 实用脚本

在使用Kaggle环境中不可用的包时,需要离线安装。但是,在提交notebook中进行离线包安装会浪费提交时间。为了解决这个问题,我始终使用实用脚本功能。通过在已预装包的实用脚本notebook中添加必要的包,可以在提交前完成安装,从而提高提交notebook的效率。本次使用的实用脚本如下。

https://www.kaggle.com/code/tmyok1984/imc2024-install-once

有关如何创建实用脚本的详细信息,请参阅以下链接。

https://www.kaggle.com/code/kononenko/pip-install-once

5. 哪些方法对我无效

  • 对称与重复:我在比赛的大部分时间里都投入到对称与重复的处理。最终,我实现了Doppelgangers分类器和三维几何验证的组合。尽管在最终提交中采用了它并在本地某些情况下效果很好,但在使用延迟提交进行消融研究时,LB始终恶化。我亲身体验了“协和效应”。
  • 重叠区域:在我们的IMC2022第十名方案中,我们使用了DKM-ROI(链接1链接2)。这次有一个出色的公开notebook(链接),我也实现了,但没有取得好结果。IMC2022需要高匹配精度,而IMC2024需要高鲁棒性,因此其有效性有限。具体来说,如果寻找重叠区域的初始值不正确,后续步骤会严重崩溃。相反,第一名方案(链接)通过多视角鲁棒地估计ROI,取得了优异成绩。
  • 非极大值抑制:这在IMC2022也极大提升了我们的LB。但这一次ALIKED已经足够强大,即使将LoFTR、DeDoDe和RoMa组合起来,我在本地验证中也没有看到提升。
  • COLMAP超参数:使用help(pycolmap)命令可以看到许多可配置的参数。我尝试了各种参数,但没有获得显著效果。
同比赛其他方案