在图像分类或者检索领域,相对于BOV模型来说,Fisher Vector可以包含更深层次的图像信息,从而达到更好的效果。在实际的图像分类或检索的操作中,会事先对提取出来的图像特征使用GMM来聚类得到一个概率字典(关于GMM的描述请参见另一篇文章)。在后面的计算中主要会使用通过GMM求解得到的先验的均值 μ 、方差 Σ 、权重 w 。
Kernel Trick
为了了解Fisher Vector的由来必须先了解一下Kernel Trick。以0为分界线,考虑一个二分类问题有两类分别为 −1,+1 ,对于一个给定的样本X属于其中一类S的条件概率为 P(S∣X) ,并且有一组与X相关的未知参数 θ ,那么可以将原式变为 P[(S∣X)∣θ] ,通过学习大量已经标记的样本,可以训练处一组最佳的 θ^ 来达到最好的分类效果。使用Logistic Regression来近似这个模型得到下面的公式1
通常情况下当样本数量较少时,可以假设 θ 的先验概率分布服从均值为0的高斯分布,即 θ∼N(0,Σ) , Σ 可以通过统计样本得到,那么有
使用最大后验估计来估计这里的 θ^ ,假设有N个样本 Xi 它们分别属于 Si (i=1,2,3⋯N) ,并且这N个样本相互独立,那么有
只有 θ 未知,对 θ 求导,令导数为0,即可以求出 θ^ 。求导之后可以得到入下所示的方程组
将上面的方程组带入可以得到如下所示的结果
与SVM中的核函数类似,这里令 K(Xi,X)=XTiΣX ,并称其为核函数,也就是所谓的Kernel Trick。在这个例子中的核为线性核,核函数的作用在于将原始的样本映射成特征,在特征空间中计算距离,在线性核中将 Σ 分解得到 φX=Σ1/2X ,即为映射后的特征。
Fisher Kernel
上面介绍了线性核,为了满足不同的需求,在实际应用中会使用多种多样的核函数,Fisher Kernel就是其中的一种。
Fisher Kernel将生成模型和判别模型结合起来定义了一种新的扩展模型
同样还是对于一个二分类问题S∈{-1,+1},利用上述关系假设 Pext(S)=pext(S¯) ,可以做出如下的推导
令 UX=∂∂θlogP(X∣θ) ,在实际应用中这里的 UX 表示Fisher Score。同时对 logP(X∣θS) 做一阶Taylor展开得到
带入上述公式有
这里再引入一个相对熵的概念,通常使用相对熵来计算两个分布之间的“距离”,则有
易知
在这里对 logP(X∣θ) 使用Taylor公式展开,由于上式可以得到只展开到一阶时,得到的结果为0,这里有一个假设前提就是 θ1≈θ−1≈θ 。因此将其展开到二阶得到如下的结果
根据相对熵可以对 θ 指定一个先验分布,当 θ1 和 θ−1 距离较近时,信息熵较小,因而概率较大。
这里的 I 称为费舍尔信息矩阵Fisher Information Matrix。与线性核的推导方式类似,带入最开始的扩展模型得到
因此就可以得到新的核 K(Xi,X)=UTXiI−1UX ,将其称为Fisher Kernel。Fisher Kernel和核心在于定义了它的Fisher Score,而中间的Fisher Information Matrix矩阵作用较小,因此实际可以将Fisher Kernel简化成 K(Xi,X)∝UTXiUX 。
Fisher Vector
在介绍完Kernel Trick以及Fisher Kernel之后,终于可以开始介绍Fisher Vector了。上面介绍了Fisher Kernel的原理以及公式推导,了解了Fisher Kernel的核心在于Fisher Score。结合在Kernel Trick中的描述Fisher Score就是将原始样本映射到特征空间上得到的特征向量,也就Fisher Vector。
在后面的计算中主要会使用通过GMM求解得到的先验的均值
μ
、方差
Σ
、权重
w
,这3个参数就相当于之前使用的参数
θ
,分别求他们的Fisher Score,然后将求得的Fisher Score拼接在一起就可以得到最终的Fisher Vector这是一个高维向量。
对于一个分类问题Fisher Score的计算公式为
UX=∂∂θlogP(X∣θ)
,然而对于计算Fisher Vector来说,这里的输入是一幅图像的特征集合,假设集合中有N个特征样本{
X1X2X3⋯XN
},因此在这里稍作改动
假设通过GMM得到了K个高斯分布(相当于BOV模型中使用K-means得到了K个中心点)则有
其中 uk∼N(μk,Σk) ,用D表示图像特征的维度,因此有
将 ∂∂θu(Xi) 中的 θ 用 w 替换,由于 uk(X) 与 wk 无关且 ∑Kk=1wk=1 ,所以先令 w1=1−∑Kk=2wk ,因而有
将 ∂∂θu(Xi) 中的 θ 用 μ 替换,有
将 ∂∂θu(Xi) 中的 θ 用 σ 替换,有
通过
Gwk
得到的是一个K-1维向量,
Gμk
和
Gσk
分别得到一个DK维向量,因此最终得到的向量的长度为(2D+1)K-1,有些开源的Fisher Vector实现中简化了部分流程因此有的得到2DK有的得到(2D+1)K,但是原理都是一样的。
Fisher Vector相对于BOV的优势在于,BOV得到的是一个及其稀疏的向量,由于BOV只关注了关键词的数量信息,这是一个0阶的统计信息;Fisher Vector并不稀疏,同时,除了0阶信息,Fisher Vector还包含了1阶(期望)信息、2阶(方差信息),因此Fisher Vector可以更加充分地表示一幅图片。
from: http://www.duzhongxiang.com/fisher-vector/