本教程介绍如何评估高斯混合物模型使用的VlFeat实现这个期望最大化(EM)算法。
GMM是$K$高斯分布的集合。每个分布称为模式并代表数据点集群。在计算机视觉应用中,GMM是常用于建模视觉词汇词典.一个重要的应用是计算属于Fisher矢量编码.
学习期望最大化的GMM
考虑一个包含1000个随机采样2D点的数据集:
numPoints=1000;尺寸=2;数据=rand(尺寸,N);
目标是使GMM适合此数据。这可以通过以下方式获得运行
vl_gmm功能,实现这个EM算法.
numClusters=30;[均值,协方差,先验值]=vl_gmm(数据,numClusters);
在这里
方法,
协方差和
前科分别是平均值$\muk$,对角线协方差矩阵$\Sigma_k$和先验概率$\pi_k$这个
数字集群高斯模式。
这些模式可以通过绘制椭圆在2D平面上可视化对应于方程式:\[\{\bx:(\bx-\mu_k)^\top\Sigma_k^{-1}(\bx-\mu_k)=1\}\]对于每个模式。为此,我们可以使用这个
vlplotframe(甚低频帧):
图形;坚持;绘图(数据(1,:)、数据(2,:)和'r.');对于i=1:numClustersvl_plotframe([表示(:,i)'σ(1,i)0σ(2,i)]);结束
这将导致以下结果:
对角线协方差限制
注意,前面示例中的椭圆是轴对齐。这是对
vl_gmm将协方差矩阵强制为对角矩阵的实现。
这适用于大多数计算机视觉应用,其中估计一个完整的协方差矩阵是有可能的,因为数据的相对高维性。例如,集群时SIFT特征,数据具有维度128,并且每个全协方差矩阵将包含超过8k个参数。
因此,有时需要在全球范围内进行装饰学习GMM模式之前的数据。这可以通过以下方式获得将数据预乘以其平方根的倒数协方差。
在运行EM之前初始化GMM模型
EM算法是一种局部优化方法,因此对模型的初始化特别敏感。这个启动GMM的最简单方法是选择
num群集数据点随机作为模式意味着初始化个体协方差作为数据的协方差,并指定等式先验模式的概率。这是默认初始化使用的方法
vl_gmm.
或者,用户可以手动指定初始参数通过使用
习俗初始化方法。为此,请设置这个
'初始化'选择
'自定义'和还有选项
'InitMeans',
'初始协方差'和
“IniPriors”到所需的值。
获取这些参数初始值的常用方法是首先运行KMean,如以下代码所示代码段:
numClusters=30;numData=1000;尺寸=2;data=rand(维度,numData);%运行KMean以预集群数据[initMeans,assignments]=vl_kmeans(数据,numClusters,…)。。。“算法”、“劳埃德”。。。'最大迭代次数',5);initCovariances=零(维度,numClusters);initPriors=零(1,numClusters);%找出初始平均值、协方差和先验值对于i=1:numClustersdata_k=数据(:,赋值==i);initPriors(i)=大小(data_k,2)/numClusters;如果大小(data_k,1)==0|size(data_k,2)==0initCovariance(:,i)=diag(cov(data'));其他的初始协方差(:,i)=诊断(cov(data_k'));结束结束%从给定参数开始运行EM[means,covariances,prior,ll,posteriors]=vl_gmm(数据,numClusters。。。“初始化”、“自定义”。。。'InitMeans',InitMeans。。。“初始协方差”,初始协方差。。。“InitPriors”,InitPriors);
演示脚本
vl-demo_gmm_2d和
vl-demo_gmm_3d还制作可爱的彩色人物例如: