基于深度学习的局部实例搜索
2020-11-14朱周华
朱周华,高 凡
(西安科技大学 通信与信息工程学院,陕西 西安 710054)
0 引 言
信息时代,数字图像和视频数据日益增多,人们对于图像检索的需求也随之增大。传统的基于内容的图像检索(CBIR)都是定义在图像级别的检索,查询图片背景都比较单一,没有干扰信息,因此可以提取整个图片的特征进行检索。但是,现实生活中的查询图片都是带有场景的,查询目标仅占了整幅图的一部分,直接将查询图与数据库中的整幅图像进行匹配,准确率必然会很低。因此,考虑使用局部特征进行实例搜索。
实例搜索是指给定一个样例,在视频或图像库中找到包含这个样例的视频片段或者图片,即找到任意场景下的目标对象。早期,实例搜索大多采用词袋模型(bag-of-words,BoW)对图像的特征进行编码,其中大部分都采用尺度不变特征变换(SIFT)[1]来描述局部特征。Zhu等人[2]首先使用SIFT提取查询图片和视频关键帧的视觉特征,接着采用词袋算法对特征进行编码得到一维向量,最后根据向量之间的相似性,返回一个排好序的视频列表,文中借鉴了传统视觉检索的一些方法,但是没有很好地结合实例搜索的特点。2014年有学者[3]提出采用比BoW性能更好的空间Fisher向量[4]和局部特征聚合描述符(VLAD)[5]来描述SIFT特征的空间关系,从而进行实例检索。
随着深度学习的发展,深度卷积神经网络特征被广泛应用于计算机视觉的各个领域,如图像分类[6-7]、语音识别[8]等,均取得了不错的效果,因此有学者也将其引入到图像检索领域。起初,研究者们利用神经网络的全连接层特征进行图像检索[9],后来很多研究者开始转向卷积层特征的研究[10],并且证明卷积层特征的性能更好。
Eva等人[11]采用词袋模型对卷积神经网络(CNNs)提取的特征进行编码,然后分别进行初次搜索,局部重排,扩展查询,从而实现实例检索。
实例检索需采用局部特征实现,因此许多生成区域信息的方法相继出现,最简单的是滑动窗口,之后有学者提出使用Selective Search生成物体候选框[12-13],但是这些方法将生成候选区域和特征提取分开进行。Faster R-CNN[14]是一个端到端的网络,它可以同时提取卷积层特征和生成候选区域。文献[15]提出将微调之后的目标检测网络Faster R-CNN应用到实例检索中,使用区域提议网络(region proposal network,RPN)生成候选区域,从而得到查询图区域特征与数据库图像区域特征,特征匹配之后排序得到检索结果,在两个建筑物数据集上取得了不错的效果。何涛在其论文中[16]针对Faster R-CNN网络效率较低的问题提出了端到端的深度区域哈希网络(DRH),使用VGG16作为特征提取器,滑动窗口和RPN网络得到候选区域,并将两种方法进行对比,整个网络最后阶段对特征进行哈希编码并计算汉明距离进行排序,从而得到检索结果,文中为了排除不同场景、不同光照和拍照角度产生的干扰,使用局部信息进行检索。以上两篇文献尽管均使用局部信息进行检索,但都是为了排除干扰信息将查询图中的目标标记出来,查询图依然是整幅图像。
实际搜索图像时某些图片会有残缺,此时就无法通过标记目标进行检索,因此实例检索除了常见的利用局部特征进行整幅图像的检索之外,局部图像的检索亦有着非常重要的现实意义。现有的检索方法的检索效果不是很理想,因此文中针对以上两个问题首先改进整幅图像的检索并提高其检索性能,之后利用图像的部分信息(例如建筑物的顶部、嫌疑人的部分特征等)检索得到整幅图像,实现局部图像的检索。同时,考虑到实际检索时,输入均为一幅图像,输出为一组图像,因此,文中在局部实例检索的基础之上加入在线检索功能,可以实现局部图像的实时搜索。因此,主要有以下两大方面的贡献和创新:
(1)基于深度学习的实例搜索。一方面,通过微调策略提高了实例搜索的精确度;另一方面,针对候选框得分(scores)和余弦距(cosine)两种相似性度量方法存在的不足,提出将两种方法相结合,以获得更好的检索效果。
(2)基于深度学习的局部实例搜索。由于局部图像的检索具有重大的现实意义,将全局实例搜索算法应用在局部实例检索任务中,即利用残缺图片信息搜索得到整幅图像,并加入在线检索功能,输入局部查询图,便可以得到查询结果和所属建筑物的名字。
1 相关理论
1.1 基于Faster R-CNN的区域特征提取
如图1所示,Faster R-CNN由卷积层(Conv layers),RPN网络,RoI pooling,分类和回归四部分构成。
图1 Faster R-CNN结构
卷积层用于提取图像特征,可以选择不同结构的网络,输入为整张图片,输出为提取的特征称为feature maps。文中采用VGG16[7]的中间卷积层作为特征提取器。
RPN网络用于推荐候选区域,这个网络是用来代替之前的selective search[13]的,输入为图片,输出为多个矩形区域以及对应每个矩形区域含有物体的概率。首先将一个3*3的滑窗在feature maps上滑动,每个窗口中心点映射到原图并生成9种矩形框(9 anchor boxes),之后进入两个同级的1*1卷积,一个分支通过softmax进行二分类,判断anchor boxes属于foreground还是background。另一分支计算anchor boxes的bounding box regression的偏移量。Proposal层结合两个分支的输出信息去冗余后保留N个候选框,称为proposals。
传统的CNN网络,输入图像尺寸必须是固定大小的,但是Faster R-CNN的输入是任意大小的,RoI pooling作用是根据候选区域坐标在特征图上映射得到区域特征并将其pooling成固定大小的输出,即对每个proposal提取固定尺寸的特征图。
分类和回归模块,一方面通过全连接层和softmax层确定每个proposal的类别,另一方面回归更加精确的目标检测框,输出候选区域在图像中的精确坐标。
1.2 微调Faster R-CNN
微调,即用预训练模型重新训练自己的数据,现有的VGG16 FasterR-CNN预训练模型主要是基于VOC2007数据集中20类常见的物体预训练得到的。文中的数据集是建筑物,与VOC2007图片相似度和特征都相差较大,如果依然采用预训练模型,效果必然不好,再加上从头开始训练,需要大量的数据、时间和计算资源。而文中所选用的数据集较小,因此需要进行微调,这样不仅可以节省大量时间和计算资源,同时还可以得到一个较好的模型。微调主要分为以下三个步骤:
(1)数据预处理。
首先需要对数据集进行数据清洗,主要去除无效值和纠正错误数据,提高数据质量。其次,由于文中的数据集较小且每类样本分布不均衡,因此选择性地对每类图片作图像增强处理,其中图像增强方法包括水平翻转,增加高斯噪声,模糊处理,改变图像对比度。最后将每幅图片中的目标样例标记出来。
(2)建立训练集和测试集。
一般是按一定的比例进行分配,但是文中选用的数据集存在样本不均衡的问题,有些类别特别多,有些类别特别少。由于是将所有图片全部放入同一个文件夹,然后依次读取样本分配训练集和测试集,如果按比例分配,小类样本参与训练的机会就会比大类少,训练出来的模型将会偏向于大类,使得大类性能好,小类性能差。平衡采样策略就是把样本按类别分组,每个类别生成一个样本列表,制作训练集时从各个类别所对应的样本列表中随机选择样本,这样可以保证每个类别参与训练的机会比较均衡。
(3)修改相关网络参数,进行训练。
主要修改网络文件中的类别数和类名,然后不断调节超参数,使性能达到最好。
1.3 实例搜索
实例检索一般经过初次搜索,局部重排,扩展查询三部分完成。
初次搜索首先提取查询图和数据库所有图像的全局特征,然后计算特征之间的相似度,最后经过排序得到初步的检索结果。文中提取VGG16网络的最后一个卷积层(Conv5_3)特征。
局部重排是将初次搜索得到的前K幅图片作为新的数据库进行重排,基本思路是提取查询图和数据库的区域特征并进行匹配,根据匹配结果进行排序从而得到查询结果。这里查询图和数据库的区域特征提取方法不同,其中,查询图的区域特征是用groundtruth给定的边界框对整幅图像特征进行裁剪得到的,而数据库的区域特征是经过RPN网络和RoI pooling池化得到的特征(pool5)。
扩展查询(query expansion,QE)是取出局部重排返回的前K个结果,对其特征求和取平均作为新的查询图,再做一次检索,属于重排的一种。
2 实 验
2.1 数据集和评价指标
(1)实验环境。
文中所有实验均在NVIDIA GeForce RTX 2080上进行,所用系统为Ubuntu 18.04,使用的深度学习框架为Caffe,编程语言为Python。
(2)数据集介绍。
在两个公开的建筑物数据集Oxford[17]和Paris[18]上进行实验。其中Oxford包含5 063张图片,Paris包含6 412张图片,但是有20张被损坏,因此有6 392张图片可用。两个数据集都来自Flickr,共有11类建筑物,同一种建筑物有5张查询图,因此每个数据集总共有55张查询图,除此之外,两个数据集相同类别建筑物的场景、拍照角度和光照都有所不同,而且有很多本来不是同一种建筑物但是从表面看上去却非常相似的图片。
(3)评价指标。
平均精度均值(mean average precision,mAP)是一个反映了图像检索整体性能的指标,如式(1)和(2)所示。
(1)
(2)
其中,N表示返回结果总个数,P(k)表示返回结果中第k个位置的查准率,rel(k)表示返回结果中第k个位置的图片是否与查询图相关,相关为1,不相关为0。MAP是多次查询后,对每次检索的平均精度AP值求和取平均。这里对是否相关做进一步解释:两个数据集的groundtruth有三类,分别是good,ok和junk,如果检索结果在good和ok中,则判为与查询图相关,如果在junk中,则判为不相关。
2.2 基于深度学习的实例检索
2.2.1 方 法
先尝试使用VGG16 Faster R-CNN预训练模型进行检索,在两个数据集上MAP值仅0.5左右,接着文中使用微调策略,只冻结了前两个卷积层,更新了之后所有的网络层权值,通过不断调参,训练一个精度尽可能高的模型。其中,微调过程中分别采用数据增强和平衡采样技术对数据进行处理。具体地,对于Oxford数据集,建筑物radcliffe_camera的数量高达221张,而建筑物pitt_rivers仅有6张,其他9类样本数量在7至78之间不等,数量差距相当大,因此,选择性地对数量小的6类样本通过上面提到的方法进行数据增强,使小类样本数量增大。对其进行数据增强之后,虽然样本数量差距缩小,但是依然存在不均衡的问题,如果将所有样本放入一个文件夹中,按比例分配训练集和测试集,则依然会导致训练出来的模型小类性能差的问题。因此,将每类样本生成一个列表,再从每个列表中随机选取一定数量的样本作为该类的训练样本。
除此之外,文献[15]在局部重排部分使用了两种特征匹配方法,一种是直接利用候选框对应得分(scores)进行排序。数据库中每幅图片经过Proposal layer会得到300个区域提议(proposal)的坐标和对应得分,找到查询图对应类的最高得分作为查询图和数据库每幅图片的相似度,再从高到低进行排序就可以得到检索结果。另一种是利用余弦距(cosine)进行排序。数据库中的每幅图片经过RoI pooling可以得到300个特征向量,计算查询图与数据库中每幅图片的300个区域特征的余弦距,最小距离对应的候选框即就是和查询图最相似的区域提议,然后把所有的最小距离再从小到大进行排序,就可以得到相似度排序。第一种方法虽然得到的边界框(bounding box regression)定位较准,mAP值也很高,但是视觉相似度并不是很高。而且根据候选框得分进行排序,每类建筑物的得分和排序都是一定的,因此每次相同类别的不同查询返回结果都是相同的,不会根据查询图片的不同而返回不同的排序。第二种方法得到的检索结果,图像相似度很高,但是边界框定位不是很准确。文中将两种方法结合(scores+cosine),利用余弦距计算相似度并排序,选择得分最高的候选框进行目标定位,这样既解决了视觉相似度不够的问题,也解决了相同类别的不同查询返回结果相同的问题,同时又解决了目标定位不准的问题。
2.2.2 参数设置
本节主要讨论扩展查询中的参数k对实验结果的影响,并选取一个最优值作为本实验的默认值。在特征匹配方法选用余弦距的情况下,在两个数据集上分别测试了k等于3、4、5、6、7时的mAP值,实验结果如表1所示。
表1 不同k值对mAP值的影响
从表1综合来看,文中选用6作为k的默认值。
2.2.3 结果与分析
表2是文中与其他文献mAP值的对比,最后两项是文中三种方法的实验结果。可以看出,相比于其他文献,文中方法的检索性能得到很大的提升,比目前最好的方法分别高出6.1%和4%,说明文中方法优于其他检索方法。文中方法与文献[15]所采用方法类似,但结果却得到了很大的改善,通过分析认为,虽然所用数据集都相同,但是生成的训练集和测试集完全不同,而且文中采用数据增强方法,使得样本的数量增加了3~4倍,使用平衡采样的方法保证小类样本可以得到和大类样本同样的训练机会。除此之外,网络超参数对于模型的影响非常大,因此文中对参数进行调优,使得训练出来的模型更好。
表2 文中方法与其他方法的mAP值对比
图2是两组对比图,图(a)和图(b)是对建筑物all_souls和louvre分别用候选框得分和余弦距进行排序的结果,其中,左边1列是查询图,右边5列是查询返回结果,表示与查询相关(下同)。图3是all_souls的两个不同查询用得分进行排序得到的检索结果。图4是将两种匹配方法结合得到的检索结果。
从图2可以看出利用候选框得分排序得到的结果目标定位较准确,但是返回结果的背景、光照、拍照角度、颜色、对比度和样例大小与查询图相差很大,而利用余弦距排序得到的结果候选框定位不是很准,但从背景、样例大小等视觉角度来看相似度较高。图3中all_souls的两个不同查询图返回结果中不仅图片一样,而且顺序也相同。因此可以看出两种方法各有缺陷。
图2 不同建筑物的同一个查询分别利用得分和余弦距得到的排序
图3 建筑物all_souls的两个不同查询根据得分得到的排序
图4是将两种方法结合得到的返回结果,与图2相比视觉相似度提高了,目标定位也更准确了,与图3相比,同一个建筑物的两个不同查询返回结果也会根据查询图片的不同而改变,且从表2最后一行可以看出该方法比使用候选框得分在Oxford上得到的mAP值高0.009,与使用余弦距得到的mAP值相同。因此认为,以上提出的特征匹配方法得到的返回结果在不降低mAP值的基础上提高了检索的准确率。
图4 综合得分和余弦距两种方法得到的检索结果
2.3 基于深度学习的局部实例检索
2.3.1 方 法
本节局部图像的检索是建立在2.2节基础之上的,正是由于整幅图像检索采用候选区域特征实现,局部图像的检索才得以实现。
较之于整幅图像的检索,局部图像的检索具有同样重大的现实意义。生活中常会因为某个原因使图片变得残缺,且难以识别,那么此时就需要使用局部图像检索得到原始图像的完整信息。比如,通过某建筑物的顶部搜索得到整幅图像从而识别该建筑物。或者可以应用在刑侦工作中,当摄像机捕获到的是某犯罪嫌疑人的部分特征时,可以通过已有的部分特征在图像库或者其他摄像头下搜索得到该嫌疑人的完整信息。
由于目前没有一个现成的残缺图像库,因此本节利用截图工具对整幅图像作裁剪处理以模拟残缺图像,即从图像库选取不同实例通过裁剪得到不同大小,不同背景,不同角度,不同颜色的局部查询图。由于图像库图像都是整幅图像,在尺寸和包含的信息方面与局部查询图相差很大,因此局部检索最大的难点在于如何处理局部图像。2.2节会对输入图片统一进行缩放,那么局部查询图片输入后,先进行放大,则会导致原始输入图像失真,提取特征后再对其进行裁剪又会进一步丢失大部分图像信息,因此根本无法得到正确的检索结果。文中对其进行以下处理:即输入查询图后,先将局部查询填充至与数据库图像相同大小(图像库的图像基本都是1 024*768或者768*1 024大小的),这样对图像进行统一缩放,提取特征,按比例裁剪之后,得到的正是局部图像的特征,再与图像库匹配,则会输出正确的排序结果。本节输入为建筑物的局部图像,输出为局部查询所属的建筑物图像,并且会标记出局部查询在所属建筑物中的位置。
目前,很多文献(如[15])都比较注重算法的研究,基本都采用离线的形式实现图像检索,不仅离线建立特征库,查询图也是成批输入到网络中进行离线检索,得到的结果也是成批保存起来,可是实际应用中,一般都是将查询图逐幅输入进行实时检索,因此文中在前文基础之上,加入了在线检索功能,最后实现在线局部实例检索。
2.3.2 结果与分析
如图5是通过裁剪建筑物radcliffe_camera和triomphe的原图,得到的5个不同查询图,分别选取一幅进行检索,得到了完整的建筑物,且标记出了局部查询图像在整个建筑物中的位置,如图6所示。最终mAP值分别为0.880和0.857。从检索结果可以看出返回结果的视觉相似度极高,目标定位准确,且mAP值高于其他文献中整幅图像的检索准确率。因此,可以证明文中提出的全局搜索算法在局部图像检索任务中亦能取得很好的效果。
图5 两种建筑物的五个局部查询图
图6 两组局部查询的检索结果
在此之前,只有文献[19]为了证明行人重识别系统的普适性,使用CaffeNet和VGG16两个网络模型在Oxford数据集上对局部建筑物图像进行了测试,得到的mAP值分别为0.662和0.764,远低于文中的准确率。因此提出的局部实例搜索的性能良好。
在线检索功能按照输入图片,可得到查询结果和查询建筑物的名字,且文中在没有使用任何编码算法的情况下,在两个数据集上检索一幅图的平均耗时分别为5.7 s和7 s,经检测,90%的时间都耗费在利用特征向量计算相似度部分。如图7所示,分别是bodleian和eiffel的检索结果和总耗时。
图7 在线检索结果
3 结束语
为了进一步提高实例检索性能,针对以往的利用候选框得分和余弦距进行特征匹配的不足,提出将两种方法结合,即利用余弦距计算相似度并排序,选择得分最高的候选框进行目标定位。并使用微调策略重新训练预训练模型从而使其适用于文中的实例检索。相比于其他方法,文中采用的方法在性能方面有明显的提升。在此基础之上,利用残缺图像搜索得到整幅图像,性能高于其他文献整幅图像的检索,且仅比文中整幅图像检索低0.032,实验结果证明提出的全局搜索算法同样适用于局部图像检索任务。之后加入在线检索功能,在没有任何编码的情况下检索一幅图像平均耗时仅需5.7 s~7 s。在未来的工作中,可以进一步加入编码模块,以提高检索速度,并且可以在更大的数据集上进行测试。