RealCat

· 97 min read

论文解读:MINIMA,用数据引擎把 RGB 匹配数据扩成 480M 跨模态对

TL;DR 跨模态匹配的瓶颈不是网络不够花哨,而是缺少大规模、带几何标签的多模态数据[1]。MINIMA 的解法是“改数据不改网络”:以 MegaDepth 的 40M 个 RGB 匹配对为源,用 StyleBooth、DepthAnything V2、DSINE、物理事件模拟器、PaintTransformer 和 Anime2Sketch 把它们逐像素转成红外、深度、法向、事件、油画、素描六种伪模态;生成图与 RGB 共享像素网格,因此深度、相机位姿和内参标签原样继承。由此得到 196 个户外场景、7 种模态、约 480M 个跨模态对的 MD-syn,再用很小的学习率微调现成的 LightGlue、LoFTR 和 RoMa,得到 MINIMA 家族。只见过合成 IR/Depth/Normal 的模型,在真实 RGB-IR 的 METU-VisTIR 上把 MINIMA-RoMa 的 AUC@5° 从 RoMa 的 25.61 提到 37.45,MINIMA-LG 从 2.17 提到 19.14,后者甚至超过专门为 RGB-IR 设计的 XoFTR(18.47);零样本遥感、医学、RGB-Event 也普遍好于对应底座。代价是模型相关:MegaDepth-1500 上 MINIMA-RoMa 基本无损(61.7 对 62.6),MINIMA-LoFTR 却从 53.6 崩到 29.9。代码、权重、数据引擎和 480M 数据集均已开源。

一、动机:缺的是数据,不是模块

跨模态图像匹配是很多系统的前置环节:红外与可见光融合、深度增强、事件相机视觉、医学图像配准、遥感变化检测,都要先在不同成像系统之间找到同名点。它比同模态匹配难,因为两幅图的像素强度可能完全不在一个统计分布里:同一栋楼在 RGB 里是米色墙面加窗户,在红外里可能只剩一片均匀亮区,在深度图里是按距离着色的色块,在事件相机里只剩亮度变化处的红蓝点。

1.1 两条路线各自的天花板

路线一:为特定模态设计不变特征。 手工方法如 RIFT[2] 用辐射变化不敏感的特征变换;学习方法如 ReDFeat[3] 用检测-描述解耦;半稠密方法如 XoFTR[4] 直接在多光谱数据上训练 LoFTR 变体。这条路线在目标模态上可以很强,但通常一个模型只服务一对模态,换一对就要重新设计、重新收数据;而且真实多模态数据集很小,场景覆盖窄,模型容易记住数据集而不是学会匹配。论文的表 1 把这一点量化得很清楚:METU-VisTIR 只有 2.5K 对、6 个户外场景,M3FD 4.2K 对 / 15 个场景,LLVIP 15K 对 / 26 个场景,DIODE 25K 对 / 20 个场景,DVS128 只有 1.3K 对;相比之下 MegaDepth 有 40M 对、196 个场景,ScanNet 有 230M 对、1513 个场景。[5, 6]

路线二:把同模态匹配器直接搬到跨模态。 SuperGlue、LightGlue、LoFTR、DKM、RoMa 这类模型在 MegaDepth / ScanNet 上训练,架构和训练配方都很成熟。[7, 8, 9, 10, 11] 但它们的特征是在 RGB 上学到的,换到红外、深度、事件上会明显退化。论文表 2 的合成基准上,LightGlue 在 RGB-Depth 的 AUC@10° 只有 2.87,LoFTR 只有 0.44;也就是说,绝大多数图像对连一个可用的相对位姿都估不出来。这不是微调一下分类头能解决的问题,而是训练分布里根本没有这些外观。

两条路线的共同盲区是数据:真实多模态配对难采(要同时架设多台相机、保证同步和重叠),几何标签更难标(手工点、标定、或昂贵的 SfM)。所以现有工作只能在“小数据上做模态专用设计”和“大数据上做 RGB 专用设计”之间二选一。

1.2 本文的赌注:把“外观”换掉,把“几何”留下

MINIMA 的观察很朴素:匹配真正需要的是几何结构,而不是某种固定的像素强度。同一场景的 RGB、红外、深度、法线、事件图,外观千差万别,但建筑边缘、窗户角点、人物轮廓、道路边界这些几何线索是共享的。既然如此,能不能保留 RGB 数据的几何和标签,只把外观“翻译”成目标模态?

这就是论文所说的 data engine:不追求一个新的匹配模块,而是造一个可扩展的数据生成管线。它的三个卖点对应论文第 3.2 节:

  • 便宜:源数据是公开的 RGB 匹配数据(MegaDepth),不需要在野外同时采集多传感器数据。
  • 灵活:想要哪种模态,就接一个对应的生成器;模态的数量、比例、场景分布都可以自由定义。
  • 标签免费:生成图与 RGB 在同一像素网格上,深度图、相机位姿、内参不需要重新标注,直接继承。

论文的贡献可以概括为三条:

  1. 提出一个由「源数据 + 引导数据 + 生成模型」组成的数据引擎,把廉价 RGB 匹配数据扩成多模态匹配数据;
  2. 构建 MD-syn:196 个户外场景、7 种模态(RGB + 6 种伪模态)、约 480M 个跨模态对,带深度和位姿标签;
  3. 用 MD-syn 微调 LightGlue、LoFTR、RoMa,得到 MINIMA 家族;在 19 个真实跨模态 case 上验证 in-domain 和 zero-shot,并把代码、权重、数据引擎、数据集全部开源。
MINIMA 在六个真实跨模态数据集上的精度与效率
图 1左图是六个真实跨模态数据集上的 AUC 雷达图(位姿用 @10°,单应采用 @10px),右图是平均精度与吞吐的散点。MINIMA 的星号在同等吞吐下普遍高于对应底座;图中标注的三个提升幅度是 MINIMA-RoMa 比 RoMa 高 20.4%、MINIMA-LG 比 LightGlue 高 97.8%、MINIMA-LoFTR 比 LoFTR 高 50.0%。注意这是“只用合成数据训练”的结果,不是在这些真实数据集上微调。

二、核心方法

2.1 总体流程:三件事,没有新网络

MINIMA 的数据引擎与两阶段训练流程
图 2数据引擎(左)把源 RGB 对 转成两组伪模态集合 、;跨模态对由 和 组成,标签沿用原 RGB 对。右侧是两阶段训练:先在 RGB 上预训练匹配器,再在随机采样的跨模态对上小学习率微调。

设源 RGB 匹配对为 ,其几何标签为相机内参 、相对位姿 和深度图 。对第 种目标模态,生成器 做的是逐像素的图像到图像转换:

因为 不改变图像尺寸和像素坐标,生成图上的任意像素 仍对应原图的同一场景点。于是

匹配标签(相对位姿或单应)是 和 的函数,所以也原样继承。对 种模态,每个 RGB 对可以拆出 个跨模态对:

这里有两个容易忽略的细节。

第一,生成器是 image-to-image,不是 text-to-image。输入是同一张 RGB,输出保持构图;如果让模型凭空生成“一张红外图”,几何就对不上了,标签也就无从继承。这是整个数据引擎能成立的前提。

第二,“模态不变”不是一条损失项。论文没有在网络上加模态判别器、对抗损失或不变性正则;它只是把不同模态的图像对混在同一个匹配目标里训练,让网络自己学出对 appearance 不敏感、对 geometry 敏感的特征。这一点在 2.4 节还会展开。

标签继承在代码里非常直白:读取伪模态视图时,文件名、位姿、内参都从原 RGB 视图的同一索引取,只是把根目录换成对应模态的目录。

代码:伪模态视图的读取(官方 gluefactory/datasets/megadepth.py,原文节选)
    def _read_view2(self, scene, idx, png=False):
        path = self.multi_model_root / self.images[scene][idx]

        # read pose data
        K = self.intrinsics[scene][idx].astype(np.float32, copy=False)
        T = self.poses[scene][idx].astype(np.float32, copy=False)

        # read image
        if self.conf.read_image:
            if png:
                name = self.images[scene][idx].replace('jpg', 'png')
            else:
                name = self.images[scene][idx].replace('png', 'jpg')

            img = load_image(self.multi_model_root / name, self.conf.grayscale)


        else:
            size = PIL.Image.open(path).size[::-1]

2.2 数据引擎:六种伪模态怎么造

论文的生成器选择遵循一个原则:能直接用现成模型就用现成模型,只有红外这种“RGB 到热成像”跨得太大、现成模型效果差的,才用真实配对数据微调。具体配置如下。

目标模态生成器是否需要真实引导对关键设置
红外(Infrared)StyleBooth[12] + LoRA[13]是,LLVIP + M3FD 的 80%LoRA rank 256,,210k steps,lr ,batch 2,单卡
深度(Depth)DepthAnything V2-L[14]否单目相对深度,按 Spectral_r 色图归一化到 0–255
法向(Normal)DSINE[15]否逐像素射线方向,估计表面法向
事件(Event)物理模拟器否对数亮度差,阈值 ,随机 1–3 px 位移
油画(Paint)PaintTransformer[16]否前馈笔画预测
素描(Sketch)Anime2Sketch[17]否CLAHE clip 10,load size 1024

红外。 这是唯一需要“学风格”的模态。论文用 StyleBooth 作为底座:它原本是多模态指令驱动的风格编辑扩散模型,作者用 LLVIP[18] 和 M3FD[19] 中 80% 的对齐 RGB-IR 对微调,让模型学会“把可见光照片变成热成像外观”,剩下 20% 作为生成质量测试。LoRA rank 256 是在单卡上能承受的容量; 是生成分辨率,保证后续匹配时细节不糊。图 3 是数据引擎的示例:同一张照片被转成红外、深度、事件、法向、素描、油画六种外观。

数据引擎的六种伪模态示例
图 3同一张 RGB 图(左)与六种伪模态。注意它们都保持同一构图和同一像素网格;深度、法向、事件、油画、素描是现成模型直接生成,红外是微调后的扩散模型生成。

深度与法向。 这两个模态直接调用现成模型。深度用 DepthAnything V2 的大模型,输出单目相对深度,再归一化并用 Spectral_r 上色。这里要区分两件事:伪深度图的像素值只是相对深度的可视化,不是米制深度;训练时用的深度标签仍然是 MegaDepth 提供的原深度图。法向用 DSINE,它把表面法向估计写成逐像素射线方向之间的相对旋转,输出的 RGB 三通道分别编码法向的三个分量。两者都不需要真实引导对,因为单目深度/法向估计的零样本能力已经足够好。

事件。 事件相机不是记录亮度,而是记录亮度变化。论文用式 (1) 的简化模型:

其中 是对数亮度, 是时间对比阈值, 是极性。代码里对 Log 亮度图做随机位移(1–3 px)来模拟轻微运动,然后逐像素比较位移前后的亮度差:超过 记红色,低于 记蓝色,其余保持白色。这解释了一个重要细节:伪事件图与 RGB 不是严格逐像素对齐的,随机位移最多带来几个像素的偏移;论文把它当作传感器噪声/增强,而不是精确几何。这一点在局限里还会提到。

代码:事件模拟器(官方 data_engine/tools/event/event_transfer.py,原文照录)
def random_shift(shift_min, shift_max):
    range_choice = random.choice([(shift_min, shift_max), (-shift_max, -shift_min)])
    return random.randint(*range_choice)


def event_transfer_single(image_path, contrast_min=0.05, contrast_max=0.5, shift_min=1, shift_max=3):
    gray_img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE).astype(np.float32)
    gray_img_log = np.log1p(gray_img)

    contrast_threshold = random.uniform(contrast_min, contrast_max)

    xshift = random_shift(shift_min, shift_max)
    yshift = random_shift(shift_min, shift_max)

    pic_shape = [gray_img.shape[0], gray_img.shape[1], 3]
    img = np.full(pic_shape, [255, 255, 255], dtype=np.uint8)

    for i in range(abs(yshift), gray_img.shape[0] - abs(yshift)):
        for j in range(abs(xshift), gray_img.shape[1] - abs(xshift)):
            delta_L = gray_img_log[i + yshift, j + xshift] - gray_img_log[i, j]
            if delta_L > contrast_threshold:
                img[i, j] = [255, 0, 0]
            elif delta_L < -contrast_threshold:
                img[i, j] = [0, 0, 255]

    return img

油画与素描。 这两个“艺术模态”不是物理传感器,但论文仍然加进来,目的是测试数据引擎是否只对“物理模态”有效。PaintTransformer 用前馈网络预测笔画,Anime2Sketch 把照片转成线稿。它们与 RGB 的差距比红外/深度小,所以后面的实验里增益也最小,甚至个别指标会掉——这符合直觉:如果新模态没有提供新的几何/外观变化,数据引擎就只是在重复 RGB 信息。

深度生成的实现。 深度转换只有“推理 + 归一化 + 上色”三步,没有任何训练;这也是数据引擎“便宜”的来源之一。

代码:深度伪模态生成(官方 data_engine/tools/depth/depth_transfer.py,原文节选)
def process_image(image, model):
    depth = model.infer_image(image)  # HxW raw depth map in numpy
    cmap = matplotlib.colormaps.get_cmap('Spectral_r')

    depth = (depth - depth.min()) / (depth.max() - depth.min()) * 255.0
    depth = depth.astype(np.uint8)

    depth_colored = (cmap(depth)[:, :, :3] * 255)[:, :, ::-1].astype(np.uint8)
    return depth_colored

红外生成质量。 论文在 LLVIP、M3FD、MSRS 三个数据集上,把生成的伪红外和真实红外对比(表 A1)。PSNR 都在 27.8–28.3 dB 之间,差距不到 0.5 dB,说明逐像素亮度并不是这项任务的关键;更有区分度的是结构/感知指标:LLVIP 上本方法的 SSIM 是 0.55,CPSTN[20] 是 0.32,XoFTR 是 0.29;LPIPS 是 0.42,对手是 0.66/0.71;FID 是 145.93,对手是 303.55/204.44。M3FD 上 SSIM 0.53 对 0.37/0.33,FID 119.96 对 161.71/125.07。MSRS 上优势缩小(SSIM 0.19 对 0.15/0.16,FID 161.37 对 204.37/167.39),说明跨数据集时红外生成仍然吃风格差异。

红外生成与 CPSTN、XoFTR 的定性对比
图 4MSRS 上的红外生成。第一列 RGB,第二列真实红外,后三列分别是 XoFTR、CPSTN 和本方法的伪红外。本方法的结构更锐利、 hallucination 更少,但仍然是“看起来像红外”的灰度图,不是有热物理约束的真实热成像。

数据清洗。 生成模型可能产生几何畸变或错误内容,所以论文做了一个自检:对每个 RGB 图和它的伪模态图,用已经在目标模态上微调过的匹配模型估计单应,真值应当是单位矩阵;如果四个角点的平均投影误差超过 10 px,就判为脏数据丢弃。最终训练集只丢了 0.91% 的匹配对。这个比例很低,一方面说明生成器大多保持了构图,另一方面也说明清洗只抓“大畸变”,抓不到细微的语义 hallucination。

2.3 MD-syn:480M 对与它的真实含义

MD-syn 的规模来自一个简单的乘法:MegaDepth 有 40M 个 RGB 对,每个对生成 6 种伪模态、两个方向(RGB→伪模态、伪模态→RGB),总共 480M 个跨模态对。数据集包含 196 个户外场景、7 种模态(RGB + 6 种伪模态),标签是深度和位姿。和表 1 里的真实数据集相比,它的“对数量”高出一个到五个数量级,但场景数仍然是 MegaDepth 的 196 个。

数据集对数场景数(类型)模态数标签形式
MegaDepth40M196(室外)1深度、位姿
ScanNet230M1513(室内)1深度、位姿
METU-VisTIR2.5K6(室外)2位姿
M3FD4.2K15(室外)2预对齐
LLVIP15K26(室外)2预对齐
DIODE25K20(室内外)3预对齐
NYU-Depth V2408K464(室内)2预对齐
DVS1281.3K122(室内)2预对齐
MD-syn(本文)480M196(室外)7深度、位姿

这张表里最该被记住的不是 480M,而是最后一行的“196”。480M 是 40M × 6 × 2 的配对数,不是 480M 张独立照片,也不是 480M 个独立场景。同一个 RGB 对的 12 个跨模态变体共享同一套几何,相关性极高;数据引擎扩的是模态覆盖,不是场景覆盖。论文自己在表 1 里也把 196 个场景原样列出,这一点是诚实的。

另一个容易误解的地方是训练用了多少。MD-syn 有 6 种目标模态,但最终发布的统一模型只用了 RGB-IR、RGB-Depth、RGB-Normal 三种(约 240M 个潜在对);Event、Sketch、Paint 被留作零样本测试。配置文件里的 modality 列表写得很清楚:

代码:LightGlue 版训练配置(官方 train_orders/minima_lightglue_train_config.yaml,原文照录)
MINIMA_LIGHTGLUE:
  dataset:
    #    modality: [ 'visible', 'infrared', 'depth', 'event', 'normal', 'sketch', 'paint' ]
    modality: [ 'visible', 'infrared', 'depth', 'normal' ]


  train:
    lr_scale: 1.0
    experiment: minima_lightglue
    # else config please change in MINIMA/third_party/glue_factory_minima/gluefactory/configs/superpoint+lightglue_megadepth.yaml
    load_feature: false

  weight:
    pre_trained: true
    pre_trained_path: './weights/superpoint_lightglue.pth'
    resume_from_checkpoint: false # if true, load the model from the checkpoint in experiment folder

数据集采样时,每个样本随机选一种目标模态和一个方向。代码里的 reverse_mode 控制谁是 RGB、谁是伪模态;multi_model 从 modal_options 里抽。这个随机化是“统一模型”的关键:同一个网络在每次迭代看到不同的模态组合,而不是为每种模态训练一个单独的分支。

代码:随机模态与方向采样(官方 gluefactory/datasets/megadepth.py,原文节选)
    def getitem(self, idx):
        reverse_mode = self.local_random_1.randint(0, 1)  # 0: visible-infrared, 1: infrared-visible
        self.multi_model = self.local_random_2.choice(self.modal_options)
        self.multi_model = str(self.multi_model).strip().strip('"').strip("'")
        try:
            self.multi_model_root = self.modality_to_root[self.multi_model]
        except KeyError:
            raise ValueError(f"Unknown multi_model: {self.multi_model}")
        if self.conf.views == 2:
            idx = idx // 2
            if isinstance(idx, list):
                scene, idx0, idx1, overlap = idx
            else:
                scene, idx0, idx1, overlap = self.items[idx]

            print('multi_model:', self.multi_model, 'reverse_mode:', reverse_mode)
            if reverse_mode:
                if self.multi_model in ['infrared', 'depth', 'normal', 'paint', 'sketch']:
                    data0 = self._read_view(scene, idx0)
                    data1 = self._read_view2(scene, idx1, png=False)
                elif self.multi_model in ['event']:
                    data0 = self._read_view(scene, idx0)
                    data1 = self._read_view2(scene, idx1, png=True)
                elif self.multi_model == 'visible':
                    data0 = self._read_view(scene, idx0)
                    data1 = self._read_view(scene, idx1)
                else:
                    raise ValueError(f"Unknown multi_model: {self.multi_model}")
            else:
                if self.multi_model in ['infrared', 'depth', 'normal', 'paint', 'sketch']:
                    data0 = self._read_view2(scene, idx0, png=False)
                    data1 = self._read_view(scene, idx1)
                elif self.multi_model in ['event']:
                    data0 = self._read_view2(scene, idx0, png=True)
                    data1 = self._read_view(scene, idx1)
                elif self.multi_model == 'visible':
                    data0 = self._read_view(scene, idx0)
                    data1 = self._read_view(scene, idx1)
                else:
                    raise ValueError(f"Unknown multi_model: {self.multi_model}")

下面这个部件把“数据账本”做成可拖的:源 RGB 对数 和目标模态数 决定总配对数 。默认 40M × 6 正好是论文的 480M;把 拉到 3,就得到最终模型实际使用的约 240M。

模态差距有多大。 图 5 是论文附录里的像素强度统计:沿同一行画 RGB、红外、深度、事件、法向、油画、素描的强度曲线。RGB 曲线有剧烈的纹理波动,红外是一条平滑但完全不同的曲线,深度是分段常数,事件只在边缘处有脉冲,法向和油画/素描又各有自己的统计。这些曲线说明:跨模态匹配不是“加一点颜色扰动”,而是输入分布的整体改变;也说明为什么只在 RGB 上训练的 LightGlue 会在深度上跌到 2.87。

六种伪模态的像素强度统计
图 5沿同一行像素的强度曲线(图像来自数据引擎的示例)。RGB 的纹理波动在红外里消失,深度呈分段常数,事件只在亮度变化处有脉冲。跨模态匹配要跨越的是这种整体分布差异,而不是简单的颜色偏移。

2.4 模态不变训练:只微调,不改结构

论文的训练分两阶段:

  • Stage 1:在 RGB 多视图数据上预训练到收敛。 直接使用 LightGlue、LoFTR、RoMa 的官方权重,不重新训练。
  • Stage 2:在随机采样的跨模态对上用小学习率微调。 每个 iteration 随机选一种模态和一个方向,目标函数用各底座原来的匹配损失,不额外加模态分类/对抗/不变性损失。

