球哈希Spherical Hashing原理 及 在超分辨方法AIS中的应用

标签:  图像处理  计算机视觉 超分辨 哈希 最邻近搜索
72人阅读 评论(0) 收藏 举报
分类:

最新更新时间:2018.4.17  17:53


最近看了Eduardo Pérez-Pellitero 的AIS超分辨方法,里面用到 Spherical_Hashing的结构用于KNN搜索。

一开始并不清楚球哈希到底怎么建立的,看了原论文做个小总结。


Spherical Hashing

球哈希是什么呢?一般哈希方法都有哈希函数对不对?球哈希的哈希函数长这样:
球哈希函数
也就是说球哈希函数描述了数据空间的k个球,球心分别是Pk,半径分别是tk。(Pk,tk也是球哈希里最重要的参数,怎么设置呢?后面说。)
那么对于定义K个球的球哈希,最后的hash code就是长度为k的-1/+1字串,每一位分别表示样本是否属于某个球。

球哈希区别于其他哈希算法的最大不同是,其他哈希基于超平面对原始数据进行划分,但球哈希是基于一个一个球的。
看图说话:
基于超平面划分的哈希球哈希

那么球哈希对比于基于超平面划分的哈希算法有什么优势呢?
答案是,球哈希划分的区域是封闭且更紧凑的。
至少三个超平面才可画出一个封闭区域,而球哈希只要一个。
而且每个区域内样本的最大距离的平均值会更小,说明各个区域的样本是更紧凑的。这样更符合邻近的含义啊,更适合在进行相似搜索时使用。


注意C个超球体划分出的有界区域个数高达这个公式没整明白,,留个坑。。


现在就说球哈希函数的Pk,tk怎么确定。

Spherical Hashing训练过程

首先看我们的目标。

1、我们希望每个球把样本都是均分的,就是球内球外各占一半。
2、希望每个球的交叉部分不要太多,也就是每个哈希函数相对独立。
基于第一个目标我们会动态选择半径tk,基于第二个目标我们会动态移动球心的位置。
方便起见,可以定义两个辅助变量:

第一个表示落入第i个球中的样本数量,第二个表示落入第i,第j个球交叉部分的样本数量。
这样一来就有思路了,先随机选k个球心,然后根据目标1设定半径。
对于交叉样本太多的两个球心,赋予一个repulsive的力,对离得太远的两个球赋予一个attractive 的力。
然后计算这些力的累加作用,更新球心,再根据目标一更新半径。
重复这个过程,直到满足收敛条件。
球哈希训练算法

论文给出的算法时间复杂度O((c^2+cD)m),没看明白。D是数据的维度,m是样本个数,c是编码长度,也就是超球体个数。
第一个for循环c^2复杂度,第二个for循环c复杂度。计算每个样本到中心的距离,cm的复杂度。确定半径,排序,最低也是cm的复杂度。计算Oij,每列求和,m的复杂度。。。。神晕(◎﹏◎) 留个坑。。。


 

那么基于编好的球哈希code,怎么定义两个code之间的距离,也就是类间距呢?
传统方法是用汉明距离。但没有考虑到球内距离更近的事实。所以作者对汉明距离进行了一点改动:
球哈希距离


注意,球哈希的生成方式只保证了数据分配的均衡性,以及每个哈希函数的相对独立性。
但是,对于一个封闭区域,可能有多个样本,也存在对于某个样本不属于任何一个球的情况!


在AIS中的应用

AIS用球哈希来干什么?

首先AIS是基于字典来做超分辨的。这里不细说。AIS在训练好一个字典(包含K个字典原子,作为anchor,代表了每个regressor),把input image分成很多个patch。

球哈希在AIS中做的是这样一件事:对于每个patch,最邻近的regressor

这里有歧义。
根据原文中 in testing time, find the right regressor(也就是说已经有了回归器啊)判断为对于每个patch,最邻近的regressor。。但是VI-C部分说,Our hashing scheme defines several hash codes or buckets, and the regressors are labeled with them during training time. 这个training time是线下计算回归器还是hash函数训练呢??这里暂且认为是hash函数训练阶段。因为前一句中是“the number of hyperspheresused during testing time.

AIS给每个regressor和每个patch都会进行球哈希编码。

最佳情况是一个hash code 对应一个regressor(对应patch个数没有限制),这样就解决了回归邻域的搜索问题。
但是这样hash code会很长啊,总的regressor个数是K,hash code数目是2^s,只要每个类的regressor数目不是很多就可以了~~reranking的时间也不会很长~~~
也就是作者提到的逆搜索。

逆搜索


那么问题就来了。

