• 沒有找到結果。

第四章 人臉偵測介紹

4.5 Cascade 分類器

我們利用以上 adaboost 演算法選出 T 個特徵後,在每個檢測子視窗中都需 要利用這 T 個矩形特徵計算其矩形特徵值,感覺有些浪費時間,因此本節將介紹 Cascade 分類器,這分類器可以幫助我們去減少計算時間。關鍵在於 Cascade 使 用多個 stage 來減少特徵值的計算,當上一級 stage 認定此檢測子視窗為人臉,

它才會丟給下一級 stage 做更嚴格的檢測,因此能夠預先排除大部分的非人臉圖 像,並且偵測出幾乎所有的人臉圖像,而可以調整弱分類器的臨界值使得 hit rate 值達到 100%,也就是所有的人臉圖像都會被正確分類。圖 4-5 就是一個 cascade 的架構圖。

49

圖 4-5 Cascade 架構圖

首先第一個 stage 的分類器由全部的訓練圖像做 adaboost 演算法,接著我 們可以去設定兩個參數

I. hit rate : 正確分類的人臉圖像數目除以人臉圖像的總數

II. false alarm : 錯誤分類的非人臉圖像數目除以非人臉圖像的總數 而要達到以上兩個參數之限制時所需要的特徵數量,就是組成此 stage 的特徵。

一般我們會設定 hit rate 為 100%,假設第一個 stage 由 n 個特徵所組成,則這 n 個特徵能將所有人臉分類正確,不過還是會有非人臉圖像被分類錯誤的情形發 生,因此設定 false alarm 想把錯誤分類降的一個定值,因為我們不要求在第一 個 stage 就能完成所有分類的工作,只要能夠刪除大部分的非人臉圖像就夠 了。之後觸發下一個 stage 分類器再刪除前一個 stage 未能去除的非人臉圖像。

建立這個 stage 一樣透過 adaboost 選出特徵,不過訓練圖像有所不同,人臉圖 像為相同的數量,非人臉圖像則為前一個 stage 未能正確分類的非人臉圖像,這 樣做的目的在於這個 stage 只要專心分類前一 stage 無法正確分類的非人臉圖像 即可,那些已經正確分類的非人臉圖像在前一個 stage 就已經刪除了,這就好像 adaboost 的 weight 更新是要專心分類錯誤的圖像的道理一樣,因此這個 stage 一樣會設定 hit rate 和 false alarm 去選出所需之特徵,而此時會將 false alarm

50

的值設的更低,因此分類的難度也會變高,會使用更多數量的特徵做分類。而如 果能夠在這個 stage 就分類完成所有的圖像,那就只需要兩個 stage 即可,但是 如果還是有錯誤分類發生時,就又會觸發下一個 stage 分類器的形成,直到達成 正確分類所有圖像,所建立完成的 cascade 分類器,就是所需要的分類器。圖 4-6 為 cascade 分類器建立流程圖。

圖 4-6 cascade 分類器流程圖

然而 hit rate 要達到 100%也不是那麼簡單而且還得控制 false alarm 的 值,這是需要適當的調整每一個特徵的臨界值去達到將人臉圖像當作非人臉圖像 的錯誤值為零,雖然較低的臨界值可以提高偵測率達到所要的正確比例,但將伴 隨著較高的將非人臉圖像當作人臉圖像的錯誤發生,因此如何調整平衡兩者之間 關係,是不容易的。

一般來說,一張照片中大部分都是非人臉,人臉通常只佔據圖像的一小部 分,所以訓練圖像中非人臉圖像的數量往往會遠大於人臉圖像,就是依據照片的 特性所設計。cascade 的架構可以在每個 stage 刪除部分的非人臉圖像,而越前 面的 stage 所刪除的會越多,當這些非人臉圖像被刪除後,接下來的 stage 就不 會再對這些非人臉圖像做檢測,因此 Cascade 的架構可以節省很多的計算時間,

因為每經過一個 stage 要計算的特徵就會減少。

51

4-6 臨界值(Threshold)的決定

k

y curleft w

k

y curright

w

是目前找到的臨界值,並且 ferror 重新定義為最小錯誤率。跑完 n 次迴圈之後,

最後找最小錯誤率的臨界值就是最佳的臨界值。圖 4-7 為 OpenCV threshold 決 策的流程圖。

圖 4-7 threshold 決策流程

這種方法是在找出一個能夠使得 curleft 與 curright 越趨近於-1 與+1 的 值,也就是能清楚的分開人臉和非人臉圖像的界線,當然不可能每次都能剛好找 到是-1 和+1 的那個界線,因為兩邊都或多或少會有少數人臉和非人臉的圖像出 現,所以只要找到最靠近-1 和+1 界線的值即可。而判斷 curleft 和 curright 是否趨近於-1 和+1 就是透過 curlerror 和 currerror 來當判斷的標準。

53