为什么不在 MD-syn 上从零训练?论文给了两个理由。第一,不同模态之间的方差太大,从零训练需要很多迭代才能收敛;第二,RGB 预训练已经提供了很好的边缘/纹理先验,微调可以快速把匹配头“掰”到跨模态分布上。图 6 的曲线很直观:从零训练(蓝线)的 loss 从 2.2 开始,前 10 个 epoch 快速降到 1.0 附近,之后缓慢下降;30 个 epoch 时 AUC@5° 约 14.7。微调(橙线)从 1.0 开始,30 个 epoch 时约 18.7,而且前 5 个 epoch 就拉开了差距。

从零训练与微调的 loss / AUC 曲线
图 6LoFTR 在合成 RGB-IR 上的训练曲线。左图是训练 loss,右图是 AUC@5°。微调不仅收敛更快,最终精度也更高;这就是论文坚持“预训练 + 微调”而不是“从零训练”的直接证据。

三个底座的具体超参:

底座可训练部分学习率epoch分辨率 / batch总 batch(4×3090)
LightGlue只调 LightGlue,SuperPoint 冻结50默认 / —32
LoFTR全部(原 1/10)30640 / 每卡 28
RoMa全部decoder ,encoder 4560(medium)/ 每卡 312

LightGlue 只调匹配头、冻结 SuperPoint,是因为 SuperPoint 在跨模态图像上仍然能提出可匹配的角点(论文引用 MMIM 的结论);LoFTR 和 RoMa 则整体微调,但把学习率降到原来的 1/10,避免把 RGB 预训练的特征完全冲掉。RoMa 只训 4 个 epoch,论文的说法是“它本身的能力已经很强”,不需要长时间微调。

这一节的“所以呢”落在表 6 的消融上(LoFTR 底座,AUC@10):

训练策略合成 RGB-IR真实 RGB-IR真实 RGB-Depth
原始 LoFTR12.586.9415.16
(1) 在合成 IR 上从零训练23.6321.4130.04
(2) 在真实 IR(LLVIP+M3FD)上微调6.289.7832.93
(3) 在合成 IR 上微调29.4329.5539.23
(4) 在合成 Depth 上微调17.3015.1236.06
(5) 在合成 IR/Depth/Normal 上微调32.3630.8444.85

三个结论:

  1. 微调 > 从零训练:(3) 在合成和真实 IR 上都明显高于 (1),说明 RGB 预训练的先验确实有用。
  2. 合成数据 > 小规模真实数据:(3) 在合成/真实 IR 上是 29.43/29.55,而 (2) 只有 6.28/9.78;真实 IR 数据太少,模型记住了 LLVIP/M3FD 的域,反而不会泛化。
  3. 跨模态可以互相迁移:(4) 只在合成深度上训练,却在真实 RGB-IR 上达到 15.12,甚至比 (2) 的真实 IR 微调(9.78)更好;三种模态混合的 (5) 又在三个测试上都最好。这说明数据引擎提供的不是“某种模态的补丁”,而是一种共享的几何监督。

2.5 评测协议:19 个真实 case 加 6 个合成 case

论文的评测范围要分两层看:

  • MD-syn 合成基准:6 个跨模态 case,3 个 in-domain(RGB-IR、RGB-Depth、RGB-Normal,训练时见过),3 个 zero-shot(RGB-Event、RGB-Sketch、RGB-Paint,训练时没见过)。六个 case 共用 MegaDepth 的 2 个测试场景、1500 个图像对。
  • 真实数据:5 个多模态数据集,共 19 个跨模态 case——METU-VisTIR 的 RGB-IR,DIODE 的 RGB-Depth/Normal,DSEC 的 RGB-Event(3 个序列、100 对),MMIM 的 7 个遥感 case 和 6 个医学 case。[21, 22, 23]

评测指标分两类:两视图位姿用 AUC@{5°,10°,20°},单应(homography)用 AUC@{3px,5px,10px}。跨模态评测中所有图像长边统一缩到 640(3.3 的 MegaDepth-1500 回归按原方法用 1200/1600),所有方法用同一套 RANSAC 参数,计时在单张 RTX 3090 上。对于本来就对齐的图像对(DIODE、医学、遥感),评测前会人为加一个单应变换来模拟视角形变,再让方法去恢复,以保证公平。

基线覆盖三类:稀疏(SuperGlue、LightGlue、OmniGlue、GIM-LG、ReDFeat、RIFT/SRIT/LNIFT),半稠密(LoFTR、ELoFTR、XoFTR、GIM-LoFTR),稠密(DKM、GIM-DKM、RoMa)。[7, 8, 24, 25, 26, 3, 2] 所有稀疏方法(包括 MINIMA-LG)用 SuperPoint 提 2048 个关键点。[27]

三、实验结果

3.1 MD-syn:合成基准上的模态差距

先看合成数据。下面的部件让你在同一场景的四种伪模态之间切换,并在 LightGlue 和 MINIMA-LG 之间切换。默认是 RGB-Depth + LightGlue:伪深度图几乎全是错误匹配,柱状图也显示 2.87 对 32.53 的差距。切到 MINIMA-LG,连线会明显变绿——这就是“只换数据、不换网络”带来的变化。

表 2 的完整数字太大,这里只摘出六个代表模型在 AUC@10° 上的结果:

方法RGB-IRRGB-DepthRGB-NormalRGB-EventRGB-SketchRGB-Paint
LightGlue17.732.8724.9322.4044.4727.99
MINIMA-LG30.2432.5337.3336.2745.7132.85
LoFTR12.580.4412.0712.4354.8212.22
MINIMA-LoFTR32.3628.8144.2632.7453.5415.45
RoMa35.9922.7559.4858.8773.9058.36
MINIMA-RoMa40.9448.5864.4861.4874.3057.21

几个值得注意的现象:

  • 深度是最大的短板,也是提升最大的地方。 LightGlue 从 2.87 到 32.53(11.3 倍),LoFTR 从 0.44 到 28.81(65 倍),RoMa 从 22.75 到 48.58(2.1 倍)。深度图没有纹理,只有分段平滑的距离色块;RGB 预训练的纹理匹配器几乎无法工作,而数据引擎补上了这种外观。
  • 红外和事件的提升也很稳定。 LightGlue 的红外 17.73→30.24、事件 22.40→36.27;LoFTR 的事件 12.43→32.74;RoMa 的红外 35.99→40.94、事件 58.87→61.48。
  • 素描和油画的增益最小,甚至为负。 LoFTR 的素描 54.82→53.54,RoMa 的油画 58.36→57.21。论文的解释是这两种艺术模态与 RGB 最接近,没有提供新的模态信息;这反过来支持了“收益来自模态差距”的假设。
  • 排序大体不变,但有交叉。 RoMa 仍是三个底座里最强的,MINIMA 把每个底座都往上推;不过 LightGlue(稀疏)在红外、深度、法向、事件上都强于 LoFTR(半稠密),MINIMA-LG 的深度 32.53 也高于 MINIMA-LoFTR 的 28.81。底座本身的强弱,比“稀疏/半稠密/稠密”这个标签更能决定结果。
  • GIM 的失败很典型。 GIM-LG 在 RGB-Depth 上是 0.00/0.00/0.12(@5/10/20),ReDFeat 在 RGB-Event 上是 0/0/0;在 RGB 视频上做过大规模预训练,并不自动带来跨模态能力。

