Aggregating local features for Image Retrieval

Josef和Andrew在2003年的ICCV上发表的论文[10]中,将文档检索的方法借鉴到了视频中的对象检测中。他们首先将图像的特征描述类比成单词,并建立了基于SIFT特征的vusual word dictionary,结合停止词、TF-IDF和余弦相似度等思想检索包含相同对象的图像帧,最后基于局部特征的匹配和空间一致性完成了对象的匹配。文档检索与计算机视觉之间渊源颇深,在CV领域常常会遇到要将图像的多个局部特征描述融合为一条特征向量的问题,比如常用的BoVW、VLAD和Fisher Vector等。下面,我们从文档检索为切入点,简单学习下这些局部特的融合方法。
Document Retrieval
文档检索系统中一般包含几个标志的步骤:
- 将整个文档分割成单词.英文文档的分词很容易完成,因为各单词间都是由空格隔开的,但是中文分词本身就是个颇有技术含量的事情了。目前比较好的中文分词项目有ICTCLAS,Paoding,FudanNLP,IKAnalyzer和Jieba等。
- 将每个单词用其词根表示(中文不需要此步骤)。比如walk,walking和walks都用walk表示。
- 利用停用词(stop word)表过滤最常见的单词,比如”的“、”啊“等。不过有些情况下,我们需要的也许正好是这些停用词表中的单词,所以现在有些系统中其实也保留了一部分停用词的。
- 剩下的单词组成整个语料库的词典,每个单词有一个用于标识的ID。对于超大的语料库,词典包含的单词数目至少也是百万级别的,所以也需要哈希标或树等高效的数据结构来组建词典,以加快搜索时的查询速度。
- 每个文档用一个向量\(F=\{f_1,\cdots,f_K\}\)表示,其中向量的每个维度表是该维度对应的单词在文档中出现的次数。由于该向量很稀疏,所以可以用稀疏向量的形式存储,即用(word id,fequency)的形式存储每个非零元素即可。
- 建立倒排索引(inverted index),如图1所示。
- 为向量的每个维度计算权重形成新的向量\(V=\{w_1,\cdots,w_K\}\): \begin{equation} w_i=\frac{f_i}{f}\log\frac{N}{n_i} \end{equation} 其中\(f_i\)为第\(i\)个单词在文档中出现的次数;\(f\)为文档经过过滤后的总单词数;\(N\)为整个语料库的文档数目;\(n_i\)为包含第\(i\)个单词的文档数目。TFIDF背后的思想也很直白:在一个文档中出现次数最多的单词更可能是该文档的主要关键词;如果该单词在很多文档中都出现,那么该单词其实并无很丰富的信息量。
- 根据查询关键词,从倒排索引中取出包含关键词的文档的向量,然后与查询关键词组成的向量直接计算余弦相似度,最后结合相似读和文档自身的权重进行排序后返回给用户。

Bag of Visual Words
大规模图像检索不仅要考虑检索的正确率,也要考虑时间和空间的开销.目前最流行的图像特征表示方法莫过于bag of viusal words(BoVW),该方法借鉴了自然语言处理(Natural Language Processing,NLP)中的词袋思想,如图2所示. BoVW的处理流程如图3所示,其过程描述如下:
- 在图像集上提取SIFT等特征描述子\(\{d_i\in\mathbb{R}^n|i=1,\cdots,N\}\);
- 基于这些特征描述子用KMeans或GMM进行聚类分析,得到的聚类中心\(\{c_k\in\mathbb{R}^n|k=1,\cdots,K\}\)即为viusal dictionary中的每一个visual word,到此词典的建立完成;
- 提取图像的特征描述子\(\{d_j\in\mathbb{R}^n|j=1,\cdots,m\}\),用hard或soft的量化方法[11]计算特征描述子落到每个visual word的概率\(\gamma_j=[\gamma_{j1},\cdots,\gamma_{jK}]\),并用\(\sum_{j=1}^m\gamma_j\)构成的直方图表示每一张图片。
- 最后的BoVW向量还需要进一步用\(L_2\)范式归一化,然后用IDF(inverse document frequency)的思想为每个visual word分配权重。
那么基于BoVW,我们怎么来进行图像搜索?是否能从网页搜索中获得些许灵感呢?搜索引擎常用的倒排索引在这里也可以有用武之地。


