1 Introduction
随着社交媒体例如Facebook,Google上越来越多的图像由用户上传,图像数据库的规模日益增大。在这样大规模的图库当中进行检索、识别、比对等任务是非常具有挑战性的。计算复杂度,存储空间,时间成本等都与图库的规模有关。如果把现已提出的有效方法应用在现实生活中的大规模图库当中去应用,其性能会大幅下降。
本文为解决大规模人脸图像检索,提出了一种有效的级联搜索系统,结合了快速搜索过程(用乘积量化(PQ)实现的ANN搜索)和商用的匹配器(COTS)来实现,并用CNN来提取具有判别力的人脸特征,能够在检索精度和运行速度之间达成平衡。
为验证本文人脸搜索系统的性能,文章以有层次的、难度递增的方式,在多个人脸数据集上进行和人脸识别、验证和检索任务的评估,闭集测试和开集测试都有涉及。虽然文章在方法上并没有提出创新性思想,CNN结构和检索方法都是别人提出的,但是它做了大量的实验,有很多的收获。
而且,为了证明本文检索系统的实用性,文章还做了一个案例研究,即2013年美国的一起波士顿马拉松爆炸案,将图库增加到8000万,并在这样的大规模图库中检索出该爆炸案的两位嫌疑犯人。
什么是人脸检索?
给定一张查询人脸图像,检索系统根据查询人脸与图库中所有人脸图像的相似度比对,返回一个与查询人脸图像相似度最高的图像序列。
人脸检索的场景应用
- Faccebook, Google的标签推荐系统会自动地检测出人脸,并根据输入人脸的特征与数据库中已有标签的图像对应的特征之间的相似度来推荐出可能的姓名标签
- 在执法领域,FBI计划建立一个包含5000万张图像的Next Generation Identification(BGI)数据库,通过在数据库中搜索与犯罪嫌疑人长相相似的图像,来提供调查。
大规模人脸检索的困难及挑战
- 由于数据库规模的增大而导致搜索精度的损失
- 计算复杂度随数据库规模的增大而有所增加
因此本文面对的是在社交媒体及其他网页应用环境下的大规模人脸搜索问题,而提出的一个级联式的人脸搜索框架。这样的应用环境极具挑战性,而且大量的人脸图像通常在光照、姿态、表情等方面是不收限制的。提取出鲁棒的人脸特征,使得它们对同一张人脸的多样差异保持不变性,是非常关键的。
以下内容将详细介绍文章所提出的框架,以及做的大量实验。
3 Face Search Framework
3.1 Template Generation
Face Pre-process
为了使网络从人脸图像中学习出更加具有判别力的特征,在人脸图像输入之前需要进行必要的预处理,避免人脸以外的背景内容影响模型的性能。
一般的人脸检索的流程如下:
人脸检测 --> 人脸特征点提取 --> 人脸对齐 --> 特征提取 --> 相似性度量
本文的人脸对齐步骤:
(1)用DLIB库实现人脸检测
(2)用One millisecond face alignment with an
ensemble of regression trees提取出68个人脸特征点
(3)对齐人脸,利用特征点调整人脸在图像上的位置,使其“摆正”
Face Feature Extraction
本文对论文Learning Face Representation from Scratch当中的ConvNet作为人脸图像的特征提取器,并对原ConvNet做出了四处改动,分别是:
(1)输入图像由灰度图变为RGB图像
(2)增加了鲁棒的人脸对齐程序
(3)对110x110的输入图像裁剪为100x100的区域,实现数据增强
(4)删除了原CNN结构中的对比损失层(Contrastive cost layer)
CNN结构解析:
该ConvNet主要有三个部分:
(1)卷积&池化层:卷积核采用3x3的大小,以减少网络的参数量;
(2)特征表示层:基于“多样的人脸图像通常存在于一个低维的流形中”这样的假设,将特征表示层设为320维;
(3)输出分类层;是一个N维的softmax分类层,其中N是训练数据集中所包含的identity数量(N = 10,575)
3.2 Face Filtering
F :CNN特征提取器
S :相似性度量函数
R a n k k Rank_k Rankk :取序列中的top-k个与查询人脸最相似的图像序列
传统人脸比对函数的计算复杂度与图库规模N以及特征向量维度d是线性相关的,而近似最近邻算法(Approximate Nearest Neighbor,ANN)能在不大量损失精度的前提下提升运行时间,广泛应用于大规模图库的搜索。
而本文采用的ANN算法是Product Quantization 乘积量化,下面将对ANN算法进行简单解释,并详细介绍乘积量化方法。
最近邻搜索(Nearest Neighbor,NN)的简单综述
- 最近邻检索(NN)- 精确检索
最近邻检索就是根据数据的相似性,从数据库中寻找与目标数据最相似的项目,而这种相似性通常会被量化到空间上数据之间的距离,可以认为数据在空间中的距离越近,则数据之间的相似性越高。当需要查找离目标数据最近的前k个数据项时,就是k最近邻检索(K-NN)。
精确检索中数据维度一般较低。所以会采用简单的蛮力方法,也就是平常所说的穷举搜索,在数据库中依次计算其中样本与所查询数据之间的距离,抽取出所计算出来的距离最小的样本即为所要查找的最近邻。这样做的缺点是当数据量非常大的时候,搜索效率急剧下降
- 近似最近邻检索(ANN)
面对庞大的数据量以及数据库中高维的数据信息,现有的基于 NN 的检索方法无法获得理想的检索效果与可接受的检索时间。进而有研究人员开始关注近似最近邻检索(Approximate Nearest Neighbor,ANN),近似最近邻检索利用了数据量增大后数据之间会形成簇状聚集分布的特性,通过对数据分析聚类的方法对数据库中的数据进行分类或编码,对于目标数据根据其数据特征预测其所属的数据类别,返回类别中的部分或全部作为检索结果。近似最近邻检索的核心思想是搜索可能是近邻的数据项而不再只局限于返回最可能的项目,在牺牲可接受范围内的精度的情况下提高检索效率。主要分为两种办法,一种是采用哈希散列的办法,另一种则是矢量量化。
Product Quantization 乘积量化
参考博客:
简介
Product Quantization(PQ)是Herv´e J´egou等人在2011年IEEE上发表的论文Product Quantization for Nearest Neighbor Search中提出来的。它的提出是为了在内存和效率之间求得一个平衡,既保证图像索引结构需要的内存足够,又是的检索质量和速度比较好。PQ属于ANN算法,相关算法有KD-Trees, K-Means等。
主要思想
PQ分为:特征的分组量化和类别的笛卡尔积过程。假设一个数据集,K-Means的做法是给定类别数目K,目标函数是所有样本到雷中新的距离和最小,迭代优化目标函数,得到K个类中心和每个样本所属的类别。PQ的目标函数不变,做法不同。
1.空间切分
假设图像的特征向量为: x ∈ R d x\in R^d x∈Rd,PQ将 d d d 维的特征空间切分成 m m m 个子空间,因此特征向量 x x x可以表示成 m m m个子向量的级联:
x = ( x 1 , x 2 , . . . , x m ) , x i ∈ R d / m x = (x^1,x^2,...,x^m),x^i \in R^{d/m} x=(x1,x2,...,xm),xi∈Rd/m
例:一个 d = 128 d=128 d=128维的特征向量被分成了 m = 8 m=8 m=8个子向量,每个子向量有 d / m = 16 d/m=16 d/m=16维.
2.量化
用K-Means聚类算法为第 i i i 子空间 R d / m R^{d/m} Rd/m 生成一个码本codebook
C i = c j = 1 , 2 , . . . , z i ∣ c j i