SuperPoint: Self-Supervised Interest Point Detection and Description

前言

SuperPoint是一种基于深度学习的自监督特征点检测算法,关于这个论文的详细内容不在此篇文章解释,本文只介绍如何使用该算法进行特征点检测。

paper原文:SuperPoint: Self-Supervised Interest Point Detection and Description
官方代码:GitHub/magicleap/SuperPointPretrainedNetwork

因为原文作者明确表示不发布训练&评估代码,本篇文章使用的代码是非官方的训练代码,链接:GitHub/rpautrat/SuperPoint

在此之前已经有人写过SuperPoint训练的过程,但用的是官方训练的COCO数据集,我将在此基础上更详细的介绍并补充如何替换训练数据集及使用评估代码。


准备工作

运行环境:python==3.6.1。
requirements.txt:

tensorflow-gpu==1.12
numpy
scipy
opencv-python==3.4.2.16
opencv-contrib-python==3.4.2.16
tqdm
pyyaml
flake8
jupyter
make install  # install the Python requirements and setup the paths

我用的是Debian GNU系统,其他Linux发行版也一样。

关于dataset读取路径和输出路径都在 superpoint/settings.py 中,分别为DATA_PATH和EXPER_PATH。

第一步:创建Synthetic Shapes Dataset并训练MagicPoint特征检测器

Synthetic Shapes Dataset是合成形状数据集,该数据集有9种不同的形状(包括椭圆和高斯噪声,作为负样本),并有.npy文件记录特征点的坐标位置作为label进行训练,如下图所示。

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

其中magic-point_synth是实验名称,可以更改为任何名称。训练可以在任何时候使用Ctrl+C中断,权重将保存在 EXPER_PATH/magic-point_synth/ 中,里面也包括了Tensorboard的记录文件。当第一次训练时,将生成合成形状数据集,数据集保存在 superpoint/datasets/synthetic_shapes_v6 文件夹中。
magic-point_shapes.yaml文件里面有可修改的各种数据及训练参数。

第二步:MagicPoint检测器自标注数据集

得到训练后的MagicPoint检测器后,我们需要使用它对真实图像数据集进行标注,获得伪真实(pseudo-ground truth)的data及label,其中进行了一个图像处理操作叫做Homographic Adaptation,它也是SuperPoint这么好用的一个创新点。当然,你也可以在yaml文件中设置选择开启或关闭该操作。

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

输出为一堆.npy文件,记录了输入图像的特征点伪真实标签,输出路径在 EXPER_PATH/outputs/magic-point_coco-export1/ 。在npy文件中特征点坐标保存在 属性f.points 。同样,在 magic-point_coco_export.yaml 文件中可以进行各种调参。

查看特征点标签(label)的坐标:

import numpy as np point_path = r'hjOD70.npz'
npz = np.load(point_path)
point = npz.f.points.tolist()
print(npz.f.points)

这一步我们可以选择不用COCO数据集,替换为自己的数据集,但要注意替换的数据集图像尺寸必须要能被8整除。

1.修改训练图像尺寸

paper和code中使用COCO数据集图像尺寸为240×320,如果想要修改尺寸需要在 superpoint/datasets/coco.py 代码中default_config ={‘'preprocessing ': [‘resize’ : [240, 320] ] }修改成自己数据集图像的尺寸。

coco.py:

default_config = {'labels': None,'cache_in_memory': False,'validation_size': 100,'truncate': None,'preprocessing': {#      'resize': [240, 320]'resize': [800, 400]},......

2.修改读取图像路径

coco.py 文件中修改base_path,DATA_PATH在 settings.py 中修改。

coco.py:

 def _init_dataset(self, **config):#  base_path = Path(DATA_PATH, 'COCO/train2014/')base_path = Path(DATA_PATH, '自己的数据集地址')......

3.(可选)修改数据集名称

如果你的数据集不想叫COCO…可以修改 magic-point_coco_export.yaml 文件data的name属性。

magic-point_coco_export.yaml:

data:name: 'coco'    <-----修改这里cache_in_memory: falsevalidation_size: 100

但一定要在 superpoint/datasets/ 文件夹下复制 coco.py 并重命名为自己的 数据集名称.py ,且修改其中的class类名为自己的数据集名称。

下图是用MagicPoint检测器检测到的特征点。

第三步:再次训练MagicPoint检测器

在第一步训练出来的MagicPoint检测器虽然可以检测出一些特征点,可因为是使用合成形状数据集训练出来的模型,检测性能还有些不足,所以进行第二步自标注数据,再用标记好的真实图像训练,得到的强化版的检测器。

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

在此步骤依旧需要修改labels读取路径,将第二步得到的npz文件夹路径替换到labels路径中,代码作者也在 magic-point_coco_train.yaml 文件中做了提醒。

magic-point_coco_train.yaml:

data:name: 'coco'  # 如果第二步中修改了name,此处依旧需要修改。labels: outputs/mp_synth-v10_ha2-100  # Complete with your export labels   修改此处labels路径!!!cache_in_memory: falsevalidation_size: 192


训练结束后会得到最终的MagicPoint特征检测器。

第四步:(可选)使用MagicPoint进行特征检测

paper中使用Hpatches数据集进行性能评估验证,HPatches: Homography-patches dataset.该数据集在ECCV2016上提出,被用作局部描述符评估挑战的基础,每个文件夹下包含5张.ppm格式的图像与其单应矩阵H,每张图像相较于原图像都做了不同的变换(视角或光照)。评估检测器的性能:

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

结果保存在 EXPER_DIR/outputs/magic-point_hpatches-repeatability-v/ ,我们还可以修改 magic-point_repeatability.yaml 中的相关参数 :

data:name: 'patches_dataset'dataset: 'coco'  # 'coco' 'hpatches'   图像后缀为.jpg选择'coco',后缀为.ppm选择'hpatches'。alteration: 'all'  # 'all' 'i' 'v'     'i'为光照(illumination)变化,'v'为视角(viewpoint)变化。preprocessing:resize: [384, 384]  # [240, 320] for HPatches and False for coco

如果我们的数据集仅有图像,不是Hpatches dataset格式(有变化后的图像和可验证单应矩阵H),作者还为我们留了生成该格式的代码 generate_coco_patches.py ,修改代码的43和45行的base_path、output_dir,运行后就可以得到Hpatches dataset格式的图像数据。

每个文件夹都包含了原图像和变换后的图像。

评估后的结果是一堆.npz格式文件,里面的f属性包含以下5个内容,分别是单应矩阵、原图像、原图像每个点的特征置信度、变换图像、变换图像每个点的特征置信度。这些是paper中repeatability评估指标的所需数据,更多解释在paper中寻找…

第五步:训练SuperPoint检测器

将第二步标注好的label用来训练SuperPoint模型,首先修改 superpoint_coco.yaml 中data/label的路径:

data:name: 'coco'  #如果修改了data name,这里依旧需要修改cache_in_memory: falsevalidation_size: 96labels: outputs/mp_synth-v11_export_ha2  # 使用第二步中保存出的label路径

修改完成后键入指令:

python experiment.py train configs/superpoint_coco.yaml superpoint_coco


等待训练完成即可得到SuperPoint特征检测模型。

注意此环节可能报错:段错误 或 Segmentation fault,是因为爆显存了…本人使用tesla P100 16G显卡,训练384×384尺寸 共10000张图像,在 superpoint_coco.yaml 配置文件中batch size设置1(初始为2),可解决此问题。

未完待续…

SuperPoint特征检测算法TrainEvaluate教程相关推荐

  1. 【★】KMP算法完整教程

    2019独角兽企业重金招聘Python工程师标准>>> KMP算法完整教程 全称:                               Knuth_Morris_Pratt ...

  2. !KMP算法完整教程

      KMP算法完整教程 全称:                               Knuth_Morris_Pratt Algorithm(KMP算法) 类型:                ...

  3. 常见特征检测算法介绍

    Camera系列文章 传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境:这里首先介绍Camera的相关内容,包括摄像头及图像知识基本介绍,OpenCV图像识别(特征提取,目标分类等) ...

  4. AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...

    点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...

  5. 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建

    文章目录 linux 开发AI算法以及部署算法详细教程 linux docker环境搭建 参考example-docker libtorch 安装教程 opencv 安装教程 编译过程 测试开发环境示 ...

  6. 《Python程序设计与算法基础教程(第二版)》江红 余青松,第九章课后习题答案

    推荐阅读 <Python程序设计与算法基础教程(第二版)>江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究 文章目录 例9.1~例9.53 填空题:2 思考题:3~11 上机 ...

  7. 《Python程序设计与算法基础教程(第二版)》江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究

    (还在更新中-) 这篇博客花费了我的大量时间和精力,从创作到维护:若认可本篇博客,希望给一个点赞.收藏 并且,遇到了什么问题,请在评论区留言,我会及时回复的 这本书对Python的知识点的描述很详细, ...

  8. python程序设计与算法基础江红答案_《Python程序设计与算法基础教程(第二版)》江红 余青松,第十一章课后习题答案...

    推荐阅读 <Python程序设计与算法基础教程(第二版)>江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究 文章目录 一些知识点总结和几个例题 选择题:1~5 填空题:1~8 ...

  9. 《Python程序设计与算法基础教程(第二版)》江红 余青松,第十章课后习题答案

    推荐阅读 <Python程序设计与算法基础教程(第二版)>江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究 文章目录 上机实践:2~4 案例研究:基于模块的库存管理系统 上机 ...

最新文章

  1. 关于cast类型转换后无法使用索引的优化
  2. Product Master data in C4C and data exchange with CRM via PI
  3. clistctrl控件最后插入在后面_老板让我把图片放到Excel表格中,批量插入效率高...
  4. 4 error C2220: 警告被视为错误 - 没有生成“object”文件 (..\..\src\caffe\util\math_functions.cpp)
  5. 浓浓的亲情 2008-10-6 8:53:00 (21ic)
  6. java第七章jdbc课后简答题_jsp编程基础第七章习题
  7. Android 模块化编程之引用本地的aar
  8. 6.2.2 构造函数模式
  9. PyQt5教程(二)——PyQt5的安装(详细)
  10. 告诉你三个实用的换性别特效软件
  11. 企业微信(WeCoom)私有化客户端Api解决方案
  12. Ubuntu18.04 下载的cuda10.1与未安装完全的nvidia-cuda-dev_9.1发生冲突,卸载
  13. MATLA图片清晰度调整
  14. 登录注册页面html模版
  15. 离散数学_量词分配等值式
  16. EDM模板设计:教您设计三种独特的邮件营销模板
  17. c语言程序设计韦良芬答案,论高职院校《C语言程序设计》的教学改革
  18. HNU软件能力实训2-17. 小A的计算器
  19. Maven发布轻量二方包
  20. NLP资源汇总和工具汇总

热门文章

  1. 深度学习之GPU显存与利用率 浅析小结
  2. ShopWind 开源电商系统 V3.4.3 发布,uni-app 商城案例,PC+APP+H5 + 小程序
  3. 寻求泰国居留权的美国投资者数量大增
  4. 爱尔威火星车 AirWheel 电动独轮车
  5. CustomerList
  6. 【墨者学院】身份认证失效漏洞实战
  7. 大商创V2.7版短信接口替换
  8. 51单片机(STC89C52)的中断和定时器
  9. 考研小助手 Mathematica 麦酱教你算不定积分 wolfram alpha
  10. 高阶 numpy 数组快速插值(高阶快插)算法探讨