著名的VJ人臉檢測(cè)算法就是一種基于Adaboost分類(lèi)器的方法。該檢測(cè)器由Paul Viola和Michael Jones在2001年的 Robust Real-Time Face Detection 提出。在當(dāng)年的硬件條件下VJ算法可以達(dá)到每秒15幀圖像的處理速度,是人臉檢測(cè)技術(shù)發(fā)展的一個(gè)里程碑。雖然性能跟現(xiàn)在基于深度學(xué)習(xí)的方法沒(méi)法比,但肯定也是值得去拜讀的。
VJ算法利用積分圖加速法快速提取圖像的類(lèi)Harr特征,然后使用Adaboost算法訓(xùn)練得到若干個(gè)強(qiáng)分類(lèi)器,組成級(jí)聯(lián)結(jié)構(gòu),對(duì)人臉和背景進(jìn)行最后的分類(lèi)。論文的三大貢獻(xiàn)分別為:積分圖加速法提取類(lèi)Harr特征,基于Adaboost的學(xué)習(xí)算法,使用級(jí)聯(lián)的方式組合強(qiáng)分類(lèi)器。我們分開(kāi)敘述。
1. 積分圖加速法提取類(lèi)Harr特征
類(lèi)Harr特征屬于一種卷積運(yùn)算模板,可以用其捕捉圖像的邊緣、變化等信息。而人臉的五官有著和輪廓有著獨(dú)特的亮度和邊緣信息,很符合類(lèi)Harr特征的特點(diǎn)。在眾多的類(lèi)Harr特征模板中,Viola和Jones選取了四個(gè)可以提取邊緣特征,線(xiàn)性特征以及對(duì)角線(xiàn)特征的模板。
類(lèi)Harr特征值由以下操作得到:將類(lèi)Harr特征模板放在圖像上之后,用白色區(qū)域所覆蓋的圖像像素和減去黑色區(qū)域所覆蓋圖像中的像素和,在線(xiàn)性特征模板中,會(huì)對(duì)黑色區(qū)域像素之和乘以2,這是為了抵消黑白區(qū)域面積不相等所帶來(lái)的影響。通過(guò)改變類(lèi)Haar特征模板的位置及大小,可以在檢測(cè)窗內(nèi)窮舉出上萬(wàn)個(gè)特征**,因此計(jì)算量巨大。
??由類(lèi)Harr特征值的計(jì)算過(guò)程可以看出,其中涉及了大量的像素求和運(yùn)算,為了更快地提取圖像的類(lèi)Harr特征,作者使用了一種稱(chēng)為積分圖(Integral Image)的方法。假設(shè)有一張圖像,其坐標(biāo)(x, y)處的積分圖可以定義為:
I
(
x
,
y
)
=
∑
x
′
≤
x
∑
y
′
≤
y
f
(
x
′
,
y
′
)
I(x, y) = \sum_{x^{\prime} \leq x} \sum_{y^{\prime} \leq y} f\left(x^{\prime}, y^{\prime}\right)
I(x,y)=∑x′≤x?∑y′≤y?f(x′,y′)
在提取類(lèi)Harr特征之前,首先計(jì)算出整幅圖像的積分圖。那么在提取特征時(shí),圖中矩形ABCD的像素和可以利用積分圖表示如下:
S
a
b
c
d
=
I
(
D
)
?
I
(
B
)
?
I
(
C
)
+
I
(
A
)
S_{a b c d}=I(D)-I(B)-I(C)+I(A)
Sabcd?=I(D)?I(B)?I(C)+I(A)
積分圖加速法大大降低了運(yùn)算量。
2. Adaboost學(xué)習(xí)算法
提到了大量類(lèi)Harr特征值之后,就該使用Adaboost算法做分類(lèi)訓(xùn)練了
關(guān)于Adaboost的好文推薦:詳解AdaBoost原理, 這里我只記錄關(guān)鍵點(diǎn)吧。
Boosting是一種將弱分類(lèi)器組合起來(lái)形成強(qiáng)分類(lèi)器的算法框架。這種“三個(gè)臭皮匠頂個(gè)諸葛亮”的思路是有理論基礎(chǔ)的。
Boosting 體現(xiàn)了提升思想,每一個(gè)弱學(xué)習(xí)器重點(diǎn)關(guān)注前一個(gè)訓(xùn)練器不足的地方進(jìn)行訓(xùn)練,通過(guò)加權(quán)投票的方式,得出預(yù)測(cè)結(jié)果。Boosting學(xué)習(xí)是串行的,弱學(xué)習(xí)器的學(xué)習(xí)有先后順序。
而Adaboost是其中的一種,采用了exponential loss function(其實(shí)就是用指數(shù)的權(quán)重),根據(jù)不同的loss function還可以有其他算法,比如L2Boosting, logitboost。
2.1 Boosting
Boosting其架構(gòu)如下圖:
在Boosting的迭代式訓(xùn)練時(shí),每個(gè)訓(xùn)練樣本的初始權(quán)值是相同的,訓(xùn)練中根據(jù)弱學(xué)習(xí)器的誤差計(jì)算弱學(xué)習(xí)器的權(quán)重,并調(diào)整樣本的權(quán)重來(lái)改變樣本的分布,使先前弱學(xué)習(xí)器難分的樣本在后續(xù)訓(xùn)練中得到更大的關(guān)注,循環(huán)該過(guò)程,直到弱學(xué)習(xí)器的數(shù)目達(dá)到指定數(shù)量(是一個(gè)超參)。最終將所有弱學(xué)習(xí)器進(jìn)行組合加權(quán),得到集成的強(qiáng)學(xué)習(xí)器。
弱分類(lèi)器:
一個(gè)檢測(cè)窗中包含大量的類(lèi)Harr特征,對(duì)于檢測(cè)窗x中的第j個(gè)特征值,可以訓(xùn)
練一個(gè)如下式所示的弱分類(lèi)器:
h
j
(
x
)
=
{
1
?如果?
p
j
f
j
(
x
)
<
p
j
θ
j
0
?其他?
h_{j}(x)=\left\{\begin{array}{ll} 1 & \text { 如果 } p_{j} f_{j}(x)<p_{j} \theta_{j} \\ 0 & \text { 其他 } \end{array}\right.
hj?(x)={10??如果?pj?fj?(x)<pj?θj??其他??
其中
f
j
(
x
)
f_{j}(x)
fj?(x)表示檢測(cè)窗第j個(gè)特征值,
θ
\theta
θ表示閾值,p表示不等號(hào)方向,訓(xùn)弱分類(lèi)器就是在當(dāng)前特定樣本分布下,確定
f
j
(
x
)
f_{j}(x)
fj?(x)的一個(gè)閾值,使
h
j
(
x
)
h_{j}(x)
hj?(x)的分類(lèi)錯(cuò)誤率降到最低。
2.2 Adaboost(Adaptive Boosting)的算法過(guò)程
-
初始化訓(xùn)練樣本的權(quán)值分布 D 1 D_{1} D1?。假設(shè)有N個(gè)訓(xùn)練樣本數(shù)據(jù),則每一個(gè)訓(xùn)練樣本最開(kāi)始時(shí),都會(huì)被賦予相同的權(quán)值: W 1 = 1 / N W_{1} = 1/N W1?=1/N。
-
(a) 選取一個(gè)當(dāng)前誤差率最低的弱分類(lèi)器 h 作為第 t 個(gè)基本分類(lèi)器 H t H_{t} Ht? , 并 計(jì)算弱分類(lèi)器 h t : X → { ? 1 , 1 } h_{t}: X \rightarrow\{-1,1\} ht?:X→{?1,1}, 該弱分類(lèi)器在分布 D t D_{t} Dt? 上的誤差為:
e t = P ( H t ( x i ) ≠ y i ) = ∑ i = 1 N w t i I ( H t ( x i ) ≠ y i ) e_{t}=P\left(H_{t}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{N} w_{t i} I\left(H_{t}\left(x_{i}\right) \neq y_{i}\right) et?=P(Ht?(xi?)=yi?)=∑i=1N?wti?I(Ht?(xi?)=yi?)那么由上述式子可知, H f ( x ) H_{\mathrm{f}}(x) Hf?(x) 在訓(xùn)練數(shù)據(jù)集上的誤差率 e w e_{\mathrm{w}} ew? 就是被 H r ( x ) H_{\mathrm{r}}(x) Hr?(x) 誤分類(lèi) 樣本的權(quán)值之和。
(b) 更新每個(gè)弱分類(lèi)器在最終分類(lèi)器中的權(quán)重 (弱分類(lèi)器權(quán)重用 α \alpha α 表示):
α t = 1 2 ln ? ( 1 ? e t e t ) \alpha_{t}=\frac{1}{2} \ln \left(\frac{1-e_{t}}{e_{t}}\right) αt?=21?ln(et?1?et??)
顯然,誤差越小,權(quán)重越大,這是一種指數(shù)更新弱分類(lèi)器權(quán)值的形式。
(c) 更新訓(xùn)練樣本的權(quán)值分布 D r + 1 D_{\mathrm{r}+1} Dr+1? :
D t + 1 ( x ) = D t ( x ) Z t × { exp ? ( ? α t ) , ?if? h t ( x ) = f ( x ) exp ? ( α t ) , ?if? h t ( x ) ≠ f ( x ) = D t ( x ) exp ? ( ? α t f ( x ) h t ( x ) ) Z t \begin{array}{l} \mathcal{D}_{t+1}(\boldsymbol{x})=\frac{\mathcal{D}_{t}(\boldsymbol{x})}{Z_{t}} \times\left\{\begin{array}{ll} \exp \left(-\alpha_{t}\right), & \text { if } h_{t}(\boldsymbol{x})=f(\boldsymbol{x}) \\ \exp \left(\alpha_{t}\right), & \text { if } h_{t}(\boldsymbol{x}) \neq f(\boldsymbol{x}) \end{array}\right.\\ =\frac{\mathcal{D}_{t}(\boldsymbol{x}) \exp \left(-\alpha_{t} f(\boldsymbol{x}) h_{t}(\boldsymbol{x})\right)}{Z_{t}} \end{array} Dt+1?(x)=Zt?Dt?(x)?×{exp(?αt?),exp(αt?),??if?ht?(x)=f(x)?if?ht?(x)=f(x)?=Zt?Dt?(x)exp(?αt?f(x)ht?(x))??
其中 α t \alpha_{t} αt? 為弱分類(lèi)器的權(quán)重, Z t Z_{t} Zt? 為歸一化常數(shù) ,以確保D是一個(gè)分布, Z t = 2 e t ( 1 ? e t ) Z_{t}=2 \sqrt{e_{t}\left(1-e_{t}\right)} Zt?=2et?(1?et?)?
可以看出,訓(xùn)練樣本權(quán)值的更新仍然是使用指數(shù)函數(shù)的形式,因?yàn)橄啾?-1損失函數(shù)指數(shù)函數(shù)有更好的數(shù)學(xué)性質(zhì)。 -
最后, 按弱分類(lèi)器權(quán)重 α t \alpha_{t} αt? 組合各個(gè)弱分類(lèi)器, 即
f ( x ) = ∑ i = 1 T α i H t ( x ) f(x)=\sum_{i=1}^{T} \alpha_{i} H_{t}(x) f(x)=∑i=1T?αi?Ht?(x)通過(guò)符號(hào)函數(shù) sign ? \operatorname{sign} sign 的作用, 得到一個(gè)強(qiáng)分類(lèi)器為:
H f i n a l = sig ? n ( f ( x ) ) = sign ? ( ∑ t = 1 T α t H t ( x ) ) H_{f i n a l}=\operatorname{sig} n(f(x))=\operatorname{sign}\left(\sum_{t=1}^{T} \alpha_{t} H_{t}(x)\right) Hfinal?=sign(f(x))=sign(∑t=1T?αt?Ht?(x))
第二步中的訓(xùn)練樣本權(quán)重更新源頭是基于誤差率e的,所以可以推導(dǎo)出直接使用e更新訓(xùn)練樣本權(quán)值的公式:
錯(cuò)誤分類(lèi)樣本, 權(quán)值更新 :
D
t
+
1
(
x
)
=
D
t
(
x
)
2
e
t
D_{t+1}(x)=\frac{D_{t}(x)}{2 e_{t}}
Dt+1?(x)=2et?Dt?(x)?
正確分類(lèi)樣本, 權(quán)值更新 :
D
t
+
1
(
x
)
=
D
t
(
x
)
2
(
1
?
e
t
)
D_{t+1}(x)=\frac{D_{t}(x)}{2\left(1-e_{t}\right)}
Dt+1?(x)=2(1?et?)Dt?(x)?
3. 強(qiáng)分類(lèi)器的級(jí)聯(lián)
在VJ人臉檢測(cè)器中,最終的分類(lèi)器是由若干個(gè)Adaboost強(qiáng)分類(lèi)器級(jí)聯(lián)而成。在級(jí)聯(lián)結(jié)構(gòu)中排在前面的強(qiáng)分類(lèi)器由一些最能夠代表人臉特征的少量弱分類(lèi)器組成,這樣可快速過(guò)濾掉大部分非面部區(qū)域,排在后面的強(qiáng)分類(lèi)器構(gòu)造越來(lái)越復(fù)雜,對(duì)檢測(cè)子窗口要求越來(lái)越嚴(yán)格,用來(lái)判斷較難辯識(shí)的區(qū)域。
VJ人臉檢測(cè)器中強(qiáng)分類(lèi)器組成的聯(lián)結(jié)構(gòu)示意圖:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-464154.html
現(xiàn)在看VJ的性能是很差的,但該工作是里程碑式的,這里記錄一下。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-464154.html
到了這里,關(guān)于人臉檢測(cè):經(jīng)典的VJ人臉檢測(cè)器(類(lèi)Harr特征,積分圖加速法,級(jí)聯(lián)的Adaboost強(qiáng)分類(lèi)器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!