SuperPoint学习(一)

SuperPoint: Self-Supervised Interest Point Detection and Description

被本科毕设支配的恐惧……已经有一周多没有复习复试了

源代码来自于:github。是一个非官方复现,但使用起来非常方便。
首先环境必须匹配,尤其CUDA和CUDNN都要严格一致

OS:Ubuntu18.04
GPU:Cuda 9.0、CuDNN 7.0.5
GCC:5.5

储备知识:单应性变换(Homographic Adaptation),在论文中经常见到这个名词。

具体操作,rpautrat大神已经介绍的很清晰了,我记录一下每一步的结果。

step 0

执行每一步时需要在superpoint目录下运行一个sh文件。而下面这三行要像头文件一样加在sh的首部。

#!/bin/sh
export TMPDIR=/tmp/
export CUDA_VISIBLE_DEVICES=0

step 1 Training MagicPoint on Synthetic Shapes

第一步是使用超级简单的形状来训练magicPoint网络。比如线段,长方形,正方体等。因为对于特征点这种东西,生活场景中的图片人类是无法标注的,每个人标注出来的可能都不一样,那还怎么训练呢,所以作者提出先使用最简单的图案来训练magicPoint,使其有一个最初步的寻找feature的能力。

python3 experiment.py train configs/magic-point_shapes.yaml magic-point_synth

我这里50000轮后的结果:在这里插入图片描述
但此时的SuperPoint的特征提取能力还很差,用DeTone的原话说就是 “However, when compared to classical interest point detectors on a diverse set of image textures and patterns, MagicPoint misses many potential interest point locations.”所以“To bridge this gap in performance on real images, we developed a multi-scale, multi-transform technique − Homographic Adaptation.”所以还需通过一个Homographic Adaptation,这也是论文的核心贡献,使得真正的自监督训练成为可能。

step 2 Exporting detections on MS-COCO

此时的magicPoint已经具备一定寻找特征点的能力,虽然看上去准确度还并不高。作者让magicPoint对COCO2014的数据集进行标注,将结果保存在$EXPER_DIR/outputs/magic-point_coco-export1/中。自监督训练的第一步。

python3 export_detections.py configs/magic-point_coco_export.yaml magic-point_synth --pred_only --batch_size=5 --export_name=magic-point_coco-export1

在这里插入图片描述
我特意在自己电脑上又下了一份COCO train2014,图片有8万多张,解压后12.5G大小,训练起来奇慢。跑了14个小时仍没有结果时被我 Ctrl+C 了,然后欲哭无泪……我会不会被怀疑用学校服务器挖矿啊。。。
(2020.4.5更)在第二次手欠中断了之后(这次已经跑了23个小时)我终于机智了一点,因为不会改训练代码,我想到可以将COCO/train2014目录下已经产生了标签文件的图片先弄走,它不是就不会重复训练了吗!说干就干

# -*- coding: utf-8 -*-
#!/usr/bin/python
dst = "~/super/exper/outputs/magic-point_coco-export1"

import os,shutil
 
def movefile(srcfile,dstfile):
	remain = 0
    dirs = os.listdir(srcfile)   #遍历
    for file in dirs:
    	name, _ = os.path.splitext(file)
    	name = os.path.join(dst,name+".npz")  # 找到在magic-point_coco-export1目录下对应的npz文件
    	if os.path.exists(name):
    		shutil.move(file,dstfile)
    	else:
    		remain++
    print(remain)

#在COCO/train2014下执行,将已产生标签的图片先放到../tmp下暂存
movefile(".","../tmp")

当然训练完后还要move回去,一行指令就不写了。
最后的总训练时间是将近32个小时。
我使用GPU为:NVIDIA Tesla P100 PCI-E 16GB,不过注意到在这一步时只能达到20%的负载,并没有发挥出学校土豪显卡的全部功力

step 3 Training MagicPoint on MS-COCO

用刚刚标注过的COCO来进行训练,这一步要用到上一步存储在$EXPER/outputs/magic-point_coco-export1里面的全部标签,所以上一步必须全部执行完才行。

python3 experiment.py train configs/magic-point_coco_train.yaml magic-point_coco

在这里插入图片描述

step 4 Evaluating the repeatability on HPatches

评估magicPoint效果,这里主要指重复度。如果没达到论文效果的话需要重复进行3、4步。

python3 export_detections_repeatability.py configs/magic-point_repeatability.yaml magic-point_coco --export_name=magic-point_hpatches-repeatability-v

具体再补充吧……

Matching Features Demo with Pretrained Weights

这是用作者提供的一个预训练的权重直接测试,想用自己的图片的话需要先转化成ppm(linux下的一种图片格式)

tar -xzvf pretrained_models/sp_v6.tgz $EXPER_PATH/saved_models/sp_v6
python3 match_features_demo.py sp_v6 image1.ppm image2.ppm

提取的特征点多(红点)的是SIFT:
在这里插入图片描述
少的是SuperPoint:
在这里插入图片描述

随便扔进去的深度图,效果不如SIFT。(训练集和测试集类型都不一样当然可以理解
SuperPoint:
在这里插入图片描述
SIFT:
在这里插入图片描述

  • 16
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 34
    评论
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值