混和高斯模型的推导和实现

混和高斯模型的推导和实现
混和高斯模型的推导和实现

基于GMM 的运动目标检测方法研究

一、GMM 数学公式推导

1、预备知识:

(1)设离散型随机变量X 的分布率为: {} 2,1,P ===k p a X k k 则称()∑=

k

k k

p a

X E 为X 的数学期望或均值

(2)设连续型随机变量X 的概率密度函数(PDF )为f(x) 其数学期望定义为:()()dx x xf X E ?

+∞

-=

(3)()()()[]

2

X E X E X D -=称为随机变量x 的方差,()X D 称为X

的标准差

(4)正态分布:()

2,~σμN X 概率密度函数为:()()???????

?--=

22221

σμσ

πx e x p

(5)设(x,y)为二维随机变量,()[]()[]{}Y E Y X E X E --若存在,则 称其为X 和Y 的协方差,记为cov(x,y)

()()[]()[]{}()XY E Y E Y X E X E Y X =--=,cov 2、单高斯模型:SGM (也就是多维正态分布) 其概率密度函数PDF 定义如下: ()()

()()μμπμ---

-=

x C x n

T e

C

C x N 12

1

21

,;

其中,x 是维数为n 的样本向量(列向量),μ是期望,C 是协方差矩阵,|C|表示C 的行列式,1-C 表示C 的逆矩阵,()T

x μ-表示()μ-x 的转置。

3、混合高斯模型:GMM

设想有 m 个类:m 321????,,,, ,每类均服从正态分布。

各分布的中心点(均值)分别为:m 321μμμμ,,,,

方差分别为:m 321σσσσ,,,,

每一类在所有的类中所占的比例为 ()()()()m P P P P ????,,,,321 其中()11=∑=m

i i P ?。

同时,已知

个观察点:

。其中,用大写P 表示概率,用小写p 表

示概率密度。

则依此构想,可得概率密度函数为:

()()()()()()()()

()()()μμπ??σμ?σμ?σμ---

=-∑

=?++?+?=x C x m

i d i m m m T e

C

P P N P N P N x p 12

1

12221112,,,

其中d 是维数,|·|是行列式

但是在利用GMM 进行目标检测时,这些模型的参数可能已知,也可能不知道,当参数已知时,可以直接利用GMM 进行目标检测,在未知的情况下,需要对参数进行估计。对参数估计时,还要考虑样本分类是否已知。 (1)样本已知: 最大似然估计:

可以直接采用MLE (最大似然估计)进行参数估计: 未知量为集合:()()()m P P C C ??μμλ,,1m 1m 1 ,,,,,,= 将衡量概率密度函数优劣的标准写出:()()∏==n

k k x P x p 1||λλ

即为:

()()

()

()()i k T i k x C x n k m

i d

i e

C P x p μμπ?λ---

==-∏∑

=12

1

11

|

|2|

只要定出该标准的最大值位置,就可以求出最优的待定参数。为了 求出这个最

大值的位置,就需用导数求极点,具体求解过程于下:

()()

()

()()

∑∑==∑==∏===n k P x N n

k x P x P x p m

i i i k k n

k k 1

,1|||1

1ln ln ln ln ?λλλλ

求导:()()()()()

()()()

()

()

()()}

|

|2{1

},{1ln ln 1-11

2

1

1

1

|1

1,1

,1|i k T i k k m

i i i k m

i i i k x C x m

i d

i m

k x p m

i i i k m

k P x N n

k P x N n

k x p e

C P P x N μμλ?λ?λλπ?λ?λλλλ---

======∑??=∑??∑=∑??

=??∑

∑∑=

=

然后再分别对各个参数求导:①求参数i

μ :②对 感兴趣,求偏导数有:③对

感兴趣,接下来的求导比较复杂,在此就没有继续推导。

(2)样本未知: EM 估计,算法流程: ①初始化:

方案1:协方差矩阵0j C 设为单位矩阵,每个模型比例的先验概率设为M

j 1

0=α,均值0j μ为随机数。

方案2:有K 均值(K-means)聚类算法对样本进行聚类,利用各类的均值作为

0j μ,并计算0j C ,0j α去各类样本占总数的比例。

②估计步骤(E-step ): 令j α的后验概率为: ()

()

M j n i x N x N M

k i k k

i j j ij ≤≤≤≤=

∑=1,1,||1

φα

φαβ

③最大化步骤(M-step ):

更新权值:n

n

i ij

j ∑==

1

β

α

更新均值:∑∑===

n i n

i ij

i j ij

x 1

1ββ

μ

更新方差矩阵:()()

∑∑==--=

n

i ij

n

i T

i

i

i

i

ij

j x x C 1

1

β

μμβ

④收敛条件:

不断地迭代步骤②和③,重复更新上面的三个值,直到()()εφφ<-||'|X p X p ,其中为更新参数后计算的值,即前后两次迭代得到的结果变化小于一定程度则终止迭代,通常-510=ε 二、GMM 发展历史及现状

背景建模方法有很多种,如中值法、均值法、卡尔曼滤波器模型、码本背景模型等,其中混合高斯模型是最经典的算法。GMM 最早是由CHris Stauffer 等在[1]中提出的,该方法是按照高斯分布对每个像素建立模型, 并通过基于回归滤波的在线 EM 近似方法对模型参数进行更新,它能鲁棒地克服光照变化、 树枝摇动等造成的影响,但该方法也存在一些问题:1)该方法对运动物体在场景中停止不动或者长时间停止时检测失效,而且带有初始学习速度慢,在线更新费时、计算量大;2)无法完整准确地检测大并且运动缓慢的运动目标,运动目标的像素点不集中,只能检测到运动目标的部分轮廓,无法提取出目标对象的完整区域;3)无法将背景显露区域与运动目标区域很好地区分开;4)当运动目标由静止缓慢转化为运动时,易将背景显露区检测为前景,出现“影子”现象。

三、GMM 缺点及改进方法

针对上述问题,一些科学研究者又在GMM 算法的基础上做了很多的改进:张、白等人[2]引入分块思想,把图像分为L*L 块;黄、胡等人[3]也引入了分块的思想,但是他们的分块理念是以当前像素点的8邻域作为一块;华、刘[4]把GMM 与改进的帧差法(相邻两帧图像对应像素点8邻域像素值相减之和)相结合,提高了计算

效率;Suo 等人[5]是将混合高斯模型中的模型个数采改进为自适应的;刘等人[6]融合帧间差分法,检测背景显露区域和运动区域,很好的解决了问题4。除此之外,还有基于纹理的混合高斯模型。

四、GMM 算法流程

(1)用第一帧图像对高斯混合模型进行初始化 ()()0,,,0y x I y x =μ ① ()init std y x _,0=σ ②