3.2 真实跨模态基准:19 个 case

真实数据的结果更适合做成浏览器。下面的部件把 METU-VisTIR(位姿 AUC)、DIODE(单应 AUC)、MMIM 零样本(医学/遥感/事件)、MegaDepth-1500(RGB-only 位姿)和 Aachen Day-Night(视觉定位召回)放在一起;选基准、再选指标,MINIMA 的行用主题色标出。默认是 METU-VisTIR 的 AUC@10°,MINIMA-RoMa 排在第一位。

下面把几个最值得说的点展开。

3.2.1 METU-VisTIR:稀疏模型第一次超过专用半稠密

METU-VisTIR 是真实 RGB-IR 数据集,2590 个图像对,带相机位姿。结果(AUC@5°/10°/20°):

  • MINIMA-RoMa:37.45 / 60.70 / 78.00,全场最高;RoMa 底座是 25.61 / 48.12 / 68.37,@5° 提升 46%。
  • MINIMA-LG:19.14 / 37.17 / 55.51;LightGlue 底座是 2.17 / 5.37 / 11.21,@5° 提升 8.8 倍(论文说“超过 400%”,按表算是 782%)。它也超过了专门为 RGB-IR 设计的 XoFTR(18.47 / 34.64 / 51.50),只落后 MINIMA-RoMa。
  • MINIMA-LoFTR:15.61 / 30.84 / 47.87,虽然比 LoFTR(2.88 / 6.94 / 14.95)高很多,但仍低于 XoFTR。论文把原因归结为 LoFTR 底座较老、半稠密相关在无纹理区域不稳定。
  • 手工方法基本失效:RIFT 0.05/0.27/0.90,SRIT 0.00/0.08/0.37,LNIFT 0.02/0.09/0.43;运行时间却是 1.2k–13k ms。这不是同一个时代的方法,放在表里更多是说明“跨模态匹配已经进入数据驱动阶段”。

运行时间方面,MINIMA-LG 58.6 ms 对 LightGlue 57.7 ms,几乎不变;MINIMA-RoMa 633.3 ms 对 RoMa 639.1 ms,也在噪声范围内;MINIMA-LoFTR 71.6 ms 对 LoFTR 61.6 ms,慢约 16%。精度提升没有以吞吐为代价,这是稀疏/稠密两条线的卖点。

3.2.2 DIODE:深度上 RoMa 赢,LoFTR 输给 XoFTR

DIODE 是真实 RGB-Depth 数据集,27858 个对齐对;评测时人为加单应形变,再估计单应,指标是角点误差 AUC@3/5/10px。

  • MINIMA-RoMa 28.98 / 50.88 / 72.54,RoMa 9.21 / 24.64 / 49.31;@3px 提升 3.1 倍,@10px 提升 1.5 倍。
  • MINIMA-LG 8.71 / 26.80 / 55.97,LightGlue 0.79 / 3.30 / 11.26;@5px 提升 8.1 倍。
  • MINIMA-LoFTR 5.35 / 18.65 / 44.85,XoFTR 11.03 / 27.24 / 51.60;三个阈值全输。论文承认这一点:深度数据更难,LoFTR 是“有代表性但老”的模型,没有花哨设计;它把 LoFTR 从 4.20 提到 18.65(@5px),已经是不小的提升,但不足以追上 XoFTR。

这个结果说明“数据引擎”不是万能的:它能补外观分布,但补不了底座架构的天花板。深度图的边缘稀疏、纹理弱,LoFTR 的粗粒度相关在这种输入上吃亏;RoMa 的 DINOv2 特征和稠密回归更适合。选择底座比选择模态更重要。

3.2.3 零样本:遥感有效,医学饱和,事件仍然很难

零样本测试用的是训练时完全没见过的模态:MMIM 的 6 个医学 case、7 个遥感 case,以及 DSEC 的 RGB-Event。[23, 22]

  • 医学:大多数方法 @5px 都落在 42–46,差距很小,SuperGlue(36.18)和 GIM-LG(27.88)是例外。MINIMA-RoMa 的 @10px 是 57.55,RoMa 53.75;MINIMA-LG 52.50,XoFTR 52.32。论文的解释是医学数据要么太简单、要么太难,AUC 已经饱和,提升空间有限。换句话说,这里的“赢”更多是统计波动,不能过度解读。
  • 遥感:这是零样本里最有说服力的部分。MINIMA-RoMa 32.55 / 44.68 / 64.38,RoMa 29.24 / 40.50 / 57.84;MINIMA-LG 23.53 / 38.40 / 58.74,LightGlue 16.22 / 27.51 / 44.62。@10px 上 MINIMA-LG 58.74 甚至略高于 XoFTR 56.63,但 @3/@5px 仍低于 XoFTR(27.35/39.58)。稀疏模型在遥感上的优势主要在宽容差端。
  • RGB-Event:绝对值非常低。MINIMA-RoMa 在 @5/@10px 上最好(3.51 / 17.07),但最严格的 @3px 只有 0.54,还低于 RoMa 的 0.85;RoMa 三项是 0.85 / 1.69 / 10.71,MINIMA-LG 0.52 / 2.27 / 12.82,LightGlue 0.00 / 0.67 / 7.02,XoFTR 0.00 / 1.37 / 12.64。17% 的 @10px 离可用还很远。事件相机的极性、噪声、运动模糊与模拟器差距很大,这是零样本里最薄弱的一环。
MINIMA 在医学、遥感和通用视觉上的匹配结果
图 7医学(左)、遥感(中)和通用视觉(右)上的点匹配与逐像素对齐。每组左半是点匹配、右半是稠密对齐;黄色/橙色线是匹配。医学和遥感的几何结构较规则,MINIMA 能给出较多正确对应;但这也说明它依赖可辨识的结构,遇到事件相机这种极稀疏输入时会明显退化。

3.3 RGB-only 与视觉定位:有没有把老本行弄丢

跨模态微调最直接的风险是“灾难性遗忘”:模型学会了红外/深度,却忘了 RGB。论文在 MegaDepth-1500 上做了回归测试(表 A5),并在 Aachen Day-Night 上做了视觉定位(表 A6)。[28]

模型MegaDepth-1500 AUC@5° / 10° / 20°变化
LightGlue49.9 / 67.0 / 80.1—
MINIMA-LG47.3 / 65.0 / 78.6−2.6 / −2.0 / −1.5
LoFTR53.6 / 69.9 / 82.0—
MINIMA-LoFTR29.9 / 45.3 / 59.5−23.7 / −24.6 / −22.5
RoMa62.6 / 76.7 / 86.3—
MINIMA-RoMa61.7 / 76.5 / 86.4−0.9 / −0.2 / +0.1

