611. Image Matching Challenge 2024 - Hexathlon | image-matching-challenge-2024
我很高兴能够再次参加图像匹配挑战赛,距离上一次2022年的参赛已经两年了。我要向主办方和Kaggle团队组织本次比赛表示感谢。我也要向所有同场竞技、共同完成挑战的选手们致以敬意。
与IMC2022相比,今年的比赛在图像质量方面更具挑战性。值得评估最新的机器学习技术的表现。此外,我了解到分发的数据中包含一些已经消失的场景,例如巴尔沙敏神庙(Temple of Baalshamin)。这凸显了使用三维重建技术进行数字归档的重要性,并进一步强调了本次比赛的社会意义。
除了拍摄环境相关的条件外,举办方可能故意旋转了一些图像。由于EXIF信息被移除,我只能依赖图像本身来解决这个问题。
基准代码表明,它几乎无法处理透明物体。图像缺乏纹理,产生反射和镜面反射。
与其他团队一样,我的方案将透明和非透明场景分别进行处理。分别处理后,使用各自的匹配结果进行COLMAP三维重建。

在每次将图像旋转90度时生成并缓存关键点。使用ALIKED-n16,并保留每个旋转角度的关键点。
使用LightGlue来评估匹配。对于固定的key1,key2的关键点在四种模式下进行评估,并采用匹配数最高的组合。参考IMC2023第二名方案(链接),匹配阈值分别在100和125两种模式下进行评估。

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

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


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

由于IMC2024每个场景的图像数量不大,我对所有图像对进行穷举匹配,而不是使用DINOv2或EfficientNet来搜索配对。这降低了因基于嵌入的相似度较低而错过匹配的风险。
“我认为如果增加图像数量,分数自然会提升,因为这会使三角化更容易。”
受Camaro的评论(链接)启发,我想知道使用submission.csv之外的图像是否可以帮助更简单的三维重建。简单的LB探测显示,测试数据图像文件夹中存在除submission.csv之外的图像。使用最多100个图像集进行验证显著提升了验证分数,因此预计在LB上也会有效。
比赛结束后,我进行了多次延迟提交,以评估每项附加技术对提升排行榜(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 |
该消融研究揭示了以下几点:
总体而言,处理透明场景和使用所有可用图像是排行榜上取得高排名的关键因素。
本节分享与实现相关的技术。
如前几届方案所指出的,IMC的显著特点是CPU和GPU计算成本都很高。并行运行CPU和GPU可以潜在地使处理速度翻倍。此外,使用两张T4 GPU可以并行化GPU处理,从而将处理能力翻倍。
虽然这些方面的重要性在之前的方案中已被提及,但公开参考代码并不常见。作为我对社区的贡献,本次我分享了所使用的代码。该实现的基础部分可以用于IMC之外的任务,请参阅以下链接。
https://www.kaggle.com/code/tmyok1984/imc2024-exp556
在使用Kaggle环境中不可用的包时,需要离线安装。但是,在提交notebook中进行离线包安装会浪费提交时间。为了解决这个问题,我始终使用实用脚本功能。通过在已预装包的实用脚本notebook中添加必要的包,可以在提交前完成安装,从而提高提交notebook的效率。本次使用的实用脚本如下。
https://www.kaggle.com/code/tmyok1984/imc2024-install-once
有关如何创建实用脚本的详细信息,请参阅以下链接。
https://www.kaggle.com/code/kononenko/pip-install-once