日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

浅析haartraining方法进行人脸检测

發(fā)布時(shí)間:2024/7/23 pytorch 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析haartraining方法进行人脸检测 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上個(gè)月用了兩周的時(shí)間,學(xué)習(xí)了用于人臉檢測的haartraining算法,今天打算做一總結(jié)

首先先為和我一樣的初學(xué)者推薦幾篇博客

http://blog.csdn.net/zouxy09/article/details/7922923真的很感謝寫這篇文章的博主,講解深入淺出。本文中的主要邏輯也都是由他的文章啟發(fā)而來,有部分引用的內(nèi)容,這里提前聲明。

http://blog.sina.com.cn/s/blog_5f853eb10100sdgn.html?這篇文章是AdaBoost算法的代碼實(shí)現(xiàn),注釋實(shí)在是詳細(xì)!贊

http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html?這篇文章非常明白的講解了如何利用opencv提供的可執(zhí)行文件一步步嘗試進(jìn)行人臉識別


開始進(jìn)入正題

haartraining方法是基于Haar特征和AdaBoost算法以及級聯(lián)思想的

那么首先,特征是什么?

假設(shè)在人臉檢測時(shí)我們需要有這么一個(gè)子窗口在待檢測的圖片窗口中不斷的移位滑動,子窗口每到一個(gè)位置,就會計(jì)算出該區(qū)域的特征,這個(gè)能夠按照我們規(guī)定的方式計(jì)算出某個(gè)區(qū)域的特征值的子窗口就是特征

那么haar特征又是什么

haar特征是由Viola、Lienhart等人提出的,原理并沒有不同,這里不多贅述

大家可以參考我之前總結(jié)的人臉識別嘗試(二)——Haar特征 ?總結(jié)的還是挺用心的,希望大家多支持

?http://blog.csdn.net/u011583927/article/details/44782197

總之,一個(gè)Haar特征的數(shù)據(jù)結(jié)構(gòu)應(yīng)該包含以下內(nèi)容:?

*haar特征模板類型

*是否有旋轉(zhuǎn)

*矩陣位置及大小


知道了Haar特性是什么,我們來聊聊AdaBoost算法

AdaBoost是一種具有一般性的分類器提升算法,既然是提升,那么一定是從弱分類器到強(qiáng)分類器的一個(gè)過程


先說弱分類器是怎樣產(chǎn)生的

在這之前,我先引出一個(gè)最差的分類器,暫且叫它“糟糕分類器”

對于一個(gè)待檢測的圖片,選出任意一種Haar特征,就可以計(jì)算得到一個(gè)特征值

如果我們定義一個(gè)閾值,那么將計(jì)算的特征值與這個(gè)閾值進(jìn)行比較,就能做出一個(gè)最低級的決策



我將這整個(gè)的過程稱為一個(gè)“糟糕分類器”(實(shí)際上并沒有這個(gè)稱呼,只是我個(gè)人這樣理解)用下圖表示




顯然僅僅憑借這樣粗糙的方式不可能判別一副圖片是否為人臉,因?yàn)樗男Ч_實(shí)太糟糕了。我們應(yīng)用多個(gè)這樣的糟糕分類器進(jìn)行級聯(lián),如下圖所示



? 一個(gè)弱分類器就是一個(gè)基本和上圖類似的決策樹,最基本的弱分類器只包含一個(gè)Haar-like特征,也就是它的決策樹只有一層,被稱為樹樁(stump)。注意:這里這樣的結(jié)構(gòu)還不能稱之為弱分類器,因?yàn)槲覀兊拈撝的壳盀橹惯€是未知,也可以理解為隨意選取的,這樣當(dāng)然不行。

? 對于這樣一個(gè)弱分類器(或者說是二叉決策樹)最重要的就是如何決定每個(gè)結(jié)點(diǎn)判斷的輸出,要比較輸入圖片的特征值和弱分類器中閾值。也就是要尋找合適的分類器閾值,使該分類器對所有樣本的判讀誤差最低。尋找最優(yōu)閾值的過程也就是我們進(jìn)行樣本訓(xùn)練的過程,訓(xùn)練后二叉決策樹就是一個(gè)弱分類器。

