摘要:
在这篇论文里面,我们将介绍如何在彩色图像上学习多层特征,并使用这些特征来初始化深度自动编码器。 然后,我们使用自动编码器将图像映射为短的二进制代码。 使用语义散列,使用28位二进制编码在一个时间内检索与查询图像相似的图像与数据库的大小无关。 这种极快的检索使得可以使用查询图像的多个不同转换进行搜索。 256位二进制编码可以更精确的匹配查找图像,并且可以用来修剪使用28位编码检索到的一组图像。
1、引言
在本文中,我们使用深度自动编码器将小彩色图像映射为短的二进制编码。 对于基于内容的图像检索,与直接匹配像素强度或匹配实值代码相比,二进制编码具有许多优点。CBIR存储起来非常便宜,而且直接对位操作来进行图像的比较,速度非常快。 如果编码足够短,例如 28位,它们可以用作“语义”存储空间中的地址,其中相似的地址包含指向类似图像的指针。通过学习深度自动编码器得的图像编码往往拥有这个属性。 然后可以通过翻转代码中的几位并执行内存访问来检索与查询图像类似的图像。 这种“语义哈希”方法的检索时间完全独立于数据库的大小:数十亿个图像可以在几个毫秒内被搜索到。 这允许通过用查询图像的许多不同转换进行搜索来实现一些不变量。
在[6]中,通过学习DBN而初始化得到的自动编码器被用来获取文档的短二进制编码,并且显示这些代码可以用于语义散列。然而,对于文档而言这种编码是不必要的,因为单个单词的意思非常丰富,所以对检索得到的索引倒排序效果很好。像素或低层图像特征的语义很少,因此语义哈希更适合图像检索。 在[8]中,作者使用DBN初始化的自动编码器来生成短二进制编码,但他们无法训练原始图像数据上的DBN,因此他们使用彩色图像的384维GIST描述符。不幸的是,GIST描述符有一个瓶颈,当特征提取过程发生得太早,那么DBN就不能学习到好的短编码。
在文献[9]中,作者介绍了一种新的快速光谱方法,用于从高维数据生成二进制码,并表明这些频谱码在某些情况下对于图像检索比自动编码器在GIST描述符上生成的二进制码更有用。 我们证明频谱码不能像由DBN初始化的自动编码器在原始像素上训练产生的二进制码那样有效的工作。
2、如何学习编码
DBN是多层随机生成模型,它是通过学习一系列受限玻尔兹曼机器(RBM)创建的,每个RBM都通过使用先前RBM的隐层的数据作为其训练数据进行训练。 每次将新的RBM添加到堆栈中时,如果以适当的方式学习新的RBM,新的DBN就会比前一个DBN具有更好的数据日志概率变分下界[3]。
我们在160万个32×32的彩色图像上进行训练,这些图像是通过从每个像素中减去所有图像上的平均值,然后除以所有图像上所有像素的标准偏差而预处理的。 堆栈中的第一个RBM具有8192个二元隐藏单元和3072个具有单位方差高斯噪声的线性可见单元。 所有剩余的RBM都有N个二进制隐藏单元和2N个二进制可见单元。 [1]中详细介绍了如何训练RBM。 我们使用标准的对比分歧学习程序,它有四个步骤:
(1)对于每个向量v,在一个min-batch中,随机选择一个二进制状态向量h,h为隐藏单位:
其中,为偏置,
为权重,
(2)使用下面用于二元可见单元的第一个方程,和用于线性可见的第二方程随机的将每个可视化向量重构为,其中
是高斯函数。
(3)使用(2)中得到的代替
,将其带入(1)中的方程,重新计算隐藏单元的值。
(4)使用来更新权重,其中<>表示mini-batch的平均值。
为了减少噪声,我们在步骤2,3和4中实际使用概率而不是随机二进制状态,但在步骤1中使用随机二进制隐藏单元来避免严重的过拟合非常重要。
RBM使用非常小的随机权重和零偏差进行初始化,并使用128个小批量训练80个时期。对于线性二进制RBM,我们在平均每个案例梯度上实用学习率为0.001, 二进制RBM的我们使用了0.01。 我们在开始学习时降低了学习速率,当梯度变大和学习结束时也会减少最终权重的波动。 我们也使用了0.9的速度来加速学习(详情见[1])。
在第一个RBM中,大多数隐藏单元学会了在RGB通道中平衡的高频单调Gabor滤波器,其余大部分单元成为响应彩色边缘的低频滤波器。
2.1 微调自动编码器
我们初始化一个28位和一个256位自动编码器,使用来自[2]中描述的两个分别训练好的RBM堆栈的权重,并使用BP算法对它们进行微调以最小化均方根重建误差。在每个自动编码器中,我们除了使用28而不是32之外,还使隐藏层的参数减半,直到它们达到期望的大小。为了将代码强制转换为二进制编码,在正向传播期间,我们将中央代码层中的逻辑单元的输出四舍五入为1或0,但在向后传播期间忽略该四舍五入。这更简单,并且与[6]中使用的二值化方法一样好,这会在代码层中增加噪声。
对于自动编码器,我们对所有层使用了10的-6次方的学习率,并对5个时期进行了训练。权重只是从RBM权重稍微改变,但图像重建显着改善。在Nvidia GTX 285 GPU上,每个自动编码器的整个训练过程花费了大约2天的时间。
3、结果
我们通过使用各种在线图像搜索引擎在WordNet词汇数据库中搜索所有非抽象的英语名词和名词短语来产生8000万个微小图像数据集[7]中的两个子集,以测试我们的模型。 数据集中的每个图像都有一个非常嘈杂的标签,这是用来发现它的单词,但我们没有使用任何标签进行训练。
为了对检索进行定性评估,我们使用了一个包含160万个图像的未标记子集来进行训练和检索。 该子集仅包含为每个非抽象英语名词找到的前30个图像。 为了进行定量评估,我们测量了检索图像的哪一部分与查询图像具有相同的类别,平均超过5,000个查询。 我们使用了完全相同的自动编码器,但是使用了来自CIFAR-10数据集的查询图像[4],这是8000万个小图像的精心标记的子集,其中包含60,000个图像,平均分为十个类:飞机,汽车, 猫,鹿,狗,青蛙,马,船和卡车。 CIFAR-10中的每个图像都被选择为包含适当类别的一个主要对象,并且只有3%的CIFAR-10图像处于160万个训练图像的集合中。
3.1检索结果
定性地说,使用256位深度编码对160万幅图像进行全面线性搜索比在像素空间中使用欧几里得距离产生的结果更好,并且快1000倍。 256位频谱代码更差(见图2)。 通过将搜索限制为28位深度代码与查询图像代码相差5位或更少的图像来修剪搜索,这只会极大地降低256位深度代码的性能。
定量地说,这些方法的排序是相同的,28位深度代码执行的结果与256位的频谱代码结果差不多(参见图3)。 通过下面描述的更精细的方法实现最佳性能,该方法通过使用许多不同的28位代码创建候选列表,其中每个代码对应于查询图像的转换版本。
4、语言哈希
在一个时间内,实用语义哈希检索图像与数据库的大小无关,一个显而易见的问题是,这种极端速度是否可以通过某种方式使用不同的28位编码方案并结合它们的结果进行更准确的检索,我们现在描述一个这样做的方法。
通过查看整个图像获得的代码对于捕获全局结构是有利的,因此用于查找出现在全局相似的图像,但是它们对于变换不是不变的,例如图像内的一个对象的翻译,其通常对语义内容的影响很小。
通过查看整个图像获得的代码对于捕获全局结构是有利的,因此用于查找出与现在全局相似的图像,但是它们对于变换不是不变的,例如图像内的一个对象的翻译,其通常对语义内容的影响很小。我们可以通过将每幅图像视为一包补丁并在本地图像块上训练一个自动编码器来实现对中型对象的平移的不变性。我们通过采用图4所示的可变分辨率视网膜对160万个微小图像进行采样来获得贴片。该自编码器具有以下架构:336-1024-512-256-128-64-28并且以相同方式训练像之前一样。
4.1 搜索
经过对各种评分方法的初步探索后,我们发现以下程序效果最佳。
首先,构造一个包含2^28个元素的数组(语义哈希表),它在索引i处存储带有代码i的图像补丁列表(可能有重复,因为一个图像可能具有多个具有相同代码的补丁)。
其次,对于查询图像的81个补丁中的每一个,使用语义哈希表来快速查找具有代码不超过查询补丁代码3位的补丁的图像集。为每个找到的图像分配得分2的3-d次方,其中d是查找补丁代码与找到的图像补丁代码的汉明距离。我们根据距离增加的顺序探索查询拼贴代码周围的汉明球,以便为每个找到的图像提供单个补丁可以获得的最高分数。如果相同查询补丁与同一图像的其他部分相同或较差,则不会获得额外分数。这避免了诸如天空中的一个查询片匹配另一图像中的大量其他天空片的问题。
5、未来的工作
预先训练成DBN的深度自动编码器对于文档检索也同样适用[6],因此学习深层二进制代码相对容易,这些二进制代码既适用于重建图像又适用于重建图像的标签或文字袋表示 标题。 这将促使深码从图像中提取更多的语义信息,并且与数据库的大小相比,比具有二次时间复杂度的方法(如[8]中尝试的非线性NCA [5])更好地扩展。
6、总结
使用RBM预训练可以学习将相似图像映射到类似二进制代码的非常深的自动编码器。 这样可以将散列编码的速度应用于近似匹配。 这对于基于内容的图像检索尤其重要,我们已经证明它比以前的尝试要好得多[8]。 通过使用256位代码搜索返回的图像在质量上和数量上都优于像素空间中的近邻,并且当使用28位代码的语义散列来从搜索中消除几乎所有的数据库时,该优势得以保留。