CN106980656A - 一种基于二值码字典树的搜索方法 - Google Patents
一种基于二值码字典树的搜索方法 Download PDFInfo
- Publication number
- CN106980656A CN106980656A CN201710142528.6A CN201710142528A CN106980656A CN 106980656 A CN106980656 A CN 106980656A CN 201710142528 A CN201710142528 A CN 201710142528A CN 106980656 A CN106980656 A CN 106980656A
- Authority
- CN
- China
- Prior art keywords
- value code
- talk
- value
- string
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/50—Information retrieval; Database structures therefor; File system structures therefor of still image data
- G06F16/51—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于二值码字典树的搜索方法,包括:获取数据库中每一图像的二值码,将每个二值码划分为m段子串;针对数据库中所有图像的第j段子串,建立该第j段子串的一个二值码字典树;所述二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点;获取待查询图像的二值码以及该二值码的m段子串;针对待查询图像二值码的第j段子串,在数据库中所有图像的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码;遍历待查询图像二值码的所有子串,获得每一子串的查询结果;j小于等于m。本发明的方法在汉明空间精确近邻搜索时可以降低查找数量,提高搜索速度。
Description
技术领域
本发明涉及计算机视觉技术,具体涉及一种基于二值码字典树的搜索方法。
背景技术
近年来,高维向量的二进制表达问题(binary representation)获得了广泛的关注。二进制编码的目标是将特征压缩为紧凑的二值码(binary code)。二值码具有易存储、易索引、对比速度快等优点,是处理大规模数据应用的首选。尽管二值码之间的汉明距离比对速度非常快(1秒内能完成数百万次比对),但当数据规模特别大时,线性扫描整个数据集的方式仍然无法实现实时的检索。因此,设计高效的索引算法来提高大规模数据集下二值码的检索速度是十分必要的。
常见的一种索引二值码并进行近邻搜索的方法是使用哈希表,其中二值码直接作为键值(地址)插入哈希表中。大量测试表明该方法的检索速度相比线性扫描有显著提高。然而,实践中使用哈希表需消耗大量内存,本质上是以空间换时间。理想状况下为索引长度为d的二值码需要2d个哈希桶。当d增长至64时,264≈1019个哈希桶的内存消耗是不可接受的。
为了能够处理长向量,业内人士提出了分段索引哈希(Multi-Index Hashing,简称MIH),采用一组哈希表来索引二值码的子串(substrings)。特别地,MIH将二值码划分成若干互斥(不重叠不相交)的子串,对每个子串单独采用一个哈希表索引,不再索引整个二值码。这种分段的策略实现了对长向量的高效索引,实验结果表明MIH在长度为64,128,256的长向量上能够实现显著的检索加速。
基于哈希表的索引方法的问题在于,需要枚举查询向量q的所有可能的汉明距离不超过r的近邻,并查找(lookup)对应的哈希桶检查其是否存在。给定向量长度d以及搜索半径r,需要查找的哈希桶的总数为
其中L(d,r)随r指数增长。当r很大时,搜索范围的增长速度非常快。然而,在实际应用中发现大部分哈希桶都是空的,访问空的桶(称之为查找缺失),既不必要且将浪费大量时间。
发明内容
鉴于上述问题,本发明提出了克服上述问题或者至少部分地解决上述问题的一种基于二值码字典树的搜索方法。
为此目的,第一方面,本发明提出一种基于二值码字典树的搜索方法,包括:
获取数据库中每一图像的二值码,将每个二值码划分为m段子串;
针对数据库中所有图像的第j段子串,建立该第j段子串的一个二值码字典树;所述二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点;
获取待查询图像的二值码以及该二值码的m段子串;
针对待查询图像二值码的第j段子串,在数据库中所有图像的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码;
遍历待查询图像二值码的所有子串,获得每一子串的查询结果;
其中:m,j均为正整数,r为预先确定的非负整数值,且j小于等于m。
可选地,所述方法还包括:
根据待查询图像二值码的所有子串的查询结果,进行合并去重测试,获取待查询图像的搜索结果。
可选地,针对数据库中所有图像的第j段子串,建立该第j段子串的一个二值码字典树的步骤,包括:
依据第j段子串长度和预设的参数值c,确定二值码字典树的最小索引单位;
以及,根据预设的参数值b和最小索引单位,取前b个比特建立二值码字典树的节点,构建该第j段子串的二值码字典树;
其中,所述二值码字典树的根节点依据该第j段子串左侧的第一个最小索引单位建立分支;对于第i层的节点,依据该第j段子串从左至右的第i个最小索引单位建立分支;所述叶子节点为所述二值码字典树的末节点;
所述二值码字典树中的每个节点对应于一个字符串,根节点对应于空串;对于第i层的节点,其对应的字符串为该第j段子串中的前i个最小索引单位组成的长度为i*c的字符串;
其中b,c均为正整数,b为c的倍数,所述根节点和第i层的节点均为所述二值码字典树的内部节点,i为小于等于b/c的正整数。
可选地,每一个二值码字典树中的每一个叶子节点均为以容器形式存在的末节点;
所述容器内含有所有插入到这个末节点的字符串,这些字符串含有相同的前缀,即该末节点所对应的长度为b的字符串。
可选地,针对待查询图像二值码的第j段子串,在数据库中所有图像的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码的步骤,包括:
从所述二值码字典树的根节点开始遍历该二值码字典树;
对于该二值码字典树中的每一个节点,计算该节点对应的字符串与所述待查询图像二值码的第j段子串的汉明距离;
若计算的汉明距离大于r’,则遍历在当前节点处停止;
或者,当遍历至叶子节点时,在叶子节点所属的容器中获取相应的汉明距离不超过的二值码。
可选地,获取数据库中每一图像的二值码,将每个二值码划分为m段子串的步骤,包括:
获取数据库图像的二值码,该二值码长度为d;
采用分段策略将每个二值码划分为m个不重叠不相交的子串;
若d为m的倍数,则将二值码分为m段长度相同的子串,每段长度均为s=d/m;
若d不是m的倍数,令v等于d除以m所得的余数,则分段时,前v段的长度为后m-v段的长度为
和/或,获取待查询图像的二值码以及该二值码的m段子串的步骤,包括:
获取待查询图像的二值码,该二值码长度为d;
采用分段策略将每个二值码划分为m个不重叠不相交的子串;
若d为m的倍数,则将二值码分为m段长度相同的子串,每段长度均为s=d/m;
若d不是m的倍数,令v等于d除以m所得的余数,则分段时,前v段的长度为后m-v段的长度为
其中d,m,s均为正整数,m小于等于d。
可选地,若分段后每一字串长度s=32;则b=30,c=3或b=28,c=4;以及,建立数据库中所有图像的m段子串的二值码字典树的过程为离线阶段实现。
第二方面,本发明提供一种二值码近邻搜索方法,包括:
对数据库中的所有二值码进行分段处理,获得m段子串;
针对所有二值码的第j段子串,建立该第j段子串的一个二值码字典树;所述二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点;
接收待查询的二值码,将待查询的二值码分为m段子串;
针对待查询二值码的第j段子串,在数据库中所有二值码的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码;
遍历待查询二值码的所有子串,获得每一子串的查询结果;
根据待查询二值码的所有子串的查询结果,进行合并去重测试,获取待查询二值码的查询结果;
其中:m,j均为正整数,r为预先确定的非负整数值,且j小于等于m。
可选地,针对所有二值码的第j段子串,建立该第j段子串的一个二值码字典树的步骤,包括:
依据第j段子串长度和预设的参数值c,确定二值码字典树的最小索引单位;
以及,根据预设的参数值b和最小索引单位,取前b个比特建立二值码字典树的节点,获得该第j段子串的二值码字典树;
其中,所述二值码字典树的根节点依据该第j段子串左侧的第一个最小索引单位建立分支;对于第i层的节点,依据该第j段子串从左至右的第i个最小索引单位建立分支;所述叶子节点为所述二值码字典树的末节点;
所述二值码字典树中的每个节点对应于一个字符串,根节点对应于空串;对于第i层的节点,其对应的字符串为该第j段子串中的前i个最小索引单位组成的长度为i*c的字符串;
其中b,c均为正整数,b为c的倍数,所述根节点和第i层的节点均为所述二值码字典树的内部节点。
可选地,每一个二值码字典树中的每一个叶子节点均为以容器形式存在的末节点;所述容器内含有所有插入到这个末节点的字符串,这些字符串含有相同的前缀;
相应地,针对待查询二值码的第j段子串,在数据库中所有二值码的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码的步骤,包括:
从所述二值码字典树的根节点开始遍历该二值码字典树;
对于该二值码字典树中的每一个节点,计算该节点对应的字符串与所述待查询图像二值码的第j段子串的汉明距离;
若计算的汉明距离大于r’,则遍历在当前节点处停止;
或者,当遍历至叶子节点时,在叶子节点所属的容器中获取相应的汉明距离不超过的二值码。
由上述技术方案可知,本发明提出的基于二值码字典树的搜索方法,通过建立数据库图像的所有子串的二值码字典树,进而在搜索过程中检查出现在二值码字典树的节点上的元素,可有效避免现有技术中MIH方案的查找缺失问题,从而能降低查找数量,提高搜索速度。
附图说明
图1(a)和图1(b)为本发明一实施例中的二值码字典树的示意图;
图1(c)为本发明一实施例中的采用MBNT查找r近邻的示意图;
图2为本发明一实施例中的利用MBNT进行图像搜索的过程示意图;
图3为本发明一实施例中的基于二值码字典树的搜索方法的流程示意图;
图4为本发明一实施例中的二值码近邻搜索方法的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
汉明空间中的近邻搜索问题有两个,即K近邻搜索和r近邻搜索。其中,K近邻搜索要找到数据集中与给定查询向量相比汉明距离最近的K个向量;r近邻搜索要找到数据集中所有与查询向量相比汉明距离不超过一个固定值(r)的所有向量。这两个问题本质上是可以互相转化的。
本发明实施例中主要是解决第二个问题,即r近邻搜索,但亦可用于解决K近邻搜索。r近邻搜索问题的形式化描述如下:
定义1
给定数据集以及查询q,其中bi,q∈{0,1}d(均为长度为d的二值码),q的r近邻Dr(q,B)定义为所有B中与q相比差别不超过r个比特的向量:
Dr(q,B)={bi∈B:H(bi,q)≤r}
其中H(.)代表汉明距离。
传统方案中,基于哈希表的方法将二值码直接作为哈希表中的地址。给定查询q以及搜索半径r,需枚举q的所有可能的r近邻向量,然后查找相应的哈希桶确定其是否存在。该方法需要一个包含2d个桶的哈希表来索引d比特的二值码。当d为64比特或者更大时,该方法的内存消耗变得不可接受。
另外,现有技术的MIH将二值码划分为m个不重叠不相交的子串,每个子串的长度均为s=d/m比特。根据鸽巢原理,如果两个二值码p和q的差别(汉明距离)不超过r比特,则它们的m个子串中至少有一个子串的差别不超过比特。故MIH为m个子串建立了m个哈希表T1,...,Tm。给定查询q以及相应的子串q1,...,qm,MIH首先为每个子串qj在Tj中查找r'近邻,记为Dr'(qj)。然后将所有r'近邻集合合并为一个候选项集合S=∪jDr'(qj)。最后,测试所有集合S中的候选项并仅保留q的r近邻。
下面考虑MIH的时间消耗。先计算每一个子串带来的消耗,然后乘以m以得到总的结果。假设二值码在汉明空间中呈均匀分布。对于每一个子串,查找阶段需要检查的哈希桶的数量为
lookupMIH(s)=L(s,r')
记n为数据集中二值码的总数。由于哈希表中共有2s个桶,平均每个桶内的元素数量为n/2s。则需要测试的候选项数量为
故,搜索查询q的r近邻的总的时间消耗为
在大多数应用场景下n<<2s,这意味着lookup在cost函数中占据主导。另一方面,n远小于2s导致哈希表中存在着大量的空桶,检查这样的空桶是不必要且浪费时间的。
由此,本发明实施例中采用分块多叉的二值码字典树来避免检查缺失,从而降低查找阶段的开销,提高搜索速度。
结合上述内容,本发明实施例主要是为了解决汉明空间中的精确近邻搜索问题,即给定一个查询向量q,在数据库中查找q的r近邻(或K近邻),也就是查询向量q在汉明空间中的所有r近邻。
本发明实施例提出了一种新的数据结构——分块多叉二值码字典树结构(MULTI-BLOCK N-ARY TRIE,MBNT),即涉及汉明空间近邻搜索方法中的MBNT(如图1b所示),并利用它解决汉明空间的近邻搜索问题。
在本发明的MBNT中,例如,将设置二值码字典树中的最小索引单位;在给定一个查询向量时,通过遍历二值码字典树中的节点实现近邻搜索(如图1b所示)。为此,通过检查出现在二值码字典树中节点上的元素,查找缺失问题能够被有效避免,从而能提高搜索速度,即实现了高效的访问速度和内存开销。
另外,本发明实施例还使用了与MIH相同的分段策略以应对长向量检索。例如,将数据库中每个图像的二值码划分为m个不重叠不相交的子串并分别建立所有相同段子串的二值码字典树。下面讨论如何为每个子串设计高效的索引结构/字典树结构。
图1a中示出了8个6比特的二值码B={000000;000010;000011;000101;010010;011000;011101;011111},图1(a)示出的是一种二值码字典树;图1(b)示出了一种分块多叉的二值码字典树;图1(c)为使用MBNT搜索r近邻的示例。其中查询向量q=111101,搜索半径r=2;MBNT中的遍历路径加粗标出。
在本发明实施例中,二值码字典树是一个树结构,树上的每个节点u对应于一个字符串w,且满足该节点的所有后代所对应的字符串均含有相同的前缀w。根节点对应于空字符串。二值码字典树中深度为l的节点代表了含有相同的前l个字符的字符串集合,其分支(儿子节点)则基于字符串的第l+1个字符。用二值码构造的字典树是一种特殊情况,此时的二值码字典树为一颗二叉树,因为每个节点仅有0和1两个分支。图1(a)是二值码字典树的一个示例。
本发明实施例中的MBNT将二值码中连续的c个比特——称作一个块,作为二值码字典树中的最小索引单位。具体的,给定长度为s比特的二值码,将每c个比特看做一个块,则共有s/c个块,每个块可以表达2c个不同的符号。
特别地,若设定c=1,MBNT就变成了二叉字典树。将若干个比特合并为一个块的原因在于既能提高二值码字典树的访问速度又能降低内存开销,因为索引s比特的字符串需要s层的二值码字典树,当s很大时,二值码字典树将变得很深。
此外,将二值码字典树中的每个叶子节点以容器形式存在,其中包含数据库中所有以该叶子所对应的字符串为前缀的字符串。在实践中,仅采用前b个比特(b≤s)建立二值码字典树的节点,以此来降低内存开销。图1(b)是MBNT的一个示例,其中数据集B={000000,000010,000011,000101,010010,011000,011101,011111}。在图1(b)中b=4,c=2。
特别说明的是:采用一个静态结构——满2c叉树,来实现分块多叉的二值码字典树。一个1比特的布尔型标志即可表示每个节点是否真实存在。容器采用一个静态数组来实现。b应设定为c的倍数。增大b可以帮助降低叶子密度,但同时会增加树上的访问时间。通常,对于32比特的子串设定b=30,c=3或b=28,c=4。
以下举例说明使用MBNT搜索r近邻
给定查询向量q以及搜索半径r,采用遍历MBNT的方式来搜索r近邻。遍历从根开始,设定初始汉明距离h=0。当遍历当第l层的节点时,计算出该节点对应的字符串与q的前l个块的汉明距离,若该距离大于r,则遍历在这个节点处终止。当到达叶子节点时,检查对应的容器,返回所有与q的汉明距离h≤r的二值码。图1(c)是使用MBNT搜索r近邻的一个示例,算法1为伪代码。
算法1.汉明空间中的r近邻搜索
给定查询向量的子串{qj}m j=1,二值码字典树{Tj}m j=1,搜索半径r,分块参数c。设定初始化
此外,给定b的取值,MBNT至多包含p=2b个叶子节点。假设二值码在汉明空间中呈均匀分布,且总共插入n个二值码到MBNT中。则任意叶子节点在MBNT中不存在的概率为此时,由于p的值很大(1-1/p)p≈1/e。
于是,叶子节点密度的期望值为
用lookupMIH(s)表示查找阶段总共需要枚举的r近邻的数量,则MBNT的期望查找数量为:
其中1/density(b)代表了MBNT算法在查找阶段相对哈希表算法的加速比。当s=32,b=30,n=5*107时,density(b)≈0.045。这意味着95.5%的查找项能够被MBNT算法剔除。
进一步地,结合图2所示,图像搜索分为两个阶段,离线阶段和在线阶段。
离线阶段的工作主要为数据库中图像提取特征和构建字典树,具体步骤为:
步骤01:对数据库图像提取特征,并将特征压缩(二值化)为紧凑的二值码。
本实施例中是针对数据库中每一图像提取特征,并获取每一图像的紧凑二值码。
在实际使用时,该处不受提取特征方法以及特征压缩(二值化)方法所限。任意的特征(如SIFT,VLAD,FisherVector,GIST,CNN特征等)以及任意的二值化方法(如局部敏感性哈希LSH,迭代量化ITQ,谱哈希SH,DeepHash等)产生的二值码均可适用于本发明的方法。
步骤02:对二值码进行索引。
例如,将二值码划分为m段不重叠不相交的子串,并构建m个二值码字典树(MBNT),将所有图像的第j段串插入到第j个MBNT中。
可理解的是,本实施例中是对每一图像的紧凑二值码划分为m段子串,针对所有图像的相同段子串建立一个二值码字典树。
在线阶段的主要步骤有:
步骤03:对查询图像提取特征,并将特征压缩(二值化)为紧凑的二值码。
本实施例中可采用现有技术中的任意方式提取特征,并获得紧凑二值码,本实施例不对其进行限定。
步骤04:利用搜索算法,在上述离线方式建立的响应的二值码字典树中查找查询向量在汉明空间中的近邻。
步骤05:根据近邻的ID返回搜索结果。
为更清楚的说明搜索过程,参见如图3所示,图3所示的方法包括下述的步骤:
301、获取数据库中每一图像的二值码,将每个二值码划分为m段子串。
本实施例中可采用现有技术中的任意方式获取每一图像的二值码,这里的二值码可为紧凑二值码,本实施例不对其进行限定。
举例来说,获取数据库图像的二值码,该二值码长度为d;采用分段策略将每个二值码划分为m个不重叠不相交的子串;
若d为m的倍数,则将二值码分为m段长度相同的子串,每段长度均为s=d/m;
若d不是m的倍数,令v等于d除以m所得的余数,则分段时,前v段的长度为后m-v段的长度为其中d,m,s均为正整数,m小于等于d。
302、针对数据库中所有图像的第j段子串,建立该第j段子串的一个二值码字典树。
本实施例中,二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点。树结构的节点分为内部节点和外部节点。外部节点指的就是叶子节点(其特征为没有子节点,在树的最下层),内部节点指非叶子节点。根节点也属于内部节点。
应说明的是,在本步骤中,遍历所有段子串,建立有所有图像相同段的二值码字典树。
303、获取待查询图像的二值码以及该二值码的m段子串。
举例来说,获取待查询图像的二值码,该二值码长度为d;
采用分段策略将每个二值码划分为m个不重叠不相交的子串;
若d为m的倍数,则将二值码分为m段长度相同的子串,每段长度均为s=d/m;
若d不是m的倍数,令v等于d除以m所得的余数,则分段时,前v段的长度为后m-v段的长度为
其中d,m,s均为正整数,m小于等于d。
304、针对待查询图像二值码的第j段子串,在数据库中所有图像的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码。
305、遍历待查询图像二值码的所有子串,获得每一子串的查询结果。
上述的m,j均为正整数,r为预先确定的非负整数值,且j小于等于m。
特别说明的是,上述步骤301和步骤302可为离线方式完成,即属于离线阶段,后续步骤303至步骤305可为在线方式完成。
在实际应用中,上述方法还包括下述的步骤306:
306、根据待查询图像二值码的所有子串的查询结果,进行合并去重测试,获取待查询图像的搜索结果。
需要说明的是,某一子串距离小于等于r’是整串距离小于等于r的必要条件而非充分条件。进而上述步骤305中的查询结果是正确结果(即搜索结果)的超集。
在合并去重之后,还需要进行一步必要的测试工作。即把所有返回的结果计算一遍整串的汉明距离确定是否小于等于r,剔除大于r的项,进而得到搜索结果。
在一种可选的实现方式中,前述的步骤302可包括下述的图中未示出的步骤3021至步骤3022;
3021、依据第j段子串长度和预设的参数值c,确定二值码字典树的最小索引单位;
3022、根据预设的参数值b和最小索引单位,取前b个比特建立二值码字典树的节点,构建该第j段子串的二值码字典树;
其中,所述二值码字典树的根节点依据该第j段子串左侧的第一个最小索引单位建立分支;对于第i层的节点,依据该第j段子串从左至右的第i个最小索引单位建立分支;所述叶子节点为所述二值码字典树的末节点;
所述二值码字典树中的每个节点对应于一个字符串,根节点对应于空串;对于第i层的节点,其对应的字符串为该第j段子串中的前i个最小索引单位组成的长度为i*c的字符串;
其中b,c均为正整数,b为c的倍数,所述根节点和第i层的节点均为所述二值码字典树的内部节点,i为小于等于b/c的正整数。
进一步地,本实施例了中的每一个二值码字典树中的每一个叶子节点均可为以容器形式存在的末节点;
所述容器内含有所有插入到这个末节点的字符串,这些字符串含有相同的前缀,即该末节点所对应的长度为b的字符串。
特别说明的是,在具体实现过程中叶子的容器内记录的实际上是图像的ID而不是二值码本身(类似倒排索引。从根到叶子的路径即可推断出二值码,故记录二值码没有意义)。若数据库中有两个图像二值码的某一段子串完全相同,则它们在对应字典树中将被记录在同一个叶子内,一个叶子内可能需要记录多个图像的ID,故容器是必要的。
在另一种可选的实现方式中,前述的步骤304可包括下述的图中未示出的步骤3041至步骤3044;
3041、从所述二值码字典树的根节点开始遍历该二值码字典树;
3042、对于该二值码字典树中的每一个节点,计算该节点对应的字符串与所述待查询图像二值码的第j段子串的汉明距离;
3043、若计算的汉明距离大于r’,则遍历在当前节点处停止;或者,当遍历至叶子节点时,在叶子节点所属的容器中获取相应的汉明距离不超过的二值码。
实验证明,若分段后每一字串长度s=32;则b=30,c=3或b=28,c=4。
上述实施例主要为一般场景下的图像(视频)搜索。通过将二值码的若干比特合并成一个块,降低了二值码字典树的深度和内存开销,提高了二值码字典树的访问速度。
在搜索时,利用分块多叉的二值码字典树中节点的记录信息能够有效避免查找缺失问题,提高搜索速度。
另一方面,本发明实施例还提供一种二值码近邻搜索方法,如图4所示,图4所示的方法包括下述的步骤:
401、对数据库中的所有二值码进行分段处理,获得m段子串;
402、针对所有二值码的第j段子串,建立该第j段子串的一个二值码字典树。
本实施例中国,二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点。
也就是说,依据第j段子串长度和预设的参数值c,确定二值码字典树的最小索引单位;
以及,根据预设的参数值b和最小索引单位,取前b个比特建立二值码字典树的节点,获得该第j段子串的二值码字典树;
其中,所述二值码字典树的根节点依据该第j段子串左侧的第一个最小索引单位建立分支;对于第i层的节点,依据该第j段子串从左至右的第i个最小索引单位建立分支;所述叶子节点为所述二值码字典树的末节点;
所述二值码字典树中的每个节点对应于一个字符串,根节点对应于空串;对于第i层的节点,其对应的字符串为该第j段子串中的前i个最小索引单位组成的长度为i*c的字符串;
其中b,c均为正整数,b为c的倍数,所述根节点和第i层的节点均为所述二值码字典树的内部节点。
每一个二值码字典树中的每一个叶子节点均为以容器形式存在的末节点;所述容器内含有所有插入到这个末节点的字符串,这些字符串含有相同的前缀。
403、接收待查询的二值码,将待查询的二值码分为m段子串;
404、针对待查询二值码的第j段子串,在数据库中所有二值码的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码。
针对待查询二值码的第j段子串,在数据库中所有二值码的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码的步骤,包括:
从所述二值码字典树的根节点开始遍历该二值码字典树;
对于该二值码字典树中的每一个节点,计算该节点对应的字符串与所述待查询图像二值码的第j段子串的汉明距离;
若计算的汉明距离大于r’,则遍历在当前节点处停止;
或者,当遍历至叶子节点时,在叶子节点所属的容器中获取相应的汉明距离不超过的二值码。
405、遍历待查询二值码的所有子串,获得每一子串的查询结果;
406、根据待查询二值码的所有子串的查询结果,进行合并去重测试,获取待查询二值码的查询结果;
其中:m,j均为正整数,r为预先确定的非负整数值,且j小于等于m。
本实施例提供的二值码近邻搜索方法可应用在任意二值码近邻搜索过程中,以实现高效的访问速度,并降低查找阶段的内存开销。
本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
本领域技术人员可以理解,实施例中的各步骤可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (10)
1.一种基于二值码字典树的搜索方法,其特征在于,包括:
获取数据库中每一图像的二值码,将每个二值码划分为m段子串;
针对数据库中所有图像的第j段子串,建立该第j段子串的一个二值码字典树;所述二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点;
获取待查询图像的二值码以及该二值码的m段子串;
针对待查询图像二值码的第j段子串,在数据库中所有图像的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码;
遍历待查询图像二值码的所有子串,获得每一子串的查询结果;
其中:m,j均为正整数,r为预先确定的非负整数值,且j小于等于m。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据待查询图像二值码的所有子串的查询结果,进行合并去重测试,获取待查询图像的搜索结果。
3.根据权利要求1所述的方法,其特征在于,针对数据库中所有图像的第j段子串,建立该第j段子串的一个二值码字典树的步骤,包括:
依据第j段子串长度和预设的参数值c,确定二值码字典树的最小索引单位;
以及,根据预设的参数值b和最小索引单位,取前b个比特建立二值码字典树的节点,构建该第j段子串的二值码字典树;
其中,所述二值码字典树的根节点依据该第j段子串左侧的第一个最小索引单位建立分支;对于第i层的节点,依据该第j段子串从左至右的第i个最小索引单位建立分支;所述叶子节点为所述二值码字典树的末节点;
所述二值码字典树中的每个节点对应于一个字符串,根节点对应于空串;对于第i层的节点,其对应的字符串为该第j段子串中的前i个最小索引单位组成的长度为i*c的字符串;
其中b,c均为正整数,b为c的倍数,所述根节点和第i层的节点均为所述二值码字典树的内部节点,i为小于等于b/c的正整数。
4.根据权利要求3所述的方法,其特征在于,
每一个二值码字典树中的每一个叶子节点均为以容器形式存在的末节点;
所述容器内含有所有插入到这个末节点的字符串,这些字符串含有相同的前缀。
5.根据权利要求4所述的方法,其特征在于,针对待查询图像二值码的第j段子串,在数据库中所有图像的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码的步骤,包括:
从所述二值码字典树的根节点开始遍历该二值码字典树;
对于该二值码字典树中的每一个节点,计算该节点对应的字符串与所述待查询图像二值码的第j段子串的汉明距离;
若计算的汉明距离大于r’,则遍历在当前节点处停止;
或者,当遍历至叶子节点时,在叶子节点所属的容器中获取相应的汉明距离不超过的二值码。
6.根据权利要求1至5任一所述的方法,其特征在于,获取数据库中每一图像的二值码,将每个二值码划分为m段子串的步骤,包括:
获取数据库图像的二值码,该二值码长度为d;
采用分段策略将每个二值码划分为m个不相交不重叠的子串;
若d为m的倍数,则将二值码分为m段长度相同的子串,每段长度均为s=d/m;
若d不是m的倍数,令v等于d除以m所得的余数,则分段时,前v段的长度为后m-v段的长度为
和/或,获取待查询图像的二值码以及该二值码的m段子串的步骤,包括:
获取待查询图像的二值码,该二值码长度为d;
采用分段策略将每个二值码划分为m个不相交不重叠的子串;
若d为m的倍数,则将二值码分为m段长度相同的子串,每段长度均为s=d/m;
若d不是m的倍数,令v等于d除以m所得的余数,则分段时,前v段的长度为后m-v段的长度为
其中d,m,s均为正整数,m小于等于d。
7.根据权利要求6所述的方法,其特征在于:
若分段后每一字串长度s=32;则b=30,c=3或b=28,c=4;
以及,建立数据库中所有图像的m段子串的二值码字典树的过程为离线阶段实现。
8.一种二值码近邻搜索方法,其特征在于,包括:
对数据库中的所有二值码进行分段处理,获得m段子串;
针对所有二值码的第j段子串,建立该第j段子串的一个二值码字典树;所述二值码字典树的数量为m个;每一二值码字典树包括:内部节点和叶子节点;
接收待查询的二值码,将待查询的二值码分为m段子串;
针对待查询二值码的第j段子串,在数据库中所有二值码的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码;
遍历待查询二值码的所有子串,获得每一子串的查询结果;
根据待查询二值码的所有子串的查询结果,进行合并去重测试,获取待查询二值码的查询结果;
其中:m,j均为正整数,r为预先确定的非负整数值,且j小于等于m。
9.根据权利要求8所述的方法,其特征在于,针对所有二值码的第j段子串,建立该第j段子串的一个二值码字典树的步骤,包括:
依据第j段子串长度和预设的参数值c,确定二值码字典树的最小索引单位;
以及,根据预设的参数值b和最小索引单位,取前b个比特建立二值码字典树的节点,获得该第j段子串的二值码字典树;
其中,所述二值码字典树的根节点依据该第j段子串左侧的第一个最小索引单位建立分支;对于第i层的节点,依据该第j段子串从左至右的第i个最小索引单位建立分支;所述叶子节点为所述二值码字典树的末节点;
所述二值码字典树中的每个节点对应于一个字符串,根节点对应于空串;对于第i层的节点,其对应的字符串为该第j段子串中的前i个最小索引单位组成的长度为i*c的字符串;
其中b,c均为正整数,b为c的倍数,所述根节点和第i层的节点均为所述二值码字典树的内部节点。
10.根据权利要求8或9所述的方法,其特征在于,
每一个二值码字典树中的每一个叶子节点均为以容器形式存在的末节点;所述容器内含有所有插入到这个末节点的字符串,这些字符串含有相同的前缀;
相应地,针对待查询二值码的第j段子串,在数据库中所有二值码的第j段子串对应的二值码字典树中查找汉明距离不超过的二值码的步骤,包括:
从所述二值码字典树的根节点开始遍历该二值码字典树;
对于该二值码字典树中的每一个节点,计算该节点对应的字符串与所述待查询图像二值码的第j段子串的汉明距离;
若计算的汉明距离大于r’,则遍历在当前节点处停止;
或者,当遍历至叶子节点时,在叶子节点所属的容器中获取相应的汉明距离不超过的二值码。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710142528.6A CN106980656B (zh) | 2017-03-10 | 2017-03-10 | 一种基于二值码字典树的搜索方法 |
PCT/CN2017/104398 WO2018161548A1 (zh) | 2017-03-10 | 2017-09-29 | 一种基于二值码字典树的搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710142528.6A CN106980656B (zh) | 2017-03-10 | 2017-03-10 | 一种基于二值码字典树的搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106980656A true CN106980656A (zh) | 2017-07-25 |
CN106980656B CN106980656B (zh) | 2018-07-10 |
Family
ID=59338160
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710142528.6A Active CN106980656B (zh) | 2017-03-10 | 2017-03-10 | 一种基于二值码字典树的搜索方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106980656B (zh) |
WO (1) | WO2018161548A1 (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107679073A (zh) * | 2017-08-25 | 2018-02-09 | 中国科学院信息工程研究所 | 一种压缩网页指纹库构建方法和压缩网页快速相似性匹配方法 |
CN107862026A (zh) * | 2017-10-31 | 2018-03-30 | 北京小度信息科技有限公司 | 数据存储方法及装置、数据查询方法及装置、电子设备 |
WO2018161548A1 (zh) * | 2017-03-10 | 2018-09-13 | 北京大学 | 一种基于二值码字典树的搜索方法 |
CN110188242A (zh) * | 2019-05-30 | 2019-08-30 | 北京三快在线科技有限公司 | 无人驾驶设备定位方法、装置、无人驾驶设备和存储介质 |
CN110516118A (zh) * | 2019-08-13 | 2019-11-29 | 出门问问(武汉)信息科技有限公司 | 一种字符串匹配方法、设备及计算机存储介质 |
CN111553670A (zh) * | 2020-04-28 | 2020-08-18 | 腾讯科技(深圳)有限公司 | 一种交易处理方法、装置及计算机可读存储介质 |
CN112069286A (zh) * | 2020-08-28 | 2020-12-11 | 喜大(上海)网络科技有限公司 | 字典树参数更新方法、装置、设备及存储介质 |
CN112988834A (zh) * | 2021-02-07 | 2021-06-18 | 潍坊北大青鸟华光照排有限公司 | 一种字典短语的查询方法 |
WO2024108449A1 (zh) * | 2022-11-23 | 2024-05-30 | 北京小米移动软件有限公司 | 一种信号量化方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345496A (zh) * | 2013-06-28 | 2013-10-09 | 新浪网技术(中国)有限公司 | 多媒体信息检索方法和系统 |
US20140365500A1 (en) * | 2013-06-11 | 2014-12-11 | InfiniteBio | Fast, scalable dictionary construction and maintenance |
CN104951559A (zh) * | 2014-12-30 | 2015-09-30 | 大连理工大学 | 一种基于位权重的二值码重排方法 |
CN105989001A (zh) * | 2015-01-27 | 2016-10-05 | 北京大学 | 图像搜索方法及装置、图像搜索系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980656B (zh) * | 2017-03-10 | 2018-07-10 | 北京大学 | 一种基于二值码字典树的搜索方法 |
-
2017
- 2017-03-10 CN CN201710142528.6A patent/CN106980656B/zh active Active
- 2017-09-29 WO PCT/CN2017/104398 patent/WO2018161548A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140365500A1 (en) * | 2013-06-11 | 2014-12-11 | InfiniteBio | Fast, scalable dictionary construction and maintenance |
CN103345496A (zh) * | 2013-06-28 | 2013-10-09 | 新浪网技术(中国)有限公司 | 多媒体信息检索方法和系统 |
CN104951559A (zh) * | 2014-12-30 | 2015-09-30 | 大连理工大学 | 一种基于位权重的二值码重排方法 |
CN105989001A (zh) * | 2015-01-27 | 2016-10-05 | 北京大学 | 图像搜索方法及装置、图像搜索系统 |
Non-Patent Citations (1)
Title |
---|
ZHE WANG 等: "COMPONENT HASHING OF VARIABLE-LENGTH BINARY AGGREGATED DESCRIPTORS FOR FAST IMAGE SEARCH", 《2014 IEEE INTERNATIONAL CONFERENCE ON IMAGE PROCESSING (ICIP)》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018161548A1 (zh) * | 2017-03-10 | 2018-09-13 | 北京大学 | 一种基于二值码字典树的搜索方法 |
CN107679073A (zh) * | 2017-08-25 | 2018-02-09 | 中国科学院信息工程研究所 | 一种压缩网页指纹库构建方法和压缩网页快速相似性匹配方法 |
CN107862026A (zh) * | 2017-10-31 | 2018-03-30 | 北京小度信息科技有限公司 | 数据存储方法及装置、数据查询方法及装置、电子设备 |
CN107862026B (zh) * | 2017-10-31 | 2021-01-01 | 北京小度信息科技有限公司 | 数据存储方法及装置、数据查询方法及装置、电子设备 |
CN110188242A (zh) * | 2019-05-30 | 2019-08-30 | 北京三快在线科技有限公司 | 无人驾驶设备定位方法、装置、无人驾驶设备和存储介质 |
CN110516118A (zh) * | 2019-08-13 | 2019-11-29 | 出门问问(武汉)信息科技有限公司 | 一种字符串匹配方法、设备及计算机存储介质 |
CN111553670A (zh) * | 2020-04-28 | 2020-08-18 | 腾讯科技(深圳)有限公司 | 一种交易处理方法、装置及计算机可读存储介质 |
CN111553670B (zh) * | 2020-04-28 | 2021-10-15 | 腾讯科技(深圳)有限公司 | 一种交易处理方法、装置及计算机可读存储介质 |
CN112069286A (zh) * | 2020-08-28 | 2020-12-11 | 喜大(上海)网络科技有限公司 | 字典树参数更新方法、装置、设备及存储介质 |
CN112069286B (zh) * | 2020-08-28 | 2024-01-02 | 喜大(上海)网络科技有限公司 | 字典树参数更新方法、装置、设备及存储介质 |
CN112988834A (zh) * | 2021-02-07 | 2021-06-18 | 潍坊北大青鸟华光照排有限公司 | 一种字典短语的查询方法 |
WO2024108449A1 (zh) * | 2022-11-23 | 2024-05-30 | 北京小米移动软件有限公司 | 一种信号量化方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2018161548A1 (zh) | 2018-09-13 |
CN106980656B (zh) | 2018-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106980656B (zh) | 一种基于二值码字典树的搜索方法 | |
JP3947202B2 (ja) | 複数のストリングエントリを含むデータベースをアクセスするいくつかのユーザのリクエストの衝突検出又は衝突マネージメントのための方法、とりわけ、ロックマネージメントのための方法 | |
Jiang et al. | Hop doubling label indexing for point-to-point distance querying on scale-free networks | |
US7433869B2 (en) | Method and apparatus for document clustering and document sketching | |
US8190591B2 (en) | Bit string searching apparatus, searching method, and program | |
CN103581331B (zh) | 虚拟机在线迁移方法与系统 | |
US20130151562A1 (en) | Method of calculating feature-amount of digital sequence, and apparatus for calculating feature-amount of digital sequence | |
US10545915B2 (en) | Recursive multi-threaded file system scanner for serializing file system metadata exoskeleton | |
Wang et al. | An Efficient Sliding Window Approach for Approximate Entity Extraction with Synonyms. | |
CN113158041B (zh) | 一种基于多属性特征的文章推荐方法 | |
CN106708956B (zh) | 一种基于多url规则集的http数据匹配方法 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN112084781B (zh) | 一种标准术语确定方法、装置及存储介质 | |
CN113111178B (zh) | 无监督的基于表示学习的同名作者消歧方法及装置 | |
CN112052413B (zh) | Url模糊匹配方法、装置和系统 | |
Zhang et al. | SUMMA: subgraph matching in massive graphs | |
Tao et al. | LHF: A new archive based approach to accelerate massive small files access performance in HDFS | |
Eghbali et al. | Online nearest neighbor search in binary space | |
CN106777920A (zh) | 确定最长公共子序列的方法和装置 | |
CN105956203B (zh) | 一种信息存储方法、信息查询方法、搜索引擎装置 | |
US20100174742A1 (en) | Bit string search apparatus, search method, and program | |
CN108182209A (zh) | 一种数据索引方法、及设备 | |
Gog et al. | Fast and compact Hamming distance index | |
CN111274457A (zh) | 一种网络图分割方法及存储介质 | |
US20150324485A1 (en) | Lookup with key sequence skip for radix trees |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |