首页 > 其他分享 >利用Binary Hash Codes的深度图像检索

利用Binary Hash Codes的深度图像检索

时间:2023-06-14 20:36:28浏览次数:52  
标签:检索 Binary Codes Hash 编码 二进制 图像 向量


1. 概述

本文的重点:

  • 图像的binary hash code的生成方法
  • 两阶段的检索方法——coarse-to-fine search strategy

2. 基于内容的图像检索

2.1. 基于内容的图像检索

基于内容的图像检索(Content-based Image Retrieval,CBIR)旨在通过对图像内容的分析搜索出相似的图像,其主要的工作有如下两点:

  • 图像表示(image representation)
  • 相似性度量(similarity measure)

2.2. 基于CNN的图像内容提取

以AlexNet卷积神经网络为例,AlexNet的网络结构如下图所示:

利用Binary Hash Codes的深度图像检索_数据集

将最终的4096维向量作为最终图像的特征向量。这样的向量是一些高维向量,不利于计算。

3. 二进制哈希编码的深度学习方法

3.1. 模型结构

模型结构如下图所示:

利用Binary Hash Codes的深度图像检索_细粒度_02

在文章中,作者指出,该模型主要有三个主要的部分:

  • 在大规模的ImageNet数据集上进行有监督的预训练;
  • 在目标数据集上对模型进行微调,同时增加隐含层;
  • 接收query,提取query的hash编码,同时查找相似的图像。

3.2. 对hash的二进制编码的学习

本人认为在上图中,利用Binary Hash Codes的深度图像检索_图像检索_03利用Binary Hash Codes的深度图像检索_数据集_04之间会存在一个隐层,这一点不影响对Latent Layer的构造。

如上所述,我们可以使用利用Binary Hash Codes的深度图像检索_数据集_05的结构作为图像的特征,但是这样的向量是一个高维的向量(4096维),这样的向量不利于计算。解决的方法有:降维(如PCA,Hash等方法)。通过Hash的方法构造出来的二进制的编码形式,可以利用hashing和Hamming距离计算相似度,那么能否通过模型学习到最好的Hash方法?

解决的方法是在利用Binary Hash Codes的深度图像检索_数据集_05利用Binary Hash Codes的深度图像检索_细粒度_07之间增加一个映射层(Latent Layer)H,那么如果两个图片生成的二进制编码相似,那么这两张图片也应该具有相同的标签。在H层的激活函数为Sigmoid函数。

3.3.检索

在深层的卷积神经网络中,浅层可以学习到局部的视觉表征,而深层可以捕获到适合识别的语义信息。

在检索阶段,作者采用了由粗到精的搜索策略(coarse-to-fine search strategy):

  • 首先从Latent layer中检索出一批相似的候选集

3.3.1. 粗粒度检索

对于图像利用Binary Hash Codes的深度图像检索_细粒度_08,可以得到其Latent Layer的输出,记为利用Binary Hash Codes的深度图像检索_深度学习_09,用该输出作为图像的特征表示。为了能够得到二进制的形式,需要对上述的输出做如下的变换:

利用Binary Hash Codes的深度图像检索_深度学习_10

假设数据集中包含了利用Binary Hash Codes的深度图像检索_深度学习_11个图像:利用Binary Hash Codes的深度图像检索_图像检索_12,其对应的二进制编码为:利用Binary Hash Codes的深度图像检索_深度学习_13,其中利用Binary Hash Codes的深度图像检索_深度学习_14

对于待检索的图像利用Binary Hash Codes的深度图像检索_数据集_15,其对应的二进制编码为利用Binary Hash Codes的深度图像检索_数据集_16,可以利用Hamming距离,当利用Binary Hash Codes的深度图像检索_数据集_16利用Binary Hash Codes的深度图像检索_细粒度_18之间的Hamming距离小于某个阈值,得到利用Binary Hash Codes的深度图像检索_数据集_19个候选集利用Binary Hash Codes的深度图像检索_深度学习_20

3.3.2. 细粒度检索

对于粗粒度检索出来的候选集利用Binary Hash Codes的深度图像检索_深度学习_20,细粒度检索从该候选集中找到top k的结果。对于待检索的图像利用Binary Hash Codes的深度图像检索_数据集_15,取出其和后选集中的对应的利用Binary Hash Codes的深度图像检索_数据集_05的向量值,记为利用Binary Hash Codes的深度图像检索_深度学习_24利用Binary Hash Codes的深度图像检索_图像检索_25,计算期之间的欧式距离:

