HPatches中三种评价指标详解

1,322 阅读4分钟

在HPatches论文中,为了评价基于patch的描述子,提出了三种评价任务,并论述了其对应的评价指标和计算方法,三种评价任务是:

  1. patch verification: 面片验证
  2. image matching:图像匹配
  3. patch retrieval:面片检索

这些任务在模仿patch的典型应用场景,具体论述如下

0. 准确性和召回率

首先介绍HPatches中关于准确性和召回率的计算方法:

首先对于一个patch查询,给出一个有序的patch列表,使用 y=(y1,,yn){1,0,+1}n\mathbf{y} = (y_1, \ldots, y_n) \in \{-1, 0, +1\}^n 表格式这个列表对应标签,-1代表negative, +1代表positive, 0代表ignore。

那么对于 rank ii 的准确性和召回率分别使用如下公式进行计算

准确性: 前 ii 个元素中positive的样本占比

Pi(y)=k=1i[yk]+k=1iykP_i(\mathbf{y}) = \frac{\sum_{k=1}^{i}[y_k]_+}{\sum_{k=1}^{i}|y_k|}

其中[z]+=max{0,z}[z]_+ = \max \{0, z\}

召回率: 前 ii 个元素中positive的样本整个序列中全部positive样本的比例

Ri(y)=k=1i[yk]+k=1n[yk]+R_i(\mathbf{y}) = \frac{\sum_{k=1}^{i}[y_k]_+}{\sum_{k=1}^{n}[y_k]_+}

平均准确性

1. patch verification: 面片验证

该任务是用来评价两个面片是否是从相同的测量方法中生成的(classify whether two patches are extracted from the same measurement),也就是判断两个patch是否是匹配的。

具体来说,给定一个成对的patch pair的列表 P=((xi,xi,yi),i=1,,N)\mathcal{P} = ((\mathbf{x}_i, \mathbf{x}'_i, y_i), i=1, \ldots, N),这里面包含了正负样本,xi,xiRt×t×c\mathbf{x}_i, \mathbf{x}'_i \in \mathbb{R}^{t \times t \times c}表示一个patch, 而yi=±1y_i=\pm 1

根据这个列表,计算每个pair间的匹配度(confidence score)sis_i,并根据该匹配度对该列表进行降序排列,得到新的列表,从中提取其label,按照上述准确性和召回率计算方法,计算APyπ1,,yπNAP(y_{\pi 1}, \ldots, y_{\pi N}), 其中π\pi是排序后的编号,保证sπ1sπ1sπNs_{\pi 1} \geq s_{\pi 1} \geq \ldots \geq s_{\pi N}

这个和训练的时候直接使用的patch pair 很相似,HPatchs数据集总共产生了2×1052 \times 10^5个正样本和1×1061 \times 10^6个负样本

需要注意,这里使用匹配度进行排序,而没有对匹配度计算方法进行约束,这也就可以自定义匹配度计算方法,甚至有研究使用metric learning的方法,直接学出来。

文章中也说由于样本分布不平衡,因此没有使用ROC曲线,而且这种也和真实图像匹配任务不是很想,因此才有后面一种更加贴合图像匹配任务的评价任务

2. image matching:图像匹配

该任务是用来评价面片的描述子能够多大程度上确定图像间的匹配情况(identify the correspondences in two images)。

具体的,在这个任务中,使用一个图像面片的描述子和另一个图像面片的描述子进行匹配。

假设一个图像LkL_k是包含N个Patch, Lk=(xik,i=1,,N)L_k = (\mathbf{x}_{ik}, i = 1, \ldots, N),那么给定一个图像对D=(L0,L1)\mathcal{D}=(L_0, L_1),那么经过匹配后,xi0\mathbf{x}_{i0}就和xi1\mathbf{x}_{i1}是相匹配的面片。我们可以使用该图像对来对算法进行评价

具体的,给定参考图像中L0L_0的一个patch xi0\mathbf{x}_{i0}, 其在目标图像L1L_1中的匹配patch是xσi0\mathbf{x}_{\sigma_i0},匹配的可信度是siRs_i \in \mathbb{R}, 那么其label可以使用如下方式给定

yi=2[σi=?i]1y_i = 2[\sigma_i \overset{?}= i] - 1

也就是说正确匹配为+1,错误匹配为-1。进而可以对这个序列使用上述方式计算AP,对于整个数据集来说,总体指标是所以匹配对DD的平均准确度的均值。

这个评价标准就和图像匹配过程非常类似,参考图像中的每个特征点在目标图像中找到对应的匹配点,并最终计算相应的匹配度。

3. patch retrieval:面片检索

该任务时给定一个待检索面片序列以及一个面片池(patch pool),测试使用面片描述子能够多大程度上从面片池中获得待检索面片,需要注意的是,这个面片池可能从多张图像中生成,存在许多干扰项。

给定一个集合P=(x0,(xi,yi),i=1,,N)\mathcal{P} = (\mathbf{x}_0, (\mathbf{x}_i, y_i), i = 1, \ldots, N), 其中x0\mathbf{x}_{0}是从参考图像L0L_0得到的,其余patch则是从相同场景的其他图像Lk,k=1,,KL_k, k = 1, \ldots, K以及很多其他干扰图像中得到的,x1\mathbf{x}_{1}是正确匹配则yi=+1y_i = +1,否则等于-1。由于匹配图像有K景,因此最多有K个正样本,其余都是负样本,因此如果检索到的patch是在匹配图像中,但并不是匹配patch,则将忽略该结果,即yi=0y_i = 0

最后对每个xi\mathbf{x}_i赋予一个置信度,则可以使用上述方法计算AP。

HPatch总共给出了1×1041 \times 10^4个patch, 每个patch有5个正样本,以及2×1042 \times 10^4个干扰样本。

4. 最终结果

结果