opencv目標(biāo)檢測(cè)(object detection)

最近在做移動(dòng)端的視頻流目標(biāo)檢測(cè)剃允,配置opencv4Android姚淆,這一塊在opencv官方文檔上有些說明文檔省店,另外learning opencv3的章節(jié)object detection也值得一看牙咏。

前言

目標(biāo)檢測(cè)早直,就是判斷圖片中是否包含特定物體以及物體在像素空間上的位置祷肯。這里沉填,我們關(guān)注幾種機(jī)器學(xué)習(xí)技術(shù)的目標(biāo)檢測(cè)手段。

1.基于樹的目標(biāo)檢測(cè)技術(shù)

在當(dāng)前的opencv庫里有兩種檢測(cè)器佑笋,cascade classifier翼闹,源自Viola 和 Jones在人臉檢測(cè)上非常成功的算法,詳見Viola, Paul, and Michael Jones. “Rapid object detection using a boosted cascade of simple features.” Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on. Vol. 1. IEEE,2001.第二種是soft cascade蒋纬,一種提供了新途徑的演化的算法猎荠,并在大多實(shí)例上比cascade classifier有更健壯的分類。兩種算法都可以用到多目標(biāo)檢測(cè)上蜀备,一般而言关摇,具有嚴(yán)格結(jié)構(gòu)和豐富紋理的物體(剛性物體)響應(yīng)更好。
這些算法不僅封裝了基學(xué)習(xí)器的函數(shù)碾阁,還包含了學(xué)習(xí)器的輸入或是輸出的預(yù)處理的方法输虱。當(dāng)然,這些算法不像是opencv中的基學(xué)習(xí)器脂凶,有統(tǒng)一的接口宪睹。它建立了boost篩選式級(jí)聯(lián)分類器。它與ML庫中其他部分相比蚕钦,有不同的格局亭病,因?yàn)樗窃谠缙陂_發(fā)的,并完全可用于人臉檢測(cè)嘶居。通常由算法的發(fā)明者提供給opencv罪帖,因此接口更像是算法的原始實(shí)現(xiàn)。

1.1 Cascade Classifiers

Cascade Classifier由一個(gè)重要的概念構(gòu)建,boosted rejection cascade整袁。它在opencv庫里有不同的格式菠齿,因?yàn)樗婚_始是由一個(gè)成熟的人臉檢測(cè)的應(yīng)用發(fā)展而來, 隨后才演化的更普遍葬项。這里我們介紹它的詳細(xì)原理和怎樣應(yīng)用到人臉檢測(cè)和其他物體上泞当。

計(jì)算機(jī)視覺是一個(gè)涉及廣泛而又發(fā)展迅速的領(lǐng)域,所以opencv中某個(gè)特定技術(shù)很容易發(fā)展過時(shí)民珍,之前的人臉檢測(cè)器(Haar classifier)就是這樣襟士,但人臉檢測(cè)又有巨大的需求,因此需要一個(gè)不錯(cuò)的基線技術(shù)供使用嚷量,而且人臉檢測(cè)是建立在最經(jīng)常使用的分類器boosting上陋桂,因此更加通用。事實(shí)上蝶溶,一些公司使用了opencv中的“人臉”檢測(cè)器來檢測(cè)“基本剛性的”物體(臉嗜历,汽車,自行車抖所,人體)梨州。通過成千上萬的物體的各個(gè)角度的訓(xùn)練圖像,訓(xùn)練出新的分類器田轧,這個(gè)技術(shù)被用來設(shè)計(jì)目前最優(yōu)的檢測(cè)算法暴匠。因此,對(duì)于此類識(shí)別任務(wù)傻粘,Haar分類器是一個(gè)有用的工具每窖。

cascade classifier,又被稱為Viola-Jones detector弦悉,最開始窒典,這種算法和他的opencv實(shí)現(xiàn)僅支持Haar小波這種特定的特征。之后稽莉,由Rainer Lienhart 和 Jochen Maydt擴(kuò)展瀑志,詳見Lienhart, Rainer, and Jochen Maydt. “An extended set of haar-like features for rapid object detection.” Proceedings 2002 International Conference on Image Processing. Vol. 1. IEEE, 2002.使用對(duì)角特征,更普遍地污秆,稱為“Haar-like” 特征后室,在opencv3.x中,又發(fā)展成使用local binary patterns(LBP)混狠。
opencv的cascade classifier實(shí)現(xiàn)有兩層,第一層是特征檢測(cè)疾层,封裝了特征計(jì)算将饺,第二層是boosted cascade,計(jì)算得到的特征的矩形區(qū)域的和與差,boosting分類器與特征的計(jì)算層無關(guān)予弧。

1.1.1 Haar-like features

類Haar特征描述如下圖刮吧,
類Haar特征(矩形和旋轉(zhuǎn)矩形特征都很容易從積分圖中算出)

在所有縮放尺度下,這些特征組成了boosting分類器使用的全部“原材料”掖蛤。他們從原始灰度圖像的積分圖中快速計(jì)算得出杀捻。

opencv可以使用cv::integral()函數(shù)輕松計(jì)算積分圖,積分圖是一種數(shù)據(jù)結(jié)構(gòu)蚓庭,可以實(shí)現(xiàn)子區(qū)域的快速求和致讥。這樣的求和在很多應(yīng)用中是有用的,最顯著的是人臉識(shí)別和相關(guān)算法的Haar小波器赞。
opencv支持積分圖的三種變化垢袱。分別是sum, square-sum, tilted-sum.每一種的輸出和輸入圖像尺寸一致。利用這些積分圖港柜,可以計(jì)算圖像的任意直立或傾斜的矩形區(qū)域的和请契,均值和標(biāo)準(zhǔn)差。在這種方式下夏醉,就可能進(jìn)行快速模糊爽锥、梯度估計(jì)、計(jì)算均值和標(biāo)準(zhǔn)差畔柔,甚至為各種窗口大小執(zhí)行快速的可變窗塊相關(guān)計(jì)算氯夷。


積分圖的計(jì)算

三種不同的積分圖在C++ API中僅以他們的參數(shù)加以區(qū)分。


Standard Summation Integral

Squared Summation Integral

如果輸入圖片的尺寸是W*H释树,那么輸出則是(W+1)*(H+1)肠槽。
當(dāng)前,opencv中僅支持兩種特征奢啥。原始的Haar小波(包含對(duì)角特征)和LBP秸仙。
1.1.2 Local binary pattern features

LBP是一種用來描述圖像局部紋理特征的算子,被用于Viola-Jones檢測(cè)器桩盲,回想Haar小波寂纪,它是在一小塊鄰域上通過小波變換的特征向量,而LBP在構(gòu)造特征向量與此不同赌结,在一個(gè)長(zhǎng)寬都為3的倍數(shù)的矩形上捞蛋,將它分割成不相重疊的3*3的小塊,在每一個(gè)小塊上柬姚,用積分圖計(jì)算像素和拟杉,然后將中心點(diǎn)像素與周圍8個(gè)像素點(diǎn)比較得到一個(gè)8位的特征值,用來描述相應(yīng)矩形的特征量承。
image.png
1.1.3 Training and pretrained detectors

opencv提供了一套預(yù)訓(xùn)練目標(biāo)識(shí)別的文件搬设,也有代碼允許你訓(xùn)練存儲(chǔ)新的檢測(cè)器的目標(biāo)模型穴店。如果不夠用,在opencv存儲(chǔ)目錄里apps文件夾下還有traincascade的應(yīng)用拿穴,你可以用它來訓(xùn)練任何剛性物體的檢測(cè)器泣洞,但穩(wěn)定性因物變化。
預(yù)訓(xùn)練目標(biāo)的文件在.../opencv/data/haarcascades和.../opencv/data/lbpcascades下面默色,其中正面人臉識(shí)別效果最好的是haarcascade_frontalface_alt2.xml球凰,而側(cè)臉卻難以用該方法獲得準(zhǔn)確的檢測(cè)結(jié)果。

1.2 監(jiān)督學(xué)習(xí)和Boosting理論

opencv中的cascade分類器是一種監(jiān)督學(xué)習(xí)腿宰,Viola-Jones檢測(cè)器使用adaboost呕诉,也叫作rejection cascade,cascade是一系列的節(jié)點(diǎn)酗失,每一個(gè)節(jié)點(diǎn)是獨(dú)立的adaboost分類樹义钉,圖像上的一個(gè)子窗口以一種特定順序在所有cascade上測(cè)試,只有通過了所有分類器的窗口才被視作是目標(biāo)规肴。
每一個(gè)節(jié)點(diǎn)都被設(shè)計(jì)成為有高檢測(cè)率(99.9%)和低假正率(大致50%)捶闸,每一個(gè)節(jié)點(diǎn)里,得到?jīng)]有在圖片里的結(jié)果就可以結(jié)束計(jì)算拖刃,然后最終宣稱圖片上沒有目標(biāo)删壮。

1.2.1 Boosting in the Haar cascade

對(duì)于Viola-Jones rejection cascade,每一個(gè)節(jié)點(diǎn)都是組合的弱學(xué)習(xí)器,然后通過boosting兑牡,組成一個(gè)強(qiáng)學(xué)習(xí)器央碟。這些獨(dú)立的弱學(xué)習(xí)器通常是深度為1的決策樹,即單層決策樹均函。單層決策樹通常只做一個(gè)決定亿虽,按照以下格式:特征h里的值v,是大于閾值t,還是小于苞也?“yes”表示物體的存在洛勉,“no”表示沒有。

