本發(fā)明屬于目標(biāo)檢測(cè)和識(shí)別技術(shù)領(lǐng)域,涉及一種AdaBoost級(jí)聯(lián)分類器快速檢測(cè)方法。
背景技術(shù):
在目標(biāo)檢測(cè)方法中,現(xiàn)在常用的一類方法是基于統(tǒng)計(jì)學(xué)習(xí)的分類器設(shè)計(jì)算法。在機(jī)器學(xué)習(xí)方法中,AdaBoost能夠?qū)⑷醴诸惼鹘M合起來(lái)構(gòu)成強(qiáng)分類器,并在人臉檢測(cè)等方面也得到了成功的應(yīng)用。在OpenCV(開源計(jì)算機(jī)視覺庫(kù))中該算法結(jié)合Haar特征、HOG等特征得到成功實(shí)現(xiàn)和應(yīng)用,并為廣大計(jì)算機(jī)視覺研究人員使用,使其成為各種場(chǎng)合下目標(biāo)檢測(cè)應(yīng)用的首選。在OpenCV的幫助下,我們可以很快應(yīng)用AdaBoost算法結(jié)合各種特征對(duì)目標(biāo)檢測(cè)應(yīng)用的性能進(jìn)行測(cè)試,從而對(duì)算法的性能做出評(píng)估。
AdaBoost算法最早源于Schapire在1989年提出的Boosting(自舉)算法,她是一種能夠“Boost”任意給定學(xué)習(xí)算法精度的普適方法。1995年Freund和Schapirey又對(duì)其進(jìn)行了改進(jìn),形成了最初的AdaBoost(AdaptiveBoosting)算法,之后又出現(xiàn)了很多基于此方法的變形,主要有GAB(GentleAdaBoost)、DAB(DiscreteAdaBoost)、RAB(RealAdaBoost)和LAB(LogitAdaBoost)。AdaBoost算法的核心是通過(guò)調(diào)整樣本分布和弱分類器權(quán)值,自動(dòng)地從弱分類器空間中篩選出若干關(guān)鍵的弱分類器,并通過(guò)某種方式整合為一個(gè)強(qiáng)分類器。
根據(jù)Rainer等人對(duì)變形的幾種AdaBoost算法的測(cè)試和比較,GAB(GentleAdaBoost)算法在分類性能上不僅僅是最優(yōu)的,也是最快的,因此選用這種方法來(lái)訓(xùn)練強(qiáng)分類器,算法流程如下:
1.給定N個(gè)樣本(x1,y1),…(xN,yN),其中xi∈Rk,yi∈{-1,1}。
2.初始化權(quán)值wi=1/N,i=1,…N。
3.迭代form=1,…,M
a.通過(guò)ωi設(shè)置yi到xi的加權(quán)最小平方,調(diào)整退化函數(shù)fm(x);
b.計(jì)算
c.令ωi←ωi*esp(-yifm(xi)),i=1,…,N重新歸一化權(quán)值使∑iωi=1;
4.輸出強(qiáng)分類器:
OpenCV中對(duì)經(jīng)典AdaBoost算法的四種實(shí)現(xiàn)形式選擇提供了接口,可以測(cè)試對(duì)比各種訓(xùn)練方法下得到的訓(xùn)練器的性能。另外對(duì)于訓(xùn)練終止條件提供接口可進(jìn)行選擇。滿足檢測(cè)率和誤報(bào)率可以終止訓(xùn)練?;蛘咧付ㄈ醴诸惼鱾€(gè)數(shù)的最大值,這樣可以控制訓(xùn)練時(shí)間,但是這樣可能存在得到的強(qiáng)分類器達(dá)不到指定的檢測(cè)率和誤報(bào)率訓(xùn)練就終止了。
級(jí)聯(lián)分類器是由一系列的分類器的串聯(lián)組成,用于下級(jí)分類器的樣本就要求是上一級(jí)分辨正確的正樣本和分辨錯(cuò)誤的負(fù)樣本來(lái)做本級(jí)訓(xùn)練的正樣本和負(fù)樣本,這樣才可以達(dá)到層層精確篩選的目的,非目標(biāo)樣本應(yīng)盡可能在較早級(jí)聯(lián)層次得到濾除,只有通過(guò)所有級(jí)分類器的樣本才被認(rèn)定為正樣本即目標(biāo)區(qū)域。
級(jí)聯(lián)分類器設(shè)計(jì)思路就需要指定各個(gè)參加級(jí)聯(lián)的強(qiáng)分類器具備相應(yīng)的結(jié)構(gòu),所謂相應(yīng)的結(jié)構(gòu)的第一點(diǎn)要求是前面分類器的結(jié)構(gòu)簡(jiǎn)單也即強(qiáng)分類器中包含盡可能少的弱分類器,這樣才能提高檢測(cè)速度。第二點(diǎn)要求是檢測(cè)率高,能夠?yàn)V除那些與目標(biāo)差異較大的負(fù)樣本。那么對(duì)于參與訓(xùn)練的負(fù)樣本的選擇就需要盡可能選擇與正樣本差異大且多樣化的負(fù)樣本,才能得到滿足分類器級(jí)聯(lián)設(shè)計(jì)思想的強(qiáng)分類器。第三點(diǎn)要求是級(jí)聯(lián)的下一級(jí)分類器是對(duì)上一級(jí)分類器無(wú)法分辨的樣本進(jìn)行再次準(zhǔn)確分類,因此,在級(jí)聯(lián)的檢測(cè)器中不斷增加更多的強(qiáng)分類器可以很快排除背景區(qū)域,從而節(jié)約出時(shí)間用于那些更像目標(biāo)的區(qū)域進(jìn)行計(jì)算。在級(jí)聯(lián)結(jié)構(gòu)中,前面幾級(jí)的分類器相對(duì)說(shuō)結(jié)構(gòu)比較簡(jiǎn)單,使用的特征數(shù)較少,但檢測(cè)率很高,同時(shí)能夠盡可能地濾除那些與目標(biāo)差異較大的負(fù)樣本。后面級(jí)的分類器則使用更多的特征和更復(fù)雜的結(jié)構(gòu),從而可以將那些與目標(biāo)相似的負(fù)樣本與目標(biāo)物體區(qū)分開。
為了能夠檢測(cè)到不同尺度下的目標(biāo),目前常用的檢測(cè)方式可以總結(jié)為三種,第一種是縮放待檢測(cè)圖像,構(gòu)造圖像金字塔,用與標(biāo)準(zhǔn)訓(xùn)練樣本大小相同的窗口去對(duì)不同尺度下的檢測(cè)圖像進(jìn)行遍歷檢測(cè)。第二種是直接在待檢測(cè)圖像上用不同尺度的窗口進(jìn)行遍歷,將遍歷窗口歸一化到標(biāo)準(zhǔn)訓(xùn)練樣本大小再送入分類器進(jìn)行判別。第三種是直接在待檢測(cè)圖像上用不同尺度的窗口進(jìn)行遍歷,按照尺度對(duì)分類器進(jìn)行尺度變換,將不同尺度的遍歷窗口直接送入相應(yīng)尺度的分類器進(jìn)行判別。相比之下,第三種方式縮放分類器的運(yùn)算與縮放待檢測(cè)圖像和縮放檢測(cè)窗口的運(yùn)算量要小很多,并且可以做提前運(yùn)算,存儲(chǔ)備用。在求取Haar特征時(shí)還可以利用積分圖像快速求取特征,運(yùn)算速度占一定優(yōu)勢(shì),但在檢測(cè)性能方面由于縮放分類器會(huì)帶來(lái)一定的誤差,因此較之第二種方法檢測(cè)性能有所下降。
技術(shù)實(shí)現(xiàn)要素:
(一)要解決的技術(shù)問(wèn)題
本發(fā)明要解決的技術(shù)問(wèn)題是:客服現(xiàn)有技術(shù)中的缺陷,提供一種AdaBoost級(jí)聯(lián)分類器快速檢測(cè)方法,使得到的分類器在保持檢測(cè)速度的前提下可以進(jìn)一步提高檢測(cè)性能。
(二)技術(shù)方案
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供一種AdaBoost級(jí)聯(lián)分類器快速檢測(cè)方法,其包括以下步驟:
S1:訓(xùn)練基于AdaBoost的一級(jí)級(jí)聯(lián)分類器;
S2:測(cè)試一級(jí)級(jí)聯(lián)分類器每一級(jí)的合并后的檢測(cè)性能;
S3:根據(jù)一級(jí)級(jí)聯(lián)分類器合并后的檢測(cè)性能,確定使用縮放窗口檢測(cè)方法的開始層數(shù)X;
S4:使用X層一級(jí)級(jí)聯(lián)分類器和合并操作對(duì)樣本庫(kù)進(jìn)行檢測(cè),確定檢測(cè)到的正樣本和誤檢的負(fù)樣本;
S5:使用檢測(cè)到的正樣本和誤檢的負(fù)樣本重新訓(xùn)練AdaBoost二級(jí)級(jí)聯(lián)分類器;
S6:采用對(duì)一級(jí)級(jí)聯(lián)分類器縮放分類器和二級(jí)級(jí)聯(lián)分類器縮放檢測(cè)窗口結(jié)合的方式進(jìn)行檢測(cè)。
其中,所述步驟S1中,基于AdaBoost的一級(jí)級(jí)聯(lián)分類器的訓(xùn)練過(guò)程為:建立一個(gè)訓(xùn)練樣本庫(kù),設(shè)定訓(xùn)練參數(shù),得到若干個(gè)AdaBoost分類器級(jí)聯(lián)在一起作為最終的分類器輸出。
其中,所述步驟S1中,訓(xùn)練樣本庫(kù)中,以待檢測(cè)目標(biāo)作為正樣本,非檢測(cè)目標(biāo)圖像作為負(fù)樣本。
其中,所述步驟S1中,訓(xùn)練參數(shù)包括訓(xùn)練的正、負(fù)樣本數(shù)量、樣本歸一化大小、終止訓(xùn)練的檢測(cè)率和誤報(bào)率、AdaBoost的類型,弱分類器類型。
其中,所述步驟S2中,測(cè)試一級(jí)級(jí)聯(lián)分類器每一級(jí)的合并后的檢測(cè)性能的過(guò)程中,檢測(cè)窗口經(jīng)過(guò)一級(jí)級(jí)聯(lián)分類器的每一級(jí)時(shí),被判斷為正樣本的將繼續(xù)進(jìn)行下一級(jí)的判斷,如果沒有下一級(jí)將做為檢測(cè)到的目標(biāo)框輸出;被判斷為負(fù)樣本的檢測(cè)框?qū)⒆鳛榉悄繕?biāo)框輸出,并且不再進(jìn)行下一級(jí)的判斷;
對(duì)于級(jí)聯(lián)分類器的每一級(jí)對(duì)檢測(cè)窗口都有一個(gè)判斷輸出,將此輸出與標(biāo)記結(jié)果比對(duì),判斷在當(dāng)前層下輸出的正確性即檢測(cè)率和誤報(bào)率。
其中,所述步驟S3中,確定使用縮放窗口檢測(cè)方法的開始層數(shù)X時(shí),測(cè)試一級(jí)級(jí)聯(lián)分類器檢測(cè)并且合并之后的檢測(cè)性能,根據(jù)系統(tǒng)要求的檢測(cè)率,選擇與系統(tǒng)要求的檢測(cè)率最接近且高于系統(tǒng)要求的檢測(cè)率的那一層與二級(jí)級(jí)聯(lián)分類器級(jí)聯(lián),并將這一層確定為使用縮放窗口檢測(cè)方法的開始層是X。
其中,所述步驟S4中,使用X層一級(jí)級(jí)聯(lián)分類器和合并操作對(duì)樣本庫(kù)進(jìn)行檢測(cè),使用檢測(cè)到的正樣本作為二級(jí)級(jí)聯(lián)分類器訓(xùn)練用的正樣本,使用誤檢作為二級(jí)級(jí)聯(lián)分類器訓(xùn)練用的負(fù)樣本。
其中,所述步驟S5中,使用檢測(cè)到的正樣本和誤檢的負(fù)樣本重新訓(xùn)練AdaBoost二級(jí)級(jí)聯(lián)分類器時(shí),使用的訓(xùn)練樣本為一級(jí)級(jí)聯(lián)分類器做步驟S4篩選后的樣本。
其中,所述步驟S6中,對(duì)一級(jí)級(jí)聯(lián)分類器采用縮放分類器的方式進(jìn)行檢測(cè),對(duì)于各個(gè)尺度下分類器使用的HAAR特征使用積分圖像計(jì)算得到,經(jīng)過(guò)一級(jí)分類器的篩選和合并操作后,單幀圖像內(nèi)剩余少量的待分析窗口,將這些少量的待分析窗口送入二級(jí)級(jí)聯(lián)AdaBoost分類器使用縮放窗口的方式檢測(cè),即將一級(jí)分類器的檢測(cè)結(jié)果縮放至標(biāo)準(zhǔn)模板大小再送入分類器進(jìn)行檢測(cè)。
(三)有益效果
上述技術(shù)方案所提供的AdaBoost級(jí)聯(lián)分類器快速檢測(cè)方法,選用一級(jí)級(jí)聯(lián)分類器與二級(jí)級(jí)聯(lián)分類器相結(jié)合的方式,在保證了檢測(cè)速度的同時(shí),進(jìn)一步的提高了系統(tǒng)的檢測(cè)性能。
附圖說(shuō)明
圖1為現(xiàn)有技術(shù)中級(jí)聯(lián)分類器的級(jí)聯(lián)示意圖。
圖2為本發(fā)明實(shí)施例中檢測(cè)方法的級(jí)聯(lián)示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、內(nèi)容、和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。
參照?qǐng)D2所示,本實(shí)施例AdaBoost級(jí)聯(lián)分類器快速檢測(cè)方法包括以下步驟:
S1:訓(xùn)練基于AdaBoost的一級(jí)級(jí)聯(lián)分類器
通?;贏daBoost的級(jí)聯(lián)分類器的訓(xùn)練是通過(guò)建立一個(gè)訓(xùn)練樣本庫(kù),根據(jù)實(shí)際需求選擇訓(xùn)練參數(shù),得到若干個(gè)AdaBoost分類器級(jí)聯(lián)在一起作為最終的分類器輸出。其中訓(xùn)練樣本庫(kù)通常選取大量待檢測(cè)目標(biāo)作為正樣本,非檢測(cè)目標(biāo)圖像作為負(fù)樣本。訓(xùn)練參數(shù)包括很多,關(guān)鍵的幾個(gè)參數(shù)有訓(xùn)練的正負(fù)樣本數(shù)量、樣本歸一化大小、終止訓(xùn)練的檢測(cè)率和誤報(bào)率、AdaBoost的類型,弱分類器類型等等,都會(huì)影響到最終的分類器的性能。
影響AdaBoost分類器性能的最重要的因素就是用于訓(xùn)練的正負(fù)樣本,它不但影響到分類器的檢測(cè)性能,同時(shí)還影響到分類器的檢測(cè)效率。檢測(cè)性能高要求分類器能夠正確的判別正負(fù)樣本的類別。檢測(cè)效率要求分類器能夠快速的判別出樣本的類別。AdaBoost級(jí)聯(lián)分類器的訓(xùn)練是訓(xùn)練若干個(gè)AdaBoost分類器級(jí)聯(lián)在一起。級(jí)聯(lián)的使用可以提高分類器的檢測(cè)效率,通常AdaBoost級(jí)聯(lián)分類器的訓(xùn)練方法是在確定訓(xùn)練用的正負(fù)樣本后,用此樣本庫(kù)訓(xùn)練得到一個(gè)AdaBoost分類器,用這個(gè)AdaBoost分類器對(duì)樣本庫(kù)中的正負(fù)樣本進(jìn)行判別,把正確判別的正樣本和錯(cuò)誤判別的負(fù)樣本作為下一級(jí)訓(xùn)練用的樣本,訓(xùn)練得到下一級(jí)AdaBoost分類器,依照此方法訓(xùn)練得到若干個(gè)AdaBoost分類器,將它們級(jí)聯(lián)在一起作為最終的AdaBoost級(jí)聯(lián)分類器。
通常訓(xùn)練AdaBoost分類器將所有選中的訓(xùn)練樣本全部參與到訓(xùn)練中,這種方式得到分類器較為復(fù)雜,尤其作為級(jí)聯(lián)分類器的第一級(jí)非常影響檢測(cè)效率。為了不影響級(jí)聯(lián)分類器的檢測(cè)性能,又能提高級(jí)聯(lián)分類器的檢測(cè)效率,選用一種提高級(jí)聯(lián)分類器檢測(cè)效率的訓(xùn)練方法。此方法可描述為在訓(xùn)練級(jí)聯(lián)分類器的第一級(jí)AdaBoost分類器時(shí),在訓(xùn)練樣本庫(kù)中挑選具有代表性的訓(xùn)練樣本作為第一級(jí)AdaBoost分類器的訓(xùn)練樣本,得到一個(gè)檢測(cè)效率可以接受的簡(jiǎn)單的分類器。此第一級(jí)分類器可以排除大部分非檢測(cè)目標(biāo),但可以保留全部待檢測(cè)目標(biāo)。這樣大部分可被簡(jiǎn)單高效的分類器排除掉,進(jìn)入下一級(jí)分類器進(jìn)行判別的檢測(cè)區(qū)域量急劇減少,通過(guò)這種方式達(dá)到提高檢測(cè)效率的目的。由于所有的待檢測(cè)目標(biāo)可繼續(xù)由后續(xù)的級(jí)聯(lián)分類器進(jìn)行判斷,因而不會(huì)降低檢測(cè)性能。本發(fā)明描述的具有代表性的訓(xùn)練樣本是指清晰的正樣本和與正樣本差距較大的負(fù)樣本。以檢測(cè)行人為例,正樣本可挑選各種姿態(tài)的清晰行人,負(fù)樣本可以選擇來(lái)源于天空、地面、建筑物等與行人差距較大的負(fù)樣本。
S2:測(cè)試一級(jí)級(jí)聯(lián)分類器每一級(jí)的合并后的檢測(cè)性能
檢測(cè)窗口通經(jīng)過(guò)級(jí)聯(lián)分類器的每一級(jí)時(shí),被判斷為正樣本的將繼續(xù)進(jìn)行下一級(jí)的判斷,如果沒有下一級(jí)將做為檢測(cè)到的目標(biāo)框輸出。被判斷為負(fù)樣本的檢測(cè)框?qū)⒆鳛榉悄繕?biāo)框輸出,并且不再進(jìn)行下一級(jí)的判斷。對(duì)于級(jí)聯(lián)分類器的每一級(jí)對(duì)檢測(cè)窗口都有一個(gè)判斷輸出。將此輸出與標(biāo)記結(jié)果比對(duì),可以判斷在當(dāng)前層下輸出的正確性即檢測(cè)率和誤報(bào)率。由于通常在真實(shí)的檢測(cè)目標(biāo)附近會(huì)有幾個(gè)不同尺度或者稍有偏移的檢測(cè)框出現(xiàn),它們通常都被視為正檢。由于我們采用級(jí)聯(lián)分類器設(shè)計(jì)方案,將尺度不同或者稍有偏移的檢測(cè)框合并通常不會(huì)減低檢測(cè)率,并且可以減少進(jìn)入下一級(jí)級(jí)聯(lián)分類器的檢測(cè)框的數(shù)量。因此我們要測(cè)試每一級(jí)級(jí)聯(lián)分類器的合并后的檢測(cè)性能以方便采取適當(dāng)?shù)膶訑?shù)與下一級(jí)進(jìn)行級(jí)聯(lián)
S3:根據(jù)一級(jí)級(jí)聯(lián)分類器合并后的檢測(cè)性能,確定使用縮放窗口檢測(cè)方法的開始層數(shù)X
隨著級(jí)聯(lián)分類器級(jí)聯(lián)層數(shù)的增加,誤報(bào)率下降的同時(shí)檢測(cè)率也隨之下降。分類器性能的通常要保持一定的檢測(cè)率同時(shí)要求誤報(bào)率盡可能低或者不高于一定的閾值。通常在待檢測(cè)目標(biāo)上會(huì)得到幾個(gè)不同尺度或者稍有偏移的檢測(cè)框,對(duì)于這樣的結(jié)果再使用一步合并操作可使這幾個(gè)檢測(cè)框合并為一個(gè)框,這樣再進(jìn)入下一級(jí)級(jí)聯(lián)分類器時(shí)可明顯減少待檢框數(shù)量,提高檢測(cè)速度。因此在這里我們?cè)跍?zhǔn)備與二級(jí)級(jí)聯(lián)分類器級(jí)聯(lián)時(shí)需要測(cè)試一級(jí)級(jí)聯(lián)分類器檢測(cè)并且合并之后的檢測(cè)性能,根據(jù)系統(tǒng)要求的檢測(cè)率,選擇與系統(tǒng)要求的檢測(cè)率最接近且高于系統(tǒng)要求的檢測(cè)率的那一層與二級(jí)級(jí)聯(lián)分類器級(jí)聯(lián)。將這一層確定為使用縮放窗口檢測(cè)方法的開始層是X。
S4:使用X層一級(jí)級(jí)聯(lián)分類器和合并操作對(duì)樣本庫(kù)進(jìn)行檢測(cè),確定檢測(cè)到的正樣本和誤檢的負(fù)樣本
使用X層一級(jí)級(jí)聯(lián)分類器和合并操作對(duì)樣本庫(kù)進(jìn)行檢測(cè),使用檢測(cè)到的正樣本作為二級(jí)級(jí)聯(lián)分類器訓(xùn)練用的正樣本,使用誤檢作為二級(jí)級(jí)聯(lián)分類器訓(xùn)練用的負(fù)樣本。
S5:使用檢測(cè)到的正樣本和誤檢的負(fù)樣本重新訓(xùn)練AdaBoost二級(jí)級(jí)聯(lián)分類器
此二級(jí)級(jí)聯(lián)分類器的訓(xùn)練方法同一級(jí)級(jí)聯(lián)分類器,只是訓(xùn)練樣本需使用一級(jí)級(jí)聯(lián)分類器做步驟S4篩選后的樣本。
S6:采用對(duì)一級(jí)級(jí)聯(lián)分類器縮放分類器和二級(jí)級(jí)聯(lián)分類器縮放檢測(cè)窗口結(jié)合的方式對(duì)待檢測(cè)目標(biāo)進(jìn)行檢測(cè)。
對(duì)一級(jí)級(jí)聯(lián)分類器采用縮放分類器的方式進(jìn)行檢測(cè),對(duì)于各個(gè)尺度下分類器使用的HAAR特征可以使用積分圖像計(jì)算得到,并且避免了使用縮放檢測(cè)窗口的操作步驟,可以快速提高檢測(cè)速度。一級(jí)分類器可以排除大部分的誤報(bào),并保留一定的檢測(cè)率。經(jīng)過(guò)一級(jí)分類器的篩選和合并操作后,單幀圖像內(nèi)僅剩余少量的待分析窗口。將這些少量的待分析窗口送入二級(jí)級(jí)聯(lián)AdaBoost分類器再進(jìn)行分析可進(jìn)一步排除一定的誤報(bào),由于二級(jí)級(jí)聯(lián)分類器使用縮放窗口的方式檢測(cè),即將一級(jí)分類器的檢測(cè)結(jié)果縮放至標(biāo)準(zhǔn)模板大小再送入分類器進(jìn)行檢測(cè)。二級(jí)分類器由于采用縮放檢測(cè)窗口的方式進(jìn)行檢測(cè)可以規(guī)避一級(jí)分類器采用縮放分類器方式檢測(cè)帶來(lái)的誤差,從而二級(jí)分類器的檢測(cè)性能更高,而縮放少量的檢測(cè)窗口帶來(lái)的計(jì)算量的增加是可以接受的。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變形,這些改進(jìn)和變形也應(yīng)視為本發(fā)明的保護(hù)范圍。