[AAAI 2014] Supervised Hashing via Image Representation Learning [paper] [code]
Rongkai Xia , Yan Pan, Hanjiang Lai, Cong Liu, Shuicheng Yan.

1. Overcome

之前的哈希方法,大都使用手工的图像特征(如GIST等)作为图像的特征表达, 但是这些手工特征是采用无监督的方式提取的,难以很好得保存原始图片的语义信息。而深度深度神经网络可以很好得表达图像特征信息,因此作者便提出了基于深度的哈希检索方法——CNNH。

2. Contribute

  • 第一个采用深度神经网络解决哈希检索问题;
  • 采用coordinate descent method学习数据集的近似哈希编码,效率高,计算速度快;
  • 在学习哈希函数的同时可以得到图像的特征表达。

3. Algorithm

论文中,作者提出了一种监督哈希方法——CNNH,可以同时学习到图像的特征表达以及哈希函数。

CNNH具有两个阶段,Stage 1将相似矩阵分解为低维的哈希矩阵H,得到每个样本对应的哈希编码。但是这个过程并没有学习到哈希函数,因此无法对新的图像进行哈希编码;Stage 2利用Stage 1得到的哈希编码,以及每个样本对应的类别标签作为ground-truth来训练网络,从而得到哈希函数。假设Stage 1的哈希编码有r个比特位,样本的类别数有c个,那么网络输出层的节点就共有(r + c)个输出节点。

CNNH的输入为原始的图片信息,假设网络已经训练完毕后,对于一张新的测试图片,CNNH输出层的前r个节点就是该图片所对应的哈希编码,后c个节点则表示了图片的类别信息。

Stage 1

根据类别标签获得相似矩阵S,根据KSH中的结论,\(H_{i·}\)和\(H_{j·}\)的汉明距离与内积$H_{i·}H_{j·}^T $是一一对应的,因此可以得到如下目标优化函数:

其中,为了解决优化问题,令\(H ∈ [−1,1]^{n×q}\)>。

之后,通过coordinate descent method方法每次单独对\(H_{i,j}\)进行更新。为了确保每次更新的\(H_{ij}\)不超过[-1, 1]的范围,对更新步长d加入以下操作。这个操作确保了在对\(H_{ij}\)更新时,值不会超过[-1, 1],如果d小于\(H_{ij}\)与边界的距离,则取d,如果大于则取-1或1。

算法流程如下:

Stage 2

Stage 2利用Stage 1得到的哈希编码,以及每个样本对应的类别标签作为ground-truth来训练神经网络。

CNNH网络具有三个卷积层,分别有32, 64, 128 filters。输出层有(r + c)个节点,其中r为哈希编码的比特数,c为数据集的类别数。类别标签的引入使得网络具有了迁移学习的能力,能够更好得学习到图像的特征表达。在训练完毕后,全连接层所对应的值就是每张图片的特征向量。

【Deep Hash】CNNH的更多相关文章

  1. 【Deep Hash】NINH

    [CVPR 2015] Simultaneous Feature Learning and Hash Coding with Deep Neural Networks [paper] Hanjiang ...

  2. 【POJ2185】【KMP + HASH】Milking Grid

    Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that ...

  3. 【Deep Learning】一、AutoEncoder

    Deep Learning 第一战: 完成:UFLDL教程 稀疏自编码器-Exercise:Sparse Autoencoder Code: 学习到的稀疏参数W1: 参考资料: UFLDL教程 稀疏自 ...

  4. HDU 1280 前m大的数【排序 / hash】

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. 【字符串hash】DNA

    DNA 题目描述 小X身为奆老,兴趣爱好广泛,他还非常喜欢研究DNA序列……小X进行了一项关于DNA序列研究,发现人某条染色体上的一段DNA序列中连续的k个碱基组成的碱基序列与做题的AC率有关!于是他 ...

  6. 【Deep Learning】两层CNN的MATLAB实现

    想自己动手写一个CNN很久了,论文和代码之间的差距有一个银河系那么大. 在实现两层的CNN之前,首先实现了UFLDL中与CNN有关的作业.然后参考它的代码搭建了一个一层的CNN.最后实现了一个两层的C ...

  7. codeforces #441 B Divisiblity of Differences【数学/hash】

    B. Divisiblity of Differences time limit per test 1 second memory limit per test 512 megabytes input ...

  8. Codeforces Round #454 C. Shockers【模拟/hash】

    C. Shockers time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  9. [BZOJ 1014] [JSOI2008] 火星人prefix 【Splay + Hash】

    题目链接:BZOJ - 1014 题目分析 求两个串的 LCP ,一种常见的方法就是 二分+Hash,对于一个二分的长度 l,如果两个串的长度为 l 的前缀的Hash相等,就认为他们相等. 这里有修改 ...

随机推荐

  1. linux命令总结之tr命令

    什么是tr命令?tr,translate的简写,translate的翻译: [trænsˈleit] vi. 翻译, 能被译出 vt. 翻译, 解释, 转化, 转变为, 调动 在这里用到的意思是转化, ...

  2. 倒水问题(Fill, UVa 10603)

    [题目描述] 有三个没有刻度的水壶,容量分别为a,b和c(单位为升,都是<=200的正整数).初始时前两个水壶是空的,而第三个装满了水.每次可以从一个水壶往一个水壶里倒水,直到一个水壶倒空或者另 ...

  3. 转://oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改处理过程

    oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改并且主机重启后处理过程: 以下为解决方案: 1. Remove Oracle Restart configur ...

  4. kafka TimeoutException 超时问题解决

    1.报错:: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.NotLeaderForPartition ...

  5. JS进阶之---执行上下文,变量对象,变量提升

    一.结构顺序大体介绍 JavaScript代码的整个执行过程,分为两个阶段,代码编译阶段与代码执行阶段. 编译阶段由编译器完成,将代码翻译成可执行代码,这个阶段作用域规则会确定. 执行阶段由引擎完成, ...

  6. spring-batch批处理框架

    转自 http://www.cnblogs.com/gulvzhe/archive/2011/10/21/2220260.html 这个框架没有实际操作,只是从同事处学习到,先转个好文章,以后有机会再 ...

  7. IOZONE测试工具使用方法

    iozone介绍: iozone(www.iozone.org)是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能. 可以测试 Read, write, re-read ...

  8. ES6生成器函数generator

    ES6生成器函数generator generator是ES6新增的一个特殊函数,通过 function* 声明,函数体内通过 yield 来指明函数的暂停点,该函数返回一个迭代器,并且函数执行到 y ...

  9. bat无故报错打印混乱的解决

    1. 下面语句加了一个无意义的ping操作.不加的时候经常报错,报操作数不是数字,实际上打印发现NOW值和格式并没有错误.怀疑是下面操作数太多了,而执行速度又太快,导致执行时总是很容易出错.通过增加一 ...

  10. java算法----排序----(6)希尔排序(最小增量排序)

    package log; public class Test4 { /** * java算法---希尔排序(最小增量排序) * * @param args */ public static void ...