單層決策樹

Viola-Jones分類器的Haar特征或LBP特征的數(shù)量在每一層節(jié)點(diǎn)都可以設(shè)置如迟,但大多通常是單一特征的決策收毫,有些場(chǎng)景最多三個(gè)特征。然后通過迭代提升將這些弱學(xué)習(xí)器進(jìn)行加權(quán)組合殷勘。
boosting

在訓(xùn)練一開始此再,需要設(shè)置在每個(gè)節(jié)點(diǎn)上能最優(yōu)化分輸入的閾值tw,然后用累積誤差來計(jì)算權(quán)重參數(shù)αw。在傳統(tǒng)的adaboost里玲销,每一個(gè)特征向量(數(shù)據(jù)點(diǎn))每次迭代時(shí)也需要重新分配權(quán)重输拇。

1.2.2 Rejection cascades.

下圖展示了Rejection cascades的流程,由許多的boosted分類器組成贤斜,每個(gè)節(jié)點(diǎn)Fj包含了整個(gè)決策樹樁的集合淳附,每個(gè)節(jié)點(diǎn)都有個(gè)很高的檢測(cè)率(99.9%)议慰,但可能也有50%的非目標(biāo)檢測(cè)失誤,但這不影響奴曙,想象20個(gè)節(jié)點(diǎn)后,檢測(cè)率為0.99920 ≈ 98%草讶,而假正率僅為0.520 ≈ 0.0001%!

Rejection cascades

像之前提及的洽糟,這個(gè)技術(shù)實(shí)現(xiàn)了人臉檢測(cè)但不限于人臉,在大多數(shù)剛性物體上都表現(xiàn)的很好堕战,但側(cè)臉或者說是車的角落位置則不然坤溃。

1.2.3 The cv::CascadeClassifer object

cascade分類器在opencv中作為一個(gè)對(duì)象,即cv::CascadeClassifer嘱丢。


CascadeClassifer

這個(gè)構(gòu)造函數(shù)只有一個(gè)參數(shù)薪介,即你存儲(chǔ)的cascade的文件,如果你想要稍后加載越驻,也可以用load函數(shù)汁政。

1.2.4 Searching an image with detectMultiScale()

實(shí)現(xiàn)cascade分類的函數(shù)是cv::CascadeClassifer對(duì)象中的detectMultiScale()方法。



首先輸入類型為CV_8U的灰度圖片缀旁,然后該函數(shù)瀏覽輸入圖片的所有尺度定位目標(biāo)并返回到objects參數(shù)中记劈,設(shè)置scaleFactor決定尺度間的寬度,越大表明計(jì)算速度的提高并巍,但可能會(huì)丟失目標(biāo)目木,minNeighbors參數(shù)是對(duì)錯(cuò)誤判斷的控制,因?yàn)楹玫哪繕?biāo)檢測(cè)會(huì)在相鄰空間碰撞因?yàn)橹苓叺南袼貢?huì)暗示該目標(biāo)的存在懊渡。
未完待續(xù)刽射。。剃执。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末誓禁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忠蝗,更是在濱河造成了極大的恐慌现横,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阁最,死亡現(xiàn)場(chǎng)離奇詭異戒祠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)速种,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門姜盈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人配阵,你說我怎么就攤上這事馏颂∈狙” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵救拉,是天一觀的道長(zhǎng)难审。 經(jīng)常有香客問我,道長(zhǎng)亿絮,這世上最難降的妖魔是什么告喊? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮派昧,結(jié)果婚禮上黔姜,老公的妹妹穿的比我還像新娘。我一直安慰自己蒂萎,他們只是感情好秆吵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著五慈,像睡著了一般纳寂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豺撑,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天烈疚,我揣著相機(jī)與錄音,去河邊找鬼聪轿。 笑死爷肝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陆错。 我是一名探鬼主播灯抛,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼音瓷!你這毒婦竟也來了对嚼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤绳慎,失蹤者是張志新(化名)和其女友劉穎纵竖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杏愤,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靡砌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了珊楼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片通殃。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厕宗,靈堂內(nèi)的尸體忽然破棺而出画舌,到底是詐尸還是另有隱情堕担,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布曲聂,位于F島的核電站霹购,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏朋腋。R本人自食惡果不足惜厕鹃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乍丈。 院中可真熱鬧,春花似錦把将、人聲如沸轻专。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽请垛。三九已至,卻和暖如春洽议,著一層夾襖步出監(jiān)牢的瞬間宗收,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工亚兄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留混稽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓审胚,卻偏偏與公主長(zhǎng)得像匈勋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膳叨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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