天天看點

人臉檢測--AdaBoost

對人臉檢測的研究最初可以追溯到 20 世紀 70 年代,早期的研究主要緻力于模闆比對、子空間方法,變形模闆比對等。近期人臉檢測的研究主要集中在基于資料驅動的學習方法,如統計模型方法,神經網絡學習方法,統計知識理論和支援向量機方法,基于馬爾可夫随機域的方法,以及基于膚色的人臉檢測。目前在實際中應用的人臉檢測方法多為基于 Adaboost 學習算法的方法。

     Viola人臉檢測方法是一種基于積分圖、 級聯檢測器和AdaBoost 算法的方法,方法架構可以分為以下三大部分:

     第一部分,使用Harr-like特征表示人臉,使用“ 積分圖”實作特征數值的快速計算;

     第二部分, 使用Adaboost算法挑選出一些最能代表人臉的矩形特征( 弱分類器),按照權重投票的方式将弱分類器構造為一個強分類器;

     第三部分, 将訓練得到的若幹強分類器串聯組成一個級聯結構的層疊分類器,級聯結構能有效地提高分類器的檢測速度。

    Adaboost 算法是一種用來分類的方法,它的基本原理就是“三個臭皮匠,頂個諸葛亮”。它把一些比較弱的分類方法合在一起,組合出新的很強的分類方法。

    例如下圖中

人臉檢測--AdaBoost

    需要用一些線段把紅色的球與深藍色的球分開,然而如果僅僅畫一條線的話,是分不開的。

人臉檢測--AdaBoost
人臉檢測--AdaBoost
人臉檢測--AdaBoost
人臉檢測--AdaBoost
a b c d

    使用Adaboost算法來進行劃分的話,先畫出一條錯誤率最小的線段如圖 1 ,但是左下腳的深藍色球被錯誤劃分到紅色區域,是以加重被錯誤球的權重,再下一次劃分時,将更加考慮那些權重大的球,如 c 所示,最終得到了一個準确的劃分,如下圖所示。

人臉檢測--AdaBoost

    人臉檢測的目的就是從圖檔中找出所有包含人臉的子視窗,将人臉的子視窗與非人臉的子視窗分開。

大緻步驟如下:

    (1)在一個 20*20 的圖檔提取一些簡單的特征(稱為Harr特征),如下圖所示。

人臉檢測--AdaBoost

    它的計算方法就是将白色區域内的像素和減去黑色區域,是以在人臉與非人臉圖檔的相同位置上,值的大小是不一樣的,這些特征可以用來區分人臉和分人臉。

人臉檢測--AdaBoost

    (2)目前的方法是使用數千張切割好的人臉圖檔,和上萬張背景圖檔作為訓練樣本。訓練圖檔一般歸一化到 20*20 的大小。在這樣大小的圖檔中,可供使用的 haar 特征數在 1 萬個左右,然後通過機器學習算法 —adaboost 算法挑選數千個有效的 haar 特征來組成人臉檢測器。

人臉檢測--AdaBoost

    (3)學習算法訓練出一個人臉檢測器後,便可以在各個場合使用了。使用時,将圖像按比例依次縮放,然後在縮放後的圖檔的 20*20 的子視窗依次判别是人臉還是非人臉。

人臉檢測--AdaBoost

