Fisher Vector(FV)向量

在图像分类或者检索领域,相对于BOV模型来说,Fisher Vector可以包含更深层次的图像信息,从而达到更好的效果。在实际的图像分类或检索的操作中,会事先对提取出来的图像特征使用GMM来聚类得到一个概率字典(关于GMM的描述请参见另一篇文章)。在后面的计算中主要会使用通过GMM求解得到的先验的均值 μ 、方差 Σ 、权重 w

Kernel Trick

为了了解Fisher Vector的由来必须先了解一下Kernel Trick。以0为分界线,考虑一个二分类问题有两类分别为 1,+1 ,对于一个给定的样本X属于其中一类S的条件概率为 P(SX) ,并且有一组与X相关的未知参数 θ ,那么可以将原式变为 P[(SX)θ] ,通过学习大量已经标记的样本,可以训练处一组最佳的 θ^ 来达到最好的分类效果。使用Logistic Regression来近似这个模型得到下面的公式1

P[(SX)θ]=σ(SθTX)=11+eSθTX 公式1

通常情况下当样本数量较少时,可以假设 θ 的先验概率分布服从均值为0的高斯分布,即 θN(0,Σ) Σ 可以通过统计样本得到,那么有

P(θ)=1(2π)D/2Σ1/2eθTΣ1θ2

使用最大后验估计来估计这里的 θ^ ,假设有N个样本 Xi 它们分别属于 Si   (i=1,2,3N) ,并且这N个样本相互独立,那么有

θ^MAP=argmaxθNi=1P[(SiXi)θ]P(θ)
=argmaxθNi=1logP[(SiXi)θ]+logP(θ)

只有 θ 未知,对 θ 求导,令导数为0,即可以求出 θ^ 。求导之后可以得到入下所示的方程组

θ^=Ni=1SiλiΣXi
λi=zlogσ(z)z=Siθ^TXi=σ(Siθ^TXi)

将上面的方程组带入可以得到如下所示的结果

P[(SX)θ^]=σ(SNi=1Siλi(XTiΣX))

与SVM中的核函数类似,这里令 K(Xi,X)=XTiΣX ,并称其为核函数,也就是所谓的Kernel Trick。在这个例子中的核为线性核,核函数的作用在于将原始的样本映射成特征,在特征空间中计算距离,在线性核中将 Σ 分解得到 φX=Σ1/2X ,即为映射后的特征。

Fisher Kernel

上面介绍了线性核,为了满足不同的需求,在实际应用中会使用多种多样的核函数,Fisher Kernel就是其中的一种。
Fisher Kernel将生成模型和判别模型结合起来定义了一种新的扩展模型

Pext(X,S)=P(XθS)Pext(S)

同样还是对于一个二分类问题S∈{-1,+1},利用上述关系假设 Pext(S)=pext(S¯) ,可以做出如下的推导

Pext(SX)=Pext(X,S)Pext(X)=P(XθS)Pext(S)Pext(X)
=P(XθS)Pext(S)P(XθS)Pext(S)+P(XθS¯)Pext(S¯)=11+P(XθS¯)Pext(S¯)P(XθS)Pext(S)
=σ(logP(XθSP(XθS¯+logPext(S)Pext(S¯))=σ(logP(XθS)logP(XθS¯))

UX=θlogP(Xθ) ,在实际应用中这里的 UX 表示Fisher Score。同时对 logP(XθS) 做一阶Taylor展开得到

logP(XθS)logP(Xθ)+(θSθ)Tlog(Pθ)

带入上述公式有

Pext(SX)σ((θSθS¯)TUX)=σ(Sθ1θ1)TUX)

这里再引入一个相对熵的概念,通常使用相对熵来计算两个分布之间的“距离”,则有

DKL(θ1θ1)=P(Xθ1)logP(Xθ1)P(Xθ1)dx

易知

P(Xθ)θlogP(Xθ)dx=θP(Xθ)dx
=θP(Xθ)dx=1θ=0

在这里对 logP(Xθ) 使用Taylor公式展开,由于上式可以得到只展开到一阶时,得到的结果为0,这里有一个假设前提就是 θ1θ1θ 。因此将其展开到二阶得到如下的结果

DKL(θ1θ1)12(θ1θ1)TI(θ1θ1)

根据相对熵可以对 θ 指定一个先验分布,当 θ1 θ1 距离较近时,信息熵较小,因而概率较大。

P(θ~)eDKL(θ1θ1)e12(θ1θ1)TI(θ1θ1)=e12θ~TIθ~

这里的 I 称为费舍尔信息矩阵Fisher Information Matrix。与线性核的推导方式类似,带入最开始的扩展模型得到

Pext(SX)=σ(SNi=1Siλi(UTXiI1UX))

因此就可以得到新的核 K(Xi,X)=UTXiI1UX ,将其称为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个特征样本{ X1X2X3XN },因此在这里稍作改动

Gθ=Ni=1θlogu(Xi)=Ni=1θu(Xi)u(Xi)

假设通过GMM得到了K个高斯分布(相当于BOV模型中使用K-means得到了K个中心点)则有

u(X)=Kk=1wkuk(X) , Kk=1wk=1

其中 ukN(μk,Σk) ,用D表示图像特征的维度,因此有

uk(X)=1(2π)D/2Σ1/2e(Xμk)TΣ1(Xμk)2

θu(Xi) 中的 θ w 替换,由于 uk(X) wk 无关且 Kk=1wk=1 ,所以先令 w1=1Kk=2wk ,因而有

wku(Xi)=wkKk=1wkuk(Xi)
=uk(Xi)+wk(1Kk=1wk)u1(Xi)
=uk(Xi)u1(Xi)

θu(Xi) 中的 θ μ 替换,有

μku(Xi)=μkKk=1wkuk(Xi)
=μkKk=1wk(2π)D/2σke(Xiμk)22σ2k
=wkuk(Xi)Xiμkσ2k

θu(Xi) 中的 θ σ 替换,有

σku(Xi)=σkKk=1wkuk(Xi)
=σkKk=1wk(2π)D/2σke(Xiμk)22σ2k
=wkuk(Xi)((Xiμk)2σ3k1σk)
γk(Xi)=wkuk(Xi)u(Xi) 所以可以推得

Gwk=Ni=1μk(Xi)μ1(Xi)μ(Xi)=Ni=1(γk(Xi)wkγ1(Xi)w1)
Gμk=Ni=1wkuk(Xi)μ(Xi)Xiμkσ2k=Ni=1γk(Xi)Xiμkσ2k
Gσk=Ni=1wkuk(Xi)μ(Xi)((Xiμk)2σ3k1σk)=Ni=1γk(Xi)((Xiμk)2σ3k1σk)

通过 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/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值