Fisher Vector Encoding and Gaussian Mixture Model
一、背景知识
1. Discriminant Learning Algorithms(判别式方法) and Generative Learning Algorithms(生成式方法)
现在常见的模式识别方法有两种,一种是判别式方法;一种是生成式方法。可以这样理解生成式方法主要是数据是如何生成的,从统计学的角度而言就是模拟数据的分布distribution;而判别式方法,不管数据是如何生成而是通过数据内在的差异直接进行分类或者回归。举个例子你现有的task是去识别一段语音属于哪一种语言。那么生成式模型就是你先让你的model先去学习各种可能性的语言,然后使用你学到的知识来对你要识别的语音做分类;而判别式模型是根据语音中的lingustic characteristic语言学特点来识别这段语音。July_Zh1博文认为生成式方法主要反映同类数据之间的相似度,判别式方法反映数据之间的的差异度。Fihser Kernel结合了二者的差异。PRML中有更加理论的阐述,有兴趣可以参考。
2. Fisher Information matrix
设一随机变量xx
如果xx 为连续型随机变量,那么xx的分布p(x|θ)p(x|θ)可以用正态分布模拟: p(x|θ)=1√2πσ2exp{−(x−u)22σ2}p(x|θ)=1√2πσ2exp{−(x−u)22σ2}
如果xx是离散型随机变量,那么xx的分布可以可以用类别分布categorical distribution模拟: p(x|θ)=∏Kk=1θxkkp(x|θ)=∏Kk=1θxkk
式中: 0≤θk≥1,∑kθk=10≤θk≥1,∑kθk=1
定义Fisher Score 为: g(θ,x)=▽θln(p|θ)
定义Fisher Information Matrirx 为: F=Ex[g(θ,x),g(θ,x)T]
二、 Fisher Kernel Methods
假设我们训练数据集为 Xt,对应的Label 为 St(±1)(先考虑只有两类样本的情况) 。设 X 为测试样本,ˆS为对测试样本预测值。
我们有:ˆS = sign(∑tStλtK(Xt,X));
而对核函数有以下形式: K(Xi,Xi)=ϕTXiϕXj.
对于每一个新样本的预测值ˆS是由原来样本的Label St ”加权”得到。而“加权”由两部分组成:1)λt 2) K(Xt,X)
这个Kernel描述的是训练样本Xt 和测试样本X之间的相似度,Kernel有很多种,这里选择的是Fisher Kernel. 使用Ux代表Fisher Score, Fλ 代表 Fisher Information Matrix。
如果将函数数看作一种映射方式,那么这个等式代表着我们不需要将每个样本真的映射到核空间进行计算,而只要确定核函数对应的ϕx直接对函数进行计算就可以得到将样本映射到核空间的效果。(这也是支持向量机最重要的trick之一)
ϕx 就是我们定义的Fisher Vector
对于Fisher Kernel我们有: ϕx=F−12λUx
对应的样本生成模型为:GMM(Gaussian Mixture Model) 即X服从的分布为GMM模型。此时X=x1,...,xN 代表GMM中一系列变量。
二、对图像使用Fisher Encoding
Fisher encoding 的基本思想就是用GMM去构建一个视觉字典,本质上是用似然函数的梯度来表达一幅图像。
1. GMM构建视觉词典
对于图像而言x可以代表图像的特征(比如SIFT特征),一幅图像有很多特征X=x1,...xT
对于GMM model X的分布为:
p(X|ω,μ,∑)
ω,μ,∑分别为GMM中每个特征的权重,均值,协方差。
2. 计算Fisher Vector
首先定义:
L(X|λ)=logp(X|λ)=T∑t=1logp(xt|λ).
图像中每个特征都是相互独立的:
p(xt|λ)=N∑i=1wipi(xt|λ).
pi位GMM中第i个component的pdf,wi为其权值, ∑Ni=1wi=1.
每个component pi是多元高斯函数,期pdf如下:
D是特征向量的维数,$\sum_i^-1位协方差矩阵
再定义特征xt由第i个Gaussian component生成概率,这里使用了贝叶斯公式:
γt(i)=p(i|xt,λ)=wipi(xt|λ)∑Nj=1wjpj(xt|λ)
然后对各个参数求偏导:
Ux=[∂L(X|λ)∂ωi,∂L(X|λ)∂μdi,∂L(X|λ)∂σdi]
这里i是指第i个component,d是指特征xt的维度,偏导是对每个componnet求,每个特征的维度都要计算,UX维度是(2*D+1)*N,又由于ωi有约束∑iωi=1,所以会少一个自由变量,所以Ux 最终的维度是(2D+1)*N-1.
对上面的三个公式分别引入三个对应的fisher matrix:
fwi=T(1wi+1w1)
fudi=Twiσdi)2
fσdi=2Tωi(σdi)2
之后便可求得归一化的fisher vector.
三、如何使用vl_feat进行fisher kernel encoding
参考资料:
1. 【Paper】: The Devil is in the details: an evaluation of recent feature encoding methods
比较了在目标识别领域不同encoding feature 的效果
2. 如何使用vl_feat计算Fisher Vectors:
http://www.vlfeat.org/overview/encodings.html
3. 如何使用vl_feat实现GMM
http://www.vlfeat.org/overview/gmm.html
4. Fisher information matrix for Gaussian and categorical distributions
https://www.ii.pwr.edu.pl/~tomczak/PDF/%5bJMT%5dFisher_inf.pdf
5. Fisher Vector Encoding
http://www.cs.ucf.edu/courses/cap6412/spr2014/papers/Fisher-Vector-Encoding.pdf
6. 【Paper】: Exploiting generative models in discriminative classifiers
Fisher Kerner 的推导和阐述
7【Paper】: Fisher Kernels on Visual Vocabularies for Image Categorization
http://www.cs.ucf.edu/courses/cap6412/spr2014/papers/2006-034.pdf
8. 【Paper】: Improving the Fisher Kernel for Large-Scale Image Classification
Fisher Kernel的优化
7. Fisher Vector and Fisher Score
http://blog.csdn.net/happyer88/article/details/46576379
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法