基于哈希的图像检索

一、图像检索中哈希算法的使用过程:

1.在成绩管理系统中,我们知道学生的姓名和数学语文成绩,从数据中匹配这个记录,找到该学生,每次匹配需要比较姓名,数学成绩,语文成绩三个字段,数据维度较低,对于这种小量数据,我们可以线性匹配都可以解决。

2.小的图片数据库中,我们可以为每张图片加上标签,例如一张风景照,我么可以标记山,水,湖泊,房屋等等标签,我们搜索房屋关键字时,可以到数据库中去匹配,从而找到用户需要的图片。

3.但是在这个大数据时代,每天产生数以亿计的图片,并且对于图片这种高维数据,依然使用传统的方法已经很难解决检索问题。对于这种大规模数据的检索,近似近邻搜索可以达到很好的效果,它平衡了效率与准确率,使检索达到很好的效果。主要思想是,将每一张图片用一个相对较短的01编码表示,例如长度为64,128的编码,这个编码依然近似保持了图片空间的物理近邻关系。当用户上传一张图片时,使用哈希函数将它转化为01编码,然后计算这条编码与数据库中所有图片的编码进行距离计算(此时使用汉明距离计算)即是将该图片的二进制编码,与数据库中所有二进制编码进行异或运算,其中1的个数即为距离,对所有的距离进行排序,选择前100个距离最近的作为相近的图片,然后通过索引找到原始图片显示出来。

4.主要过程:

在做基于哈希的图像检索时,我使用cifar-10数据集,首先对该数据集提取gist特征,每张图片用一个向量表示,例如提取512个特征,则每张图片就使用一个512维的向量表示,一万张图片最后形成:10000*512的矩阵。将数据划分为训练集和测试集,训练集用来训练哈希函数。测试集用来测试查准率与查全率。根据训练集训练出哈希函数。将训练数据通过哈希函数转化为哈希函码,将测试数据转化为哈希码。计算测试数据到训练数据的距离,排序,选择距离最小的前100张图片,搜出来的100张图片就是近似近邻的图片。哈希码的形成过程如下图:

基于哈希的图像检索_第1张图片

二、DSH哈希算法

密度敏感哈希可以看作时局部敏感哈希的一个拓展,它也是基于超平面对数据集的划分来形成哈希码,不同之处在于,密度敏感哈希旨在挖掘数据的内部结构,根据数据分布,形成最合理的划分。

1.基于超平面的哈希算法对比,第三张图为密度敏感哈希

基于哈希的图像检索_第2张图片 

2.使用k-means方法划分聚类

将原始数据划分为K个聚类,该方法是十大经典数据挖掘算法之一,基本思想是:随机选择k个类心,然后将所有数据归到这k个类里,然后通多迭代优化类心,知道获得最小误差效果。

聚类步骤:

1)适当选择k个类的初始中心;

2)对任意一个样本,求其到k个中心的距离,将该样本归到距离最短的中心所在的类;

3)求出每个类心的平均值,即每个类心向量之和再除以每个类心点的个数;

(4)找到这个类心里与该平均值最近的点作为新的类心

(5)对于所有的c个聚类中心,如果利用(2)(3)(4)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。

该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。

首先从n个数据对象任意选择 k 个对象作为初始聚类中心,这k个初始类心尽量分开;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值;不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

3.近邻组对的形成

设近邻组队为r,计算第一个类到其它k-1个类的距离,对这k-1个类排序,选择前r个距离最短的类心为它的近邻组队,依次计算每一个类的近邻组对,形成一个k x r的矩阵。

中垂面的定义如下:

哈希函数定义如下:


其中:       


每一个近邻组对形成一个超平面一共形成,k*r个超平面,如果k的值为64即64个聚类,r为3则一共形成,192个超平面,当我们选择转化为64为哈希编码时,只需要64个超平面形成哈希函数,所以我们要从这192个超平面中选择64个最好的超平面形成哈希函数。

4.基于熵值的超平面的选择

在信息论中,熵是接收的每条消息中包含的信息的平均量,又被称为信息熵、信源熵、平均自信息量。这里, 消息代表来自分布或数据流中的事件、样本或特征。在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少信息:信息量可以被看成在学习 x 的值的时候的“惊讶程度”。如果有人告诉我们一个相当不可能的时间发生了,我们收到的信息要多于我们被告知某个很可能发生的事件发生时收到的信息。如果我们知道某件事情一定会发生,那么我们就不会接收到信息。

熵值公式表示为:

 

基于熵值最大化理论,我们选择熵值最大的超平面来形成哈希函数,即求出每个超平面对应的熵值,然后对熵值进行排序,选择熵值最大的的超平面。

Wi熵值的计算:




其中|Si|表示第i个聚类中元素的个数,Cio,表示平面Wi左边聚类中心,Ci1表示聚类右边中心。

找到L个熵值最大超平面形成哈希编码。

基于哈希的图像检索_第3张图片

你可能感兴趣的:(dsh,hashing,cifar10)