【AI】使用LoFTR进行图像匹配测试Demo

LoFTR图像匹配的源码解析我们在上篇文章中已经写了,对于怎么试用一下,我这边再啰嗦一下。

0.环境搭建

详细的搭建教程请点击链接查看,这里只对需要特殊注意的地方做阐述
1.创建的Python环境采用python3.8的环境,因为文章发布较早,使用3.10版本测试的时候发现了依赖版本不兼容的问题
2.torch试用whl文件的安装方式比较稳妥,然后在源码requirements.txt中将torch的依赖注释掉,在安装完torch之后使用pip install -r requirements.txt进行安装依赖。

1.运行文件准备

1.下载预训练权重文件,由于我这边使用的是外景图片,所以下载了outdoor的模型文件。
官方提供了下载地址:https://drive.google.com/drive/folders/1DOcOPZb3-5cWxLqn256AhwUVjBPifhuf,需要一点魔法
2.图片文件随便两张带有重叠景象的图片,我这边随便用了两张
3.注意修改demo文件中的权重路径和图片路径

2.运行demo文件

这里我是在模型源码的demo文件夹下面进行的测试,如果在其他路径下需要注意引入路径问题。

import torch
import cv2
import numpy as np
import matplotlib.cm as cm

from src.utils.plotting import make_matching_figure
from src.loftr import LoFTR, default_cfg


if __name__ == '__main__':
    # 根据图片拍摄场景和下载的预训练模型进行选择 可选:indoor、outdoor
    image_type = 'outdoor'
	# 根据个人图片进行修改
    img0_pth = "images/12003890_f6c899bec0_o.jpg"
    img1_pth = "images/13866250_56e0509621_o.jpg"
    image_pair = [img0_pth, img1_pth]

    # The default config uses dual-softmax.
    # The outdoor and indoor models share the same config.
    # You can change the default values like thr and coarse_match_type.
    matcher = LoFTR(config=default_cfg)
    # load中修改预训练模型地址
    if image_type == 'indoor':
        matcher.load_state_dict(torch.load("indoor_ds.ckpt")['state_dict'])
    elif image_type == 'outdoor':
        matcher.load_state_dict(torch.load("outdoor_ds.ckpt")['state_dict'])
    else:
        raise ValueError("Wrong image_type is given.")
    matcher = matcher.eval().cuda()

    # Rerun this cell (and below) if a new image pair is uploaded.
    img0_raw = cv2.imread(image_pair[0], cv2.IMREAD_GRAYSCALE)
    img1_raw = cv2.imread(image_pair[1], cv2.IMREAD_GRAYSCALE)
    img0_raw = cv2.resize(img0_raw, (640, 480))
    img1_raw = cv2.resize(img1_raw, (640, 480))

    img0 = torch.from_numpy(img0_raw)[None][None].cuda() / 255.
    img1 = torch.from_numpy(img1_raw)[None][None].cuda() / 255.
    batch = {'image0': img0, 'image1': img1}

    # Inference with LoFTR and get prediction
    with torch.no_grad():
        matcher(batch)
        mkpts0 = batch['mkpts0_f'].cpu().numpy()
        mkpts1 = batch['mkpts1_f'].cpu().numpy()
        mconf = batch['mconf'].cpu().numpy()

    # Draw
    color = cm.jet(mconf, alpha=0.7)
    text = [
        'LoFTR',
        'Matches: {}'.format(len(mkpts0)),
    ]
    fig = make_matching_figure(img0_raw, img1_raw, mkpts0, mkpts1, color, mkpts0, mkpts1, text)

    # A high-res PDF will also be downloaded automatically.
    make_matching_figure(img0_raw, img1_raw, mkpts0, mkpts1, color, mkpts0, mkpts1, text, path="LoFTR-colab-demo.pdf")


不论是在pycharm中运行,还是使用jupyter进行测试,都可以使用上述代码。

代码会将匹配的图片存在LoFTR-colab-demo.pdf文件中,这个文件地址可以自行修改。

模型结果展示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/291103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023 年最先进认证方式上线,Authing 推出 Passkey 无密码认证

密码并非是当前数字世界才有的安全手段。古今中外诸如故事中的《阿里巴巴与四十大盗》的“芝麻开门”口诀,或是江湖中“天王盖地虎,宝塔镇河妖”等传统的口令形式,都是以密码作为基本形态进行身份认证。然而,随着密码在越来越多敏…

第十四章 14.2案例:使用KVM命令集管理虚拟机

查看命令帮助 [rootLinux01 ~]# virsh -h—————————————————————————————————————————— 查看KVM的配置文件存放目录〈test01 , xml是虚拟机系统实例的配置文件) [rootLinux01 ~]# ls /etc/libvirt/qemu —————————————…

这个方法可以让你把图片无损放大

随着数字技术的不断发展,照片无损放大已经成为了摄影领域中的一项重要技术。照片无损放大能够让摄影师在不损失细节和画质的情况下,将照片放大到更大的尺寸,从而让观众能够更加清晰地欣赏到照片中的每一个细节。 今天推荐的这款软件主要是通…

redis服务迁移数据工具--RDM

一、背景: 在日常的运维工作经常遇见各种数据迁移工作,例如mysql数据库迁移、redis数据库迁移、minio数据迁移等等工作。这里介绍一下redis数据库的迁移过程。 二、迁移思路: redis服务/集群的数据迁移思路是需要新建一个配置、密码一样的re…

T527 camera: AHD摄像头转MIPI

