图像匹配的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:
        resize: [240, 320] 
        # resize: [480, 640] 
    gaussian_label:
        enable: false # false
        sigma: 1.
    augmentation:
        photometric:
            enable: false
    homography_adaptation:
        enable: true
        num: 100 # 100
        aggregation: 'sum'
        filter_counts: 0
        homographies:
            params:
                translation: true
                rotation: true
                scaling: true
                perspective: true
                scaling_amplitude: 0.2
                perspective_amplitude_x: 0.2
                perspective_amplitude_y: 0.2
                allow_artifacts: true
                patch_ratio: 0.85

training:
    workers_test: 2

model:
    # name: 'SuperPointNet' # 'SuperPointNet_gauss2'
    name: 'SuperPointNet_gauss2' # 'SuperPointNet_gauss2'
    params: {
    }    
    batch_size: 1
    eval_batch_size: 1
    detection_threshold: 0.015 # 0.015
    nms: 4
    top_k: 600
    subpixel:
        enable: true

# pretrained: 'logs/magicpoint_synth20/checkpoints/superPointNet_200000_checkpoint.pth.tar' # 'SuperPointNet'
pretrained: 'logs/magicpoint_synth_t2/checkpoints/superPointNet_100000_checkpoint.pth.tar'


data:
    dataset: 'Coco'  # 'coco' 'hpatches'
    export_folder: 'val' # train, val

这两行的意思就是,datasets文件夹里的Coco.py文件。
第三行为任务,可以是train也可以是val。生成训练集和验证集在不同文件夹
在这里插入图片描述
Coco.py的第57行定义了输入图片的位置

    def __init__(self, export=False, transform=None, task='train', **config):

        # Update config
        self.config = self.default_config
        self.config = dict_update(self.config, config)
        # dict_update(self.config, config)
        self.transforms = transform
        self.action = 'train' if task == 'train' else 'val'

        # get files
        base_path = Path(DATA_PATH, 'uav_tianda/' + task + '2014/')

在这里插入图片描述
下面是伪标签的保存地址,yaml文件中的export_folder: 设置为val和train各跑一次代码,得到两个文件夹里的伪标签。
在这里插入图片描述

3.使用带为伪标签的数据进行训练得到superpoint

3.1 main函数

定义这样一个函数,然后运行
在这里插入图片描述
这是官网的介绍:
在这里插入图片描述
superpoint_uavtianda_visdrone是训练好的权重的内容。

3.2看看yaml配置文件

data:
    # name: 'coco'
    dataset: 'Coco' # 'coco'

#    labels: datasets/magicpoint_synth20_homoAdapt100_coco_f1/predictions
    labels: zz_logs/magicpoint_synth_homoAdapt_uavtianda_train/predictions
#    root: # datasets/COCO
    root: # zz_datasets/uav_tianda
    root_split_txt: # /datasets/COCO

注意labels一定要到predictions这一层,才能找到标签文件。

用于训练的图片在这:

在这里插入图片描述

### SuperPoint算法在SLAM中的实现与应用 #### 特征提取的重要性 对于视觉SLAM而言,前端特征匹配的质量直接影响整个系统的性能。传统的手工设计特征如SIFT、ORB等虽然广泛应用于早期的SLAM系统中,但在面对复杂多变的真实场景时存在局限性[^4]。 #### SuperPoint简介 SuperPoint作为一种基于深度学习的关键点检测器和描述符,在2018年由DeTone等人提出。该网络能够自适应地从图像中预测出稳定可靠的特征点及其对应的描述向量,从而提高了特征匹配的成功率和准确性。 #### SuperPoint-SLAM的工作原理 SuperPoint-SLAM利用了SuperPoint强大的特征提取能力作为其前端模块的核心组件之一。具体来说: - **特征获取**:输入连续帧图像序列给定后,每张图片都会经过预训练好的SuperPoint CNN模型处理,获得稀疏分布但具有良好区分性的角点位置及局部外观描述; - **数据关联**:接着采用高效的双向最近邻策略寻找不同时间戳间相同物理实体对应的最佳候选配对集合; - **位姿估计**:最后借助PnP求解相机运动参数并更新地图结构,完成闭环检测等功能优化迭代过程直至收敛于全局最优解路径表示形式[^1]。 ```python import torch from superpoint import SuperPointNet, PointTracker # 初始化SuperPoint网络实例 net = SuperPointNet() tracker = PointTracker(max_length=3) def process_frame(frame): """ 处理每一帧 """ # 使用SuperPoint提取关键点和描述子 pts, desc = net.run(frame) # 跟踪这些点随时间的变化情况 tracker.update(pts, desc) return tracker.get_tracks() for frame in video_stream: tracks = process_frame(frame) # 进一步操作... ``` #### 应用案例分析 MonoGRNet整合了CubeSLAM和Pop-up SLAM的优势特性,不仅实现了更稠密的地图构建还加入了语义理解层面的支持。这表明当把SuperPoint这样的先进感知工具融入到传统框架内时确实能带来质的飞跃,使得机器人能够在未知环境中更加智能高效地导航作业[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大泽泽的小可爱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值