结论是高度依赖底座:

  • RoMa 基本无损:三个阈值几乎相同,@20° 甚至高 0.1。这是最理想的情况——跨模态能力是“白送”的。
  • LightGlue 小幅下降:2 分左右,通常可以接受;如果 RGB 是主业务、跨模态是附加需求,这个代价不算大。
  • LoFTR 灾难性回退:从 53.6 掉到 29.9(@5°),几乎腰斩。论文在正文里只说“except for LoFTR”,没有展开;但从表 A5 看,这是 MINIMA 家族最严重的失败模式。可能的原因是 LoFTR 的粗粒度相关层在跨模态分布上被大幅改写,而它本身容量/预训练数据又不如 RoMa,结果两边都没学好。

Aachen Day-Night 的结果则比较温和:MINIMA-LG 在白天 88.3/94.7/98.3、夜晚 85.7/92.9/100.0,LightGlue 是 88.0/93.8/97.5、84.7/91.8/99.0,白天和夜晚都略好。这说明跨模态训练带来的鲁棒性可以迁移到光照变化下的定位,至少对稀疏模型是这样。

3.4 消融:哪些设计真的有用

除了表 6 的训练策略消融,论文还在表 A2 里系统比较了不同模态组合。指标是五个真实跨模态 case(Rel-IR、Rel-Depth、Rel-Event、RS、Medical)的平均 AUC(Rel-IR 用位姿 @10°,其余用单应 @10px):

模型原始仅 IR仅 Depth仅 Normal仅 EventIR+Depth+Normal全部六种
MINIMA-LG23.5540.8140.8640.4735.7543.4443.17
MINIMA-LoFTR25.7936.0832.5136.0931.2439.3339.01
MINIMA-RoMa43.9548.5452.7452.4552.4053.9653.79

这张表有几个值得细看的地方:

  • 单模态就能大幅提升。 LightGlue 只用 IR 微调,平均分从 23.55 到 40.81;只用 Depth 到 40.86;只用 Normal 到 40.47。三种物理模态各自都能把模型拉到一个新台阶,说明它们共享大量几何监督。
  • 组合通常更好,但不是单调的。 LightGlue 的 IR+Depth+Normal(43.44)比单模态高,但“全部六种”(43.17)反而略低;LoFTR 的 IR+Depth+Normal(39.33)甚至低于 IR+Depth+Normal+Event(39.93,论文表 A2 有这一行,本文的表未列),全部六种只有 39.01;RoMa 的 IRDN(53.96)是三个模型里最高的,全部六种(53.79)略低。论文的结论“IR/Depth/Normal 组合最好,所以选它作为最终模型”对 LightGlue 和 RoMa 成立,对 LoFTR 只是近似(IR+D+N+Event 更高)。作者仍然统一发布 IRDN 版本,我猜是为了部署一致性;论文没有解释 LoFTR 的这个例外。
  • 艺术模态的收益最小。 Paint/Sketch 与 RGB 太接近,提供的新信息有限;这也解释了表 2 里素描/油画指标提升小甚至为负。

另一个消融是“数据规模 vs 真实数据”。表 6 的 (2) 和 (3) 已经说明,用 10K 级真实 IR 对微调,效果远不如用 480M 级合成 IR;但要注意,这不是“合成一定优于真实”的普适结论,而是“在这个任务上,数据规模比数据真实性更重要”。如果真实数据足够大、覆盖足够广,真实数据的上限会更高。

3.5 定性结果

真实跨模态图像对上的匹配结果
图 8六行分别是 RGB-IR、RGB-Depth、RGB-Event、Optical-SAR、Optical-Map、Retina;五列分别是 ReDFeat、OmniGlue、XoFTR、MINIMA-LG、MINIMA-RoMa。绿色是正确匹配,红色是错误匹配;每幅图左上角还标了平均距离和正确数/总数。MINIMA-RoMa 的稠密匹配几乎铺满整幅图,MINIMA-LG 的稀疏匹配数量少但正确率更高;ReDFeat 和 OmniGlue 在多数跨模态行上大面积飘红。

图 8 里最值得注意的是“稠密 vs 稀疏”的差异:MINIMA-RoMa 在每个模态上都能给出成千上万个对应点,绿色线条覆盖了建筑、道路、树木、血管等结构;MINIMA-LG 只给 2048 个关键点的匹配,数量少,但在纹理清晰的区域正确率很高。这不是说稠密一定更好:稠密匹配的离群点也更密集,RANSAC 的压力更大;但在跨模态这种“纹理可能消失”的场景里,稠密对应提供的冗余确实能救回一些稀疏检测器漏掉的结构。

四、局限性

4.1 论文承认的两点

论文在第 5.6 节列了两条可能的局限:

  1. 真实模态与伪模态之间的差距:生成图再像,也不是真实传感器输出;热成像的物理特性、事件的噪声模型、深度的传感器误差都没有被精确建模。
  2. 生成过程中的虚假信息:扩散模型可能“编”出原图没有的结构,深度/法向模型也可能在弱纹理处产生平滑的错误。

论文的回应是:多模态图像本来就在像素强度分布上差异巨大(图 5),这种差异正是训练通用匹配器所需要的;虚假信息可以看作一种数据增强,例如“红外里可见、RGB 里不可见”的目标,反而能提高鲁棒性。这个论证有道理,但它更多是“不会更糟”的定性辩护,缺少对虚假信息数量和影响的定量分析。

4.2 我自己再补几条

第一,模态覆盖被标题高估了。 论文的标题是“Modality Invariant”,结论说“for any cross-modal cases”,但数据引擎实际只生成 IR、Depth、Normal、Event、Paint、Sketch 六种;医学和遥感是零样本评测,不是生成/训练模态。SAR、CT/PET/SPECT、光学地图这些模态没有被合成,也没有被训练。零样本结果里医学基本饱和、事件绝对值很低,说明“任意模态”目前还是一个外推,而不是已验证的结论。

第二,场景覆盖仍然是 196 个户外场景。 480M 对来自 MegaDepth 的 196 个室外场景,数据引擎没有专门采集室内、驾驶或夜间数据(Aachen 只用于定位评测)。真实部署如果在室内、医学、遥感,几何结构和光照都不同;论文的零样本结果只能说明“有一定迁移”,不能说明“可以直接用”。

第三,480M 的“规模”要打折看。 它是 40M × 6 × 2 的配对数,同一个 RGB 对的 12 个变体共享几何,相关性极高;独立场景数没有变,独立图像数也远小于 480M。数据引擎扩的是模态,不是场景。存储 129 GB、红外生成 210k 步扩散、训练 4×3090,这些成本也不低;“cheap”是相对于“野外采集多传感器数据”而言的,不是零成本。

第四,模型相关性被正文轻描淡写。 MINIMA-LoFTR 在 MegaDepth-1500 上从 53.6 崩到 29.9,这不是小回退,而是灾难性遗忘。论文正文只说“except for LoFTR”,没有解释原因,也没有给缓解方案。实践上,如果你既要做跨模态又要保留 RGB 性能,应该优先选 RoMa 或 LightGlue,而不是 LoFTR。

第五,事件模拟器的像素偏移没有被量化。 代码用 1–3 px 的随机位移计算亮度差,所以伪事件图与 RGB 不是严格逐像素对齐;论文把它当作“轻微运动”,但没有说明这对标签继承和多模态配准的影响。对于 640 分辨率、3 px 的误差大约相当于 0.5% 的图像宽度,可能不大,但在高精度匹配里不能忽略。

