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

Hanjiang Lai, Yan Pan, Ye Liu, Shuicheng Yan.

1. Overcome

  • 在大多数哈希方法中,图像都用手工特征表示,这些特征不能很好得保存原始图片的语义信息。
  • 哈希方法大都分为编码量化两个过程,基于手工向量的优化结果可能难以同时兼容编码和量化的过程,从而造成子优化问题。
  • CNNH是一个two-stage的深度哈希方法,利用神经网络同时学习了哈希函数和图像特征表达。在stage 1时,CNNH得到了近似哈希编码,并在stage 2利用这些近似哈希编码来训练得到图像的特征表达,但是这些训练得到的图像特征无法反过来指导近似哈希编码的训练,以得到更好的编码。

2. Contribute

  • 提出了一种 “one-stage”的监督哈希检索方法,可以同时得到图像特征和哈希编码,并且特征信息和哈希编码可以相互改善,从而得到更好的结果。
  • 设计了一种triplet ranking loss,可以很好得保存图像语义的相似信息。

3. Algorithm

NINH方法分为三个步骤:(1)通过一个卷积网络得到中间图像特征;(2)通过divide-and-encode模块得到每张图片的哈希编码;(3)得到图像对的triplet ranking loss,再经由反向传播更新网络。

3.1 Triplet Ranking Loss and Optimization

输入为图像对\((I, I^-, I^+)\),其中\(I\)为查询图像,\(I^-\)为与\(I\)不相似的图像,\(I^+\)为与\(I\)相似的图像。这种输入形式可以更好得表达相似信息“与\(I^-\)相比,图像\(I\)与\(I^+\)更相似”。Triplet ranking hinge loss定义为:

为了便于优化,加入松弛技巧——将Hamming norm替换为L2 norm。得到新的损失函数如下:

损失函数关于\(F(I)、F(I^-)、F(I^+)\)的导数为:

因为损失函数的求导过程非常简单,因此可以容易结合进神经网络的反向传播过程中。

3.2 Shared Sub-Network with Stacked Convolution Layers

Shared Sub-Network使用相同的神经网络结构以及相同的参数得到triplet图像对中的每一张图像的特征表达。网络结构和参数如下表所示:

在该部分,一种替代的策略是对于图像\(I\)使用单独的网络结构和参数,而图像\(I^-\)和\(I^+\)使用相同的网络结构和参数。但是论文中的实验证明,对三个图像使用相同的网络结构和参数的表现会由于这种替代策略。

3.3 Divide-and-Encode Module

Divide-and-Encode(DAE)通过Shared Sub-Network得到每张图片的特征向量后,将这个向量切片成r个部分,每个部分再通过全连接层连接到一个节点,最后通过sigmoid函数转化为[0, 1]之内的值。通过上述步骤,便可以得到一张图片r比特的哈希编码。在这个过程中,因为每个哈希编码是由特征向量的子部分得到的,哈希编码之间的冗余性少,有利于图像的检索。

这个部分另一种策略简称为FC,将整个特征向量通过全连接层直接连接到r个节点,再借由sigmoid函数得到图片的哈希编码。显然这种策略下,每一位哈希编码都利用到了整个特征向量的信息,容易造成冗余。论文的实验也证明了DAE的表现会由于FC。

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

  1. 【Deep Hash】CNNH

    [AAAI 2014] Supervised Hashing via Image Representation Learning [paper] [code] Rongkai Xia , Yan Pa ...

  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. MySQL表名区分大小写设置

    关闭MySQL服务 在服务运行目录找到my.ini或者my.cnf文件 打开文件,找到[mysqld]在下面增加一行 lower_case_table_names=0 (0:大小写敏感;1:大小写不敏 ...

  2. 1024. Video Stitching

    //使用java dfs public int videoStitching(int[][] clips, int T) { //bfs Queue<Integer> queue = ne ...

  3. UOJ #390. 【UNR #3】百鸽笼

    UOJ #390. [UNR #3]百鸽笼 题目链接 看这道题之前先看一道相似的题目 [PKUWC2018]猎人杀. 考虑类似的容斥: 我们不妨设处理\(1\)的概率. 我们令集合\(T\)中的所有鸽 ...

  4. P1481 魔族密码 (LIS)

    题的连接:https://www.luogu.org/problemnew/show/P1481 简单思路: 就是LIS,最长上升子序列,当然把条件改一下,从模板里的A[ i ]> A[ j ] ...

  5. window10+linux双系统安装

    参考教程 安装Windos U盘制作 启动UltraISO,点击“文件”菜单下的“打开”按钮,打开已准备好的ISO镜像文件,如JINHU_SYSTEM_TOOL_2009.iso 刻录U盘过程.点击菜 ...

  6. PAT A1146 Topological Order (25 分)——拓扑排序,入度

    This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topol ...

  7. Java并发(五)线程池使用番外-分析RejectedExecutionException异常

    目录 一.入门示例 二.异常场景1 三.异常场景2 四.解决方法 之前在使用线程池的时候,出现了 java.util.concurrent.RejectedExecutionException ,原因 ...

  8. Qt之创建并使用静态链接库

    1.创建静态链接库 静态库的工程名字 添加包含的模型 更改一下类的名字 我的静态编译库的工程. 写一个简单的静态哭的代码为后面测试静态库使用 cpp代码: #include "staticb ...

  9. Selenium:集成测试报告

    参考内容:虫师:<selenium2自动化测试实战——基于python语言> PS:书中的代码,只能做参考,最好还是自己码一码,不一定照搬就全是对的,实践出真知啊,踩了很多坑的说... 随 ...

  10. jmeter(十一)JDBC Request之Query Type

    工作中遇到这样一个问题: 需要准备10W条测试数据,利用jmeter中的JDBC Request向数据库中批量插入这些数据(只要主键不重复就可以,利用函数助手中的Random将主键的ID末尾五位数随机 ...