一个hash code对应多个patch没有问题,那对应多个regressor呢?

这相当于一个patch可选择的regressor不唯一了!!文中提到这种情况要re-ranking,具体怎么做呢?
没有找到明确的解释。我认为是对这个闭域里的每一个regressor计算一次距离,取距离最小对应的regeressor。因为球哈希在这里目的就是减少搜索范围。

一个patch所在的闭域没有一个regressor怎么办?
这种情况比较少,所以设置一个通用的regressor就可以了。

AIS中训练哈希函数用什么数据集呢?是train set吗?从前面对Our hashing scheme defines several hash codes or buckets, and the regressors are labeled with them during training time的理解,推断为用字典原子训练。因为最后希望哈希函数均分的也是regressor的数目。 


AIS对球哈希的修改:

球哈希函数中用欧拉距离来判断是否属于某个球,但AIS认为,极对称的点也是相似甚至相同的,如果用欧拉距离就无法描述这种相似性。因此提出一种变换方案处理极对称的点。
一、设计一个超平面,做对称变换。

eq is the qth standard basis in the Euclidean m space.
二、把欧拉距离换成新定义的距离。

变换之后达到的效果:把所有的样本都强制变换到一个“正”的半空间。



参考:

Spherical_Hashing主页:https://sglab.kaist.ac.kr/Spherical_Hashing/

主页上面可以下载论文/slide/源码(matlab/c++)
AIS: https://perezpellitero.github.io/project_websites/ais_sr.html


查看评论

应用调试方法合集

用的最多的应用调试方法是strace
  • 2017年01月17日 11:40

球哈希Spherical Hashing

Definition Spherical Hashing也是一种产生Compact Binary特征的Hashing算法,不同于基于超平面的LSH Family的Hashing技术,Spherica...
  • zwwkity
  • zwwkity
  • 2013-02-04 10:26:15
  • 3508

谱哈希spectral hashing

请先阅读有关图的基本知识,图的拉普拉斯矩阵分析以及谱聚类相关内容,谱哈希基于上述技术基础。               谱哈希对图像特征向量的编码过程可看做是图分割问题,借助于对相似图的拉普拉斯矩...
  • zwwkity
  • zwwkity
  • 2013-02-19 17:35:02
  • 8811

Spherical Hashing解读

Spherical Hashing是一种二进制编码嵌入技术,不同于现存的许多哈希技术,都是使用超平面来将数据点分离到两个不同的集合,并根据它们每一个点被分配到的集合,分配两个不同的二进制编码(+1或者...
  • Ying_Xu
  • Ying_Xu
  • 2016-01-22 17:20:55
  • 984

哈希学习(2)—— Hashing图像检索资源

哈希方法 公布代码的: CSDSH: Column Sampling based Discrete Supervised Hashing SGH :Scalable Graph Hashing ...
  • flowerboya
  • flowerboya
  • 2016-07-11 00:25:52
  • 3746

局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍

局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍。本文主要介绍一种用于海量高维数据的近似最近邻快速查找技术——局部敏感哈希(Locality-Sensitive ...
  • icvpr
  • icvpr
  • 2013-10-06 12:07:30
  • 79709

KSH(Supervised Hashing with Kernels)

Supervised Hashing with Kernels 简单的介绍了KSH(基于核函数的监督哈希),文章还是挺不错的,PPT里面有很详细的介绍和推导,下载浏览PPT就可以对这篇 CVPR 2...
  • lilai619
  • lilai619
  • 2015-05-06 13:45:17
  • 1937

spectral hashing--谱哈希源码解析

论文里面看到了谱哈希用来找子集的用处,不管有没有用,先转再说 原文地址:http://blog.sina.com.cn/s/blog_67914f290101d2xp.html 最近看了有关谱哈希...
  • zb1165048017
  • zb1165048017
  • 2016-05-25 09:43:24
  • 1788

图像语义哈希方法总结

最近在回顾一些经典的图像哈希算法,本文大致介绍了一些常用的图像哈希算法,暂时先列一个框架,待日后补充。参考链接: 【1】基于内容的图像哈希算法研究 【2】图像聚类-谱聚类 【3】球哈希Spher...
  • lcx543576178
  • lcx543576178
  • 2017-03-09 12:42:04
  • 2052

Deep哈希算法介绍

微信公众号:深度学习大讲堂 作者:程程 链接:https://zhuanlan.zhihu.com/p/21396173 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请...
  • LeeWei4939
  • LeeWei4939
  • 2017-12-14 20:18:32
  • 109
    个人资料
    等级:
    访问量: 690
    积分: 21
    排名: 211万+
    文章存档