第26名方案
第26名方案
作者: Sorceress
比赛排名: 第26名
首先,我要感谢主办方举办如此精彩的比赛,参与过程非常顺畅,做得好!
同时也祝贺所有的获奖者!
我参加这次比赛的计划是想看看在资源有限的情况下(仅使用 Colab Pro+)能走多远,只是想试试市面上现有的工具,但最后我也训练了一些模型……)))
对我来说,主要需要解决的问题是:尺度以及匹配/智能异常值去除。
图像处理
- 对于 LoFTR,我没有调整图像大小,而是从右侧/底部稍微裁剪了一点图像,这并不影响找到的关键点位置。
- 多尺度处理(针对 LoFTR 和 SuperGlue),之后所有的关键点都被重新调整为原始图像大小。
方案配方
公榜分数 0.827,私榜分数 0.828
对于 LoFTR,使用了 TTA(测试时增强):左右翻转,并合并关键点。
- LoFTR(通过置信度预过滤关键点)。
对于多尺度,我统一重新缩放(1.2, 1.2; 1.6, 1.6),并通过运行 MAGSAC 过滤掉异常值最多的部分(置信度 > 0.7),然后重新缩放回原始图像大小。
- HardNet(2k个特征点,仅用于非 Google Urban 数据集的图像,基于图像大小判断)。
- ALIKE,2k个特征点。
- DKM(TTA:左右翻转,500个特征子集,然后取 > 0.7 概率的点),默认设置。
- Superpoint + SuperGlue(仅用于 Google Urban 数据,8k个特征,阈值 0.3,图像原始大小,1.2倍缩放,按置信度过滤)。
- 合并所有关键点。
- Magsac++,参数 0.185, 0.25,取决于是否为 Google Urban 数据,迭代次数 100k。
我在最后一分钟还上传了一个模型,本来想选它的,但没选))) —— 公榜 0.824,私榜 0.831,这是使用了微调后的 DKM 模型的结果。
如果有更多时间投入,可能会奏效的方法:
- 关键点 + 线匹配 + 单应性 + 从单应性推导基础矩阵。 我找到了这篇论文并将其迁移到了 Python:IEEE Paper Link,并尝试仅按原样运行多个单应矩阵序列 + RANSAC(没成功,需要更广泛地测试,可能有 bug)。我认为这是一个可以尝试与线匹配结合的想法。或者甚至可以尝试 Progressive-X。但我没有足够的时间。
- 寻找相似的数据集进行验证。 这肯定会让事情变得容易得多。为了验证,我使用了 IMC 训练数据集,按相同分布下采样到 2k,但这并不完全一样。
- DKM 定制化重训练 —— 我设法进行了微调,并在验证集上提高了约 0.6。我在概率损失上遇到了一些没有完全解决的问题,所以虽然微调了,但没有达到我想要的规模。我还尝试了一些极线损失等想法。
- LogPolar(在 MegaDepth 上重训练,确实有一点改善,试图复活它,但太慢了)。
- QuadAttentionTree —— 基于简单的调整大小效果不佳,决定放弃。
对我来说没用的方法:
- 重训练 NG-RANSAC
- ScaleNet (GitHub 链接)
- GOPAC
- se-LoFRT
- SGMNet
- HardNet + AdaLAM