使用AffNet和HardNet进行图像匹配

一、说明

        我们有一个任务是找到与给定查询图像最匹配的图像。首先,我们在OpenCV中尝试了使用SIFT描述符和基于Flann的匹配器的经典图像匹配。结果是完全错误的。然后是词袋...最后,找到了AffNet和HardNet。

二、关于AffNet和HardNet

        本文专门介绍如何进行应用实验,不对AffNet和HardNet原理进行详细说明。

AffNet是一种学习具有硬负常数损失的局部仿射协变区域的新方法,其性能优于最先进的词袋图像检索和宽基线立体声。

AffNet培训(来自原始论文)

        HardNet 是一种新颖的紧凑学习特征描述符,在标准匹配和检索基准测试上显示了与手工制作和学习描述符相关的最先进的卓越性能,并且在 GPU 上计算速度很快(作者论文)。它在github上公开可用。

        以下是使用 AffNet 匹配通过极端仿射变换捕获的图像的一个很好的例子

在这里,作者在一篇论文中更详细地描述了这种方法。关于硬网的好介绍。

三、代码获取

 从 github 克隆存储库:

git clone https://github.com/ducha-aiki/affnet.git

        然后移动到该文件夹。

        启动 Jupyter :

jupyter notebook

        并在文件夹示例中打开笔记本 SIFT-AffNet-HardNet-kornia-matching.ipynb。首先安装所有必需的库。在笔记本顶部创建一个单元格并运行

!pip install kornia pydegensac extract_patches

        如果您有 OpenCV 版本 4,则可能会收到函数 SIFT_create 的错误:“函数/特性未实现此算法已获得专利,并在此配置中被排除;”。SIRF 和 SURF 在 opencv > 3.4.2.16 中不再可用。安装旧版本的OpenCV:

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

        有三个管道:

  • DoG-AffNet-OriNet-HardNet (使用 AffNetJIT、OriNetJIT、提取 SIFT 键点、HardNet 描述符等)
  • DoG-Affine-OriNet-HardNet
  • DoG-OriNet-HardNet

当使用DoG-AffNet-OriNet-HardNet管道对作者提供的图像进行AffNet匹配时,我们得到以下结果

30.0 inliers found

        对于这些图像来说非常好。

        对于管道DoG-AffNet-OriNet-HardNet

18.0 inliers found

对于管道DoG-OriNet-HardNet

25.0 inliers found

当我们在室内场景比赛的图像上测试AffNet时,没有任何调整参数就很兴奋。这里不需要对AffNet进行再培训。

要集成 AffNet,您只需安装所需的库并下载预训练的模型权重

wget https://github.com/ducha-aiki/affnet/raw/master/convertJIT/AffNetJIT.pt
wget https://github.com/ducha-aiki/affnet/raw/master/convertJIT/OriNetJIT.pt
wget https://github.com/ducha-aiki/affnet/raw/master/test-graf/img1.png
wget https://github.com/ducha-aiki/affnet/raw/master/test-graf/img6.png
wget https://github.com/ducha-aiki/affnet/raw/master/test-graf/H1to6p

将 Jupyter 笔记本转换为 python 脚本

jupyter nbconvert SIFT-AffNet-HardNet-kornia-matching.ipynb --to python

默认情况下,CPU 由 PyTorch 使用

dev = torch.device('cpu')

您可以切换到上面的GPU注释行和取消注释的后续行

#dev = torch.device('cuda')

就是这样。祝您在解决匹配图像的问题时好运。

四、结论

        我们在上文讲述了如何在python环境用AffNet和HardNet实现图像匹配,试图实现这种功能的读者可以照着套路进行应用,至于更多的原理,我们将在其它文中详细论述。 我们从这些幻灯片中了解了AffNet和HardNet的组合。

普里瓦洛夫·弗拉基米尔

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【枚举倍数+容斥】CF803 F

