图像匹配的superpoint算法训练


官方没有开源的训练代码,从github上找了野生的基于pytorch实现训练。

1.检测器magicpoint以及人工数据的生成

2.用magicpoint给自己的数据集打上伪标签

我没有训练magicpoint了,直接用已经训练好的预训练权重,在这里:
在这里插入图片描述

2.1 main

自己编写一个文件然后运行,内容如下下面
在这里插入图片描述
这是官方的说明:
在这里插入图片描述
其中
任务:export_detector_homoAdapt
配置文件: “configs/magicpoint_coco_export.yaml”
输出保存伪标签的文件夹:“magicpoint_synth_homoAdapt_uavtianda0002_train”

2.2 接下来我们看setting.py文件

DATA_PATH = 'zz_datasets' # path for datasets 也就是输入图片存放的位置
EXPER_PATH = 'zz_logs' # path for saving checkpoints 也就是输出图片存放的位置,伪标签也在。
SYN_TMPDIR = './zz_temp_datasets/'  # path for dumping synthetic data 没啥用
DEBUG = False # true: will make synthetic data only uses draw_checkboard and ignore other classes,
# DEBUG = False

前面提到的"magicpoint_synth_homoAdapt_uavtianda0002_train"也就是在’zz_logs’ 文件夹下,这个你可以自己命名

2.3然后看yaml配置文件

data:
    dataset: 'Coco'  # 'coco' 'hpatches'
    export_folder: 'val' # train, val  
    preprocessing
### 配置 SuperPoint 实现图像匹配 要在 PyCharm 中配置 SuperPoint 并实现图像匹配功能,可以按照以下方法操作: #### 1. 安装必要的依赖库 SuperPoint 是一种用于特征提取和匹配的深度学习算法。为了在 PyCharm 中使用它,首先需要安装所需的 Python 库。 ```bash pip install torch torchvision matplotlib opencv-python-headless scipy scikit-image ``` 如果项目涉及 GPU 加速,则还需要安装 CUDA 和 cuDNN 的对应版本[^1]。 #### 2. 下载预训练模型 通常情况下,SuperPoint 提供了官方的预训练权重文件。可以从 GitHub 或其他资源下载这些权重并保存到本地目录中。例如: ```python import os from urllib.request import urlretrieve url = 'https://github.com/magicleap/SuperGluePretrainedNetwork/raw/master/models/weights/superglue_outdoor.pth' local_path = './superglue_outdoor.pth' if not os.path.exists(local_path): urlretrieve(url, local_path) ``` 这段代码会自动从远程服务器下载 `superpoint` 的预训练权重文件[^2]。 #### 3. 设置 PyCharm 解释器 打开 PyCharm 后,在项目的设置中指定虚拟环境作为解释器。可以通过以下方式创建一个新的 Conda 虚拟环境: ```bash conda create --name superpoint_env python=3.9 conda activate superpoint_env ``` 接着将此虚拟环境导入到 PyCharm 中,并确保所有必需的包都已成功安装。 #### 4. 编写图像匹配代码 下面是一个简单的 SuperPoint 图像匹配示例程序: ```python import cv2 import numpy as np import torch from models.superpoint import SuperPoint # 假设已经克隆了 SuperPoint 源码 def load_image(image_path, resize=None): image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) if resize is not None: image = cv2.resize(image, (resize[1], resize[0])) return image / 255.0 # 初始化 SuperPoint 模型 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') config = { 'descriptor_dim': 256, 'nms_radius': 4, 'keypoint_threshold': 0.005, } superpoint_model = SuperPoint(config).to(device) # 加载两张图片 image1 = load_image('./images/image1.png', resize=(640, 480)) image2 = load_image('./images/image2.png', resize=(640, 480)) with torch.no_grad(): pred1 = superpoint_model({'image': torch.from_numpy(image1.astype(np.float32)).unsqueeze(0).unsqueeze(0).to(device)}) pred2 = superpoint_model({'image': torch.from_numpy(image2.astype(np.float32)).unsqueeze(0).unsqueeze(0).to(device)}) print("Keypoints detected:", pred1['keypoints'].shape, pred2['keypoints'].shape) ``` 该脚本加载两幅灰度图并通过 SuperPoint 提取关键点及其描述子[^2]。 #### 5. 可视化结果 最后一步是对匹配的关键点进行可视化处理。这可以通过 OpenCV 或 Matplotlib 来完成: ```python import matplotlib.pyplot as plt def plot_keypoints(image, keypoints): fig, ax = plt.subplots(figsize=(10, 7)) ax.imshow(image, cmap='gray') ax.scatter(keypoints[:, 0].cpu(), keypoints[:, 1].cpu(), c='r', s=5) plt.show() plot_keypoints(image1, pred1['keypoints'][0]) plot_keypoints(image2, pred2['keypoints'][0]) ``` 以上代码展示了如何绘制检测到的关键点位置[^2]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大泽泽的小可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值