第六,评测的统计强度有限。 METU-VisTIR 只有 2590 对、6 个场景;DSEC 只选了 3 个序列、100 对;医学/遥感是 MMIM 的小规模 case;论文没有报告多次运行的方差或置信区间。AUC 小数点后两位的差异,很多可能在噪声范围内。特别是医学,作者自己也说“数据集要么太简单要么太难”。

第七,基线停留在 2024 年。 论文没有和 MASt3R、UFM、RoMa v2 这些更新的匹配器比较;当然,这些工作有的是同期或后续,不能强求。但如果今天要选型,应该把 MINIMA 的微调 recipe 应用到更新的底座上,而不是只看论文里的 LoFTR/RoMa 数字。

第八,许可需要逐个确认。 代码仓库是 Apache-2.0,但 MINIMA_LG 使用的 SuperPoint 是“学术/非商业”限制性许可;MD-syn 在 Hugging Face 上标的是 Apache-2.0,但它由 MegaDepth 图像生成,MegaDepth 原始数据的条款可能仍然适用;METU-VisTIR、DIODE、DSEC、MMIM 也各有自己的许可。商用前要逐项确认,不能只看仓库根目录的 LICENSE。

五、结论与展望

MINIMA 的故事线很清楚:当网络架构已经足够好时,数据是更便宜的杠杆。 它没有提出新的注意力、新的损失或新的匹配头,而是把“模态”当成一种可以生成的数据增强:保留 RGB 的几何和标签,用生成模型替换外观,再用这些配对去微调现成的匹配器。这个思路的可迁移性很强——任何有 RGB 匹配数据、又有目标模态生成器的场景,都可以套用。

给实践者的几条建议:

  1. 先试微调,不要从零训练。 论文的曲线和消融都说明,RGB 预训练 + 小学习率微调 > 从零训练;从零训练需要更多数据、更多迭代,还不一定更好。
  2. 底座选择比模态选择更重要。 RoMa 在跨模态和 RGB-only 上都稳;LightGlue 快、代价小;LoFTR 在 RGB-only 上会崩,除非你确定不需要保留 RGB 能力,否则不要选。
  3. 合成数据是“预训练/冷启动”,不是“真实数据替代品”。 先在合成数据上微调,再用少量真实目标模态数据做验证/二阶段微调,通常比只用合成数据稳。
  4. 不要相信“任意模态”。 先确认你的目标模态是否在生成器覆盖范围内;如果不在(SAR、医学、事件),零样本结果只能作为参考,必须用真实数据验证。
  5. 算清数据账。 480M 对不是 480M 个独立样本;存储、生成、训练都有成本。如果目标只是某一个模态,生成一种模态(2×40M=80M 对)可能就够了,不必上全部六种。

未来的方向也很自然:更物理的生成器(SAR、医学、事件噪声模型)、几何一致的生成(深度/法向/事件与 RGB 的像素级一致性)、更强的底座(MASt3R/UFM/RoMa v2)、以及把“模态不变性”从数据分布变成显式的训练信号。如果这些方向能补齐,MINIMA 的“数据引擎”就不只是一种工程 trick,而会成为跨模态匹配的标准基础设施。

六、上手

官方仓库提供了完整的数据引擎、训练代码、评测脚本和五个模型的权重。下面只列最小可用路径;更细的说明见 data_engine/README.md 和 train_orders/README.md。

6.1 安装

