一、总体介绍
HPatches(Homography Patches)是一个用于局部描述子(Local Descriptor)评价的数据集,由于其具有可复现、多样性、源于真实数据、大规模以及多任务的特点,在发表后得到了很多相关工作的引用,为局部描述子的评价建立了一个客观的基准。
这项工作最早发布于ICCV2017:
文章链接:https://ieeexplore.ieee.org/document/8099893
arxiv链接:https://arxiv.org/abs/1704.05939
项目主页:https://hpatches.github.io/
*在主页中可以找到文章链接、代码以及数据集等资源。

这个数据集在后续很多局部描述子算法文章中都用到了,作为基准对算法进行评价,属于一个比较重要、比较经典的工作。数据集由图像块(patch) 组成,每个patch提取一个特征向量,这样的好处是可以统一特征点提取的基准。相比于基于图像的评价方法,特征点的位置可能本身就不同,评价起来就不客观了。(详见文章第2节)

对于每个patch提取完特征向量之后,通过三种任务进行评价,即对应原文中的第5节:验证(Patch Verification)匹配(Image Matching)和检索(Patch Retrieval)。个人所见,三种任务的内涵是很类似的,都是评价对于对应(Corresponding)的Patch,特征向量是否是接近的。这里也就说明,大家在设计描述子的时候,追求的目标是在不同的视角(Viewpoint)光照(Illumination) 等情况下,描述子所计算得到的特征向量应该是接近的,这样在匹配的时候才更容易匹配正确。

本文首先整体讲述一下评价的思路,然后将文章中的评价方法与具体实现结合起来讲解一下,最终实现对这个数据集(或者说基准)比较全面的认识。

二、整体评价思路
首先简单说一下数据集的数据结构,结合着具体的结构,再去看文章中的很多描述会清晰很多。(关于数据结构,后面会详细讲解。)
从官网下载数据集,打开可以发现有116个文件夹,分别是以“i_”和"v_"开头,代表的是光线变化和视角变化。

每一个文件夹打开之后,里面有一些数据文件(以其含义为后缀)和16张图像文件(1张ref+5张e+5张h+5张t),每张图像是65×N65\times N65×N这样大小。根据文章,每个patch是65×6565\times 6565×65大小,因此一个图像就是这张图提取得到的所有patch罗列而成的。

这16张图像处ref外,由2个维度的信息构成:
ref可以翻译为“基础图像”(reference);

  • 1——5则是相较于基础图像发生视角变化或者光线变化的图像(target);
  • e(EASY,简单)、h(HARD,困难)和t(TOUGH,极难)是三种噪声条件,随着噪声等级的提升,添加的图像干扰增大。

*读这篇博客的时候,首先建议大家读一遍文章,个人认为这个系列的博客起到的作用应是帮助大家去理解这篇文章,而不是只依靠这篇博客就完成对这个数据集的了解。

那么基于这一前提,这里先对应一下文章中的概念与实际图像数据的关系:

  • Sequence(图像序列)-文件夹
  • Image(图像,LLL)-图像(.png)
  • Patch(图像块,xxx)-图像中的每一个小块

同一序列中不同图像的同一位置为对应的Patch。
捋清楚这些关系,大家再去看文章中的描述就会清晰很多。

那么在这个数据的基础上,再来讨论评价思路就很清楚了。其评价的整体思路就是拿出一对图像,计算他们的特征向量,然后看是否是匹配的,将匹配结果与真值进行对比,即可得知描述子的描述能力

读到这里大家可能会有一点小疑问,那计算得到两个特征向量之后如何知道他们是否是匹配的呢?一般来说,是计算两个向量的距离,也就是把两个向量做差,然后求各元素差的绝对值和或者平方和。具体的计算方式跟“距离”的定义方式有关。这个很好理解,距离越远、差值越大,说明描述的越不接近。那再深一层,获得距离之后又如何知道是否是匹配的呢?一般来说,会设定一个阈值,比如差小于某个值,则认为是匹配的;或者将衡量得分(这里的得分可以简单理解为距离的远近,距离越远,得分越低)按降序排序,处于所有图像对的前百分之多少的匹配认为是正确的,其他认为是错误的。
当然,这里讨论的都是一些朴素的思想,更科学的评价方法论文里有写,后面也会详细讲解。文中5.1节整体介绍了评价方法,说明采用的是AP;同时,也由于这一节是一个整体介绍,所以比较抽象,具体如何应用、如何计算这个指标,需要结合5.2——5.4来看。

