611. Image Matching Challenge 2024 - Hexathlon | image-matching-challenge-2024
我非常高兴能够分享参加图像匹配挑战赛2024 - Hexathlon的经历。首先,我衷心感谢Kaggle平台、主办方 @oldufo 和 @eduardtrulls,以及赞助商。其次,我想感谢所有的Kaggle用户。在整个比赛过程中,我发现讨论区和代码区的见解和代码对我的学习和进步非常有帮助。我受到启发,现在想与社区分享我的解决方案,希望能为其他参赛者提供一些帮助和灵感。
下面是我的图像匹配挑战赛2024 - Hexathlon解决方案。
本次比赛的目的是从各种环境和设置中捕获的图像集合创建详细的3D地图。参赛者的任务是制作一个能够生成精确空间表示的模型,无论图像来自何处——无论是来自无人机的航拍照片、茂密森林中的拍摄、夜间场景,还是六种不同问题类型中的任何一种。
https://www.kaggle.com/competitions/image-matching-challenge-2024/overview
https://www.kaggle.com/competitions/image-matching-challenge-2024/data

我的处理流程包括五个部分:图像旋转检测、图像匹配、图像关键点提取、图像关键点匹配和图像关键点融合。我尝试了多组图像匹配超参数、图像匹配模型和图像关键点提取模型。考虑到在线计算资源和推理时间的限制,最终选择了Aliked和Affnet+hardnet进行关键点提取,lightglue和adalam进行关键点匹配。对于透明图像的匹配(这是比赛的难点部分),通过裁剪图像来增加关键点匹配数量,从而提高分数。
训练数据集
| 场景 | 总数 | 尺寸 | 最大数量 |
|---|---|---|---|
| pond | 1117 | 宽度576,高度1024 | 877 |
| lizard | 711 | 宽度580,高度1024 | 284 |
| church | 110 | 宽度768,高度1024 | 92 |
| dioscuri | 70 | 宽度1024,高度768 | 27 |
| multi-temporal-temple-baalshamin | 68 | 宽度1920,高度1440 | 10 |
| transp_obj_glass_cup | 36 | 宽度4608,高度3288 | 36 |
| transp_obj_glass_cylinder | 36 | 宽度6048,高度4032 | 36 |
根据EDA观察训练集图像,发现dioscuri场景中有大量旋转图像,我的考虑是进行旋转检测,并使用旋转检测结果进行校正,同时考虑使用对旋转不敏感的特征提取器。

为了以穷举方式匹配场景的所有图像对,我对开源基线的超参数进行了调优。
如数据集分析部分所述,我首先注意到数据集中某些场景包含大量旋转图像,我尝试用两种方法解决这个问题:
对于关键点提取,最终使用了ALIKED+LightGlue和AffNet的组合,因为ALIKED在赛前实验中虽然是非常慢的特征提取器,但与其它特征提取器(DISK、SIFT)相比具有更好的分数表现。因此,我对ALIKED进行了赛前尝试和参数调优,包括num_features、min_matches、resize_to等。
在阅读了2023年比赛的获胜方案后,我了解到keynet、affnet等特征提取器出现在许多获胜方案中,我从2023年的开源代码中实现了自己的affhardnet进行特征提取。不幸的是,affnet虽然具有旋转鲁棒性,但也是一个较慢的特征提取器,这对可能的模型融合是一个相当大的挑战。
感谢https://www.kaggle.com/code/motono0223/imc-2024-multi-models-pipeline提供的图像匹配和COLMAP过程的并行化,以及Aliked的速度优化,使模型融合成为可能。
透明图像的关键特征提取是一个重要问题,在这方面我采用了相对简单的处理方法,对于透明图像,我发现执行中心裁剪可以在一定程度上提高匹配效果。
使用AdaLAM匹配所有可能的图像对,并与lightglue匹配结果合并。AdaLAM有多个可调参数,如force_seed_mnn、search_expansion、ransac_iters,但由于其固有的随机性,我认为调优这些超参数的收益难以衡量。
基于同样的推理,我使用了COLMAP的增量映射器进行重建,除了将min_model_size设置为3外,几乎使用默认参数。
基于过去的经验,模型融合可以带来显著提升,尤其是使用不同模型。我最初的预期是将Aliked+lightglue匹配结果与使用不同特征提取器的Affnet进行融合,就像大多数IMC2023获胜者所做的那样,奇怪的是,当我选择三模型融合时,提交超时了。最后,我只能选择提交两模型融合的结果。参考IMC2023参赛者分享的模型参数,进行了简单的参数调整并用作最终提交。
选择不同的HardNet权重时,本地验证没有显著变化。使用不同的图像嵌入时,本地验证也没有明显差异。

我清理了获奖代码(删除不必要的注释和函数),清理后的获奖代码链接如下,请注意,代码本身具有随机性,每次运行代码时结果都会有所不同。
```