```html
1st Place Solution – High Image Resolution ALIKED/LightGlue + Transparent Trick
第一名解决方案 – 高分辨率图像 ALIKED/LightGlue + 透明物体技巧 [有资格获奖]
我们的团队要深深感谢Kaggle团队、布拉格捷克技术大学以及帮助举办这一系列精彩图像匹配挑战赛的其他人,同时感谢所有参赛者。恭喜所有参赛者!
我们在此描述的工作是@vostankovich、@ammarali32、@jaafarmahmoud1、@kashiwaba和@igorlashkov的真正团队努力。我很幸运能成为这个勤奋、有凝聚力和技能的团队的一员。
我们选择的最终提交方案:
• 最佳公开LB笔记本得分0.28
• 具有最佳本地CV的提交,LB得分为0.24
概述
我们的最终解决方案包括用于非透明场景的COLMAP驱动的3D图像重建(I3DR)模块,以及用于透明场景("categories.csv"中的"transparent"类别)的简化直接图像姿态估计(DIP)模块。我们仅使用稀疏检测器和匹配器,通过在高分辦率图像对上集成ALIKED提取器和LightGlue匹配器来实现。关于DIP模块,我们通过将图像按物体旋转的正确顺序排列,并计算旋转矩阵和平移向量来估计场景中每张图像的3D姿态。
交叉验证
与许多其他Kaggle竞赛一样,拥有良好的交叉验证流程对于持续提高LB分数非常重要。我们分别对透明和非透明场景进行验证。测试集中仅包含有真实标注的图像。至于I3DR模块的验证,很难逐步改进流程,因为其与LB的相关性不确定。重要的是将COLMAP限制为1个线程。相反,在透明场景上运行的算法更容易调试。在这种情况下,CV与LB的相关性更好,但并非所有情况都如此。
1. I3DR模块 [非透明场景]
对于图像对选择,我们决定不使用任何图像检索方法。相反,我们仅依赖于ALIKED和LightGlue(LG)生成的匹配数量。具体来说,我们对单个检测器应用30个匹配的阈值,对整个图像在上使用所有检测器生成的匹配应用100的阈值。很容易注意到,有些场景(例如dioscuri)的图像不在自然方向上,需要重新旋转才能找到更多匹配。与之前的IMC类似,我们不仅从整个图像中提取匹配,还从裁剪的重叠区域中提取匹配。DBSCAN帮助找到具有最多匹配的密集点簇。我们使用RANSAC而不是COLMAP内部实现来从图像点对应计算两视图几何。
关键要点:
- 逐步过滤场景中唯一的图像对——基于匹配数量
- ALIKED+LightGlue微调设置——使用ALIKED n16产生的无限数量的关键点,以及提供准确结果的LG参数
- 缓存关键点和描述符——由ALIKED为每张图像生成。这大大减少了运行时间
- 多GPU加速。混合精度与GPU T4x2硬件显著减少了图像匹配阶段的时间。我们同时使用两个GPU进行SfM并行处理
- 匹配TTA(测试时增强)——从不同尺度的高分辨率图像中提取的匹配集成,以及从原始图像和裁剪图像中提取的匹配。LB实验中的最佳结果是通过1280和2048的组合对原始图像和裁剪图像获得的
- 新裁剪方法——不是使用IMC2022中提出的为每对图像计算裁剪区域的方法,我们采用了一种新的裁剪技术,为每张图像单独计算裁剪区域。在这种方法中,使用DBSCAN将匹配到其他图像的频率高于某个阈值的关键点进行聚类,以裁剪出图像的代表性区域。传统的每对裁剪方法有可能在原始图像中不匹配时丢弃重要区域,而这种方法通过利用更多图像对的信息降低了遗漏重要区域的风险。本地实验始终显示这种方法具有更好的性能,因此我们采用了它
- 旋转每对图像中的一张——旋转0度、90度、180度或270度,并采用产生最多匹配的那个旋转
- 重复场景重建——我们放宽图像匹配阈值以解决注册图像数量较少的场景。选择具有更多注册图像的重建
- 合并多个重建——由于COLMAP返回多个重建,我们使用Horn对齐来估计它们之间的转换矩阵,然后将其他重建投影到最佳重建中以注册尽可能多的图像
- OmniGlue——最佳私人提交是ALIKED+LG和OmniGlue的合并,不幸的是它没有被选中
未成功或未完全测试的想法:
- TTA多裁剪用于图像对过滤。想法是将图像分割成多个裁剪区域并提取匹配,以找到场景中相似的图像,然后确定最佳图像对
- 不同的检测器、匹配器——我们测试了SP/SG、LoFTR、DKM、RoMa、OmniGlue、XFeat、KeyNetAffNetHardNet、DISK和SIFT。最终,ALIKED和LightGlue是我们的最佳LB选择。显然,许多基于密集型方法对我们不起工作的原因是它们在不同图像对上的"可重复性"较低,有时匹配中的噪声较高。OmniGlue显示了有前景的本地结果,但在LB上没有明显改善。RoMa在lizard场景中表现出色(84.78%)
- 不同的CNN来查找场景中最相似的图像并生成相应的图像对(NetVLAD、Dino、Dino Salad等),我们使用真实标注和内参通过计算每个相机与其候选图像的体积视锥的 平均IOU来评估这些方法的分数,但这没有反映在LB上。所以最终我们完全放弃了这个策略
- 不同的关键点/匹配细化方法——基于我们从IMC23的经验,我们知道PixSFM可能会有所帮助,但由于自去年以来Kaggle环境的更新,我们只能使用旧版本的COLMAP进行测试。因此,当IMC23获奖者分享他们的DFSFM代码时,我们在最终流程上测试了细化部分。不幸的是,即使使用并行计算,由于时间限制提交没有通过,而且DFSFM细化只稍微改善了验证,所以我们没有使用它。[让它在Kaggle上运行真的很难]
- NMS——我们实现了IMC2023团队"ZJU3DV"描述的策略。我们在church上获得了一些本地改进,但在LB上没有提升
- 消歧——有几篇论文处理对称场景,我们尝试了Doppelgangers和Yan方法,后者对CV有轻微的本地改进,但对LB有下降,所以我们决定跳过它
- 3D RANSAC清理——我们利用深度信息使用3D RANSAC清理来消除对称场景中的错误匹配。对于每张图像,我们创建深度掩码。然后,对于每对匹配,我们考虑x,z投影,这类似于匹配点的鸟瞰图。随后,我们使用RANSAC来识别和移除异常值
- 图像运动去模糊——我们意识到训练中一些图像的质量可能因相机抖动而降低。为了减轻这种影响,我们尝试了单图像恢复去模糊方法,但在LB上没有获得明显改善
2. DIP模块 [透明场景]
我们很快意识到,使用图像匹配和COLMAP"原样"的SfM流程不适用于透明场景。因此,我们决定尝试不同的策略。我们假设直接估计物体在每张图像中的姿态可能有助于计算旋转矩阵。我们开始对透明类别做一些假设:"鉴于透明类别的度量阈值非常低,相机位置必须非常靠近物体,而且很可能是从各个方面拍摄物体"。
所以,我们简单地按照这张图片所示,将相机放置在物体周围的圆圈上,面向物体。
最近,我们还发现了一篇非常有趣的科学论文,描述了解决透明类别的方法,其中包括4个透明物体的微小数据集,但我们没有公开找到它。
我们假设,如果我们能设法在一定程度上解决这些透明场景,我们的LB就会很好。为了验证目的,我们甚至生成我们自己的透明场景数据集,其中包含一些塑料和玻璃瓶:
基本上,我们想出了以下两种方法:
方法#1
为了使我们的假设可行,我们需要将图像按正确顺序排列,然后为每张图像分配相机姿态,使其位于物体周围的理想圆周上,均匀分布(例如,对于36张图像,每张相隔10度)。我们尝试了多种方法来排序图像,所有这些方法都包括将旅行商问题(TSP)作为最后一步来解决:
- 光流。计算每对图像的光流幅度,并为每对分配等于幅度标准差的权重
- 像素级差异。灰度图像的简单差异,每对的权重等于差异值
- SSIM分数。计算每对的SSIM指数,并为每对分配等于1-ssim的权重
- ALIKED+LG匹配。再次计算每对的匹配数量,并为每对分配等于(1/匹配数)的权重
在上述四种方法中,每对权重表示图像之间的接近程度(权重越小,图像越相似)。我们基于这些对权重构建距离矩阵,并通过TSP解决最终的排序问题。
方法#2
通过估计图像顺序,将它们与前后图像配对,并在非常高的分辨率(~4096)下执行匹配过程,获得了不错的分数。
图像顺序是基于匹配数量来估计的。实验结果表明,匹配数量往往在前后图像之间较高。这种趋势被用来使用类似kNN的方法估计图像顺序。
CV结果,圆柱:77.78%,杯子:41.92%。
LB提升使用透明技巧:+0.03
事件时间线及进展:
- 光流用于图像排序,使用流的平均值,基本上由像素位移u和v表示。标准差得分更好
- 灰度像素差异
- SIMM分数范围[-1, 1],其中1表示完全相似,0表示不相似,-1表示完全反相关
- SIMM + "匹配流"是最终选择的集成。它在公开/私人LB上给了我们+0.09
CV结果,圆柱:~92%,杯子:~62%
未成功的想法:
- 边缘提取方法(例如CLAHE、Canny、高斯平滑、拉普拉斯)
- 深度掩码
- 在流计算之前对透明物体进行分割
事实和数字:
- 0.28/0.25是公开/私人LB的最终得分
- 0.284871是最佳公开得分
- 0.267720是最佳私人得分
- +0.09使用透明技巧在公开/私人LB上
- 16914秒(4小时42分钟)是所选最佳提交的执行时间
- 2个场景注册图像少于50%但在LB上
- 335次提交由我们的团队
- 无限杯咖啡和 dedication
本地验证:
我们的验证图像数据集使用了以下每个场景的数据:
- "church", "lizard":作为测试数据提供的图像集
- "dioscuri", "multi-temporal-temple":作为训练数据提供的图像集
- "pond":从训练数据集中随机提取的65张图像
最终指标 -> mAA=41.23(最佳LB)/ 43.50(最佳CV)
更新:我们分享了我们的获奖笔记本
```