高斯混合模型GMM

1.简介

众所周知,GMM(Gaussian Mixture-based Model)是用来分离场景中前景和背景的,或者叫做背景扣除,那么什么叫做背景扣除(Background Subtraction)呢?我们知道所谓的监控系统中,通常都是利用静态相机来捕捉场景的,因此其中比较具有挑战的一步就是如何检测出场景中的突然闯入者,传统的应用中都会假设场景中没有这样的闯入者,而在实际监控场景中,这种情况却是实实在在存在发生的,所以我们不能忽略。对于闯入者的检测,如果我们知道一个场景的统计模型,那些不服从该模型分布的目标像素是不是就可以当做背景,这样的一个过程就叫做背景扣除。

GMM,顾名思义,就是多个高斯的混合,它于1997年由Friedman和Russel提出,1999年才有人给出了它的更新方程,2004年Zoran Zivkovic提出了改进(论文地址)。

2.基本原理

2.1 决策问题

与贝叶斯估计一样,GMM也是一种密度函数的参数估计,只不过模型较贝叶斯而言要复杂的多,应用的场景也不同。

GMM是基于像素的背景扣除,我们需要对一个像素做出是属于背景(Back Ground)还是属于前景(Fore Ground)的决策,因此首先定义如下决策规则:

如果上式大于1,则决策为背景,反之决策为前景;其中是某一个像素的像素值(RGB),为背景模型,为前景模型,而前者正是我们需要通过大量的训练样本集X来估计得到的。想象下贝叶斯决策的基本思想,是不是差不多的。

如果我们是在做一个目标跟踪,并且我们事先知道该跟踪目标的一些相关知识,比如appearance,那么这些知识就可以用来改善背景的扣除。但是在一般情况下,这些相关知识是无法得知的,我们根本不知道它能否被看到,或者它到底是以怎样的形式出现,这时我们有必要对目标的appearance模型做一个假设。假设前景目标满足一个均匀分布,那我们有如下决策:

只要满足上式,我们就判断该像素是属于背景,其中cthr是设置的阈值。

实际实践中,训练集会受到场景中光线的影响,比如白天室外天气状况,还有室内灯光的渐变或开关灯的情况,为了能够适应这些变化,我们需要通过增加新样本或去除旧样本来实时更新样本集,这里我们假设各样本是独立的,因此我们的核心问题就变成如何有效的在线估计出背景模型密度函数

2.2 GMM模型

对于每一个新的样本,我们都要更新训练集,并重新估计背景模型密度函数,由于样本里面可能包含有前景目标,所以我们先定义为如下密度函数形式:,并使用一个含有m个高斯分量的GMM模型来估计它,即:

其中,分别是每一个高斯分量的均值和方差的估计值,T是我们选择的一个适应化的周期间隔,满足是一个混合权重的估计值,>0,≤1;可以看出,这里我们要更新三个参数,均值,方差和权重,接下来大家就会发现,这一更新过程很像卡尔曼滤波,但是却比卡尔曼滤波简单好多好多。

2.3 更新方程

当在t时刻新来一个样本像素时,给出更新方程:

其中,,alpha是一个常量,等于周期T的倒数,它是一个指数的衰减包络,用来控制旧样本带来的影响;是一个二值量,表示属于哪一个高斯分量。

更新过程如下:

当有一个新样本,我们通过计算它与每一个高斯分量的马氏距离(Mahalanobis distance )来判断是否close于该高斯分量,通常只要距离小于3就认为close,这里为方便计算,我们使用距离的平方来表示样本到第m个分量的距离:

如果没有任何一个高斯分量与其close,那么我们就会新生成一个高斯分量,生成的过程为:

其中,sigma0是一个初始值;如果这时高斯分量数目超过了我们预先选择的分量总数的话,我们需要去掉一些权重小的高斯分量,以保证我们的高斯分量总数不变。

这个过程可以看做是一个聚类的过程,那些个高斯分量就是我们聚类得到的聚类;通常来说,前景目标拥有小权重的高斯分量,所以我们可以用分量中最大的前B个来近似得到背景密度模型:

再者,如果所有的高斯分量预先按照降序排列好,那么有:

其中,cf是一个属于前景模型但不影响背景模型的最大比例度量;如果一个目标长时间保持不动,它的权重就会变的比cf大,那么就认为是背景的一部分。因此,从公式(4)可以得出结论,如果一个目标在近似n个历史帧中都是静态的,那么就可以认为该目标是背景,其中n近似等于:

3.OpenCV中的GMM使用

Opencv2.0中提供了两个算子,BackgroundSubtractorMOG和BackgroundSubtractorMOG2,而在3.0版本中已经摒弃了前者:

cv::Mat frame,fore_ground;
bool stop1(false);
Ptr<BackgroundSubtractorMOG2> mog = createBackgroundSubtractorMOG2(20,9,true);
while(!stop1){
        if(!vp.read_next_frame(frame))break;
        mog->apply(frame,fore_ground);
        threshold(fore_ground, fore_ground, 128, 255, THRESH_BINARY_INV);
        imshow("extracted foreground",fore_ground);
        if(waitKey(10) >= 0)
            stop1 = true;
    }

