OpenCV 人臉樣本訓(xùn)練

級(jí)聯(lián)分類器

執(zhí)行訓(xùn)練的時(shí)候會(huì)輸出一系列的參數(shù)满粗,其中可以看到:【stageType: BOOST】。boosting算法涉及到弱分類器和強(qiáng)分類器的概念。弱分類器分類正確率較低青扔,但是較容易獲得,強(qiáng)分類器分類正確率較高翩伪,但是較難獲得微猖。只要樣本充足,弱學(xué)習(xí)可以通過一定的組合獲得任意精度的強(qiáng)學(xué)習(xí)缘屹。級(jí)聯(lián)分類器就是 N個(gè)弱分類器 以級(jí)聯(lián)的方式凛剥,從簡單到復(fù)雜逐步串聯(lián)而成。

可以用決策樹來構(gòu)建一個(gè)簡單的弱分類器轻姿, 將提取到的特征與分類器的特征進(jìn)行逐個(gè)比較犁珠,從而判斷該特征是否屬于人臉:

弱分類器.png

而強(qiáng)分類器相當(dāng)于先讓各個(gè)弱分類器進(jìn)行投票,然后讓投票結(jié)果根據(jù)各弱分類器的錯(cuò)誤率進(jìn)行加權(quán)相加互亮,最后與平均的投票結(jié)果進(jìn)行比較得到最終結(jié)果犁享。

訓(xùn)練

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html

正樣本:包含人臉的圖片,灰度圖。 正樣本大斜荨:統(tǒng)一大小并且不能小于負(fù)樣本 負(fù)樣本:不包含人臉的圖片 負(fù)樣本大写独ァ:無所謂

正、負(fù)樣本個(gè)數(shù)比列大約為 1: 3

制作正樣本

正樣本目錄為:pos

假設(shè)目錄結(jié)構(gòu)如下:

/pos
  0.jpg
  1.jpg
pos.txt

文件pos.txt里的內(nèi)容如下:

#分別表示 1張人臉 ;人臉從 0,0坐標(biāo)開始凤巨;大小為24x24
 pos/0.jpg 1 0 0 24 24
 #2個(gè)人臉视乐; 人臉分別為 100,200處的50x50 和 50,30處的25x25為人臉
 pos/1.jpg 2 100 200 50 50   50 30 25 25
 #這部分內(nèi)容可以使用java 程序來修改,如增加"pos/"

執(zhí)行:(opencv環(huán)境變量配置opencv\build\x64\vc15\bin到path里)

這里生成樣本的opencv_createsamples.exe以及后面訓(xùn)練級(jí)聯(lián)器用到opencv_traincascade.exe在opencv 3.4.7版本以后被移除了,需要下載舊版本的opencv來進(jìn)行訓(xùn)練敢茁,訓(xùn)練結(jié)果與版本無關(guān)佑淀,可以在opencv 4.x的版本上使用。

opencv_createsamples -info pos.txt -vec pos.vec -num 100 -w 24 -h 24 
-info: 正樣本描述
-vec : 輸出的正樣本向量
-num : 正樣本數(shù)量
-w -h: 輸出樣本的大小
#輸出:Done. Created 100 samples  表示成功生成100個(gè)樣本

制作負(fù)樣本

負(fù)樣本與正樣本執(zhí)行一樣的操作卷要,假如目錄結(jié)構(gòu)如下:

/neg
  0.jpg
  1.jpg
neg.txt

則neg.txt文件中的內(nèi)容將如下所示:

neg/0.jpg
neg/1.jpg

訓(xùn)練

創(chuàng)建一個(gè)data 目錄渣聚,執(zhí)行:

opencv_traincascade -data data  -vec pos.vec -bg neg.txt -numPos 100 -numNeg 300  -numStages 15  -featureType LBP -w 24 -h 24

?

-data : 需要手動(dòng)創(chuàng)建,生成的結(jié)果 訓(xùn)練的模型會(huì)輸出到這個(gè)目錄
-vec : 正樣本
-bg : 負(fù)樣本
-numPos :每級(jí)分類器訓(xùn)練時(shí)所用到的正樣本數(shù)目
-numNeg :每級(jí)分類器訓(xùn)練時(shí)所用到的負(fù)樣本數(shù)目僧叉,可以大于-bg數(shù)目
-numStages:訓(xùn)練分類器的級(jí)數(shù)奕枝,如果層數(shù)多,分類器的誤差就更小瓶堕,但是檢測速度慢隘道。(15-20)
-featureType: 特征類型(LBP)
-w -h 樣本寬高
?
輸出:
Training until now has taken 0 days 0 hours 0 minutes 10 seconds.
表示成功
?
輸出:
Required leaf false alarm rate achieved. Branch training terminated.
表示成功,但是誤檢率已經(jīng)達(dá)標(biāo)。(樣本太少了)
?
輸出:
Bad argument < Can not get new positive sample. The most possible reason is insufficient count of samples in given vec-file.
則意味著錯(cuò)誤郎笆。
?
?
minHitRate:分類器的每一級(jí)希望得到的最小檢測率谭梗。當(dāng)設(shè)置為0.995時(shí)如果正訓(xùn)練樣本個(gè)數(shù)為100個(gè),那么其中的0.5個(gè)就很可能不被檢測宛蚓,第二次選擇的時(shí)候必須多選擇后面的5個(gè)激捏,按照這種規(guī)律我們?yōu)楹竺娴拿考?jí)多增加numPosminHitRate個(gè)正樣本.
實(shí)際準(zhǔn)備的正樣本數(shù)量應(yīng)該(讀入vec的正樣本數(shù)) >= numPos + (numStage - 1) * numPos * (1 - minHitRate)
按照此公式計(jì)算: x+14
x0.005 = 1.07x ,也就是正樣本數(shù)量要大于等于 1.07*x 而我們正樣本是100,所以x = 93.45凄吏,但是此處傳100也可以远舅。
因?yàn)閷?shí)際的檢測率會(huì)比minHitRate高,所以在設(shè)置numPos時(shí)可以將其設(shè)置的稍微再大些痕钢,最終的目的是要盡量讓所有的正樣本都參與到訓(xùn)練中图柏。但是,過大就會(huì)出錯(cuò)任连。

//人臉樣本采集
for (Rect face : faces) {
    rectangle(img, face, Scalar(255, 0, 255));
#ifdef COLECT_SAMPLES //采集樣本
    Mat sample;
    frame(face).copyTo(sample);
    resize(sample, sample, Size(24, 24));
    cvtColor(sample, sample, COLOR_BGR2GRAY);
    char p[100];
    sprintf(p, "C:/Users/Administrator/Desktop/opencv/train/face/pos/%d.jpg", i++);
    imwrite(p, sample);
#endif
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚤吹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子随抠,更是在濱河造成了極大的恐慌裁着,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拱她,死亡現(xiàn)場離奇詭異二驰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)椭懊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門诸蚕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來步势,“玉大人,你說我怎么就攤上這事背犯』荡瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵漠魏,是天一觀的道長倔矾。 經(jīng)常有香客問我,道長柱锹,這世上最難降的妖魔是什么哪自? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮禁熏,結(jié)果婚禮上壤巷,老公的妹妹穿的比我還像新娘。我一直安慰自己瞧毙,他們只是感情好胧华,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宙彪,像睡著了一般矩动。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上释漆,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天悲没,我揣著相機(jī)與錄音,去河邊找鬼男图。 笑死示姿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的享言。 我是一名探鬼主播峻凫,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼渗鬼,長吁一口氣:“原來是場噩夢啊……” “哼览露!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起譬胎,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤差牛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后堰乔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偏化,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年镐侯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侦讨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖韵卤,靈堂內(nèi)的尸體忽然破棺而出骗污,到底是詐尸還是另有隱情,我是刑警寧澤沈条,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布需忿,位于F島的核電站,受9級(jí)特大地震影響蜡歹,放射性物質(zhì)發(fā)生泄漏屋厘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一月而、第九天 我趴在偏房一處隱蔽的房頂上張望汗洒。 院中可真熱鬧,春花似錦父款、人聲如沸仲翎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溯香。三九已至,卻和暖如春浓恶,著一層夾襖步出監(jiān)牢的瞬間玫坛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工包晰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湿镀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓伐憾,卻偏偏與公主長得像勉痴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子树肃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容