Neural Codes for Image Retrieval(基于神经网络的图像检索)
论文原文: http://arxiv.org/abs/1404.1777
github源码链接:https://github.com/UCAS-Vincent/Spoc
摘要:
已经表明,在大型卷积神经网络的顶层中由图像调用的激活提供了图像的视觉内容的高级描述符。在本文中,我们研究了这样的描述符(神经编码)在图像检索应用中的使用。在一些具有标准检索基准的实验中,我们确定即使当卷积神经网络已经针对不相关的分类任务进行训练时,神经编码还是具有竞争性的。当神经网络在与测试时使用的图像相类似的图像数据集上进行重新训练时,我们还评估了神经编码检索性能的改进。
我们进一步评估压缩神经编码的性能,并表明简单的PCA压缩提供了非常好的短的编码,可以在许多数据集上提供最新的精度。一般来说, 与其他最先进的描述符相比, 神经编码对这种压缩的适应性更强。最后, 我们表明, 在匹配图片的数据集上训练时,判别维数减少可以进一步提高PCA压缩神经编码的性能。总的来说,我们定量说明了神经编码作为图像检索的视觉描述符的前景。
1.引言
卷积神经网络最近显着提升了图像分类的最新水平,因此在计算机视觉领域引起了广泛关注。 与图像分类问题不同但相关的是图像检索的问题,即查找包含与待查询图像中相同的物体或场景的图像的任务。 有人提出,CNN顶层出现的特征学习对图像进行分类可以作为图像检索的良好描述符。特别是,Krizhevsky等人。 [10]已经为此展示了一些定性证据。我们在建立这些特征(我们称之为神经编码)及其变化的定量表现方面有所作为。
我们首先提供定量评估在训练识别Image-Net [1]类的卷积神经网络中出现的特征的图像检索性能。我们在四个标准基准数据集上衡量这种性能:INRIA Holidays [8],Oxford Buildings,Oxford Building 105K [19]和the University of Kentucky benchmark (UKB) [16]。也许不足为奇的是, 这些深层的特征表现良好, 但并不比其他最先进的整体特征(例如Fisher矢量)更好。 有趣的是,在不同的检索设置中,CNN不同层的相对性能是不同的,并且标准检索数据集上的最佳性能是通过完全连接的层级结构中间的特征来实现的。
由于神经网络所训练的任务(即,对Image-Net进行分类)与我们考虑的检索任务有很大不同,因此神经编码的良好性能表明了它们的普遍性。尽管有证据表明这种普遍性,但是通过使深层特征适应任务来提高深层特征性能的可能性是显而易见的,并且这种适应是论文第二部分的主题。为此,我们组装了一个大规模的图像数据集,其中类对应于地标(类似于[14]),并使用原始图像网络参数作为初始化,在这个集合上重新训练CNN。经过这样的训练, 我们发现类似图像统计数据集的检索性能的显著提高, 例如INRIA Holidays和Oxford Buildings,而不相关的UKB数据集的性能下降。在第二个此类实验中,我们在不同物体的转盘视图的多视图RGB-D数据集[12]上重新训练初始网络。正如预期的那样,我们观察到更相关的UKB数据集的改进,而其他数据集的性能下降或保持不变。
最后,我们将重点放在压缩型神经编码的性能评估上。我们评估PCA压缩的性能并观察神经编码可以被非常大地压缩,例如, 压缩到128维,几乎没有损失检索精度。总的来说,神经编码引起的PCA压缩的退化比其他整体描述符引起的退化要小得多。这使得在大规模检索中使用神经编码特别有吸引力,其中描述符的存储占用空间通常代表主要瓶颈。
将压缩推向极端,例如:只要PCA用于压缩,16维就会导致严重的退化。我们尝试了在自动收集的大量照片集合中描绘相同对象(大约900K对)学习的判别性维数减少。在这样的数据集上进行训练时,判别维数减少比PCA表现得更好,并且对于非常短的代码(例如, Oxford Buildings上的16维特征的0.368 mAP)实现了高检索精度。
2.相关工作
我们论文的灵感来自卷积神经网络(CNN)在图像分类任务中的强大性能,以及[10]中提供的图像检索可行性的定性证据。随后的一份报告[4]表明,在大型深层CNN顶层中出现的特征可以重复用于与原始分类任务不同的分类任务。卷积网络也被用于产生适合在siamese体系结构中检索的描述符[3]。
在“浅层”体系结构领域中,有一系列工作将经过区别训练的多类分类器的响应作为检索应用程序中的描述符来应用。因此,[24 ]使用经过训练的分类器的输出来预测Flickr组的隶属度作为图像描述符。同样,在[23]中提出了基于训练用于大量类(classemes)的二进制分类器的输出的非常紧凑的描述符。一些工作,如[11]使用经过判别训练的分类器的输出来描述人脸,获得高性能的人脸描述符。
通过基于局部梯度的描述符的聚合来获得当前最先进的整体图像描述符。Fisher Vectors [18]是这类中最着名的描述符,但它的性能最近被[9]中提出的三角测量嵌入取代(另一篇最近的论文[22]引入了也可以实现非常高性能的描述符,但是这种描述符的存储器占用量至少比未压缩的Fisher Vectors大一个数量级,这使得这些描述符不适用于大多数应用)。
在[7]中,考虑了Fisher向量的维数减少,并建议使用Image-Net来发现判别性的低维子空间。在Image-Net子集上进行训练后,隐藏层的低维激活用作图像检索的描述符。因此,[7]的架构在很多方面与我们在此研究的内容相似,因为它很深(尽管不像我们的情况那样多层),并且在image-net类上进行了训练。尽管如此,[7]中得出的表示仍然是基于手工制作的特征(SIFT和局部颜色直方图),而不是从自下而上学习的CNN衍生的神经编码。
在减少维度和度量学习方面还有大量工作[26]。在本文的最后部分,我们使用了类似于[21]的判别维数减少的变体。
独立的但与我们工作并行的是,在[20]中研究了神经编码在图像检索(以及其他应用)中的使用。他们的研究结果与我们的研究结果基本一致,但是从图像中提取神经编码的方式与这项工作有很大的不同。具体地,[20]通过以“滑动窗口”方式应用CNN从每个图像中提取大量神经编码。与此相反,我们专注于整体描述符,其中整个图像被映射到单个向量,从而产生更紧凑和更快速计算的描述符,并且我们还研究压缩整体描述符的性能。
此外,我们详细研究了CNN在不同数据集上的再训练如何影响相应神经编码的检索性能。另一项同时开展的工作[17]研究了如何使用类似的再训练来使Image-Net派生网络适应较小的分类数据集。
3.使用预训练的神经代码
深度卷积结构。深度卷积结构。在本节中,我们评估通过将图像通过深卷积网络而获得的神经编码的性能,该网络经过训练以对1000个Image-Net类进行分类[10]。特别是,我们使用自己重新实现的系统[10]。该模型包括五个卷积层,每个卷积层包括卷积、整流线性(ReLU)变换(f(x) = max(x,0))和最大池化(层1,2和5)。在该体系结构的顶部是三个完全连接的层("层6","层7","层8"),其将前一层的输出作为输入,乘以权重矩阵,并且在层6和7的情况应用整流线性变换。训练网络,使得第8层输出对应于类标签的单一编码。在训练期间使用softmax损失。ILSVRC数据集[1]的训练结果与[10]中报告的单个CNN的结果非常吻合(更确切地说,得到的准确度比其更低2%)。我们的网络架构如图1所示。
图1:我们实验中使用的卷积神经网络架构。 紫色节点对应于输入(大小为224×224的RGB图像)和输出(1000类标签)。 绿色单元对应于卷积输出,红色单元对应于最大池的输出,蓝色单元对应于整流线性(ReLU)变换的输出。 层6,7和8(输出)完全连接到前面的层。 与我们实验中使用的神经代码相对应的单元用红色箭头表示。 在第一个卷积层中使用Stride = 4,在其余部分中使用stride = 1。
该网络适用于224×224图像。其他尺寸的图像大小调整为224×224(无裁剪)。CNN结构是前馈的,并且给定一副图像I,它产生一系列层激活。我们用L5(I),L6(I)和L7(I)表示在ReLU变换之前相应层的激活(输出)。当然,这些高维向量中的每一个表示输入图像的一个深层描述符(神经编码)。
基准数据集。我们在下面列出了在四个标准数据集上评估神经编码的性能。表1给出了基于整体描述符(维数高达32K)的表现最佳的方法的结果。
基准数据集。我们在下面列出了在四个标准数据集上评估神经代码的性能。表1给出了基于整体描述符(维数高达32K)的表现最佳的方法的结果。
表1.全尺寸整体描述符:与现有技术(具有高达32K的维度的整体描述符)的比较。 神经编码与最先进的技术相比具有竞争力,并且通过对相关数据集(Landmarks for Oxford Buildings and Holidays; turntable sequences for UKB)进行再训练而受益匪浅。* 表示Holidays旋转过后所获得的结果,其中所有图像都设置为其自然方向。
Oxford Buildings dataset [19] (Oxford)。该数据集包括从Flickr收集的5062张照片,并且对应于主要的Oxford landmarks。对应于11个地标(一些具有复杂结构并且包括若干建筑物)的图像被手动注释。提供了在这11个地标上均匀分布的55个保持查询,并且将检索方法的性能报告为提供的查询的平均精度(mAP)[19]。
Oxford Buildings dataset+100K [19] (Oxford 105K)。 具有相同关联协议的相同数据集,并且具有由数据集作者提供的额外100K干扰图像。
INRIA Holidays数据集[8](Holidays)。该数据集包括1491张假期照片,对应于基于相同场景或物体的500组图像。每组图像中的一个图像用作查询。性能报告为500个查询的平均精度。数据集中的某些图像不是自然方向(旋转±90度)。由于我们考虑的深层体系结构是在正常方向上对图像进行训练的,因此我们遵循以前的工作,并手动将数据集中的所有图像都置于正常方向。在续集中,我们所有的结果都是针对此修改后的数据集。我们还尝试了一个未旋转的版本,发现在大多数情况下,性能会更差,大约0.03 mAP。在数据集和查询端使用数据增强(旋转±90)可以恢复大部分性能下降。
University of Kentucky Benchmark dataset [16] (UKB)。该数据集包含2550个物体的10200室内照片(每个物体4张照片)。每个图像用于查询数据集的其余部分。性能报告为前4个结果中相同对象图像的平均数,并且是0到4之间的数字。
结果。使用ILSVRC类训练的网络生成的神经编码的结果在表1的中间部分给出。所有结果都是在L2标准化神经编码上使用L2距离获得的。我们给出了对应于每个层5,6,7的结果。我们还尝试了第8层的输出(对应于ILSVRC类概率,因此与先前使用类概率作为描述符的工作密切相关),但是它的输出结果更糟糕(比Holidays第5层的mAP更差0.02)。
在所有层中,第6层表现最好,但是并非对于所有查询而言它都最好(参见图2和图3)。尽管如此,使用代码的简单组合(例如,求和或级联)获得的结果比单独的L6(I)-代码更差,并且我们实验的更复杂的非线性组合规则仅给出了微小的改进。
总的来说,使用L6(I)-代码获得的结果在同一个范围内,但与现有技术相比并不优越。 然而,考虑到ILSVRC分类任务与此处考虑的检索任务之间存在差异,它们的强大性能仍然非常出色。
图2.在Holidays数据集上的检索示例,其中第5层的结果比其他层中提供的结果要好,可能是因为它依赖于相对低级别的纹理特征而不是高级概念。 每行中最左侧的图像对应于查询,正确的答案以绿色标出。
图3.在Holidays数据集上的检索示例,其中第7层提供的结果比其他层中提供的结果要好,可能是因为它依赖于高级概念。 每行中最左侧的图像对应于查询,正确的答案以绿色标出。
4.重新训练神经代码
4.重新训练神经编码
提高神经编码性能的一个直接想法是用图像统计和类重新训练数据集上的卷积结构,这些分类与测试时考虑的数据集更加相关。
Landmarks数据集。我们首先关注收集与地标数据集(Holidays and Oxford Buildings)相关的数据集。收集这样的数据集是一项非常重要的任务,我们为此选择了一种(半)自动化方法。我们首先选择10000个最受欢迎的标志性维基百科页面(过去一个月)。对于每个页面,我们使用页面标题作为对Yandex图像搜索引擎1的查询,然后下载响应查询返回的前1000个图像(如果查询返回的图像更少,则下载的顶部图像更少)。
在第二阶段,我们通过观察响应顶部的数百张照片以及从剩余图像(900或更少)均匀采样的另外一百张照片来观察返回的图像。然后我们手动将下载的列表分类为以下三个类别之一:(1)“take all”(数百个中至少80%是相关的,即标记的实际照片),(2)“take top”(前100个中至少有80%是相关的,但是接下来的100个有超过20%是不相关的图像,包括logo,地图,肖像,错误的场景/对象),(3)“unsuitable”(超过20%不相关的图像在前一百个图像内)。总的来说,通过这种方式,我们发现了252个“take all”的图像和420个“take top”的图像。图4显示了收集的数据集中两个典型的类示例。然后,我们从这些类中汇总数据集,为每个查询获取前1000个图像(用于“take all”类)或前100个图像(用于“take top”类)。总的来说,得到的数据集有672个类和213,678个图像。在收集过程中,我们排除了与Oxford相关的查询,我们还从最终数据集中删除了几个带有Holidays数据集的重复数据集。我们还在本页下面提供了查询和URL列表。
图4.来自收集的地标数据集的“Leeds Castle”和“Kiev Pechersk Lavra”类的样本图像。第一类包含共享同一建筑物的“干净”室外图像,而第二类包含许多与室外照片不共享的室内照片
因此,我们收集地标数据集的方法与使用Flickr爬取以全自动方式组装类似数据集的[14]的方法不同。由图像搜索引擎索引的图像和用户标记的图像的统计数据是不同的,因此使用Flickr爬取的数据集尝试自适应将是有趣的。
然后,我们使用收集的数据集来训练CNN,其结构与ILSVRC相同(除了我们将输出节点数改为672)。我们通过原始的ILSVRC CNN来初始化我们的模型(最后一层除外)。 否则,训练就与原始网络相同。
重新训练神经编码的结果。表1中给出了在地标数据集上重新训练的网络产生的神经编码的结果。正如预期的那样,与原始神经编码的差异是与地标图像和特定检索数据集之间的相似性有关。因此,Oxford 和 Oxford 105K数据集有了很大的改进,这些数据集也是基于具有标记的照片。Holiday数据集的改进较小但仍然非常可观。在Holidays数据集上改编的L6(I)特征的性能优于以前发布的基于整体特征的系统(除非考虑更高的维度,如[22]中所述)。图5显示了使用原始和重新训练的神经编码获得的结果的代表性检索示例。我们还尝试在随机初始化(即从头开始训练)的带有标记的数据集上训练CNN,但与ILSVRC相比,由于训练图像的数量较少和更高比例的无关图像而观察到性能不佳。
图5.Holidays查询的示例在原始和重新训练的神经代码的结果之间存在很大差异(在Landmarks上重新训练)。在每个行对(每两行为一个行对)中,最左边的图像对应于待查询图像,每一个行对中的第一行对应于具有原始神经代码的查询结果,第二行对应于再训练的神经代码的 查询结果。 对于大多数查询,通过再训练进行调整是有帮助的。 底行显示了一个罕见的例外。
有趣的是,虽然我们通过在Landmarks数据集上重新训练CNN来获得改进,但是通过在SUN数据集上重新训练CNN,并没有获得在原始神经编码上的改进[25]。显然,这是因为每个SUN类仍然对应于具有相同使用类型的不同场景,而Landmark数据集以及Holidays和Oxford数据集中的每个类对应于相同的对象(例如建筑物)。
适应旋转后图像序列。在对Landmarks数据集进行再训练后,UKB数据集的性能下降。这反映了以下事实:UKB数据集中的类(对应于不同小对象的多个室内视图)与ILSVRC中的某些类更相似,而不是标记的图像。为了证实这一点,我们进行了第二次再训练实验,其中我们使用了多视图RGB-D数据集[12],其中包含300个家用电器的转盘视图。我们将每个对象视为一个单独的类,并为每个类抽取200个图像。我们在60,000张图像(深度通道信息被丢弃)的数据集上重新训练网络(再次由ILSVRC CNN初始化)。我们再一次观察到(表1)这种再训练提高了相关数据集的检索性能,因为UKB的准确率从3.43增加到3.56。在不相关数据集(Oxford,Oxford-105K)上的性能下降。
5.压缩神经编码
由于我们实验中的神经编码是高维的(例如对于L6(I)来说是4096),尽管比其他现有技术的整体描述符具有更低的维度,但是出现了它们有效压缩的问题。在本节中,我们将评估两种不同的压缩策略。首先,我们研究神经编码的效率如何随着常见的基于PCA的压缩而降低。一个重要的发现是这种退化是相当优美的。其次,我们基于判别性降维来评估更复杂的程序。我们将评估集中在L6(I)上,因为与第六层相关的神经编码的性能始终比来自其他层的代码更好。
PCA压缩。我们首先评估PCA压缩后不同版本的神经编码对不同维数的性能(表2)。在这里,PCA训练是对来自Landmark数据集的100,000个随机图像进行的。
针对不同PCA压缩率的神经编码L6(I)的质量在表2中给出。总体而言,PCA工作得非常好。因此,神经编码可以被压缩到256或甚至128维,几乎在没有任何损失的情况下。重新训练代码的优点在所有压缩率下都会持续存在。表3进一步比较了压缩到128维的不同整体描述符,因为在以前的工作中选择了这个维度进行比较。对于Oxford和Holidays数据集,地标再训练神经编码在低维全局描述符中提供了新的最新技术。
表2.不同PCA压缩率的神经编码(原始和重新训练)的性能。 描述符的性能几乎不受影响,直到256的维度和与更极端压缩相关的降维是优美的
表3.PCA压缩神经编码(128维)与具有相同维度的现有技术整体图像描述符的比较。 PCA压缩的带标记再训练神经编码在Holidays,Oxford和Oxford 105K数据集上建立了最新的先进技术。
判别维数减少。在本节中,我们通过学习低秩投影矩阵W进一步进行判别维数降低。该学习的目的是在对应的图像包含相同对象时使代码之间的距离较小,而在其它情况下使代码之间的距离较大,从而实现对诸如视点变化等干扰因素的额外容忍。对于这种学习,我们收集了许多包含相同对象的图像对。 同样,这里的难点是收集一组不同的对。
为了获得这样的数据集,我们在Landmark数据集的相同类中对图像对进行采样。我们使用标准图像匹配管道(SIFT +最近邻匹配与第二最佳邻居测试[15] + RANSAC验证[5])建立匹配图。管道应用于属于同一地标的所有图像对。一旦构建了地标的图形,我们就拍摄一对照片,这些照片在图表中至少共享一个邻居但不是邻居本身(以确保我们不会将训练过程集中在近似重复上)。通过这样的过程,我们获得900K不同的图像对(图7)。我们进一步贪婪地选择100K对的子集,使得每张照片在这样的子集中最多出现一次,并使用该对子集进行训练。
图6.在PCA压缩和有区别压缩的神经编码的结果之间具有较大差异的查询的示例(对于32维)。 正确的答案以绿色标出。
图7.用于区分性降维的训练对的示例。 这些对是通过耗时的RANSAC匹配局部特征和简单分析得到的匹配图获得的(有关详细信息,请参阅文本)。
表4比较了Oxford数据集非重训练代码的两种压缩策略(PCA和判别约简)的结果。可以看出,对于极度压缩的16维码,判别维数约简能获得最大的增益。我们还评估了在地标数据集上重新训练的神经编码的判别维数减少。然而,在这种情况下,我们并没有观察到判别维数减少的任何额外改进,可能是因为网络再训练和判别维数降低是使用重叠训练数据进行的。
表4.对Oxford数据集上原始神经编码的PCA压缩性能和判别维数约简性能的比较,判别维数约简比PCA约简好,尤其是对极端维数约简。
6.结论
我们已经评估了图像检索应用程序中深度神经编码的性能。可以从我们的实验中得出以下几个结论和观察结果。
首先,正如所预期的那样,即使使用经过训练的CNN执行分类任务,并且当训练数据集和检索数据集彼此非常不同时,神经编码也执行得很好。不出所料,当CNN在与检索数据集更相关的图片上重新训练时,可以进一步改善这种性能。
我们注意到在检索准确性方面存在明显的改进空间,因为所有图像都被下采样到低分辨率(224×224),因此丢失了很多关于纹理的信息,这些信息可能是非常重要的。作为待改进的一个方面,我们使用Fisher Vectors进行的实验表明,在类似情况下,它们在Holidays数据集上的性能下降约为0.03 mAP。
有趣的是,也许是出乎意料的是,最好的性能不是出现在网络的最顶层,而是出现在输出层的前两层内。即使CNN在相关图像上重新训练之后,这种效果仍然存在。我们推测,这是因为顶层对分类任务调优太多,而底层对干扰因素没有获得足够的不变性。
我们还研究了压缩神经编码的性能,其中普通PCA或具有判别维数减少的PCA组合导致非常短的代码具有非常好的(最先进的)性能。一个重要的结果是PCA影响神经编码的性能远低于VLAD,Fisher矢量或三角测量嵌入。一种可能的解释是,通过网络传递图像会丢弃与分类(和检索)无关的大部分信息。因此,来自更深层的基于CNN的神经码保留比无监督的基于聚合的表示更少(无用)的信息。 因此,PCA压缩对神经编码更有效。
一个可能有趣的研究方向是,是否可以通过使用匹配图像对来训练整个深层结构,从而直接获得良好的神经编码(而不是使用分类性能作为训练目标),例如, 使用[3]中的siamese结构。自动收集具有足够多样性的合适训练集合本身就是一项有趣的任务。最后,我们注意到,通过选择用于生成代码的网络层的大小而不是事后过程,可以实现维度减少到所需的维度。
说明:本人计算机专业研究生入门深度学习,图像检索方面,开始阅读论文,本来想看能不能找到这篇论文的中文翻译,找了很久没找到。于是就决定自己翻译一下,由于本人能力有限,论文翻译过程中可能会有一些不妥当的地方,希望各位提出宝贵的修改意见,不吝赐教。