人臉檢測中的AdaBoost演算法

wo13142yanyouxin發表於2017-08-02
人臉檢測中的AdaBoost演算法
第一章:引言
    2017.7.31。英國測試人臉識別技術,不需要排隊購票就能刷臉進站。據BBC新聞報導,這項英國政府鐵路安全標準委員會資助的新技術,由布里斯托機器人實驗室(Bristol Robotics Laboratory) 負責開發。這個報導可能意味著我們將來的生活方式。雖然人臉識別技術已經研究了很多年了,比較成熟了,但是還遠遠不夠,我們以後的目標是通過識別面部表情來獲得人類心理想法。
   長期以來,計算機就好像一個盲人,需要被動地接受由鍵盤、檔案輸入的資訊,而不能主動從這個世界獲取資訊並自主處理。人們為了讓計算機看到這個世界並主動從這個世界尋找資訊,發展了機器視覺;為了讓計算機自主處理和判斷所得到的資訊,發展了人工智慧科學。人們夢想,終有一天,人機之間的交流可以像人與人之間的交流一樣暢通和友好。
   而這些技術實現的基礎是在人臉檢測上實現的,下面是我通過學習基於 AdaBoost 演算法的人臉檢測,趙楠的論文的學習心得
第二章:關於
Adaptive Boosting
  AdaBoost 全稱為Adaptive Boosting。Adaptively,即適應地,該方法根據弱學習的結果反饋適應地調整假設的錯誤率,所以Adaboost不需要預先知道假設的錯誤率下限Boosting意思為提升、加強,現在一般指將弱學習提升為強學習的一類演算法。實質上,AdaBoost演算法是通過機器學習,將弱學習提升為強學習的一類演算法的最典型代表。

第三章:AdaBoost演算法檢測人臉的過程
先上一張完整的流程圖,下面我將對著這張圖作我的學習分享:

1,術語名詞解析:
弱學習,強學習:隨機猜測一個是或否的問題,將會有50%的正確率。如果一個假設能夠稍微地提高猜測正確的概率,那麼這個假   設就是弱學習演算法,得到這個演算法的過程稱為弱學習。
可以使用半自動化的方法為好幾個任務構造弱學習演算法,構造過程需要數量巨大的假設集合,這個假設集合是基於某些簡單規則的組合和對樣本集的效能評估而生成的。如果一個假設能夠顯著地提高猜測正確的概率,那麼這個假設就稱為強學習。
特徵模版:我們將使用簡單矩形組合作為我們的特徵模板。這類特徵模板都是由兩個或多個全等的矩形相鄰組合而成,特徵模板內有白色和黑色兩種矩形(定義左上角的為白色,然後依次交錯),並將此特徵模板的特徵值定義為白色矩形畫素和減去黑色矩形畫素和。
最簡單的 5 個特徵模板:

下面列出了,在不同子視窗大小內,特徵的總數量:


積分圖:主要是為了利用積分圖計算矩形特徵值,提高程式執行效率。下面給出非常形象的積分圖的來計算矩形特徵值:

區域 D 的畫素和可以用積分圖計算為: K1+K4 - (K2+K3)
K1=區域A 的畫素值
K2=區域A 的畫素值+區域B 的畫素值
K3=區域A 的畫素值+區域C 的畫素值
K4 =區域A 的畫素值+區域B 的畫素值+區域C 的畫素值+區域D 的畫素值

2,演算法基本描述
對照上面的流程圖:A給定一系列訓練樣本,B初始化權重,C歸一化權重,都挺好理解的。我現在需要著重說的是接下來的步驟,即如何選取,訓練弱分類器:
現在我們假設我們的計算機讀取一張圖片進來,在這張圖片上遍歷所有的特徵,(例如20X20畫素的圖片,一共有78460個特徵),當遍歷到x個特徵時,計算該特徵在所有的訓練樣本中(人臉和非人臉圖)的特徵值。並且將這些特徵值排序,通過掃描一遍排好序的特徵值,可以為這個特徵確定一個最優的閾值,從而訓練成一個弱分類器。那麼為什麼掃描一遍就可以得出最優閾值?因為在掃描到每一個特徵值時,當選取當前元素的特徵值和它前面的一個特徵值 之間的數作為閾值時,計算這個閾值所帶來的分類誤差為
                  e = min( S 1+ (T 2- S 2 ), S2 + (T 1- S 1 ))
其中:
全部人臉樣本的權重的和T 1
全部非人臉樣本的權重的和T 2
在此元素之前的人臉樣本的權重的和S 1
在此元素之前的非人臉樣本的權重的和S 2
將最小誤差記錄下來,選取該最小誤差的特徵值,選取當前元素的特徵值和它前面的一個特徵值 之間的數作為閾值,那麼x特徵的最小誤差的弱分類器將出來了!以此類推,當遍歷了所以的特徵了,就在這些弱分類器中找到誤差最小的分類器,就是最佳弱分類器。
接下來,就進入到調整最佳弱分類器的權重了。設定一個迴圈,用剛剛得到的最佳弱分類器去分類所有的訓練樣本,按照最上面的流程圖中的調整權重的部分來調整權重。
以上的步驟就是一個完整的adaboost演算法的訓練過程!
最後,實驗結果表明,當T=200 時,構成的強分類器可以獲得很好的檢測效果。經過 200次迭代後,獲得了 200個最佳弱分類器  ,可以按照下面的方式組合成一個強分類器:

那麼,這個強分類器對待一幅待檢測影像時,相當於讓所有弱分類器投票,再對投票結果按照弱分類器的錯誤率加權求和,將投票加權求和的結果與平均投票結果比較得出最終的結果。


第4章,個人總結
前前後後將近花了3天時間來學習adaboost演算法的人臉識別。在網上找了很多的資料,發現大部分關於每一個特徵的弱分類器和所有影像的最佳弱分類器的概念含糊不清,以及怎麼用程式設計的思想來解讀這個演算法的意識不明確,具體來說,只考慮演算法的過程,而不考慮怎麼用程式設計來實現這些過程。這也是我寫這個部落格的主要目的。

相關文章