简介 这篇文章主要介绍了Fisher Vector Encoding and Gaussian Mixture Model(示例代码)以及相关的经验技巧,文章约4946字,浏览量204,点赞数3,值得参考!
一、背景知识
1.Discriminant Learning Algorithms(判别式方法) and Generative Learning Algorithms(生成式方法)
现在常见的模式识别方法有两种,一种是判别式方法;一种是生成式方法。可以这样理解生成式方法主要是数据是如何生成的,从统计学的角度而言就是模拟数据的分布distribution;而判别式方法,不管数据是如何生成而是通过数据内在的差异直接进行分类或者回归。举个例子你现有的task是去识别一段语音属于哪一种语言。那么生成式模型就是你先让你的model先去学习各种可能性的语言,然后使用你学到的知识来对你要识别的语音做分类;而判别式模型是根据语音中的lingustic characteristic语言学特点来识别这段语音。July_Zh1博文认为生成式方法主要反映同类数据之间的相似度,判别式方法反映数据之间的的差异度。Fihser Kernel结合了二者的差异。PRML中有更加理论的阐述,有兴趣可以参考。
2.Fisher Information matrix
设一随机变量 x x x,如果 x x x为连续型随机变量,那么 x x x的分布 p ( x ∣ θ ) p(x|\theta) p(x∣θ)可以用正态分布模拟: p ( x ∣ θ ) = 1 2 π σ 2 e x p { − ( x − u ) 2 2 σ 2 } p(x|\theta) = \frac{1}{\sqrt{2\pi\sigma^2}}exp\left\{-\frac{(x-u)^2}{2\sigma^2}\right\} p(x∣θ)=2πσ21exp{−2σ2(x−u)2}
如果 x x x是离散型随机变量,那么 x x x的分布可以可以用类别分布categorical distribution模拟: p ( x ∣ θ ) = ∏ k = 1 K θ k x k p(x|\theta) = \prod_{k=1}^{K}\theta_k^{x_{k}} p(x∣θ)=k=1∏Kθkxk
式中: 0 ≤ θ k ≥ 1 , ∑ k θ k = 1 0 \leq\theta_k\geq 1, \sum_k\theta_k = 1 0≤θk≥1,∑kθk=1
定义Fisher Score 为: g ( θ , x ) = ▽ θ l n ( p ∣ θ ) g(\theta,x) = \triangledown_\theta ln(p|\mathbf{\theta}) g(θ,x)=▽θln(p∣θ)
定义Fisher Information Matrirx 为: F = E x [ g ( θ , x ) , g ( θ , x ) T ] F = E_x\left[g(\theta,x),g(\theta,x)^T\right] F=Ex[g(θ,x),g(θ,x)T]
二、 Fisher Kernel Methods
假设我们训练数据集为
X
t
X_t
Xt,对应的Label 为
S
t
S_t
St(±1)(先考虑只有两类样本的情况) 。设
X
X
X 为测试样本,
S
^
\hat{S}
S^为对测试样本预测值。我们有:
S
^
=
s
i
g
n
(
∑
t
S
t
λ
t
K
(
X
t
,
X
)
)
\hat{S} = sign\left (\sum_t S_t\lambda_t K(X_t,X)\right )
S^=sign(t∑StλtK(Xt,X))
而对核函数有以下形式:
K
(
X
i
,
X
j
)
=
ϕ
X
i
T
ϕ
X
j
K(X_i,X_j) = \phi_{X_i}^T \phi_{X_j}
K(Xi,Xj)=ϕXiTϕXj
对于每一个新样本的预测值
S
^
\hat{S}
S^是由原来样本的Label
S
t
S_t
St “加权”得到。而“加权”由两部分组成:
(1)
λ
t
\lambda_t
λt
(2)
K
(
X
t
,
X
)
K(X_t,X)
K(Xt,X)
这个Kernel描述的是训练样本
X
t
X_t
Xt 和测试样本
X
X
X之间的相似度,Kernel有很多种,这里选择的是Fisher Kernel. 使用
U
x
U_x
Ux代表Fisher Score,
F
λ
F_\lambda
Fλ 代表 Fisher Information Matrix。
如果将函数数看作一种映射方式,那么这个等式代表着我们不需要将每个样本真的映射到核空间进行计算,而只要确定核函数对应的
ϕ
x
\phi_x
ϕx直接对函数进行计算就可以得到将样本映射到核空间的效果。(这也是支持向量机最重要的trick之一)
ϕ
x
\phi_x
ϕx 就是我们定义的Fisher Vector
对于Fisher Kernel我们有:
ϕ
x
=
F
λ
−
1
2
U
x
\phi_x = F_\lambda^{-\frac{1}{2}}U_x
ϕx=Fλ−21Ux
对应的样本生成模型为:GMM(Gaussian Mixture Model) 即
X
X
X服从的分布为GMM模型。此时
X
=
x
1
,
.
.
.
,
x
N
X = x_1,...,x_N
X=x1,...,xN 代表GMM中一系列变量。
二、对图像使用Fisher Encoding
Fisher encoding 的基本思想就是用GMM去构建一个视觉字典,本质上是用似然函数的梯度来表达一幅图像。
1.GMM构建视觉词典
对于图像而言 x x x可以代表图像的特征(比如SIFT特征),一幅图像有很多特征 X = x 1 , . . . x T X = x_1,...x_T X=x1,...xT
对于GMM model X X X的分布为:
p ( X ∣ ω , μ , ∑ ) p(X|\omega,\mu,\sum) p(X∣ω,μ,∑)
ω , μ , ∑ \omega,\mu,\sum ω,μ,∑分别为GMM中每个特征的权重,均值,协方差。
2.计算Fisher Vector
首先定义:
L ( X ∣ λ ) = l o g p ( X ∣ λ ) = ∑ t = 1 T l o g p ( x t ∣ λ ) L(X|\lambda) = logp(X|\lambda) = \sum_{t=1}^{T} logp(x_t|\lambda) L(X∣λ)=logp(X∣λ)=t=1∑Tlogp(xt∣λ)
图像中每个特征都是相互独立的:
p ( x t ∣ λ ) = ∑ i = 1 N w i p i ( x t ∣ λ ) p(x_t|\lambda) = \sum_{i=1}^{N}w_ip_i(x_t|\lambda) p(xt∣λ)=i=1∑Nwipi(xt∣λ)
p i p_i pi位GMM中第i个component的pdf, w i w_i wi为其权值, ∑ i = 1 N w i = 1 \sum_{i=1}^Nw_i=1 ∑i=1Nwi=1
每个component p i p_i pi是多元高斯函数,其pdf如下:
p i ( x ∣ λ ) = exp { − 1 2 ( x − μ i ) ′ Σ i − 1 ( x − μ i ) } ( 2 π ) D / 2 ∣ Σ i ∣ 1 / 2 p_{i}(x \mid \lambda)=\frac{\exp \left\{-\frac{1}{2}\left(x-\mu_{i}\right)^{\prime} \Sigma_{i}^{-1}\left(x-\mu_{i}\right)\right\}}{(2 \pi)^{D / 2}\left|\Sigma_{i}\right|^{1 / 2}} pi(x∣λ)=(2π)D/2∣Σi∣1/2exp{−21(x−μi)′Σi−1(x−μi)}
D是特征向量的维数, ∑ i − 1 \sum_i^-1 ∑i−1为协方差矩阵
再定义特征 x t x_t xt由第i个Gaussian component生成概率,这里使用了贝叶斯公式:
γ t ( i ) = p ( i ∣ x t , λ ) = w i p i ( x t ∣ λ ) ∑ j = 1 N w j p j ( x t ∣ λ ) \gamma_t(i) = p(i|x_t,\lambda) = \frac{w_ip_i(x_t|\lambda)}{\sum_{j=1}^Nw_jp_j(x_t|\lambda)} γt(i)=p(i∣xt,λ)=∑j=1Nwjpj(xt∣λ)wipi(xt∣λ)
然后对各个参数求偏导:
U x = [ ∂ L ( X ∣ λ ) ∂ ω i , ∂ L ( X ∣ λ ) ∂ μ i d , ∂ L ( X ∣ λ ) ∂ σ i d ] U_x = \left[ \frac{\partial L(X|\lambda)}{\partial{\omega_i}}, \frac{\partial{L(X|\lambda)}}{\partial{\mu_i^d}}, \frac{\partial{L(X|\lambda)}}{\partial{\sigma_i^d}} \right] Ux=[∂ωi∂L(X∣λ),∂μid∂L(X∣λ),∂σid∂L(X∣λ)]
这里i是指第i个component,d是指特征 x t x_t xt的维度,偏导是对每个componnet求,每个特征的维度都要计算, U X U_X UX维度是(2*D+1)*N,又由于 ω i \omega_i ωi有约束 ∑ i ω i = 1 \sum_i \omega_i=1 ∑iωi=1,所以会少一个自由变量,所以 U x U_x Ux 最终的维度是(2D+1)*N-1.
对上面的三个公式分别引入三个对应的fisher matrix:
f w i = T ( 1 w i + 1 w 1 ) f_{w_i} = T\left(\frac{1}{w_i} + \frac{1}{w_1} \right) fwi=T(wi1+w11)
f u i d = T w i σ i d ) 2 f_{u_i^d} = \frac{Tw_i}{\sigma_i^d)^2} fuid=σid)2Twi
f σ i d = 2 T ω i ( σ i d ) 2 f_{\sigma_i^d} = \frac{2T\omega_i}{(\sigma_i^d)^2} fσid=(σid)22Tωi
之后便可求得归一化的fisher vector.
三、如何使用vl_feat进行fisher kernel encoding