下面简要介绍一下三种评价任务及指标的计算方式:
1、验证:
验证是一个二分类任务:给你一对Patch,然后你告诉我他俩或者不是匹配的。
*在这一节,我会借着讲验证任务是怎么评价的顺便把AP这种评价方式介绍一下,因为单独来说AP的计算的话会比较抽象。后面两个任务的计算方法是类似的。

正如前面提到的,如果要判断一对patch是否是匹配的,我需要知道一个阈值。可纵观全文作者也没提阈值是多少呀?那怎么计算?那实际上,有一种更加客观、全面和科学的方法,那就是计算AP(Average Precision)。这个概念大家可以搜一下,是分类任务中常见的评价方法;在这里由于将匹配任务已经转化为分类任务了,那实际上就可以直接应用这个方法了。并且就验证任务来说,基本也就是用的AP的传统计算方法;只不过作者在5.1节的描述中说的有点细了,导致大家看起来不是很直观。

下面先讲一下AP的计算,要计算AP则需要先了解Precision和Recall的概念。
由于P(Precision)、R(Recall)这些概念已经比较普及了,这里就不再多加赘述,大家不太清楚的话可以单独查一下,相关介绍还是很多的。这里就列一下公式吧:
P=TPTP+FP,R=TPTP+FN,AP=∫01P(R)dRP=\frac{TP}{TP+FP}, R=\frac{TP}{TP+FN}, AP=\int_{0}^{1}{P\left( R \right)}dR P=TP+FPTP​,R=TP+FNTP​,AP=∫01​P(R)dR

其中,TP是真正例(检测为+,标注也为+),FP是假正例(检测为+,标注为-),FN是假负例(检测为-,标注为+)。一般会画一个PR曲线,画PR曲线的时候,会首先把检测的样本根据得分降序排列,然后不断划定阈值,比如首先认为第一个对,然后算P和R;然后认为前2个对,算PR;以此类推,最后认为全都对,再算PR。这样,每算一次,就会得到一个PR坐标值(R,P):一般来说,开始的时候P=1,R很小;最后R=1,P变小。获得PR曲线之后,就可以根据AP的计算公式进行积分,得到PR曲线下包围的面积,就是AP了。当然具体的计算方法大家可以自行搜索。那么其实这样叙述之后,基本就跟作者在5.1节描述的方法是一致的了。

接下来将验证任务与AP的计算对应一下,所研究的样本是Patch对,在选择样本的同时,就已经知道他们是或者不是对应的了,即得到了标注值。而分类的得分,则是指这对Patch提取得到特征向量的接近程度(一般可理解为距离)。

那么,基于上述的分析,下面具体说明一下验证任务的操作方法:选取多对Patch,每对Patch分别提取特征向量,然后计算特征向量的匹配的分数(一般为两个特征向量的距离,具体来说还需要取负号,因为距离越小,匹配得分应该越高)。对分数进行排序,依次计算P和R,然后计算AP。(作者给出的Matlab程序中,AP的计算是通过vlfeat库完成的,感兴趣的同学们可以自己去看下vlfeat库中相关函数的介绍。)