()init std init std y x __,2

0?=σ ③

M

w 1

0=

④ 一般模型的个数M 为3-6个,其中std_init 设置为20

(2)对于t 时刻的像素()y x I t ,,分别与已经存在的M 个高斯模型依次进行匹配:

()1,1,5.2|),(,--<-t i t i t y x y x I σμ ⑤

(3)如果满足匹配条件,则该像素值与高斯模型匹配成功。如果匹配不成功: a :当k

σ

?i

最小的模型。新的高斯模型,用当前像素值作为新模型的均值,即()y x I i ,=μ,协方差为init std i _=σ,权重为

α=i w ,其中α为学习速率。

(4)未匹配模式的均值和方差不变,对匹配模式的第i 个高斯模型参数进行更新:

()()y x I t t i t i ,11,,αμαμ+-=- ⑥ ()()()2

1,21,2,,1---+-=t i t t i t i y x I μασασ ⑦

()αα+-=-1,,1t i t i w w ⑧

(5)高斯模型参数更新完毕后,对每个像素点的K 歌高斯模型按优先级σ

?i

降序排序。取前B 个高斯模型作为背景像素的最佳描述:

15.0;min arg 1<

?

??>=∑=T T w B M k i k

(6)继续对()y x I t ,与上述B 个高斯模型进行匹配检验,如果()y x I t ,与前B 个高斯模型的任意一个匹配,则该像素点为背景点;否则为前景点。 (7)重复步骤(2)-(6),直到视频结束。

五、GMM 代码实现 #include #include #include

using namespace cv; using namespace std;

#define COMPONET 5 //混合高斯模型个数 #define ALPHA 0.03 //学习率 #define SD_INIT 6 //方差初始值 #define THRESHOLD 0.25 //前景所占比例 #define D 2.5

int main() {

CvCapture

*capture

=

cvCreateFileCapture("E:\\project2\\videos\\video.avi");

IplImage *frame, *grayFrame, *foreground, *background;

int *foreg, *backg, *rank_index;

double *weight, *mean, *sigma, *u_diff, *rank;

double p = ALPHA / (1 / (double)COMPONET);

double rank_temp = 0;

int rank_index_temp = 0;

CvRNG state; //随机生成状态器

int match, height, width;

frame = cvQueryFrame(capture);

grayFrame = cvCreateImage(CvSize(frame->width, frame->height), IPL_DEPTH_8U, 1);

foreground = cvCreateImage(CvSize(frame->width, frame->height), IPL_DEPTH_8U, 1);

background = cvCreateImage(CvSize(frame->width, frame->height), IPL_DEPTH_8U, 1);

height = grayFrame->height;

width = grayFrame->widthStep;

foreg = (int*)malloc(sizeof(int)*width*height);

backg = (int*)malloc(sizeof(int)*width*height);

rank = (double*)malloc(sizeof(double) * 1 * COMPONET); //优先级

weight = (double*)malloc(sizeof(double)*width*height*COMPONET); //权

mean = (double *)malloc(sizeof(double)*width*height*COMPONET);

//pixel means

sigma = (double *)malloc(sizeof(double)*width*height*COMPONET);

//pixel standard deviations

u_diff = (double *)malloc(sizeof(double)*width*height*COMPONET);

//difference of each pixel from mean

//初始化均值、方差、权重

for (int i = 0; i < height; i++)

{

for (int j = 0; j < width; j++)

{

for (int k = 0; k < COMPONET; k++)

{

mean[i*width*COMPONET + j*COMPONET + k] = cvRandReal(&state) * 255;

sigma[i*width*COMPONET + j*COMPONET + k] = SD_INIT;

weight[i*width*COMPONET + j*COMPONET + k] = (double)1 / COMPONET;

}

}

}

while (1){

rank_index = (int *)malloc(sizeof(int)*COMPONET);

cvCvtColor(frame, grayFrame, CV_BGR2GRAY);

// calculate difference of pixel values from mean

for (int i = 0; i < height; i++)

{

for (int j = 0; j < width; j++)

{

for (int k = 0; k < COMPONET; k++)

{

u_diff[i*width*COMPONET + j*COMPONET + k] =

abs((uchar)grayFrame->imageData[i*width + j] -

mean[i*width*COMPONET + j*COMPONET + k]);

}

}

}

//update gaussian components for each pixel

for (int i = 0; i < height; i++)

{

for (int j = 0; j < width; j++)

{

match = 0;

double sum_weight = 0;

for (int k = 0; k < COMPONET; k++)

{

if (u_diff[i*width*COMPONET + j*COMPONET + k]

<= D*sigma[i*width*COMPONET + j*COMPONET + k]) //pixel

matches component

{

match = 1;

// variable to signal component match

//update weights, mean, sd, p

weight[i*width*COMPONET + j*COMPONET + k] = (1 - ALPHA)*weight[i*width*COMPONET + j*COMPONET + k] + ALPHA;

/*p = ALPHA / weight[i*width*COMPONET + j*COMPONET + k];

mean[i*width*COMPONET + j*COMPONET + k] = (1 - p)*mean[i*width*COMPONET + j*COMPONET + k] + p*(uchar)grayFrame->imageData[i*width + j];

sigma[i*width*COMPONET + j*COMPONET + k] = sqrt((1 - p)*(sigma[i*width*COMPONET + j*COMPONET + k] * sigma[i*width*COMPONET + j*COMPONET + k]) + p*(pow((uchar)grayFrame->imageData[i*width + j] - mean[i*width*COMPONET + j*COMPONET + k], 2)));

*/

mean[i*width*COMPONET + j*COMPONET + k] = (1 - ALPHA)*mean[i*width*COMPONET + j*COMPONET + k] + ALPHA*(uchar)grayFrame->imageData[i*width + j];

sigma[i*width*COMPONET + j*COMPONET + k] = sqrt((1 - ALPHA)*(sigma[i*width*COMPONET + j*COMPONET + k] * sigma[i*width*COMPONET + j*COMPONET + k]) + ALPHA*(pow((uchar)grayFrame->imageData[i*width + j] -

mean[i*width*COMPONET + j*COMPONET + k], 2)));

}

//else{

// weight[i*width*COMPONET + j*COMPONET + k] =

(1 - ALPHA)*weight[i*width*COMPONET + j*COMPONET + k]; // weight slighly decreases

//}

sum_weight += weight[i*width*COMPONET +

j*COMPONET + k];

}

//权重归一化

for (int k = 0; k < COMPONET; k++)

{

weight[i*width*COMPONET + j*COMPONET + k] =

weight[i*width*COMPONET + j*COMPONET + k] / sum_weight;

}

//获取权重最小下标

double temp = weight[i*width*COMPONET +

j*COMPONET];

int min_index = 0;

backg[i*width + j] = 0;

for (int k = 0; k < COMPONET; k++)

{

backg[i*width + j] = backg[i*width + j] + mean[i*width*COMPONET + j*COMPONET + k] * weight[i*width*COMPONET + j*COMPONET + k];

if (weight[i*width*COMPONET + j*COMPONET + k] < temp)

{

min_index = k;

temp = weight[i*width*COMPONET + j*COMPONET + k];

}

rank_index[k] = k;

}

background->imageData[i*width + j] = (uchar)backg[i*width + j];

//if no components match, create new component

if (match == 0)

{

mean[i*width*COMPONET + j*COMPONET + min_index]

= (uchar)grayFrame->imageData[i*width + j];

sigma[i*width*COMPONET + j*COMPONET + min_index] = SD_INIT;

weight[i*width*COMPONET + j*COMPONET + min_index] = 1 / COMPONET;

}

//计算优先级

for (int k = 0; k < COMPONET; k++)

{

rank[k] = weight[i*width*COMPONET + j*COMPONET + k] / sigma[i*width*COMPONET + j*COMPONET + k];

}

//sort rank values

for (int k = 1; k < COMPONET; k++)

{

for (int m = 0; m < k; m++)

{

if (rank[k] > rank[m])

{

//swap max values

rank_temp = rank[m];

rank[m] = rank[k];

rank[k] = rank_temp;

//swap max index values

rank_index_temp = rank_index[m];

rank_index[m] = rank_index[k];

rank_index[k] = rank_index_temp;

}

}

}

//calculate foreground

match = 0;

int b = 0;

while ((match == 0) && (b < COMPONET)){

if (weight[i*width*COMPONET + j*COMPONET + rank_index[b]] >= THRESHOLD)

{

if (abs(u_diff[i*width*COMPONET + j*COMPONET + rank_index[b]]) <= D*sigma[i*width*COMPONET + j*COMPONET + rank_index[b]])

{

foreground->imageData[i*width + j] = 0;

match = 1;

}

else

{

foreground->imageData[i*width + j] = (uchar)grayFrame->imageData[i*width + j];

}

}

b++;

}

}

}

frame = cvQueryFrame(capture);

cvShowImage("fore", foreground);

cvShowImage("back", background);

cvShowImage("frame", frame);

char s = cvWaitKey(33);

if (s == 27) break;

free(rank_index);

}

return 0;

}

六、参考文献

[1]Chris Stauffer,W.E.L Grimson.Adaptive background mixture models for real-time tracking

[2]张燕平、白云球.应用改进混合高斯模型的运动目标检测

[3]黄大卫、胡文翔。改进单高斯模型的视频前景提取与破碎目标合并算法

[4]华媛蕾、刘万军.改进混合高斯模型的运动目标检测算法

[5]Peng Suo, Yanjiang Wang.Improved Adaptive Gaussian Mixture Model for Background Subtraction

[6]刘鑫、刘辉.混合高斯模型和帧间差分相融合的自适应背景模型

高斯分布背景模型原理

高斯分布背景模型原理 背景差分法的关键是背景图像的描述模型即背景模型,它是背景差分法分割运动前景的基础。背景模型主要有单模态和多模态两种,前者在每个背景像素点上的颜色分布比较集中,可以用单分布概率模型来描述,后者的分布则比较分散,需要用多分布概率模型来共同描述。在许多应用场景,如水面的波纹、摇摆的树枝,飘扬的红旗、监视器屏幕等,像素点的值都呈现出多模态特性。最常用的描述场景背景点颜色分布的概率密度模型(概率密度分布)是高斯分布(正态分布)。 1 单高斯分布背景模型 单高斯分布背景模型适用于单模态背景情形, 它为每个图象点的颜色建立了用单个高斯分布表示的模型) ,(,t t x N σμ其中下标t 表示时间。设图象点的当前颜色度量为t X ,若(,,)ttt p N X T μσ ≤ (这里p T 为概率阈值) , 则该点被判定为前景点, 否则为背景点(这时又称t X 与) ,(,t t x N σμ相匹配)。 在常见的一维情形中, 以t σ表示均方差, 则常根据/t t d σ的取值 设置前景检测阈值:若/t t d T σ>,则该点被判定为前景点, 否则为背 景点。 单高斯分布背景模型的更新即指各图象点高斯分布参数的更新。引入表示更新快慢的常数——更新率α, 则该点高斯分布参数的更新可表示为 1(1)t t t d μαμα+=-?+? (1)

21(1)t t t d σασα+=-?+? (2) 单高斯背景模型能处理有微小变化与慢慢变化的简单场景,当较复杂场景背景变化很大或发生突变,或者背景像素值为多峰分布(如微小重复运动)时,背景像素值的变化较快,并不是由一个相对稳定的单峰分布渐渐过度到另一个单峰分布,这时单高斯背景模型就无能为力,不能准确地描述背景了。]1[ 2 混合高斯分布背景模型 与单高斯背景模型不同,混合高斯背景模型对每个像素点用多个高斯模型混合表示。设用来描述每个像素的高斯分布共K 个(K 通常取 3—5个),象素uv Z 的概率函数: ,,,1()(,,)K u v j u v u v j u v j u v j P Z N Z ωμ ==∑∑ 其中,j uv ω是第j 个高斯分布的权值, 背景建模和更新过程(仅针对单个像素): 1.初始化:第一个高斯分布用第一帧图像该点的像素值作为均值或前N 帧图像该点的像素值的平均值作为均值,并对该高斯分布的权值取较大值(比其它几个高斯分布大)。其余的高斯分布的均值均为0,权重相等,所有高斯函数的方差取相等的较大值。 2.权值归一化 3.选取背景

混合高斯模型的简要介绍

混合高斯模型跟高斯变量之和看起来有一点像, 注意不要把它们弄混淆了. 混合高斯模型给出的概率密度函数实际上是几个高斯概率密度函数的加权和: 计算均值和方差的公式不仅适用于几个(多维)高斯分布混合的情况, 还适用于非高斯分布的情况. 高斯变量之和就没什么好说的了, 几个高斯变量之和是一个新的高斯变量. 原理: 高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。 对图像背景建立高斯模型的原理及过程:图像灰度直方图反映的是图像中某个灰度值出现的频次,也可以认为是图像灰度概率密度的估计。如果图像所包含的目标区域和背景区域相比比较大,且背景区域和目标区域在灰度上有一定的差异,那么该图像的灰度直方图呈现双峰-谷形状,其中一个峰对应于目标,另一个峰对应于背景的中心灰度。对于复杂的图像,尤其是医学图像,一般是多峰的。通过将直方图的多峰特性看作是多个高斯分布的叠加,可以解决图像的分割问题。 在智能监控系统中,对于运动目标的检测是中心内容,而在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要。而建模正是背景目标提取的一个重要环节。 我们首先要提起背景和前景的概念,前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景。建模的基本思想是从当前帧中提取前景,其目的是使背景更接近当前视频帧的背景。即利用当前帧和视频序列中的当前背景帧进行加权平均来更新背景,但是由于光照突变以及其他外界环境的影响,一般的建模后的背景并非十分干净清晰,而高斯混合模型是是建模最为成功的方法之一。 混合高斯模型使用K(基本为3到5个)个高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型, 用当前图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。通观整个高斯模型,主要是有方差和均值两个参数决定,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。由于我们是对运动目标的背景提取建模,因此需要对高斯模型中方差和均值两个参数实时更新。为提高模型的学习能力,改进方法对均值和方差的更新采用不同的学习率;为提高在繁忙的场景下,大而慢的运动目标的检测效果,引入权值均值的概念,建立背景图像并实时更新,然后结合权值、权值均值和背景图像对像素点进行前景和背景的分类。 到这里为止,混合高斯模型的建模基本完成,我在归纳一下其中的流程,首先初始化预先定义的几个高斯模型,对高斯模型中的参数进行初始化,并求出之后将要用到的参数。其次,对于每一帧中的每一个像素进行处理,看其是否匹配某个模型,若匹配,则将其归入该模型中,并对该模型根据新的像素值进行更新,若不匹配,则以该像素建立一个高斯模型,初始化参数,代理原有模型中最不可能的模型。最后选择前面几个最有可能的模型作为背景模型,为背景目标提取做铺垫。 目前,运动物体检测的问题主要分为两类,摄像机固定和摄像机运动。对于摄像机运动的运动物体检测问题,比较著名的解决方案是光流法,通过求解偏微分方程求的图像序列的光流场,从而预测摄像机的运动状态。对于摄像机固定的情形,当然也可以用光流法,但是由于光流法的复杂性,往往难以实时的计算,所以我采用高斯背景模型。因为,在摄像机固定的情况下,背景的变化是缓慢的,而且大都是光照,风等等的影响,通过对背景建模,对一幅给定图像分离前景和背景,一般来说,前景就是运动物体,从而达到运动物体检测的目的。 单分布高斯背景模型单分布高斯背景模型认为,对一个背景图像,特定像素亮度的分布满足高斯分布,即对背景图像B,(x,y)点的亮度满足: IB (x,y) ~ N(u,d)

改进混合高斯模型的运动目标检测算法

改进混合高斯模型的运动目标检测算法 Moving object detection algorithm of improved Gaussian mixture model For the traditional Gaussian mixture model cannot detect complete moving object and is prone to detect the background as the foreground region ,an improved algorithm was proposed for moving object detection based on Gauss mixture model. The Gaussian background model mixed with improved frame difference method for integration ,distinguished the uncovered background area and moving object region ,which could extract the complete moving object. To give a larger background updating rate of uncovered background area ,the background exposure of regional influences was eliminated. In complex scene ,it used the method of replacement by background model to improve the stability of the algorithm. The experiments prove that the improved algorithm has been greatly improved in the aspects of adaptability ,accuracy ,real-time ,

混合高斯模型(Mixtures of Gaussians)和EM算法

混合高斯模型(Mixtures of Gaussians)和EM算法 这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation)。 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示。与 k-means的硬指定不同,我们首先认为是满足一定的概率分布的,这里我们认为满足多项 式分布,,其中,有k个值{1,…,k} 可以选取。而且我们认为在给定后,满足多值高斯分布,即。由 此可以得到联合分布。 整个模型简单描述为对于每个样例,我们先从k个类别中按多项式分布抽取一个, 然后根据所对应的k个多值高斯分布中的一个生成样例,。整个过程称作混合高斯模型。 注意的是这里的仍然是隐含随机变量。模型中还有三个变量和。最大似然估计为 。对数化后如下: 这个式子的最大值是不能通过前面使用的求导数为0的方法解决的,因为求的结果不是 close form。但是假设我们知道了每个样例的,那么上式可以简化为: 这时候我们再来对和进行求导得到:

就是样本类别中的比率。是类别为j的样本特征均值,是类别为j的样例的特征的协方差矩阵。 实际上,当知道后,最大似然估计就近似于高斯判别分析模型(Gaussian discriminant analysis model)了。所不同的是GDA中类别y是伯努利分布,而这里的z是多项式分布,还有这里的每个样例都有不同的协方差矩阵,而GDA中认为只有一个。 之前我们是假设给定了,实际上是不知道的。那么怎么办呢?考虑之前提到的EM 的思想,第一步是猜测隐含类别变量z,第二步是更新其他参数,以获得最大的最大似然估计。用到这里就是:

混合高斯模型算法原理

混合高斯模型算法原理 混合高斯模型是一种经典的背景建模算法,用于背景相对稳定情况下的运动目标检测。它由单高斯模型发展而来,对于多模态的背景有一定的鲁棒性,如:树叶晃动、水纹波动等。在介绍混合高斯模型前,首先介绍单高斯模型。 1. 单高斯背景模型: 单高斯模型将图像中每一个像素点的颜色值看成是一个随机过程,并假设该点的像素值出现的概率服从高斯分布。该算法的基本原理就是对每一个像素位置建立一个高斯模型,模型中保存该处像素的均值和方差。如,可设),(y x 处像素的均值为),(y x u ,方差为),(2y x σ,标准差为),(y x σ。由于随着视频图像序列的输入,模型参数不断更新,所以不同时刻模型参数有不同的值,故可将模型参数表示为三个变量t y x ,,的函数:均值),,(t y x u 、方差),,(2t y x σ、标准差),,(t y x σ。用单高斯模型进行运动检测的基本过程包括:模型的初始化、更新参数并检测两个步骤。 1)模型初始化 模型的初始化即对每个像素位置上对应的高斯模型参数进行初始化,初始化采用如下公式完成: ?? ???===init std y x init std y x y x I y x u _)0,,(_)0,,()0,,()0,,(22σσ (1) 其中,)0,,(y x I 表示视频图像序列中的第一张图像),(y x 位置处的像素值,init std _为一个自己设的常数,如可设20_=init std 。 2)更新参数并检测 每读入一张新的图片,判断新图片中对应点像素是否在高斯模型描述的范围中,如是,则判断该点处为背景,否则,判断该点处为前景。假设前景检测的结 果图为out put ,其中在t 时刻),(y x 位置处的像素值表示为),,(t y x output ,),,(t y x output 的计算公式如下: ???-?<--=otherwise t y x t y x u t y x I t y x output ,1)1,,()1,,(),,(,0),,(σλ (2) 其中,λ是自己设的一个常数,如可设5.2=λ。以上公式表示的含义是:若新的图片中相应位置的像素值与对应模型中像素的均值的距离小于标准差的λ倍,则该点为背景,否则为前景。 模型的更新采用如下公式: ?? ???=-?+-?-=?+-?-=),,(),,()],,(),,(I [)1,,()1(),,(),,()1,,()1(),,(2222t y x t y x t y x u t y x t y x t y x t y x u t y x u t y x u σσασασαα (3) 其中,参数α表示更新率,也是自己设的一个常数,该常数的存在可以使得模型在背景的缓慢变化时具有一定的鲁棒性,如光照的缓慢变亮或变暗等。

高斯混合模型实现——【机器学习与算法分析 精品资源池】

实验算法高斯混合模型实验 【实验名称】 高斯混合模型实验 【实验要求】 掌握高斯混合模型应用过程,根据模型要求进行数据预处理,建模,评价与应用; 【背景描述】 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM 可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况。属于无监督机器学习,用于对结构化数据进行聚类。 【知识准备】 了解高斯混合模型的使用场景,数据标准。了解Python/Spark数据处理一般方法。了解spark 模型调用,训练以及应用方法 【实验设备】 Windows或Linux操作系统的计算机。部署Spark,Python,本实验提供centos6.8环境。【实验说明】 采用UCI机器学习库中的wine数据集作为算法数据,除去原来的类别号,把数据看做没有类别的样本,训练混合高斯模型,对样本进行聚类。 【实验环境】 Spark 2.3.1,Pyrhon3.X,实验在命令行pyspark中进行,或者把代码写在py脚本,由于本次为实验,以学习模型为主,所以在命令行中逐步执行代码,以便更加清晰地了解整个建模流程。【实验步骤】 第一步:启动pyspark: 1

命令行中键入pyspark --master local[4],本地模式启动spark与python: 第二步:导入用到的包,并读取数据: (1).导入所需的包 from pyspark import SparkContext, SQLContext, SparkConf from math import sqrt from pyspark.sql.functions import monotonically_increasing_id (2).读取数据源 df_wine = sc.textFile(u"file:/opt/algorithm/gaussianMixture/wine.txt").map( lambda x: str(x).split(",")).map(lambda x: [float(z) for z in x]) (3).数据转换为Data df_wine_rdd = sqlContext.createDataFrame(df_wine) (4).数据展示 df_wine_rdd.show() 1

混合高斯背景建模与更新

计算机学院专业实习报告专业名称计算机科学与技术 实习题目基于多摄像机协同的运动对象分割与三维重建系统之背景建模与运动前景分割 姓名李林 班级10010804 学号2008302499 实习时间 指导教师杨涛Northwestern Polytechnical University

2010年7月14日 目录 摘要 (1) 第一章基本原理 (2) 1.1高斯模型原理 (2) 1.2 混合高斯背景建模与更新 (3) 1.2.1 背景训练 (4) 1.2.2 模板匹配 (4) 1.2.3背景更新 (5) 第二章运动物体提取 (6) 2.1目标提取概述 (6) 2.2 提取过程 (6) 2.2.1 参数设置 (6) 2.2.2 模型建立 (7) 2.2.3 背景学习 (7) 2.2.4 模板匹配与背景更新 (9) 第3章其他增强效果算法 (10) 3.1阴影的检测和去除 (10) 3.1.1 阴影简介 (10) 3.1.2 阴影检测法 (11) 3.1.2 阴影去除 (13) 3.2形态学滤波 (14) 3.2.1 图像腐蚀与膨胀 (15) 3.2.2 开运算和闭运算 (16) 第四章最终成品 (18) 4.1 成品说明 (18) 4.1.1性能说明 (18) 4.1.2成品样式 (19) 4.1.3使用说明 (19) 第五章实习心得 (19)

摘要 背景建模与运动前景分割是指从视频或者连续的图像序列中将运动的区域分割出来,本次实行所需的运动物体提取只是用来为后面的形成3维图形提供图像数据,日常生活中视频监控系统已广泛应用于各大公共场所,如公司,机场,酒店等都备有监控系统。但对于大多数监控系统来说,都需要监控者保持对监控录像的观测。如何实现视频监控系统的自动监控,是近年来比较关注的问题。自动视频监控技术其主要内容之一就是能监视某一特定场景中的新目标的出现,首先检测视频序列图像中是否有变化,如图像变化,说明有新目标出现,则把这个目标从视频图像序列中分割提取出来,为下一步的目标识别和跟踪提取数据提供基础。因此,一个视频监控系统的好坏,运动目标能否良好的提取是非常关键的。 目前运动目标的提取已经取得很多成果,并且不断有新技术、新方法出现。但是,在实际应用中,由于自然环境复杂,目标机动性高,使得提取与跟踪时干扰因素多,提取不准确且匹配效率不高。要提高跟踪的精度需要对复杂环境下的目标提取和跟踪进行研究,但到目前为止,仍没有一种普遍适用、比较完善的方法,因此对这两方面作进一步研究仍有很大空间。 针对本次实习的特殊场景,经分析决定采用混合高斯模型对运动图像进行提取,弥补单高斯模型不能适应背景微变化的这一缺陷,例如光照明暗、阴影等变化。利用混合高斯模型对输入的视频进行学习,之后再对运动物体进行前景提取,形成二值图像,运动物体置为白色,背景值为黑色,由于在提取过程中会存在这一些噪声点,所以最后运用腐蚀与膨胀运算对图像进行去噪处理。最终设计完形成的图像预计效果为能基本提取出运动物体,可能遇到较为复杂的背景会存在一定的噪声。 目前,从现有的测试数据来看程序能基本提取出运动物体,基本达到了预定的效果,在设计之中起初运用了帧间差分法,测试数据背景较为简单时能基本提取前景,但换成了光照发生变化的背景后运动物体的提取有明显难以改善的噪声,之后考虑更改算法,现有的算法中,光流法效果较为明显,但其算法较为复杂,不适合本次实习的开发,其次较为合适的还有单高斯模型,但其由于在变化的场景中表现

混合高斯背景建模matlab代码

clear all % source = aviread('C:\Video\Source\traffic\san_fran_traffic_30sec_QVGA'); source = mmreader('SampleVideo.avi'); frameQYT=get(source,'NumberOfFrames'); % ----------------------- frame size variables ----------------------- fr = read(source,1); % 读取第一帧作为背景 fr_bw = rgb2gray(fr); % 将背景转换为灰度图像 fr_size = size(fr); %取帧大小 width = fr_size(2); height = fr_size(1); fg = zeros(height, width); bg_bw = zeros(height, width); % --------------------- mog variables ----------------------------------- C = 4; % 组成混合高斯的单高斯数目(一般3-5) M = 0; % 组成背景的数目 D = 2.5; % 阈值(一般2.5个标准差) alpha = 0.01; % learning rate 学习率决定更新速度(between 0 and 1) (from paper 0.01) thresh = 0.75; % foreground threshold 前景阈值(0.25 or 0.75 in paper) sd_init = 6; % initial standard deviation 初始化标准差(for new components) var = 36 in paper w = zeros(height,width,C); % initialize weights array 初始化权值数组 mean = zeros(height,width,C); % pixel means 像素均值 sd = zeros(height,width,C); % pixel standard deviations 像素标准差 u_diff = zeros(height,width,C); % difference of each pixel from mean 与均值的差p = alpha/(1/C); % initial p variable 参数学习率(used to update mean and sd) rank = zeros(1,C); % rank of components (w/sd) % ------initialize component means and weights 初始化均值和权值---------- pixel_depth = 8; % 8-bit resolution 像素深度为8位 pixel_range = 2^pixel_depth -1; % pixel range 像素范围2的7次方0—255(# of possible values) for i=1:height for j=1:width for k=1:C mean(i,j,k) = rand*pixel_range; % means random (0-255之间的随机数) w(i,j,k) = 1/C; % weights uniformly dist sd(i,j,k) = sd_init; % initialize to sd_init end end

GMM算法原理

高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。 对图像背景建立高斯模型的原理及过程:图像灰度直方图反映的是图像中某个灰度值出现的频次,也可以认为是图像灰度概率密度的估计。如果图像所包含的目标区域和背景区域相比比较大,且背景区域和目标区域在灰度上有一定的差异,那么该图像的灰度直方图呈现双峰-谷形状,其中一个峰对应于目标,另一 个峰对应于背景的中心灰度。对于复杂的图像,尤其是医学图像,一般是多峰的。通过将直方图的多峰特性看作是多个高斯分布的叠加,可以解决图像的分割问题。在智能监控系统中,对于运动目标的检测是中心内容,而在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要。而建模正是背景目标提取的一个重要环节。 我们首先要提起背景和前景的概念,前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景。建模的基本思想是从当前帧中提取前景,其目的是使背景更接近当前视频帧的背景。即利用当前帧和视频序列中的当前背景帧进行加权平均来更新背景,但是由于光照突变以及其他外界环境的影响,一般的 建模后的背景并非十分干净清晰,而高斯混合模型是是建模最为成功的方法之一。 混合高斯模型使用K(基本为3到5个)个高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型, 用当前图像中的每个像素点 与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。通观整个高斯模型,主要是有方差和均值两个参数决定,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。由于我们是对运动目标的背景提取建模,因此需要对高斯模型中方差和均值两个参数实时更新。为提高模型的学习能力,改进方法对均值和方差的更新采用不同的学习率;为提高在繁忙的场景下,大而慢的运动目标的检测效果,引入权值均值的概念,建立背景图 像并实时更新,然后结合权值、权值均值和背景图像对像素点进行前景和背景的 分类。 1、为图像的每个像素点指定一个初始的均值、标准差以及权重。 2、收集N(一般取200以上,否则很难得到像样的结果)帧图像利用在线EM算法得到每个像素点的均值、标准差以及权重。 3、从N+1帧开始检测,检测的方法: 对每个像素点: 1)将所有的高斯核按照ω/ σ降序排序 2)选择满足下式的前M个高斯核: M = arg min(ω/ σ> T) 3)如果当前像素点的像素值在中有一个满足:就可以认为其为背景点。 4、更新背景图像,用在线EM算法。

混和高斯模型的推导和实现

基于GMM 的运动目标检测方法研究 一、GMM 数学公式推导 1、预备知识: (1)设离散型随机变量X 的分布率为: {} 2,1,P ===k p a X k k 则称()∑= k k k p a X E 为X 的数学期望或均值 (2)设连续型随机变量X 的概率密度函数(PDF )为f(x) 其数学期望定义为:()()dx x xf X E ? +∞ ∞ -= (3)()()()[] 2 X E X E X D -=称为随机变量x 的方差,()X D 称为X 的标准差 (4)正态分布:() 2,~σμN X 概率密度函数为:()()??????? ?--= 22221 σμσ πx e x p (5)设(x,y)为二维随机变量,()[]()[]{}Y E Y X E X E --若存在,则 称其为X 和Y 的协方差,记为cov(x,y) ()()[]()[]{}()XY E Y E Y X E X E Y X =--=,cov 2、单高斯模型:SGM (也就是多维正态分布) 其概率密度函数PDF 定义如下: ()() ()()μμπμ--- -= x C x n T e C C x N 12 1 21 ,; 其中,x 是维数为n 的样本向量(列向量),μ是期望,C 是协方差矩阵,|C|表示C 的行列式,1-C 表示C 的逆矩阵,()T x μ-表示()μ-x 的转置。 3、混合高斯模型:GMM 设想有 m 个类:m 321????,,,, ,每类均服从正态分布。 各分布的中心点(均值)分别为:m 321μμμμ,,,,

方差分别为:m 321σσσσ,,,, 每一类在所有的类中所占的比例为 ()()()()m P P P P ????,,,,321 其中()11=∑=m i i P ?。 同时,已知 个观察点: 。其中,用大写P 表示概率,用小写p 表 示概率密度。 则依此构想,可得概率密度函数为: ()()()()()()()() ()()()μμπ??σμ?σμ?σμ--- =-∑ =?++?+?=x C x m i d i m m m T e C P P N P N P N x p 12 1 12221112,,, 其中d 是维数,|·|是行列式 但是在利用GMM 进行目标检测时,这些模型的参数可能已知,也可能不知道,当参数已知时,可以直接利用GMM 进行目标检测,在未知的情况下,需要对参数进行估计。对参数估计时,还要考虑样本分类是否已知。 (1)样本已知: 最大似然估计: 可以直接采用MLE (最大似然估计)进行参数估计: 未知量为集合:()()()m P P C C ??μμλ,,1m 1m 1 ,,,,,,= 将衡量概率密度函数优劣的标准写出:()()∏==n k k x P x p 1||λλ 即为: ()() () ()()i k T i k x C x n k m i d i e C P x p μμπ?λ--- ==-∏∑ =12 1 11 | |2| 只要定出该标准的最大值位置,就可以求出最优的待定参数。为了 求出这个最

EM算法在高斯混合模型中的应用

EM 算法在高斯混合模型中的应用 1.定义 对于一个随机信号生成器,假设他的模型参数为Θ,我们能观测到的数据输出为X ,不能观测到的数据输出为Y ,且随机系统模型结构的概率密度函数为 (,|)p x y Θ (1) 能够观测到的一部分数据输出数据12{,,...,}N x x x ,模型的另一部分输出数据 未知,模型的参数Θ也未知。EM 算法就是要求我们从观测数据12{,,...,}N x x x 中估计出参数Θ。 2.EM 算法的描述 假设每一对随机系统的输出样本(,)n n x y 对于不同的n 相互独立,这样当(,,)p x y Θ,x 和y 都已知的情况下,概率(,,)p x y Θ也已知。未观测的输出y 的概率分布也属于待求参数Θ。 根据独立性假设有: 1(,|)(,|)N n n n p x y p x y =Θ=Θ∏ (2) 3.EM 算法的基本思路 基本问题是求解下面的方程的解: arg max (,|)p x y Θ=Θ (3) 由于X 是确定量,Y 是未知的,因此即使给定了Θ,也无法求得(,|)p x y Θ的值,因此我们只能退一步求: arg max (|)p x Θ=Θ (4) 其中 (|)(,|)[(|),(|,)]y Y y Y p x p x y p y p x y ∈∈Θ=Θ=ΘΘ∑∑ (5) 表示考虑了未知数据y 的所有可能的取值Y 后对(|,)p x y Θ求平均值。 最后根据log 函数的单调性得到(4)的等效形式: arg max log (|)p x Θ=Θ (6) 对于(6)给出的最优化问题,考虑用下面的递推算法解决,即:先给定一个估值k Θ并计算(|)k p x Θ,然后更新k Θ得到1k +Θ并且有 1log (|)log (|)k k p x p x +Θ>Θ (7) ()log (|)log [(|)(|,)] |(|,)log (|,)(|,)(|)(|,)(|,)log (|,)(,) y Y k k y Y k k y Y k p x p y p x y p y p x y p y x p y x p y p x y p y x p y x B ∈∈∈Θ=ΘΘΘΘ? ?=Θ??Θ???? ??ΘΘ≥Θ????Θ??? ?=ΘΘ∑∑∑ (8) 其中,等号在(,)k k B ΘΘ时成立,即: (,)log (|)k k k B p x ΘΘ=Θ (9)

高斯混合模型GMM实现matlab

高斯混合模型GMM实现matlab (1 )以下matlab代码实现了高斯混合模型: function [Alpha, Mu, Sigma] = GMM_EM(Data, Alpha0, Mu0, Sigma0) %%EM 迭代停止条件 loglik_threshold = 1e-10; %%初始化参数 [dim, N] = size(Data); M = size(Mu0,2); loglik_old = -realmax; nbStep = 0; Mu = Mu0; Sigma = Sigma0; Alpha = Alpha0; Epsilon = 0.0001; while (nbStep < 1200) nbStep = nbStep+1; %%E-步骤 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:M % PDF of each point Pxi(:,i) = GaussPDF(Data, Mu(:,i), Sigma(:,:,i)); end % 计算后验概率 beta(i|x) Pix_tmp = repmat(Alpha,[N 1]).*Pxi; Pix = Pix_tmp ./ (repmat(sum(Pix_tmp,2),[1 M])+realmin); Beta = sum(Pix); %%M- 步骤 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:M % 更新权值 Alpha(i) = Beta(i) / N; %更新均值 Mu(:,i) = Data*Pix(:,i) / Beta(i); %更新方差 Data_tmp1 = Data - repmat(Mu(:,i),1,N);

基于阴影消除和混合高斯模型的视频分割算法

第35卷第3期 光电工程V ol.35, No.3 2008年3月Opto-Electronic Engineering March, 2008文章编号:1003-501X(2008)03-0021-05 基于阴影消除和混合高斯模型的视频分割算法 王勇,谭毅华,田金文 ( 华中科技大学图像所,多谱信息处理技术国防重点实验室,武汉 430074 ) 摘要:针对固定场景监控中复杂背景、光照变化、阴影等影响视频分割的问题,提出了一种有效的混合高斯模型的自适应背景更新算法,各像素点根据其像素值出现的混乱程度采取不同个数的高斯分布描述,通过对背景模型的学习与更新、高斯分布生成准则等方面的改进和优化,采用基于形态学重构的阴影消除方法使得前景目标分割的性能得到了有效地提高。文中同时给出了光照突变检测及其背景更新方法。通过对各种实际场景的实验仿真表明,该算法能够快速准确地建立背景模型,准确分割前景目标,与其它算法比较具有更强的鲁棒性。 关键词:视频分割;背景建模;混合高斯模型;阴影消除 中图分类号:TN911.73 文献标志码:A Video Segmentation Algorithm with Gaussian Mixture Model and Shadow Removal WANG Yong,TAN Yi-hua,TIAN Jin-wen ( State Key Laboratory for Multi-spectrum Information Processing, Institute for Pattern Recognition and Artificial Intelligence, Huazhong University of Science and Technology, Wuhan 430074, China ) Abstract:Background subtraction based on Gaussian Mixture Model (GMM) is a common method for real-time video segmentation of moving objects. An effective adaptive background updating method based on GMM is presented. The number of mixture components of GMM is estimated according to the frequency of pixel value changes, and the performance of GMM can be effectively improved with the modified background learning and update new distribution generation rule and shadow removal based on morphological reconstruction. The detection of sudden illumination change and background updating are also proposed. Compared with existing approaches, experimental results with different real scenes demonstrate the robustness of the proposed method. Key words:video segmentation; background modeling; mixture Gaussians model; shadow removal 1 引 言 在背景减除的实时视频监控及运动目标检测与跟踪领域中经常采用混合高斯方法为背景建模。混合高斯背景模型是一些高斯函数的加权和,能够描述像素的双峰或多峰状态,能够对比较复杂、光照缓慢变化和存在小幅度重复运动的背景(喷泉、摇动的树木、雨雪天气等情况)准确建模。前期的研究者通常采用EM 算法估计混合高斯模型参数,但由于EM算法固有的缺陷[1]限制了其应用,目前GMM基本采用在线K均值估计的统计建模方法。文献[2]中背景模型的学习与更新都采用一个小的常量α,虽能保证背景模型的稳定性,但影响了高斯成分的收敛速度,对于动态背景的适应能力较差。文献[3]对学习率因子做了改进,将它与时间建立联系,使学习算法具有了自适应性,提高了收敛速度。文献[4]结合EM算法推导了基于最大后验概率准则的高斯模型参数迭代公式,该算法虽具有较好的适应性和分割效果,缺点是计算复杂并且选取合适的参数比较困难。采用背景减除得到的前景目标通常包含运动阴影,且与物体轮廓相连。如果不进 收稿日期:2007-04-23;收到修改稿日期:2008-01-20 作者简介:王勇(1980-),男(汉族),湖北仙桃人,博士生,主要研究工作是模式识别与智能系统。E-mail: wy112708@https://www.360docs.net/doc/4c9923675.html,

高斯混合模型

高斯混合模型(Gaussian Mixture Model, GMM) (2011-12-30 23:50:01) 标签: 分类:工作篇 校园 高斯混合模型 高斯模型就是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。对图像背景建立高斯模型的原理及过程:图像灰度直方图反映的是图像中某个灰度值出现的频次,也可以以为是图像灰度概率密度的估计。如果图像所包含的目标区域和背景区域相比比较大,且背景区域和目标区域在灰度上有一定的差异,那么该图像的灰度直方图呈现双峰-谷形状,其中一个峰对应于目标,另一个峰对应于背景的中心灰度。对于复杂的图像,尤其是医学图像,一般是多峰的。通过将直方图的多峰特性看作是多个高斯分布的叠加,可以解决图像的分割问题。在智能监控系统中,对于运动目标的检测是中心内容,而在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要。而建模正是背景目标提取的一个重要环节。 我们首先要提起背景和前景的概念,前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景。建模的基本思想是从当前帧中提取前景,其目的是使背景更接近当前视频帧的背景。即利用当前帧和视频序列中的当前背景帧进行加权平均来更新背景,但是由于光照突变以及其他外界环境的影响,一般的建模后的背景并非十分干净清晰,而高斯混合模型 (GMM)是建模最为成功的方法之一。 英文翻译及缩写:Gaussian mixture model (GMM) 混合高斯模型使用K(基本为3到5个)个高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型,用当前图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。通观整个高斯模型,他主要是有方差和均值两个参数决定,,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。由于我们是对运动目标的背景提取建模,因此需要对高斯模型中方差和均值两个参数实时更新。为提高模型的学习能力,改进方法对均值和方差的更新采用不同的学习率;为提高在繁忙的场景下,大而慢的运动目标的检测效果,引入权值均值的概念,建立背景图像并实时更新,然后结合权值、权值均值和背景图像对像素点进行前景和背景的分类。具体更新公式如下: μt= (1 - ρ)μt- 1 +ρxt (1) ?2t = (1 - ρ)?2t- 1 +ρ( xt -μt ) T ( xt -μt ) (2) ρ =αη( xt | μκ,?κ ) (3) | xt -μt - 1 | ≤ 2. 5?t- 1 (4) w k , t = (1 - α) w k , t - 1 +αMk , t (5) 式中ρ为学习率,即反映当前图像融入背景的速率。

聚类(1)——混合高斯模型 Gaussian Mixture Model

聚类(1)——混合高斯模型Gaussian Mixture Model 分类:Machine Learning 2012-06-14 17:57 5075人阅读评论(5) 收藏举报算法function 聚类系列: ?聚类(序)----监督学习与无监督学习 ? ?聚类(1)----混合高斯模型 Gaussian Mixture Model ?聚类(2)----层次聚类 Hierarchical Clustering ?聚类(3)----谱聚类 Spectral Clustering -------------------------------- 聚类的方法有很多种,k-means要数最简单的一种聚类方法了,其大致思想就是把数据分为多个堆,每个堆就是一类。每个堆都有一个聚类中心(学习的结果就是获得这k个聚类中心),这个中心就是这个类中所有数据的均值,而这个堆中所有的点到该类的聚类中心都小于到其他类的聚类中心(分类的过程就是将未知数据对这k个聚类中心进行比较的过程,离谁近就是谁)。其实k-means算的上最直观、最方便理解的一种聚类方式了,原则就是把最像的数据分在一起,而“像”这个定义由我们来完成,比如说欧式距离的最小,等等。想对k-means的具体算法过程了解的话,请看这里。而在这篇博文里,我要介绍的是另外一种比较流行的聚类方法----GMM(Gaussian Mixture Model)。 GMM和k-means其实是十分相似的,区别仅仅在于对GMM来说,我们引入了概率。说到这里,我想先补充一点东西。统计学习的模型有两种,一种是概率模型,一种是非概率模型。所谓概率模型,就是指我们要学习的模型的形式是P(Y|X),这样在分类的过程中,我们通过未知数据X可以获得Y取值的一个概率分布,也就是训练后模型得到的输出不是一个具体的值,而是一系列值的概率(对应于分类问题来说,就是对应于各个不同的类的概率),然后我们可以选取概率最大的那个类作为判决对象(算软分类soft assignment)。而非概率模型,就是指我们学习的模型是一个决策函数Y=f(X),输入数据X是多少就可以投影得到唯一的一个Y,就是判决结果(算硬分类hard assignment)。回到GMM,学习的过程就是训练出几个概率分布,所谓混合高斯模型就是指对样本的概率密度分布进行估计,而估计的模型是几个高斯模型加权之和(具体是几个要在模型训练前建立好)。每个高斯模型就代表了一个类(一个Cluster)。对样本中的数据分别在几个高斯模型上投影,就会分别得到在各个类上的概率。然后我们可以选取概率最大的类所为判决结果。 得到概率有什么好处呢?我们知道人很聪明,就是在于我们会用各种不同的模型对观察到的事物和现象做判决和分析。当你在路上发现一条狗的时候,你可能光看外形好像邻居家的狗,又更像一点点女朋友家的狗,你很难判断,所以从外形上看,用软分类的方法,是女朋友家的狗概率51%,是邻居家的狗的概率是49%,属于一个易混淆的区域内,这时你可以再用其它办法进行区分到底是谁家的狗。而如果是硬分类的话,你所判断的就是女朋友家的狗,没有“多像”这个概念,所以不方便多模型的融合。 从中心极限定理的角度上看,把混合模型假设为高斯的是比较合理的,当然也可以根据实际数据定义成任何分布的Mixture Model,不过定义为高斯的在计算上有一些方便之处,另外,理论上可以通过增加Model的个数,用GMM近似任何概率分布。 混合高斯模型的定义为: 其中K为模型的个数,πk为第k个高斯的权重,则为第k个高斯的概率密度函数,其均值为μk,方差为σk。我们对此概率密度的估计就是要求πk、μk和σk各个变量。当求出的表达式后,求和式的各项的结果就分别代表样本x属于各个类的概率。 在做参数估计的时候,常采用的方法是最大似然。最大似然法就是使样本点在估计的概率密度函数上的概率值最大。由于概率值一般都很小,N很大的时候这个连乘的结果非常小,容易造成浮点数下溢。所以我们通常取log,将目标改写成: 也就是最大化log-likelyhood function,完整形式则为:

相关文档
最新文档