Problem - F - Codeforces 题意: 思路: 正难则反,考虑容斥 即考虑gcd ! 1的所有子序列个数 因为子序列内部无序,因此不算真正的子序列,考虑枚举倍数 根据经典套路,我们去枚举 gcd,然后去枚…

win10下如何安装ffmpeg

安装ffmpeg之前先安装win10 绿色软件管理软件:scoop. Scoop的基本介绍 Scoop是一款适用于Windows平台的命令行软件(包)管理工具,这里是Github介绍页。简单来说,就是可以通过命令行工具(PowerShell、CMD等…

Pytorch安装教程:最新保姆级教程

目录 概述 重要的事情说三遍:不需要装cuda、不需要装cuda、不需要装cuda 1.查看自己NVIDIA版本 2.创建一个conda 环境 3.安装pytorch 本文意在帮助即将步入深入学习领域的学子 在这之前首先你需要安装好anaconda,不懂的可以下面这篇文章 最新Anaco…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C:1、malloc 2、calloc C:new运算符 一 malloc malloc(): 这个函数用于分配一块指定大小的内存块,并返回一个指向该内存块的指针。语法如下: void* malloc(size_t size); 示例: int* ptr …

【软件测试】我的2023面试经验谈

最近行业里有个苦涩的笑话:公司扛过了之前的三年,没扛过摘下最近的一年,真是让人想笑又笑不出来。年前听说政策的变化,大家都满怀希望觉得年后行情一片大好,工作岗位激增,至少能有更多的机会拥抱未来。然而…

nodejs+vue+elementui美食网站的设计与实现演示录像2023_0fh04

本次的毕业设计主要就是设计并开发一个美食网站软件。运用当前Google提供的nodejs 框架来实现对美食信息查询功能。当然使用的数据库是mysql。系统主要包括个人信息修改,对餐厅管理、用户管理、餐厅信息管理、菜系分类管理、美食信息管理、美食文化管理、系统管理、…

android app控制ros机器人五(百度地图)

半吊子改安卓,新增了标签页,此标签页需要显示百度地图 按照官方教程注册信息,得到访问应用AK,步骤也可以参照下面csdn Android地图SDK | 百度地图API SDK 【Android】实现百度地图显示_宾有为的博客-CSDN博客 本人使用的是aar开…

metaRTC7 demo mac/ios编译指南

概要 metaRTC7.0开始全面支持mac/ios操作系统,新版本7.0.023 mac os demo 包含有srs/zlm的推拉流演示。发布版自带了x64版第三方类库,arm版第三方类库还需开发者自己编译。 源码下载 下载文件metartc7.023.7z https://github.com/metartc/metaRTC/re…

htmlCSS-----弹性布局

目录 前言 什么是弹性布局 样式 学习概要 容器和项目 弹性布局的排列方式 1.横向排列(默认样式) 2.父元素容器的属性(*5) (1)主轴 代码示例: (2)交叉轴 3.子元素…

Android 网络编程-网络请求

Android 网络编程-网络请求 文章目录 Android 网络编程-网络请求一、主要内容二、开发网络请求前的基本准备1、查看需要请求的网址是否有效(1)通过网页在线验证(2)使用专用window网咯请求工具(3)编写app代码…

网络安全 Day31-运维安全项目-容器架构下

容器架构下 6. Dockerfile6.1 Docker自动化DIY镜像之Dockerfile1) 环境准备2) 书写Dockerfile内容3) 运行Dockerfile生成镜像4) 运行容器5) 小结 6.2 案例14:Dockerfile-RUN指令1) 书写Dockerfile2) 构建镜像3) 启动容器4) 测试结果 6.3 Dockerfile指令 …

4.文件保护

第四章 文件管理 4.文件保护 ​   加密保护:可以用“密码”与文件的原始数据依次做异或运算。这样可以把整个文件的数据都进行加密,所以系统中保存的并不是文件的原始数据,而是保存了对文件进行加密之后的数据,所以如果一个用户…