2、匹配
相比验证是随机给定图像对,匹配对比的是两幅图像,相当于限定在两幅图像中搜索对应关系(N个基础Patch去匹配N个查询Patch,而验证则是1个Patch对1个Patch)。
对于两幅图像L0L_0L0​和L1L_1L1​,L0L_0L0​中的Patch称为xi0x_{i0}xi0​,类似的,L1L_1L1​中的Patch称为xi1x_{i1}xi1​,相同的角标为对应的Patch。假设以L0L_0L0​作为基准图像,使用其中的每一个Patch去匹配L1L_1L1​中的Patch,对于xi0x_{i0}xi0​,找到最佳匹配xσi1x_{\sigma_i1}xσi​1​。(这里,最理想的情况就是σi=i\sigma_i=iσi​=i,但是受描述子表达能力的限制,可能会存在错误匹配,这样就可以评价不同描述子的优劣了。)
对于一张图像,其本质就是N对图像对,只不过相比验证,不是给定Patch对去判断是否匹配,而是在一张图像范围内搜索最佳匹配。基于其本质,对于一对图像,即N对匹配结果,可以用类似验证的方法计算AP(具体来说,一对图像中有N对Patch,这N对Patch根据角标是否对应可以给出label,然后根据匹配的得分排序,计算AP);多对图像对求AP的均值,即mAP(mean AP)。
从实际操作角度看,匹配这一任务只能在同一Sequence内进行,两两选择图像对进行匹配测试。例如,在进行测试时,可以按照噪声等级,每个噪声等级下分别验证Ref图像与本噪声等级下图像1——图像5的匹配结果。如果按这种测试方式,则一组图像序列,会有15个AP,将这15个AP取均值,就可以得到这个sequence的mAP。当然,可以取更多的Sequence,每组Sequence内部选取图像对进行匹配,然后将测试的所有图像对的AP整体求mAP,这样可以得到一个更加综合的结果。
匹配过程如下图所示:

3、检索
检索则是在匹配的基础上再放大了搜索范围,匹配是同一Sequence图像之间Patch的匹配,而检索则不仅有同Sequence图像,也有不同Sequence图像。

这一任务不再基于图像,而是基于Patch,对于来自于图像L0L_0L0​的Patchx0x_0x0​,去跟来自于同序列的匹配图像的Patch以及来自于不同序列的图像的Patch进行匹配检索。相当于进一步增加了匹配的难度。对于匹配结果,如果与匹配的Patch(也就是同序列匹配图像相同位置的Patch)匹配,则标记为+1,如果匹配到同序列图像但不是匹配的Patch,则标记为0,匹配到其他图像则标记为-1。然后使用类似的验证和匹配的方法计算AP和mAP。

这个任务最大的特点就是对于同序列但是不匹配的Patch,给的标记是0,这样的作用是在统计精度的时候,标记为0的样本就被忽略了。作者对于这个的解释是说“The idea is that such patches are not detrimental for the purpose of retrieving the correct image, and such innocuous errors may occur frequently in the case of repeated structures in images.”(这种情况在检索任务中是无害的,且这种无害的情况在有重复纹理的图像中很容易发生。)
*关于这一点,我可能是对“检索“这个任务不是特别了解,但就其字面意思来说,在有同序列图像(也就是同一场景)Patch和不同序列图像(不同场景)Patch的情况下,相比起同序列不同位置的误匹配,匹配到不同场景的Patch显然表现地更一般;所以给不同序列的Patch标注了-1。而对同序列场景中的”内部“误匹配则更宽容地给出了0这样的标注。

本篇博客的内容就到此为止,后面会针对每个具体的环节依次展开介绍。

————————
20220424更新:
1、完善了匹配一节的介绍;
2、修正了文字中的部分排版问题。

————————
20220509更新:
完善了检索一节的介绍