人臉檢測的流程

    人臉檢測在實際中主要用于人臉識别的預處理,即在圖像中準确标定出人臉的位置和大小。

    目前人臉檢測技術在門禁系統、智能監控系統中已得到了很好的應用。另外,目前的筆記本電腦中也陸續開始使用人臉識别技術作為計算機登入的憑證。近年來,在數位相機和手機中也內建了人臉檢測算法,作為一個新的功能提供使用者使用。在這些應用中,人臉檢測都是發揮着至關重要的作用

          每個Haar特征對應看一個弱分類器,但并不是任伺一個Haar特征都能較好的描述人臉灰階分布的某一特點,如何從大量的Haar特征中挑選出最優的Haar特征并制作成分類器用于人臉檢測,這是AdaBoost算法訓練過程所要解決的關鍵問題。

    Paul Viola和Michael Jones于2001年将Adaboost算法應用于人臉檢測中,其基本思想是針對不同的訓練集訓練同一個分類器(弱分類器),然後把這些不同訓練集上的得到的分類器聯合起來,構成一個最終的強分類器。Adaboost 算法中不同的訓練集是通過調整每個樣本對應的權重來實作的。開始時,每個樣本對應的權重是相同的,對于h1 分類錯誤的樣本,加大其對應的權重; 而對于分類正确的樣本, 降低其權重, 這樣分錯的樣本就被突出出來,進而得到一個新的樣本分布 U2 。在新的樣本分布下,再次對弱分類器進行訓練,得到弱分類器 h2 。依次類推,經過 T 次循環,得到 T 個弱分類器,把這 T 個弱分類器按一定的權重疊加(boost)起來,得到最終想要的強分類器。

     訓練系統總體架構,由“ 訓練部分”和 “ 補充部分”構成。依據系統架構,本文的訓練系統可分為以下幾個子產品:

     (1)以樣本集為輸入,在給定的矩形特征原型下,計算并獲得矩形特征集;

     (2)以特征集為輸入,根據給定的弱學習算法,确定閩值,将特征與弱分類器一一對應,獲得弱分類器集;

     (3)以弱分類器集為輸入, 在訓練檢出率和誤判率限制下, 使用A d a B o o s t 算法

挑選最優的弱分類器構成強分類器;

     (4)以強分類器集為輸入,将其組合為級聯分類器;

     (5)以非人臉圖檔集為輸入,組合強分類器為臨時的級聯分類器,篩選并補充

非人臉樣本。

人臉檢測--AdaBoost

    訓練樣本的選擇:

    訓練樣本要求是面部特寫圖像,圖1是一簇訓練樣本,大小被歸一化為24×24像素,其中正訓練樣本要求是面部特寫圖像,但是人臉形态千差萬别,是以訓練樣本選取過程中要考慮到樣本的多樣性。負訓練樣本,大小被歸一化為24×24像素,其中各樣本不完全相同,分别具有一定的代表性。

人臉檢測--AdaBoost

              圖1 部分訓練正樣本集和訓練負樣本集

    訓練過程分為3個步驟:首先需要提取Haar特征;然後将Haar特征轉化成對應的弱分類器;最後從大量的弱分類器中疊代選擇出最優弱分類器。

    (1)提取Haar特征

人臉檢測--AdaBoost

                    圖2 常用的四種Haar特征

    常用的Haar特征有4種,如圖2所示。當然也可以在這4種特征的基礎上設計出更多、更複雜的特征。以大小為24X24像素的訓練樣本為例,上述4種特征的總個數超過了160000個。這樣龐大的數字給後續的疊代訓練工作帶來了龐大的計算量,直接導緻AdaBoost算法訓練過程極為費時,這恰恰是算法需要改進的關鍵問題之一o

    (2)生成弱分類器

    每一個Haar特征都對應着一個弱分類器,每一個弱分類器都是根據它所對應的Haar特征的參數來定義的。利用上述Haar特征的位置資訊,對訓練樣本進行統計就可以得到對應的特征參數。AdaBoost算法中所訓練的弱分類器是任何分類器,包括決策樹,神經網絡,隐馬爾科夫模型,如果弱分類器是線性神經網絡,那麼AdaBoost算法每次将構造多層感覺器的一個節點。

    (3)采用AdaBoost算法選取優化的弱分類器

    AdaBoost算法訓練過程就是挑選最優弱分類器,并賦予權重過程,圖3是AdaBoost算法訓練示意圖。

人臉檢測--AdaBoost

                            圖3  AdaBoost算法訓練示意圖

繼續閱讀