🚀 LightGlue
LightGlue是一个用于关键点匹配的模型,通过匹配图像中检测到的两组兴趣点,可实现图像匹配和位姿估计等任务。该模型基于论文提出的创新架构,具有高效、准确且易于训练的特点,适用于计算机视觉中的特征匹配和位姿估计等多种场景。
🚀 快速开始
本模型已使用 PytorchModelHubMixin 集成推送到Hub上。这是一个基于DISK训练的LightGlue变体,具有商业许可,需要安装kornia
,可以使用以下代码与transformers一起使用:
from transformers import LightGlueForKeypointMatching
model = LightGlueForKeypointMatching.from_pretrained("ETH-CVG/lightglue_disk", trust_remote_code=True)
✨ 主要特性
- 高效匹配:该模型可以匹配图像中检测到的两组兴趣点,与 SuperPoint模型 配合使用时,可用于匹配两幅图像并估计它们之间的位姿。
- 自适应计算:LightGlue能够根据问题的难易程度自适应调整计算量,在容易匹配的图像对上推理速度更快。
- 适应性强:适用于各种多视图几何问题,并能处理具有挑战性的真实室内和室外环境。
📦 安装指南
使用此模型需要安装kornia
,并且代码依赖于transformers
库。确保在运行代码前已安装这些依赖项。
💻 使用示例
基础用法
from transformers import AutoImageProcessor, AutoModel
import torch
from PIL import Image
import requests
url_image1 = "https://raw.githubusercontent.com/magicleap/SuperGluePretrainedNetwork/refs/heads/master/assets/phototourism_sample_images/united_states_capitol_98169888_3347710852.jpg"
image1 = Image.open(requests.get(url_image1, stream=True).raw)
url_image2 = "https://raw.githubusercontent.com/magicleap/SuperGluePretrainedNetwork/refs/heads/master/assets/phototourism_sample_images/united_states_capitol_26757027_6717084061.jpg"
image2 = Image.open(requests.get(url_image2, stream=True).raw)
images = [image1, image2]
processor = AutoImageProcessor.from_pretrained("ETH-CVG/lightglue_disk", trust_remote_code=True)
model = AutoModel.from_pretrained("ETH-CVG/lightglue_disk")
inputs = processor(images, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
高级用法
你可以使用LightGlueImageProcessor
中的post_process_keypoint_matching
方法以可读格式获取关键点和匹配结果:
image_sizes = [[(image.height, image.width) for image in images]]
outputs = processor.post_process_keypoint_matching(outputs, image_sizes, threshold=0.2)
for i, output in enumerate(outputs):
print("For the image pair", i)
for keypoint0, keypoint1, matching_score in zip(
output["keypoints0"], output["keypoints1"], output["matching_scores"]
):
print(
f"Keypoint at coordinate {keypoint0.numpy()} in the first image matches with keypoint at coordinate {keypoint1.numpy()} in the second image with a score of {matching_score}."
)
你可以通过将原始图像和输出结果提供给以下方法来可视化图像之间的匹配结果:
processor.plot_keypoint_matching(images, outputs)
📚 详细文档
模型详情
LightGlue模型由苏黎世联邦理工学院(ETH Zurich)的计算机视觉与几何实验室开发,在图像匹配任务中表现出色。它基于SuperGlue的成功,能够对自身预测的置信度进行内省,并根据每对图像的匹配难度调整计算量。该模型的深度和宽度都是自适应的,在推理过程中,如果所有预测都已完成,推理可以在早期层停止;对于被认为无法匹配的点,会在早期步骤中被丢弃。这使得LightGlue比长期占据领先地位的SuperGlue更快、更准确,并且更易于训练。
属性 |
详情 |
模型类型 |
图像匹配 |
训练数据 |
该模型在用于位姿估计的大型标注数据集上进行训练,训练数据包括具有真实对应关系的图像对,以及从真实位姿和深度图中导出的未匹配关键点。 |
模型来源
- 仓库地址:https://github.com/cvg/LightGlue
- 论文地址:http://arxiv.org/abs/2306.13643
- 演示地址:https://colab.research.google.com/github/cvg/LightGlue/blob/main/demo.ipynb
模型用途
LightGlue专为计算机视觉中的特征匹配和位姿估计任务而设计,可应用于各种多视图几何问题,并能处理具有挑战性的真实室内和室外环境。然而,对于需要不同类型视觉理解的任务,如目标检测或图像分类,其性能可能不佳。
🔧 技术细节
训练细节
LightGlue遵循SuperGlue的监督训练设置。首先,它使用从100万张图像中采样的合成单应性进行预训练,这种增强方式提供了完整且无噪声的监督,但需要仔细调整。然后,使用MegaDepth数据集进行微调,该数据集包含100万张众包图像,描绘了196个旅游地标,通过结构光(SfM)恢复相机校准和位姿,并通过多视图立体视觉获取密集深度信息。
训练超参数
速度、大小和时间
LightGlue设计高效,在现代GPU上可以实时运行。对于一对图像,前向传播大约需要44毫秒(22 FPS)。该模型有1370万个参数,与其他一些深度学习模型相比相对紧凑。LightGlue的推理速度适用于实时应用,并且可以轻松集成到现代的同时定位与地图构建(SLAM)或运动结构恢复(SfM)系统中。
📄 许可证
本模型使用的许可证为apache - 2.0,但由于使用了SuperPoint作为关键点检测器,实际使用时受限于“仅限学术或非营利组织非商业研究使用”。
📚 引用
如果你在研究中使用了该模型,请引用以下论文:
@inproceedings{lindenberger2023lightglue,
author = {Philipp Lindenberger and
Paul-Edouard Sarlin and
Marc Pollefeys},
title = {{LightGlue: Local Feature Matching at Light Speed}},
booktitle = {ICCV},
year = {2023}
}
👨💻 模型卡片作者
Steven Bucaille