局部描述子评价数据集HPatches介绍(一)相关推荐

  1. A performance evaluation of local descriptors——局部描述子评估译文(1,2,...)

    现有局部描述子的性能评估 Krystian Mikolajczyk                  Cordelia Schmid   计算机科学系               法国国立计算机与自动 ...

  2. A performance evaluation of local descriptors——局部描述子评估译文

    A performance evaluation of local descriptors--局部描述子评估译文(1,2,...) 现有局部描述子的性能评估 Krystian Mikolajczyk  ...

  3. ehd边缘直方图描述子 matlab,第 2 章 局部图像描述子

    第 2 章 局部图像描述子 本章旨在寻找图像间的对应点和对应区域.本章将介绍用于图像匹配的两种局部描述子算法.本书的很多内容中都会用到这些局部特征,它们在很多应用中都有重要作用,比如创建全景图.增强现 ...

  4. M2DP:一种新的三维点云描述子及其在回环检测中的应用

    文章:M2DP: A Novel 3D Point Cloud Descriptor and Its Application in Loop Closure Detection 作者:Li He , ...

  5. Python计算机视觉:第二章 图像局部描述符

    第二章 图像局部描述符 2.1 Harris角点检测 2.1.2 在图像间寻找对应点 2.2 sift描述子 2.2.1 兴趣点 2.2.2 描述子 2.2.3 检测感兴趣点 2.2.4 描述子匹配 ...

  6. Python计算机视觉——SIFT描述子

    目录 1 SIFT描述子 1.1SIFT描述子简介 1.2 SIFT算法实现步骤简述 1.3 SIFT算法可以解决的问题 2 关键点检测 2.1SIFT要查找的关键点 2.2关键点检测的相关概念 2. ...

  7. 计算机视觉-局部图像描述子

    目录 一.Harris角点检测器 二.SLFT(尺度不变特征变换) 1.兴趣点 2.描述子 3.检测兴趣点 4.匹配描述子 三.匹配地理标记图像 不行我还是忍不住想吐槽:我使用的工具是pycharm, ...

  8. Python计算机视觉编程第二章——局部图像描述子

    Python计算机视觉编程 局部图像描述子 (一)Harris 角点检测器 (二)SIFT(尺度不变特征变换) 2.1 兴趣点 2.2 描述子 2.3 检测兴趣点 2.4 匹配描述子 (三)匹配地理标 ...

  9. 二、【python计算机视觉编程】局部图像描述子

    局部图像描述子 (一)Harris角点检测器 (二)SIFT(尺度不变特征变换) (1)兴趣点 (2)描述子 (3)检测兴趣点 (4)匹配描述子 (三)匹配地理标记图像 (1)从Panoramio下载 ...

最新文章

  1. 计数排序之python 实现源码
  2. redis 相关操作
  3. CodeForces - 801C Voltage Keepsake(二分)
  4. leetcode 853. Car Fleet | 853. 车队(Golang)
  5. wordpress mysql 密码重置_WordPress忘记密码找回登录密码的四种行之有效的方法
  6. LOL服务器维护打排位算吗,LOL:请停止你的排位行为,这是连败前的征兆!再玩就会一直掉分...
  7. string.Empty和null三者的区别
  8. Oracle 导出DMP
  9. python的文件操作os_​Python:目录和文件的操作模块os.path
  10. STM32CubeIDE 下载与安装步骤(一)
  11. Java开源 J2EE框架(一)
  12. 还不了解小程序?看这一篇文章就够了
  13. meltdown linux检测,如何检查你的Linux PC是否受Meltdown和Spectre安全缺陷影响
  14. Android学习网站推荐
  15. 软件测试Day2知识点思维导图
  16. Ubuntu 10.04 安装声卡驱动
  17. EtherCAT总线运动控制器应用进阶一
  18. java签到功能的实现_java实现的签到系统
  19. JDK 19 / Java 19 正式GA
  20. Gentoo关于USE设定

热门文章

  1. office 卸载工具
  2. 计算机休眠usb充电,三星笔记本Win8如何开启USB接口休眠、关机时充电
  3. 承兑汇票识别API开发文档
  4. RK3399Pro LVDS接口触摸屏调试
  5. NodeMCU文档中文翻译 7 DHT温湿度传感器模块
  6. 2021 Cocoapods的简单安装、使用与更新版本(含M1安装方法)
  7. Tkmybatis快速入手
  8. 服务器raid模式修改成ide,SkyIAR 2.57 IDE_AHCI_RAID模式修改方案
  9. vs2019 利用Pytorch和TensorFlow分别实现DCGAN生成动漫头像
  10. 华为鸿蒙系统手机生态,暂无华为以外手机厂商明确表示手机使用鸿蒙系统,生态建设不完善或成主因...