Deep Learning of Binary Hash Codes for Fast Image Retrieval阅读总结

2023-10-20 13:30

本文主要是介绍Deep Learning of Binary Hash Codes for Fast Image Retrieval阅读总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Deep Learning of Binary Hash Codes for Fast Image Retrieval》

摘要

  • 提出了一个有效的架构产生快速图像检索的二进制哈希索引码
  • 在有标签情况下,在CNN基础上使用隐藏层表示主导标签的潜在概念来学习二进制哈希码
  • 相比于其他监督方法使用pair-wised的输入,我们的技术基于point-wised
  • 我们的方案相比于state-of-art表现出色

1.引言

灵感1——CNN:

  • Krizhevsky等人使用CNN第7层的输出作为特征向量进行图像检索
  • 由于第7层的输出的特征向量维数过高,Babenko等人采用PCA主
    成分分析和discriminative dimensionality reduction技术进行降维,取得了更好的效果

灵感2——哈希:

  • 传统的线性搜索不适用于大数据集,ANN或哈希方案加快了计算进程
  • 这些方法是一种降维技术,可以产生二进制码

我们的方案:

  • 引入一个简单但有效的监督学习框架
  • 只需简单调整,我们的卷积神经网络可以同时学习图像表示与类哈希函数集
  • 在MNIST和CIFAR-10数据集上的表现超过了所有state-of-art
  • 以point-wised的方式学习二进制哈希码

2.相关工作

有很多种哈希算法,这些方法大致可以分为无监督方案与监督方案。

无监督算法:

  • Locality-Sensitive Hashing(LSH):最大化相似的数据映射到相似的二进制码
  • Spectral hashing(SH):沿给定数据的PCA方向使用非线性函数进行阈值化生成紧凑的二进制代码

监督算法相比于无监督算法,在学习过程中结合了标签信息,但算法需要一个巨大的稀疏矩阵描述训练集中数据间的相似度。

深度架构也早已应用于图像检索,但大部分是无监督的,可以参见如下两篇论文:

  • R. Salakhutdinov and G. Hinton. Semantic hashing.Interna-tional Journal of Approximate Reasoning, 500(3):500, 2007.
  • A. Krizhevsky and G. E. Hinton. Using very deep autoen-coders for content-based image retrieval. InESANN, 2011.

Xia等人使用了监督的深度哈希方法来进行图像检索,取得了很好的效果,但其空间复杂度高,不适用于大数据集。

3.方案

在这里插入图片描述
方案由3部分组成:

  • 在大规模数据集ImageNet上监督预训练
  • 微调网络,隐藏层同时学习图像表示与哈希函数集
  • 通过分层深度搜索检索相似图片

3.1学习类哈希二进制码

  • F 7 F_7 F7 F 8 F_8 F8之间加入一个隐藏层 H H H,激活函数采用 s i g m o d sigmod sigmod
  • 微调网络, H H H F 8 F_8 F8参数随机初始化,其余冻结

3.2 通过分层深度搜索进行图像检索

粗糙级别的搜索:
H H H层的输出为 O u t ( H ) ∈ [ 0 , 1 ] Out(H)\in [0,1] Out(H)[0,1],二进制码为 H H H,二进制码长度为 h h h
对于 j = 1 ⋯ h , 有 H j = { 1 O u t j ( H ) ≥ 0.5 0 o t h e r w i s e j=1\cdots h,有H^j=\begin{cases} 1 ~~~~Out^j(H)≥0.5\\0 ~~~~otherwise\end{cases} j=1h,Hj={1    Outj(H)0.50    otherwise
定义m个候选图像,有候选池 P = { I 1 C , I 2 C , ⋯ , I m C } P=\{I^C_1,I^C_2,\cdots,I^C_m\} P={I1C,I2C,,ImC}(由Hamming距离阈值处理导出)

精细级别的搜索:
给定查询图像 I q I_q Iq和候选池 P P P,使用从 F 7 F_7 F7提取的特征得到前 k k k个图像,使用欧式距离作为相似度衡量指标。

这篇关于Deep Learning of Binary Hash Codes for Fast Image Retrieval阅读总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/247405

相关文章

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET