欢迎光临散文网 会员登陆 & 注册

【图像检测】基于AdaBoost算法实现人脸检测matlab源码

2021-09-14 12:07 作者:Matlab工程师  | 我要投稿

简要叙述一下AdaBoost算法的主要过程:

AdaBoost为每个数据样本分配权重,权重符合概率分布,初始权重符合均匀分布,串行训练M个模型,依据每轮训练的模型的错误率(被误分类样本的权重之和)确定当前模型在最终模型中的权重,以及更新训练样本的权重,误分类样本权重升高,分类正确的样本权重降低。

下图的算法流程来自于《统计学习方法》。

下面通过具体的实例来理解AdaBoost算法的流程,例子来自于《统计学习方法》。

第一轮迭代:

此时得到的组合模型中只有一个

 ,此时

 的分类结果就是最终模型的分类结果。第一轮迭代中6,7,8(6,7,8指的是x的值,不是指的序号)被误分类。此时得到的组合模型在训练数样本上的预测结果如下:


X


y





分类结果


0


1


0.4236


0.4236


1


正确


1


1


0.4236


0.4236


1


正确


2


1


0.4236


0.4236


1


正确


3


-1


-0.4236


-0.4236


-1


正确


4


-1


-0.4236


-0.4236


-1


正确


5


-1


-0.4236


-0.4236


-1


正确


6


1


-0.4236


-0.4236


-1


错误


7


1


-0.4236


-0.4236


-1


错误


8


1


-0.4236


-0.4236


-1


错误


9


-1


-0.4236


-0.4236


-1


正确


其中sign符号函数如下:

第二轮迭代:

第二轮迭代中3,4,5被误分类,此时得到的最终模型是前两轮模型的线性组合。那么在当前的组合条件下

 的分类结果是怎样的?


X


y






分类结果


0


1


0.4236


0.6496


1.0732


1


正确


1


1


0.4236


0.6496


1.0732


1


正确


2


1


0.4236


0.6496


1.0732


1


正确


3


-1


-0.4236


0.6496


0.226


1


错误


4


-1


-0.4236


0.6496


0.226


1


错误


5


-1


-0.4236


0.6496


0.226


1


错误


6


1


-0.4236


0.6496


0.226


1


正确


7


1


-0.4236


0.6496


0.226


1


正确


8


1


-0.4236


0.6496


0.226


1


正确


9


-1


-0.4236


-0.6496


-1.0732


-1


正确


第三轮迭代:

第三轮迭代中0,1,2,9被误分类,此时得到的最终模型是前三轮模型的线性组合。那么在当前的组合条件下

 的分类结果是怎样的?


X


y







分类结果


0


1


0.4236


0.6496


-0.7514


0.3218


1


正确


1


1


0.4236


0.6496


-0.7514


0.3218


1


正确


2


1


0.4236


0.6496


-0.7514


0.3218


1


正确


3


-1


-0.4236


0.6496


-0.7514


-0.5254


-1


正确


4


-1


-0.4236


0.6496


-0.7514


-0.5254


-1


正确


5


-1


-0.4236


0.6496


-0.7514


-0.5254


-1


正确


6


1


-0.4236


0.6496


0.7514


0.9774


1


正确


7


1


-0.4236


0.6496


0.7514


0.9774


1


正确


8


1


-0.4236


0.6496


0.7514


0.9774


1


正确


9


-1


-0.4236


-0.6496


0.7514


-0.3218


-1


正确


经过三轮迭代之后,在训练集上的错误率为0。

nTrainPosData = 200; nTrainNegData = 200; nLevels = 200; W = 19; H = 19; PTrainData = zeros(W, H, nTrainPosData); NTrainData = zeros(W, H, nTrainNegData); %% read train data fileFolder = '.\Datasets\FACES\'; pfiles = dir(fullfile(strcat(fileFolder,'*.pgm'))); fileNames = {pfiles.name}';      %转换成细胞数组 aa = 1:length(pfiles);          %这段程序还没有看懂           a = randperm(length(aa)); trainPosPerm = aa(a(1:nTrainPosData)); for i=1:size(PTrainData,3)    PTrainData(:,:,i) =imread(strcat(fileFolder,fileNames{i})); end fileFolder = '.\Datasets\FACES\'; nfiles = dir(fullfile(strcat(fileFolder,'*.pgm'))); fileNames = {nfiles.name}';      %转换成细胞数组 aa = 1:length(nfiles);          %这段程序还没有看懂 a = randperm(length(aa)); trainNegPerm = aa(a(1:nTrainNegData)); for i=1:size(NTrainData,3)    NTrainData(:,:,i) =imread(strcat(fileFolder,fileNames{i})); end %% read test data testPosPerm = setdiff(1:length(pfiles), trainPosPerm); testNegPerm = setdiff(1:length(nfiles), trainNegPerm); PTestData = zeros(W, H, length(testPosPerm)); NTestData = zeros(W, H, length(testNegPerm)); fileFolder = '.\Datasets\FACES\'; pfiles = dir(fullfile(strcat(fileFolder,'*.pgm'))); fileNames = {pfiles.name}';      %转换成细胞数组 % for i=1:size(PTestData,3) for i=1:200    PTestData(:,:,i) =imread(strcat(fileFolder,fileNames{i})); end fileFolder = '.\Datasets\FACES\'; nfiles = dir(fullfile(strcat(fileFolder,'*.pgm'))); fileNames = {nfiles.name}';      %转换成细胞数组 % for i=1:size(NTestData,3) for i=1:200       NTestData(:,:,i) =imread(strcat(fileFolder,fileNames{i})); end %% Cparams = Train(PTrainData, NTrainData, PTestData, NTestData, nLevels); save('.\Cparams.mat', 'Cparams');

 


【图像检测】基于AdaBoost算法实现人脸检测matlab源码的评论 (共 条)

分享到微博请遵守国家法律