利用Binary Hash Codes的深度图像检索_数据集_26

参考文献

[1] Lin K, Yang H F, Hsiao J H, et al. Deep learning of binary hash codes for fast image retrieval[C]//Proceedings of the IEEE conference on computer vision and pattern recognition workshops. 2015: 27-35.


标签:检索,Binary,Codes,Hash,编码,二进制,图像,向量
From: https://blog.51cto.com/u_16161414/6480411

相关文章

  • Oracle反连接HASH JOIN ANTI NA会处理驱动表连接列null值
     Oracle反连接HASHJOINANTINA会处理驱动表连接列null值 这个现象和Oracle内连接HASHJOIN/半连接HASHJOINSEMI不处理驱动表连接列null值相反。反连接中无论一下哪个结论都一样:HASHJOINANTINAHASHJOINANTISNAHASHJOINRIGHTANTINAHASHJOINRIGHTANTISN......
  • HashMap内部的数据结构是什么?底层是怎么实现的?
    HashMap内部结构jdk8以前:数组+链表jdk8以后:数组+链表(当链表长度到8时,转化为红黑树)在并发的情况,发生扩容时,可能会产生循环链表,在执行get的时候,会触发死循环,引起CPU的100%问题,所以一定要避免在并发环境下使用HashMap。......
  • CodeStar2023年春第11周周赛普及进阶组
    T1:等差数本题难度中等,公差等于\(0\)的等差数只含一种数码,公差不等于\(0\)的等差数只有几百个。所以本题的方针是先把公差不等于\(0\)的等差数都找出来。在公差等于\(0\)和公差不等于\(0\)的两类中分别找大于\(n\)的最小树,两者较小的就是答案。T2:炼金工坊补充道具本......
  • Python基础之subprocess模块、hashlib模块、日志模块
    subprocess模块tasklist:列举出来文件进程命令"""1.以后我们可以用自己的电脑连接上别人的电脑(socket)2.通过subprocess可以在别人的计算机上执行我们想要执行的命令3.把在别人计算机上执行的结果给返回过来"""importsubprocessimportsubprocessres=subprocess.P......
  • Pac-Takahashi
    [ABC301E]Pac-Takahashi考虑到有猴子的位置最多只有\(18\)个,算上起点一共\(19\)个,然后预处理出这些位置之间的两两距离,这样复杂度不会太高。然后考虑到可以用状压DP解决问题。状态表示:\(f_{j,i}\)表示抓到的猴子二进制01状态为\(i\)的情况下,最后到\(j\)(\(j=0\)表......
  • 为什么HashMap会产生死循环?
     HashMap死循环是一个比较常见、比较经典的问题,在日常的面试中出现的频率比较高,所以接下来咱们通过图解的方式,带大家彻底理解死循环的原因。前置知识死循环问题发生在JDK1.7版本中,造成这个问题主要是由于HashMap自身的运行机制,加上并发操作,从而导致了死循环。在JDK......
  • Redis的rehash的策略
    背景:redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二倍,将原hash表数据全部重新计算hash地址,重新分配位置,达到rehash目的redis中的hash表采用的是渐进式hash的方式:1、red......
  • redis之hash解析
    Redis底层数据结构之hashhash是日常开发过程中使用Redis的一个数据结构,其底层实现方式有两种,如下所示。一种是zipList,这种是当hash结构的V值较小的时候使用的编码方式。这个已经在上一篇文章中介绍过了。这篇文章主要讲解一下另外一种实现方式,字典dict,当hash结构的V值较大时采用......
  • Redis rehash
     Redisrehash是什么?Redisrehash是一种渐进式的哈希表扩展或收缩的机制,用于保持哈希表的负载因子在一个合理的范围内,提高哈希表的性能和空间利用率12。哈希表是Redis的基础数据结构,用于存储键值对。哈希表由一个数组和一个链表组成,数组的每个元素是一个指向链表的指针,链......
  • 2023年6月11日,TreeSet,Comparable,HashMap
    1.Set1.TreeSetTreeSet1、存储Integer的元素,升序排列2、存储String的元素,字典排列TreeSet根据元素的不同类型使用不同的排序规则publicclasstest01{/***知识点:TreeSet*1、存储Integer的元素,升序排列*2、存储String的元素,字典排列*......