其中,第一个参数int history是更新时使用的历史帧数目,第二个参数double varThreshold是像素与背景模型之间的距离平方阈值,这个阈值用来确定该像素是否是背景像素,该参数不影响背景的更新;第三个参数bool
detectShadows=true表示是否使用阴影检测。

4.后记

GMM模型中,还有一个比较关键的问题,就是如何选择高斯分量的数目,由于要计算距离,所以数目大的话计算量肯定大,太小也不行,会导致扣除不完整,因此要合理选择,不过在Opencv中已经不要设置该参数。另外,还有一个不能忽视的问题是阴影问题,有时候闯入者可能会对背景造成阴影,因此必要时需要进行阴影检测。

时间: 2024-08-13 12:45:27

高斯混合模型GMM的相关文章

贝叶斯来理解高斯混合模型GMM

最近学习基础算法<统计学习方法>,看到利用EM算法估计高斯混合模型(GMM)的时候,发现利用贝叶斯的来理解高斯混合模型的应用其实非常合适. 首先,假设我们对于贝叶斯比较熟悉,对高斯分布也熟悉.本文将GMM用于聚类来举例. 除了简单的高斯分布,理论上通过组合多个不同的高斯分布可以构成任意复杂的分布函数.如下图所示: 在最大似然,贝叶斯方法与朴素贝叶斯分类中,2.1中提到高斯概率密度用来计算连续变量情况下的朴素贝叶斯概率.该情况下的高斯分布是训练已知,然后对于输入变量求取其概率密度,结合类别的先验

6. EM算法-高斯混合模型GMM+Lasso详细代码实现

1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模型)带惩罚项的详细代码实现. 2. 原理 由于我们的极大似然公式加上了惩罚项,所以整个推算的过程在几个地方需要修改下. 在带penality的GMM中,我们假设协方差是一个对角矩阵,这样的话,我们计算高斯密度函数的时候,只需要把样本各个维度与对应的\(\mu_k\)和\(\sigma_k\)计算一维

高斯混合模型(GMM)

1. 有时候单一高斯分布不能很好的描述分布 image.png 上图左面用单一高斯分布去描述,显然没有右图用两个高斯分布去描述的效果好. 2. 引入混合高斯分 这里插一句,为什么是“高斯混合模型”,而不是别的混合模型,因为从中心极限定理知,只要K足够大,模型足够复杂,样本量足够多,每一块小区域就可以用高斯分布描述.而且高斯函数具有良好的计算性能,所GMM被广泛地应用. 单一高斯分布公式 image.png 混合高斯分布 每个GMM由K个高斯分布组成,每个高斯分布称为一个组件(Component)

K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!

1. 聚类算法都是无监督学习吗? 什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组.给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组.理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征.聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术. 常用的算法包括K-MEANS.高斯混合模型(Gaussian Mixed Model,GMM).自组织映射神经网络(Self-Organizing Map,SOM)

EM算法原理以及高斯混合模型实践

EM算法有很多的应用: 最广泛的就是GMM混合高斯模型.聚类.HMM等等. The EM Algorithm 高斯混合模型(Mixtures of Gaussians)和EM算法 EM算法 求最大似然函数估计值的一般步骤: (1)写出似然函数: (2)对似然函数取对数,并整理: (3)求导数,令导数为0,得到似然方程: (4)解似然方程,得到的参数即为所求. 期望最大化算法(EM算法): 优点: 1. 简单稳定: 2. 通过E步骤和M步骤使得期望最大化,是自收敛的分类算法,既不需要事先设定类别也

EM算法 - 2 - EM算法在高斯混合模型学习中的应用

声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了弄懂其中的内容查阅了很多资料,所以里面应该会有引用其他帖子的小部分内容,如果原作者看到可以私信我,我会将您的帖子的地址付到下面. 3,如果有内容错误或不准确欢迎大家指正. 4,如果能帮到你,那真是太好了. 在开始讲解之前,我要先给看这篇文章的你道个歉,因为<2012.李航.统计学习方法.pdf>中

【转】高斯混合模型

本文就高斯混合模型(GMM,Gaussian Mixture Model)参数如何确立这个问题,详细讲解期望最大化(EM,Expectation Maximization)算法的实施过程. 单高斯分布模型GSM 多维变量X服从高斯分布时,它的概率密度函数PDF为: x是维度为d的列向量,u是模型期望,Σ是模型方差.在实际应用中u通常用样本均值来代替,Σ通常用样本方差来代替.很容易判断一个样x本是否属于类别C.因为每个类别都有自己的u和Σ,把x代入(1)式,当概率大于一定阈值时我们就认为x属于C类

高斯混合模型(GMM)

复习: 1.概率密度函数,密度函数,概率分布函数和累计分布函数 概率密度函数一般以大写“PDF”(Probability Density Function),也称概率分布函数,有的时候又简称概率分布函数. 而累计分布函数是概率分布函数的积分. 注意区分 从数学上看,累计分布函数F(x)=P(X<x),表示随机变量X的值小于x的概率.这个意义很容易理解. 概率密度f(x)是F(x)在x处的关于x的一阶导数,即变化率.如果在某一x附近取非常小的一个邻域Δx,那么,随机变量X落在(x, x+Δx)内的

paper 62:高斯混合模型(GMM)参数优化及实现

高斯混合模型(GMM)参数优化及实现 (< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />2010-11-13) 1 高斯混合模型概述< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 高斯密度函