README 的 clone 命令少了一个 clone(原文是 git https://github.com/LSXI7/MINIMA.git),照抄会报错;下面补上。RoMa 子模块还需要一行 typing.Tuple 的兼容补丁,这是 README 明确要求的。

安装命令(Python 3.8 + CUDA 11.7)
git clone https://github.com/LSXI7/MINIMA.git
cd MINIMA
conda env create -f environment.yaml
conda activate minima

git submodule update --init --recursive
git submodule update --recursive --remote
sed -i '1s/^/from typing import Tuple as tuple\n/' third_party/RoMa_minima/romatch/models/model_zoo/__init__.py
下载权重(五个模型,放到 weights/)
bash weights/download.sh

6.2 最小示例

demo.py 接收两张图,用 --method 选择 sp_lg、loftr、roma 等,输出匹配可视化。

单对图像推理
python demo.py --method sp_lg --fig1 demo/vis_test.png --fig2 demo/depth_test.png --save_dir ./demo

参数和论文概念的对应:--method sp_lg 对应 MINIMA-LG(SuperPoint + LightGlue),loftr 对应 MINIMA-LoFTR,roma 对应 MINIMA-RoMa;--ckpt 可以换自定义权重,默认从 weights/ 读取。输入图像不需要预先对齐,demo 会做缩放和预处理;如果要复现论文的跨模态评测,应该用下面的评测脚本,而不是 demo。

6.3 评测

真实数据和 MD-syn 的评测脚本是分开的。METU-VisTIR 用位姿指标,DIODE/事件/MMIM 用单应指标,MD-syn 用位姿指标。--method 可取 sp_lg、loftr、roma、xoftr(最后一个是 XoFTR 基线);--ckpt 不填时用 load_model.py 里的默认权重路径(如 ./weights/minima_lightglue.pth),MMIM 的 --choose_model 0/1 对应医学/遥感。

真实跨模态评测(RGB-IR / Depth / Event / MMIM)
python test_relative_pose_infrared.py --method <method> --ckpt <model_path> --save_figs --save_dir <save_dir>
python test_relative_homo_depth.py    --method <method> --ckpt <model_path> --save_figs --save_dir <save_dir>
python test_relative_homo_event.py    --method <method> --ckpt <model_path> --save_figs --save_dir <save_dir>
python test_relative_homo_mmim.py     --method <method> --ckpt <model_path> --choose_model 0/1 --save_figs --save_dir <save_dir>
MD-syn 与原始 MegaDepth-1500 评测
python test_relative_pose_mega_1500_syn.py --method <method> --ckpt <ckpt> --multi_model <modality>
python test_relative_pose_mega_1500.py     --method <method> --ckpt <model_path>
# --multi_model 可选:infrared, depth, event, normal, sketch, paint

数据准备的关键是目录结构:data/METU-VisTIR/、data/DIODE/val/、data/DSEC/、data/Multi-modality-image-matching-database-metrics-methods/,以及 data/megadepth/train/[modality]/Undistorted_SfM/ 和 data/megadepth/test/Undistorted_SfM/。MegaDepth-1500 需要原版测试集,MD-syn 的伪模态从 OpenXLab 或 Hugging Face 下载;两个来源都提供了完整脚本。

6.4 训练

训练代码按三个底座分开维护,环境和索引格式各不相同。以 LightGlue 为例:先准备 MegaDepth 的 scene_info 索引,再把 data/megadepth/train/* 软链到 third_party/glue_factory_minima/data/megadepth/,最后跑脚本。

LightGlue 版训练(索引 + 软链 + 启动)
# 索引
tar xf scene_info.tar.gz -C ./third_party/glue_factory_minima/data/megadepth/
python train_orders/lightglue_index_preparation.py

# 软链(路径按你的数据位置改)
ln -s /path/to/MINIMA/data/megadepth/train/* ./third_party/glue_factory_minima/data/megadepth/

# 训练
bash train_orders/minima_lightglue.sh

LoFTR 和 RoMa 的流程类似,但索引文件不同:LoFTR 用 Google Drive 上的 megadepth_indices.tar,RoMA 用 prep_scene_info.tar。README 里 RoMA 的索引脚本写成了 train_order/roma_index_preparation.py(少了一个 s),实际文件是 train_orders/roma_index_preparation.py。

LoFTR / RoMA 版训练(命令汇总)
# LoFTR
tar xf megadepth_indices.tar -C tmp_unpack
mv tmp_unpack/megadepth_indices/* ./third_party/LoFTR_minima/data/megadepth/
python train_orders/loftr_index_preparation.py
bash train_orders/minima_loftr.sh

# RoMA
tar xf prep_scene_info.tar -C ./third_party/roma_minima/data/megadepth/
python train_orders/roma_index_preparation.py
bash train_orders/minima_roma.sh

6.5 权重协议与许可

  • 权重:minima_lightglue.pth、minima_loftr.ckpt、minima_roma.pth、minima_eloftr.ckpt、minima_xoftr.ckpt,可从 Google Drive 或 GitHub Releases 下载,weights/download.sh 会自动拉取。
  • 代码:Apache-2.0。
  • SuperPoint:MINIMA_LG 用它做关键点检测,SuperPoint 的许可只允许学术/非商业用途;商用要替换检测器或单独谈许可。
  • 数据集:MD-syn 在 Hugging Face 上标 Apache-2.0、约 129 GB、4,836 行;但它由 MegaDepth 图像生成,MegaDepth 原始条款、以及 METU-VisTIR/DIODE/DSEC/MMIM 的条款都需要单独确认。

参考

  1. Ren, Jiang, Li, Liang, Zhou, Bai. MINIMA: Modality Invariant Image Matching. CVPR 2025, pp. 23059–23068. arXiv · 代码
  2. Li, Hu, Ai. RIFT: Multi-Modal Image Matching Based on Radiation-Variation Insensitive Feature Transform. IEEE Transactions on Image Processing, 29:3296–3310, 2020. DOI
  3. Deng, Ma. ReDFeat: Recoupling Detection and Description for Multimodal Feature Learning. IEEE Transactions on Image Processing, 2023. arXiv
  4. Tuzcuoğlu, Köksal, Sofu, Kalkan, Alatan. XoFTR: Cross-modal Feature Matching Transformer. CVPR Workshops 2024. arXiv · 代码
  5. Li, Snavely. MegaDepth: Learning Single-View Depth Prediction from Internet Photos. CVPR 2018. arXiv · 代码
  6. Dai, Chang, Savva, Halber, Funkhouser, Nießner. ScanNet: Richly-Annotated 3D Reconstructions of Indoor Scenes. CVPR 2017. arXiv · 代码
  7. Sarlin, DeTone, Malisiewicz, Rabinovich. SuperGlue: Learning Feature Matching with Graph Neural Networks. CVPR 2020. arXiv · 代码
  8. Lindenberger, Sarlin, Pollefeys. LightGlue: Local Feature Matching at Light Speed. ICCV 2023. arXiv · 代码
  9. Sun, Shen, Wang, Bao, Zhou. LoFTR: Detector-Free Local Feature Matching with Transformers. CVPR 2021. arXiv · 代码
  10. Edstedt, Athanasiadis, Wadenbäck, Felsberg. DKM: Dense Kernelized Feature Matching for Geometry Estimation. CVPR 2023. arXiv · 代码
  11. Edstedt, Sun, Bökman, Wadenbäck, Felsberg. RoMa: Robust Dense Feature Matching. CVPR 2024. arXiv · 代码
  12. Han, Mao, Jiang, Pan, Zhang. StyleBooth: Image Style Editing with Multimodal Instruction. ICCV Workshops 2025. arXiv
  13. Hu, Shen, Wallis, Allen-Zhu, Li, Wang, Wang, Chen. LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022. arXiv · 代码
  14. Yang, Kang, Huang, Zhao, Xu, Feng, Zhao. Depth Anything V2. NeurIPS 2024. arXiv · 代码
  15. Bae, Davison. Rethinking Inductive Biases for Surface Normal Estimation. CVPR 2024. arXiv · 代码
  16. Liu, Lin, He, Li, Deng, Li, Ding, Wang. Paint Transformer: Feed Forward Neural Painting with Stroke Prediction. ICCV 2021. arXiv · 代码
  17. Xiang, Liu, Yang, Zhu, Shen, Allebach. Anime2Sketch: A Sketch Extractor for Anime Arts with Deep Networks. GitHub project, 2021. 代码
  18. Jia, Zhu, Li, Tang, Liu, Zhou. LLVIP: A Visible-Infrared Paired Dataset for Low-Light Vision. ICCV Workshops 2021. arXiv · 代码
  19. Liu, Fan, Huang, Wu, Liu, Zhong, Luo. Target-Aware Dual Adversarial Learning and a Multi-Scenario Multi-Modality Benchmark to Fuse Infrared and Visible for Object Detection. CVPR 2022. arXiv · 代码
  20. Wang, Liu, Fan, Liu. Unsupervised Misaligned Infrared and Visible Image Fusion via Cross-Modality Image Generation and Registration. IJCAI 2022, pp. 3508–3515. arXiv · 代码
  21. Vasiljevic, Kolkin, Zhang, Luo, Wang, Dai, Daniele, Mostajabi, Basart, Walter, Shakhnarovich. DIODE: A Dense Indoor and Outdoor DEpth Dataset. arXiv 2019. arXiv
  22. Gehrig, Aarents, Gehrig, Scaramuzza. DSEC: A Stereo Event Camera Dataset for Driving Scenarios. IEEE Robotics and Automation Letters, 2021. arXiv · 代码
  23. Jiang, Ma, Xiao, Shao, Guo. A Review of Multimodal Image Matching: Methods and Applications. Information Fusion, 73:22–71, 2021. DOI
  24. Jiang, Karpur, Cao, Huang, Araujo. OmniGlue: Generalizable Feature Matching with Foundation Model Guidance. CVPR 2024. arXiv · 代码
  25. Shen, Cai, Yin, Müller, Li, Wang, Chen, Wang. GIM: Learning Generalizable Image Matcher From Internet Videos. ICLR 2024. arXiv · 代码
  26. Wang, He, Peng, Tan, Zhou. Efficient LoFTR: Semi-Dense Local Feature Matching with Sparse-Like Speed. CVPR 2024. arXiv · 代码
  27. DeTone, Malisiewicz, Rabinovich. SuperPoint: Self-Supervised Interest Point Detection and Description. CVPR Workshops 2018. arXiv · 代码
  28. Sattler, Maddern, Toft, Torii, Hammarstrand, Stenborg, Safari, Okutomi, Pollefeys, Sivic, Kahl, Pajdla. Benchmarking 6DOF Outdoor Visual Localization in Changing Conditions. CVPR 2018, pp. 8601–8610. CVF

Comments