BoVW的成功主要是源于两点:1)诸如SIFT等强大的局部特征描述子[7,12,13]为BoVW奠定了坚实的基础;2)用BoVW形式得到的特征描述是与词典(visual dictionary)容量等长的向量,很容易用欧式距离或余弦距离等度量准则计算两个样本之间的相似度,继而可以运用SVM或LR等成熟的分类或回归算法完成后续任务. 但是在大规模图像搜索中,基于BoVW的特征向量的维度通常会高达上百万.为了降低存储开销,有学者提出了将BoVW进一步压缩成二进制[4,10],即抛弃每个visual word出现的频度,仅用1或0表示出现或者未出现.如此一来,存储开销变成了原来的八分之一,但是准确度也比原始的BoVW低一些.据论文[4]中的实验结果,二进制形式的BoVW在visual dictionary的维度高达30,000的时候准确度才和原始BoVW特征的相当,如图4所示.其实高维向量通常都很稀疏,另一个降低存储开销的策略就是用(位置,值)之类的二元组存储非零元素;对于二进制的BoVW,仅存储位置信息即可.此外,若采用[10]中的倒排列表(inverted lists)会大大加快检索速度.

Vector of Locally Aggregated Descriptors
VLAD(vector of locally aggregated descriptors)[5]聚合了SIFT等局部特征后产生一种紧凑的特征描述,其计算复杂性/存储开销和有效性方面都介于BoVW和Fisher Vector[9]之间.VLAD构建词典\(\mathcal{C}=\{c_1,\cdots,c_k\}\)的过程与BoVW类似,只不过最后累加了分配到\(c_i\)的所有样本与\(c_i\)的差值\(x-c_i\)。VLAD可被视为Fisher Vector的简化版本,描述了各特征向量相对于visual word更丰富的一阶统计信息。假设局部特征描述子的维度为\(d\),那么VLAD的特征维度\(D=k\times d\),其中与每个visual word相关联的特征向量 \begin{equation} v_i=\sum_{\text{x such that }NN(x)=c_i}x-c_i \end{equation} 这些残差叠加的结果即为最后如图5所示的VLAD特征描述: \begin{equation} V=\begin{bmatrix} v_1\\ \vdots\\ v_k \end{bmatrix}\in\mathbb{R}^{k\times d} \end{equation} 最后,需要对得到的VLAD向量进行归一化处理,最常见的归一化方就是针对每个\(v_i\)除以其对应的\(L_2\)范数[2],或者对\(V\)中的每个元素\(z\)执行变换\(sign(z)\sqrt{z}\),然后在此基础上用全局的\(L_2\)范数进行归一化处理。 根据实验结果,即使在visual word数目相对较小的前提下\(k\in[16,256]\)仍能获得比较出色的效果。

Fisher Vector
在图像分类和检索等应用中,基于BoVW集成的特征表述通常存在稀疏和高维度的问题。用FV(Fisher Vector)特征向量可以获得更为紧凑的特征描述,更适用于图像分类和检索等问题。FV可以作为Fisher Kernel[3]的一种特例推导出来。Fisher Kernel作为一种核函数,其作用也是计算两个样本间的相似程度。与多项式核函数、RBF核函数等普通核函数不同的是,Fisher Kernel计算的是样本\(x\)与\(x'\)在产生式模型\(p(x|\Theta)\)中相似度。模型参数\(\Theta\)通常是基于一批训练样本通过最大似然参数估计的方法得到的,使得假定的概率模型能最大限度拟合数据的先验分部情况。在学习到概率模型\(p(x|\Theta)\)后,每个样本在核空间的表述形式如下: \begin{equation} \hat{\Phi}(x)=\nabla_{\Theta}\log p(x|\Theta) \end{equation} 其中\(\hat{\Phi}(x)\)可视为该样本对模型参数的影响程度。接下来还需要对\(\hat{\Phi}(x)\)进行白化变换(Whitening Transform)[1],使其变换为白化向量(白化向量的每个维度服从均值为零、方差有限的概率分布),且对应的协方差矩阵为单位阵,其目的是进一步消除各维度间的相关性,减小数据的冗余度。由于模型参数\(\Theta\)是用最大似然估计得到的,\(\hat{\Phi}(x)\)为对数似然函数的梯度,因此有\(E[\hat\Phi(x)]=0\)。因为\(\hat{\Phi(x)}\)已经经过了中心化处理,其协方差矩阵如下: \begin{equation} H = E_{x \sim p(x|\Theta)} [\hat\Phi(x) \hat\Phi(x)^T] \end{equation} 最终的FV编码\(\Phi(x)\)由经过白化变换的对数似然函数的梯度给出: \begin{equation} \Phi(x) = H^{-\frac{1}{2}} \nabla_\Theta \log p(x|\Theta). \end{equation} 最终,经过Fisher Kernel计算样本间相似度的形式为: \begin{equation} K(x,x') = \langle\Phi(x),\Phi(x') \rangle = \nabla_\Theta \log p(x|\Theta)^\top H^{-1} \nabla_\Theta \log p(x'|\Theta) \end{equation} Fisher Vector的设计初衷在于将图像的局部特征描述编码成便于学习和度量的向量。我们假定\(D\)维的局部特征\(\{x_1,\cdots,x_n\}\)由\(K\)个混合的高斯模型(Gaussian Mixture Model,GMM)生成,其中GMM的参数为\(\Theta=(\mu_k,\Sigma_k,\phi_k;k=1,\cdots,K)\)。为了简化高斯混合模型,假设\(\Sigma_k=\sigma_k^2,\sigma_k\in\mathbb{R}^D_+\)。生成局部特征描述的产生式模型由混合高斯模型的密度函数给出: \begin{equation} p(x|\Theta)=\sum_{k=1}^K\pi_kp(x|\Theta_k) \end{equation} 其中,\(\Theta_k=(\mu_k,\Sigma_k)\),并且 \begin{equation} \begin{split} p(x|\Theta_k)&=\frac{1}{(2\pi^{\frac{D}{2}})\sqrt{|\Sigma_k|}}\exp\left[-\frac{1}{2}(x-\mu_k)^T\Sigma_k^{-1}(x-\mu_k)\right]\\ &=\frac{1}{(2\pi^{\frac{D}{2}})\sqrt{\sigma^2_k}}\exp\left[-\frac{(x-\mu_k)^T(x-\mu_k)}{2\sigma_k^2}\right] \end{split} \end{equation} Fisher Vector需要计算对数似然函数对各模型参数的倒数,下面仅考虑特定模式的参数\(\Theta_k\)。由于高斯密度函数中含有指数函数,其梯度可以写成如下形式: \begin{equation} \nabla_{\Theta_k} p(x|\Theta_k) = p(x|\Theta_k) g(x|\Theta_k) \end{equation} 那么对数似然函数的倒数形式如下: \begin{equation} \nabla_{\Theta_k} \log p(x|\Theta) = \frac{\pi_k p(x|\Theta_k)}{\sum_{t=1}^K \pi_k p(x|\Theta_k)} g(x|\Theta_k) = q_k(x) g(x|\Theta_k) \end{equation} 其中\(q_k(x)\)是用软分配的形式表示样本\(x\)分配到第\(k\)个模式的概率。根据论文[8]的方法,我们进行近似处理:如果\(x\)采样自地\(k\)个模式,那么\(q_k(x)\approx 1\),否则\(q_k(x)\approx 0\),因此得到下式: \begin{equation} \begin{split} &E_{x \sim p(x|\Theta)} [ \nabla_{\Theta_k} \log p(x|\Theta) \nabla_{\Theta_t} \log p(x|\Theta)^T ]\\ \approx &\begin{cases} \pi_k E_{x \sim p(x|\Theta_k)} [g(x|\Theta_k) g(x|\Theta_k)^T], & t = k, \\ 0, & t\not=k. \end{cases} \end{split} \end{equation} 在该近似计算的基础上,各高斯模型的参数之间已经不存在任何相关性了。接下来,计算\(g(x|\Theta_k\): \begin{equation} g(x|\Theta_k) = \begin{bmatrix} g(x|\mu_k) \\ g(x|\sigma_k) \end{bmatrix} \end{equation} 其中 \begin{equation} [g(x|\mu_k)]_j = \frac{x_j - \mu_{jk}}{\sigma_{jk}^2} \end{equation} \begin{equation} [g(x|\sigma_k^2)]_j = \frac{1}{2\sigma_{jk}^2} \left( \left(\frac{x_j - \mu_{jk}}{\sigma_{jk}}\right)^2 - 1 \right) \end{equation} 那么模型的协方差如下: \begin{equation} \begin{split} H_{\mu_{jk}} &= \pi_k E[g(x|\mu_{jk})g(x|\mu_{jk})] \\ &=\frac{\pi_k}{\sigma_{jk}^2}\int\left(\frac{x_j-\mu_{jk}}{\sigma_{jk}}\right)^2p(x|\Theta_k)dx_{j}\\ &=\frac{\pi_k}{\sigma_{jk}^2}\int \frac{-t^2}{\sqrt{2\pi}}e^{\frac{t^2}{2}}dt\\ &=\frac{\pi_k}{\sigma_{jk}^2\sqrt{2\pi}}\left[\left.-te^{-\frac{t^2}{2}}\right|^{+\infty}_{-\infty}+\int e^{-\frac{t^2}{2}}dt\right]\\ &= \frac{\pi_k}{\sigma_{jk}^2} \end{split} \end{equation} 同理,可得 \begin{equation} H_{\sigma_{jk}^2} = \frac{\pi_k}{2 \sigma_{jk}^4} \end{equation} 那么,对于图像的一个特征描述\(x\)得到的FV编码形式为: \begin{equation} \Phi_{\mu_{jk}}(x) = H_{\mu_{jk}}^{-\frac{1}{2}} q_k(x) g(x|\mu_{jk}) = q_k(x) \frac{x_j - \mu_{jk}}{\sqrt{\pi_k}\sigma_{jk}} \end{equation} \begin{equation} \Phi_{\sigma^2_{jk}}(x) = H_{\sigma^2_{jk}}^{-\frac{1}{2}}q_k(x)g(x|\sigma^2_{jk})=\frac{q_k(x)}{\sqrt{2 \pi_k}} \left[\left(\frac{x_j - \mu_{jk}}{\sigma_{jk}}\right)^2 - 1 \right] \end{equation} 据论文[9]的研究表明,先验概率参数\(\pi_k\)对特征描述的贡献较小,因此在这里就被忽略了。假设生成的所有局部特征描述都是服从独立同分布的,那么对于一副图形的\(N\)个特征描述\(\{x_1,\cdots,x_N\}\),其整体的FV编码形式如下: \begin{equation} \begin{split} u_{jk} &= {1 \over {N \sqrt{\pi_k}}} \sum_{i=1}^{N} q_{ik} \frac{x_{ji} - \mu_{jk}}{\sigma_{jk}}, \\ v_{jk} &= {1 \over {N \sqrt{2 \pi_k}}} \sum_{i=1}^{N} q_{ik} \left[ \left(\frac{x_{ji} - \mu_{jk}}{\sigma_{jk}}\right)^2 - 1 \right] \end{split} \end{equation} 其中\(j=1,\cdots,N\)表示特征向量的每个维度。每个图像\(I\)的整体特征描述可由\(\mathbf{u}_k\)和\(\mathbf{v}_k\)叠加成的向量表示: \begin{equation} \Phi(I) = \begin{bmatrix} \vdots \\ \mathbf{u}_k \\ \vdots \\ \mathbf{v}_k \\ \vdots \end{bmatrix} \end{equation} 为了进一步提升Fisher Vector的性能,还需要归一化,常用的包括L2-norm、Power-norm。此外,还可以结合空间金字塔匹配(Spatial Pyramid Matching)[6],其基本思想是将图像分割成若干大小不等的窗口,然后计算各窗口的特征直方图并用池化(Pooling)组合,最后将不同粒度下的特征加权组合成为最终的特征描述,如图6所示。

据论文[9]的实验,结合了L2-norm、Power-norm和金字塔匹配,其结果对比如图7所示。

最后,我用Python为主要编程语言,编写了部分图像的特征提取的代码,包括Sift、Gist、LBP、HOG、颜色直方图、BOVW、VLAD和Fisher Vector。其中,SIFT和GIST特征提取需要调用可执行文件,因为这两个特征提取算法的底层实现不是我写的。GIST特征提取的源码可去http://lear.inrialpes.fr/software/下载,只不过我后来对其作了简单的改动;该源码依赖FFTW库,windows环境下的相关库我已经准备好了;linux下的用户可以前往http://www.fftw.org/download.html下载FFTW的源码,解压后依次执行./configure --enable-single;make;sudo make install即可编译源码了。Sift特征提取的可执行文件来源于VLFeat。BoVW、Vlad和Fisher Vector依赖Numpy、scikit-learn、Pillow。有需要的可以去这里下载~~
References
- [1] Whitening transformationn. http://en.wikipedia.org/wiki/Whitening_transformation.
- [2] Relja Arandjelovic and Andrew Zisserman. All about vlad. In Computer Vision and Pattern Recognition (CVPR), 2013 IEEE Conference on, pages 1578–1585. IEEE, 2013.
- [3] Tommi Jaakkola, David Haussler, et al. Exploiting generative models in discriminative classifiers. Advances in neural information processing systems, pages 487–493, 1999.
- [4] Herv ́e J ́egou, Matthijs Douze, and Cordelia Schmid. Packing bag-of-features. In Computer Vision, 2009 IEEE 12th International Conference on, pages 2357–2364. IEEE, 2009.
- [5] Herv ́e J ́egou, Matthijs Douze, Cordelia Schmid, and Patrick P ́erez. Aggregating local descriptors into a compact image representation. In Computer Vision and Pattern Recognition (CVPR), 2010 IEEE Conference on, pages 3304–3311. IEEE, 2010.
- [6] Svetlana Lazebnik, Cordelia Schmid, and Jean Ponce. Beyond bags of features: Spatial pyramid matching for recognizing natural scene categories. In Computer Vision and Pattern Recognition, 2006 IEEE Computer Society Conference on, volume 2, pages 2169–2178. IEEE, 2006.
- [7] David G Lowe. Distinctive image features from scale-invariant keypoints. International journal of computer vision, 60(2):91–110, 2004.
- [8] Florent Perronnin and Christopher Dance. Fisher kernels on visual vocabularies for image categorization. In Computer Vision and Pattern Recognition, 2007. CVPR’07. IEEE Conference on, pages 1–8. IEEE, 2007.
- [9] Florent Perronnin, Jorge S ́anchez, and Thomas Mensink. Improving the fisher kernel for large-scale image classification. In Computer Vision–ECCV 2010, pages 143–156. Springer, 2010.
- [10] Josef Sivic and Andrew Zisserman. Video google: A text retrieval approach to object matching in videos. In Computer Vision, 2003. Proceedings. Ninth IEEE International Conference on, pages 1470–1477. IEEE, 2003.
- [11] Jan C van Gemert, Cor J Veenman, Arnold WM Smeulders, and J-M Geusebroek. Visual word ambiguity. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 32(7):1271–1283, 2010.
- [12] Simon Winder, Gang Hua, and Matthew Brown. Picking the best daisy. In Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on, pages 178–185. IEEE, 2009.
- [13] Simon AJ Winder and Matthew Brown. Learning local image descriptors. In Computer Vision and Pattern Recognition, 2007. CVPR’07. IEEE Conference on, pages 1–8. IEEE, 2007.
Aggregating local features for Image Retrieval的更多相关文章
- Computer Vision_33_SIFT:Distinctive Image Features from Scale-Invariant Keypoints——2004
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- Image Processing and Computer Vision_Review:Local Invariant Feature Detectors: A Survey——2007.11
翻译 局部不变特征探测器:一项调查 摘要 -在本次调查中,我们概述了不变兴趣点探测器,它们如何随着时间的推移而发展,它们如何工作,以及它们各自的优点和缺点.我们首先定义理想局部特征检测器的属性.接下来 ...
- Computer Vision_33_SIFT:Speeded-Up Robust Features (SURF)——2006
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- PP: Extracting statisticla graph features for accurate and efficient time series classification
Problem: TSC, time series classification; Traditional TSC: find global similarities or local pattern ...
- {ICIP2014}{收录论文列表}
This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...
- ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)
IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...
- CVPR 2017 Paper list
CVPR2017 paper list Machine Learning 1 Spotlight 1-1A Exclusivity-Consistency Regularized Multi-View ...
- ColorDescriptor software v4.0 一个提取颜色特征描述子的软件包
ColorDescriptor software v4.0 Created by Koen van de Sande, (c) University of Amsterdam Note: Any co ...
- ### Paper about Event Detection
Paper about Event Detection. #@author: gr #@date: 2014-03-15 #@email: forgerui@gmail.com 看一些相关的论文. 1 ...
随机推荐
- mvc JavaScriptResult的用法
一.JavaScriptResult在MVC中的定义的代码片段 C# 代码 复制 public class JavaScriptResult : ActionResult { public o ...
- 在Toast里面显示图片
关于怎么在Toast里面显示图片,首先自定义一个toast,在自定义一个布局,这个布局你想让toast显示什么样的布局就定义什么样的,然后在自定的布局中放一个ImageView,在把自己自定义 ...
- restsharp发送服务端请求回传session
今天工作遇到这样一个场景,我需要获取一个游戏目录列表,这个列表接口在线上已经存在,但是这个接口需要登录认证后才能获取到,所以实现这个功能我打算分两部来做: 1.首先调登录接口,以写上session 2 ...
- leetcode—Plus one
1.题目描述 Given a number represented as an array of digits, plus one to the number. 2.解法分析 不要被常规思路限制住 ...
- hibernate 连接数据库时报错
错误信息 : com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allo ...
- 关于 终端 ls 命令 不能区分文件和目录的问题
默认的,使用ls命令来显示目录内容的时候,“终端”对于目录.可执行文件等特殊类型的文件并没有使用颜色来显示,只有使用“ls -G”时,才能显示颜色,这可真是不方便.有没有方法可以默认显示颜色呢?方法当 ...
- POJ 2502 Subway (最短路)
Subway 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/L Description You have just moved ...
- 单片机C语言下LCD多级菜单的一种实现方法
摘要: 介绍了在C 语言环境下,在LCD 液晶显示屏上实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑.实用的程序模型. 关键词: 液晶显示屏; 多级菜单; 单片机; C 语言; LCD 中 ...
- ThinkPHP框架的网站url重写
nginx location / { root /var/www; index index.html index.htm index.php; if (!-e $request_filename) { ...
- Android:从程序员到架构师之路Ⅲ_高焕堂
Part-2: 从Android框架代码中学习设计 一 基础设计模式(Pattern)的代码:以Android为例 1.Template Method模式:IoC(控制反转)机制 2.Observer ...