ECCV 2026 / 特征匹配 / ONNX部署 / GPU加速
在工业视觉检测中,模板匹配是最基础也最关键的任务。给定一张模板图和一张检测图,找到它们之间的对应关系,从而精确定位零件。
传统 SIFT 面对大角度旋转、低纹理表面时力不从心。RoMa v2 虽然精度高,却对输入宽高比敏感,非正方形输入下容易失真。
2026 年 ECCV 提出的 LoMa-R,在匹配精度上超越 RoMa v2,同时具备旋转不变性,并可导出为 ONNX 实现跨平台部署。
LoMa-R 采用经典的检测-描述-匹配三阶段架构:
图像 A模板图图像 B检测图DaD 检测器VGG11 + 多尺度解码器DaD 检测器共享权重DeDoDe-G 描述子DINOv2 + VGG19DeDoDe-G 描述子共享权重Transformer 匹配器9层 Self-Cross Attention + RoPE关键点 + 描述子 --> 匹配分数矩阵匹配对[(Ai, Bj)]关键点坐标256维描述子
图1: LoMa-R 三组件架构
1. DaD 检测器: 基于 VGG11 的编码器,多尺度解码器生成关键点概率图。默认检测 2048 个关键点。
2. DeDoDe-G 描述子: 融合 DINOv2 ViT-L(1.42 亿图像自监督预训练)和 VGG19 的多尺度特征,生成 256 维密集描述子。
3. Transformer 匹配器: 9 层 Self-Cross Attention,使用 RoPE(旋转位置编码)实现旋转不变性。
LoMa-R 变体说明: "R" 代表 Rotation(旋转不变)。通过 RoPE 和数据增强训练实现,特别适合航拍、遥感等大角度旋转场景。其他变体:LoMa-B(基础)、LoMa-L(大)、LoMa-G(最大精度)。
经典测试图,同一涂鸦墙面从不同角度拍摄,存在明显视角变换和部分遮挡。

图2: LoMa-R 匹配结果 (200条匹配线,颜色=置信度)

图3: SIFT 匹配结果 (521条匹配线)
算法 | 匹配数 | Inlier | 耗时 |
|---|---|---|---|
LoMa-R | 987 | - | 0.91s |
SIFT | 522 | 392 | 0.091s |
两人传球的连续帧,存在运动模糊和物体形变。

图4: LoMa-R 匹配结果 (200条匹配)

图5: SIFT 匹配结果 (350条匹配)
算法 | 匹配数 | 耗时 |
|---|---|---|
LoMa-R | 1508 | 0.32s |
SIFT | 350 | 0.051s |
将一个盒子放入桌面场景中,测试跨场景匹配能力。

图6: LoMa-R 匹配结果 (200条匹配)

图7: SIFT 匹配结果 (80条匹配)
测试结论: LoMa-R 在所有场景下匹配数都是 SIFT 的 2-4 倍,特别是在视角变换和运动模糊场景下优势明显。
三个组件均可导出为 ONNX,实现跨平台部署:
模型 | 文件 | 大小 | 验证 |
|---|---|---|---|
关键点检测器 | dad_detector.onnx | 24.8 MB | diff=0.000007 |
描述子提取器 | dedode_descriptor.onnx | 1.23 GB | diff=0.000003 |
匹配器 | loma_r_matcher.onnx | 45.9 MB | diff=0.000000 |
importonnxruntimeasort
importnumpyasnp
# 加载三个 ONNX 模型
detector = ort.InferenceSession("dad_detector.onnx",
providers=['CUDAExecutionProvider'])
descriptor = ort.InferenceSession("dedode_descriptor.onnx",
providers=['CUDAExecutionProvider'])
matcher = ort.InferenceSession("loma_r_matcher.onnx",
providers=['CUDAExecutionProvider'])
# 第一步: 检测关键点
scoremap = detector.run(None, {"images": img})[0]
# 第二步: 提取描述子
desc_map = descriptor.run(None, {"images": img})[0]
# 第三步: 匹配
scores = matcher.run(None, {
"kpts0": kpts_A, "kpts1": kpts_B,
"desc0": desc_A, "desc1": desc_B,
})[0]测试图 | PyTorch | ONNX GPU | ONNX CPU | 加速比 |
|---|---|---|---|---|
涂鸦墙 | 987 | 988 | 988 | 4.2x |
篮球场景 | 1508 | 1509 | 1510 | 12.8x |
盒子场景 | 336 | 335 | 334 | 12.6x |
立体视觉 | 764 | 767 | 772 | 12.7x |
部署结论: ONNX GPU 推理结果与 PyTorch 完全一致(差异小于5),GPU 加速 4-13 倍,适合生产环境部署。
在工业金属冲压件的真实测试中(模板图 3940x1149,检测图 5472x2648):
指标 | LoMa-R | SIFT | RoMa v2 |
|---|---|---|---|
匹配数 | 1480 | 420 | 60 |
缩放估计 | 1.006 | 1.009 | 0.433 (偏差57%) |
旋转估计 | -0.98 度 | -0.97 度 | -0.52 度 |
推理耗时 | 1.36s | 0.003s | 1.66s |
旋转不变 | 是 | 部分 | 否 |
ONNX GPU | 13倍加速 | 不适用 | 支持 |
RoMa v2 的问题: 当模板图和检测图宽高比差异较大时(如 3940x1149 vs 5472x2648),RoMa v2 的稠密 warp 场会产生严重尺度失真,缩放估计偏差达 57%。
场景 | 推荐方案 | 原因 |
|---|---|---|
实时匹配 (低延迟) | SIFT | CPU 0.05s,零依赖 |
高精度匹配 | LoMa-R | 匹配数最多,旋转不变 |
跨平台部署 | LoMa-R ONNX | GPU加速13倍,精度一致 |
大角度旋转场景 | LoMa-R | 真正的旋转不变性 |
宽高比差异大的输入 | LoMa-R / SIFT | RoMa v2 会失真 |
最佳实践: 对于工业视觉检测场景,LoMa-R + ONNX GPU 是目前最佳的解决方案 -- 结合了高匹配精度和高效的推理速度。
本文基于实际实验数据撰写 LoMa: github.com/davnords/LoMa