? 那么如何尋找最優(yōu)閾值呢?對于某一種特征,我們可以將輸入樣本(既有正樣本又有負(fù)樣本)分別計(jì)算對應(yīng)的特征值并按升序排序成一個(gè)隊(duì)列Seq。那么我們將閾值取遍隊(duì)列中每一個(gè)特征值,對于每次循環(huán),計(jì)算分錯(cuò)樣本的加權(quán)平均和,并記錄。遍歷完成后分錯(cuò)樣本的加權(quán)最小的那個(gè)位置對應(yīng)的特征值就是最優(yōu)閾值。然后我們要根據(jù)這次閾值的選取,將錯(cuò)分的樣本適當(dāng)?shù)脑黾訖?quán)重,選取另一個(gè)Haar特征,重復(fù)上面的過程。直至訓(xùn)練出要求的個(gè)數(shù)個(gè)“糟糕分類器”級聯(lián)起來組成一個(gè)弱分類器。


? 現(xiàn)在我們已經(jīng)能夠得到弱分類器了。它的數(shù)據(jù)結(jié)構(gòu)如下:

typedef struct CvCARTHaarClassifier {CV_INT_HAAR_CLASSIFIER_FIELDS()int count;int* compidx;CvTHaarFeature* feature;CvFastHaarFeature* fastfeature;float* threshold;int* left;int* right;float* val; } CvCARTHaarClassifier;

??

? 那么由以上討論,假設(shè)我們由第一組樣本已經(jīng)訓(xùn)練出了一個(gè)弱分類器。顯然我們可以找出這個(gè)分類器錯(cuò)分的樣本出來,與一些新樣本組成第二組樣本,由這組樣本訓(xùn)練出第二個(gè)弱分類器。重復(fù)這個(gè)過程,可以得到T個(gè)弱分類器。我們組合這T個(gè)弱分類器成為一個(gè)強(qiáng)分類器CvStageHaarClassifier。我們先這樣理解,讓這些最優(yōu)弱分類器根據(jù)自己的地位進(jìn)行表決(判別的正確率決定其地位),決定當(dāng)前判斷的子窗口是否為人臉。這樣一個(gè)表決過程就代表了強(qiáng)分類器。然后我們可以訓(xùn)練多個(gè)強(qiáng)分類器,讓他們強(qiáng)強(qiáng)聯(lián)手。還是構(gòu)造一顆二叉決策樹,樹的每個(gè)節(jié)點(diǎn)是一個(gè)強(qiáng)分類器


強(qiáng)分類器的數(shù)據(jù)結(jié)構(gòu)如下:

/* internal stage classifier */ typedef struct CvStageHaarClassifier {CV_INT_HAAR_CLASSIFIER_FIELDS()int count;float threshold;CvIntHaarClassifier** classifier; } CvStageHaarClassifier;
強(qiáng)強(qiáng)聯(lián)手后就得到的最終的分類器,最終的分類器就如下圖一樣進(jìn)行判決得出結(jié)論


最終的Haar分類器為CvTreeCascadeClassifier,它代表一顆樹,樹中的每一個(gè)節(jié)點(diǎn)的核心功能就是一個(gè)強(qiáng)分類器,數(shù)據(jù)結(jié)構(gòu)如下:

typedef struct CvTreeCascadeClassifier {CV_INT_HAAR_CLASSIFIER_FIELDS()CvTreeCascadeNode* root; /* root of the tree */CvTreeCascadeNode* root_eval; /* root node for the filtering */int next_idx; } CvTreeCascadeClassifier;/* internal tree cascade classifier node */ typedef struct CvTreeCascadeNode {CvStageHaarClassifier* stage;struct CvTreeCascadeNode* next;struct CvTreeCascadeNode* child;struct CvTreeCascadeNode* parent;struct CvTreeCascadeNode* next_same_level;struct CvTreeCascadeNode* child_eval;int idx;int leaf; } CvTreeCascadeNode;
到這里,haartraining的主要思想就都說清楚了

最后,我們總結(jié)一下上面的內(nèi)容得出這樣的結(jié)論:

一組學(xué)習(xí)樣本可以通過訓(xùn)練得到一個(gè)弱分類器。

弱分類器就是一顆決策樹,決策樹的每個(gè)結(jié)點(diǎn)存儲的是一種haar特征和對應(yīng)的最優(yōu)閾值

多個(gè)弱分類器可以構(gòu)成一個(gè)強(qiáng)分類器

Haar分類器就是一顆結(jié)點(diǎn)是強(qiáng)分類器的決策樹


畢竟水平有限,希望大家看了這篇文章能夠多多指正,也希望小白能從中學(xué)到一點(diǎn)東西。

大家一起分享,才能一起變得強(qiáng)大~

總結(jié)

以上是生活随笔為你收集整理的浅析haartraining方法进行人脸检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。