一、AHD 常见的摄像头接口一般有MIPI、USB、DVP等等,但是MIPI摄像头受限于高速信号的传输距离问题,导致走线不能太长,这样在安防监控领域、车载等领域,使用就很受限,因此会引入AHD,目的就是提高了传…

Python 自学(三) 之序列的应用

目录 1. 序列的含义 2. 序列的索引 P80 3. 序列相加 P81 4. 序列乘法 P82 5. in 关键字 P83 6. 计算序列的最大值max(),最小值min()和长度len() P83 7. 列表的初始化 list() P85 8. 列表元素的添加,…

python的课后练习总结4(while循环)

for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行&#xff0c;直到指定的条件不满足为止。 while 条件&#xff1a; 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. i 1while i < 5:print(i)i i 11、使用wh…

多线程基础入门【Linux之旅】——下篇【死锁,条件变量,生产消费者模型,信号量】

目录 一&#xff0c;死锁 1. 死锁的必要条件 2&#xff0c;避免死锁 二&#xff0c;条件变量 同步概念与竞态条件 条件变量——初始化 静态初始化 动态初始化 pthread_cond_destroy (销毁) pthread_cond_wait (等待条件满足) pthread_cond_signal (唤醒线程) ph…

【深度学习:(Contrastive Learning) 对比学习】深入浅出讲解对比学习

对比学习允许模型从未标记的数据中提取有意义的表示。通过利用相似性和不相似性&#xff0c;对比学习使模型能够在潜在空间中将相似的实例紧密地映射在一起&#xff0c;同时将那些不同的实例分开。这种方法已被证明在计算机视觉、自然语言处理 &#xff08;NLP&#xff09; 和强…

见证比亚迪如何引领公交电动化猛进

我刚步入新能源车行业时&#xff0c;电动公交车就已然成为热词。只是当时各家厂商都还在探索阶段&#xff0c;市场环境也不支持电动化模式。如今转眼10年了&#xff0c;见证行业步入快车道。专注此道近10年&#xff0c;我亲身感受到新能源汽车由试验到定型的每一个过程。这次比…

发布订阅模式

1 什么是发布订阅者模式&#xff1a;定义了对象间的一种一对多的关系&#xff0c;让多个观察者对象同时监听某 一个主题对象&#xff0c;当一个对象发生改变时&#xff0c;所有依赖于它的对象都将得到通知。 代码演示&#xff1a;创建一个类&#xff1b;类里面拥有一…

Prometheus配置Grafana监控大屏

简介 Grafana是一个跨平台的开源的度量分析和可视化工具&#xff0c;可以通过将采集的数据查询然后可视化的展示&#xff0c;并及时通知。 主要特点 展示方式&#xff1a;快速灵活的客户端图表&#xff0c;面板插件有许多不同方式的可视化指标和日志&#xff0c;官方库中具有丰…

RK3568驱动指南|第九篇 设备模型-第106章 为什么注册总线之前要先注册设备实例分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

数据分析可被划分为4个重要的类别

1、描述型&#xff1a;发生了什么&#xff1f; 全面、准确、实时的数据有效的可视化 2、诊断型&#xff1a;为什么会发生&#xff1f; 能够深入了解问题的根本原因隔离所有混淆信息的能力 3、预测型&#xff1a;可能发生什么&#xff1f; 通过历史数据来预测特定的结果通过…

中国5米分辨率坡度数据

中国5米分辨率坡度数据 坡度是地表单元陡缓的程度&#xff0c;通常把坡面的垂直高度和水平距离的比值称为坡度。坡度的表示方法有百分比法、度数法、密位法和分数法四种&#xff0c;其中以百分比法和度数法较为常用。 中国5米分辨率坡度数据集&#xff0c;利用5米分辨率DEM数据…

【C初阶——指针1】鹏哥C语言系列文章,基本语法知识全面讲解——指针(1)

长城之上是千亿的星空&#xff0c;星空之上是不畏的守望。 本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 文章目录 前言1.内存和地址2.指针变量和地址2.1指针…

探索LinkedIn:使用TypeScript和jsdom库的高级内容下载器

概述 LinkedIn是一个专业的社交网络平台&#xff0c;拥有超过7亿的用户和数以亿计的职位、公司和教育机构的信息。对于数据分析师、市场营销人员、招聘人员和其他对LinkedIn数据感兴趣的人来说&#xff0c;能够从LinkedIn上获取和分析这些信息是非常有价值的。 因此&#xff0…

java设计模式学习之【策略模式】

文章目录 引言策略模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用计算示例代码地址 引言 设想你正在玩一个策略游戏&#xff0c;每一个决策都会导致不同的游戏结局。同样地&#xff0c;在软件开发中&#xff0c;我们常常需要根据不同的场景或条件选择不同…

centos7.9安装ftp服务(vsftpd)

准备工作 1、centos 卸载vsftpd 删除原有的vsftpd [rootlocalhost ~]# systemctl stop vsftpd [rootlocalhost ~]# rpm -aq vsftpd [rootlocalhost ~]# rpm -aq vsftpd [rootlocalhost ~]# vsftpd-2.0.5-16.el5_5.1 2、验证是否删除完成warning: /etc/vsftpd/user_list sa…

【管理】如何正确与员工沟通

目录 一、沟通5个层次二、沟通4个要素三、沟通5个技巧系列文章版本记录 一、沟通5个层次 1、我不说你不问距离 2、我问了你不说隔阂 3、我问了你说了尊重 4、你想说我想问默契 5、我不问你说了信任 二、沟通4个要素 1先讲对方想听的话 2再讲对方听得进的话 3然后讲你应该讲的话…