日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

目标检测原理与实现

發(fā)布時(shí)間:2025/3/20 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 目标检测原理与实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?目標(biāo)檢測(cè)(Object Detection)原理與實(shí)現(xiàn)(一)

基于閾值圖像處理的目標(biāo)檢測(cè) ? ?

? ? ?從今天起開(kāi)始要寫(xiě)一些關(guān)于目標(biāo)檢測(cè)的文章,涵蓋從簡(jiǎn)單的閾值圖像處理檢測(cè)、霍夫變換(hough transform)檢測(cè)、模版匹配檢測(cè)(剛體匹配)、AAM+ASM+ACM(非剛體)匹配檢測(cè)到近代機(jī)器學(xué)習(xí)方法檢測(cè),盡量貼一些代碼,這些很實(shí)用。本篇就從閾值圖像處理檢測(cè)開(kāi)始。閾值顧名思義就是一個(gè)分界值,做圖像處理的都明白閾值的用途,但是考慮到各種觀眾,干脆把OpenCV中的各種閾值標(biāo)識(shí)符和對(duì)應(yīng)代碼示意都貼出來(lái),如(圖一)所示:


(圖一)

? ? ? 仔細(xì)閱讀下(圖一)中的各種偽代碼,就很容易明白閾值函數(shù)的工作機(jī)制,其中src(x,y)是圖像像素點(diǎn)值。下面就給出一個(gè)處理答題卡的例子,(圖二)是從網(wǎng)上找到的一個(gè)答題卡樣圖,我們的目標(biāo)是檢測(cè)到哪些選項(xiàng)被涂黑了,然后根據(jù)坐標(biāo)判定是哪個(gè)數(shù)字,其實(shí)根據(jù)坐標(biāo)是有依據(jù)的,因?yàn)榇痤}卡四個(gè)角有一些對(duì)準(zhǔn)線(xiàn),對(duì)齊后用掃描儀掃描后緊跟著經(jīng)過(guò)算法處理就可以判斷出考生選項(xiàng),本篇文章就簡(jiǎn)化流程,考慮到涂的選項(xiàng)是黑色的,因此我們使用第二個(gè)閾值方法,經(jīng)過(guò)處理后如(圖三)所示。

?? ?

(圖二) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (圖三)


幾乎perfect,嘿嘿,下面把代碼也貼出來(lái),python版本的。

?

[python]?view plaincopy
  • import?numpy as np ?

  • import?cv2 ?

  • img=cv2.imread('anwser_sheet.jpg') ?

  • grey=cv2.cvtColor(img,cv2.cv.CV_BGR2GRAY) ?

  • retval,grey=cv2.threshold(grey,90,255,cv2.cv.CV_THRESH_BINARY_INV) ?

  • ?

  • grey=cv2.erode(grey,None) ?

  • grey=cv2.dilate(grey,None) ?

  • ?

  • contours,hierarchy=cv2.findContours(grey.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) ?

  • newimg=np.zeros_like(grey) ?

  • cv2.drawContours(newimg, contours, -1,?255) ?

  • cv2.imshow('test',newimg) ?

  • cv2.imwrite("processed.jpg",newimg) ?

  • cv2.waitKey() ?

  • 代碼流程先是讀取圖像文件,接著轉(zhuǎn)成灰度圖,接著做個(gè)開(kāi)運(yùn)算(腐蝕后再膨脹),接著閾值處理,最后把目標(biāo)輪廓畫(huà)出,根據(jù)目標(biāo)塊的坐標(biāo)可以大概的推算出對(duì)應(yīng)的數(shù)字,接著秀一下打印出某個(gè)涂項(xiàng),比如最后一個(gè),那么只需要把



    cv2.drawContours(newimg, contours, -1, 255) 改成 cv2.drawContours(newimg, contours, 0, 255)

    第三個(gè)參數(shù)為負(fù)數(shù)表示打印所有輪廓,0表示打印最后一個(gè)選項(xiàng),打印是倒著數(shù)的。如(圖四)所示:



    (圖四)

    ? ? ?基于閾值圖像處理的目標(biāo)檢測(cè)一般只適應(yīng)于自己能控制顏色和亮度的項(xiàng)目中,這也為什么規(guī)定答題卡要盡量使用黑色的(同一顏色方便閾值處理),另外這種方法也可以用在目標(biāo)的三維重建上,如(圖五)所示,用閾值的方法找到汽車(chē)上的標(biāo)定點(diǎn)對(duì)后續(xù)點(diǎn)云的獲取很有幫助,進(jìn)而完成整個(gè)汽車(chē)模型的三位重建,此方法雖然簡(jiǎn)單,但對(duì)這幾種場(chǎng)景很實(shí)用,通過(guò)簡(jiǎn)單的圖像處理(各個(gè)階段去噪)后,然后簡(jiǎn)單的查找下各種閉合小輪廓就OK了,好了,今天就說(shuō)到這,比較簡(jiǎn)單,后續(xù)會(huì)越來(lái)越復(fù)雜些,用到的數(shù)學(xué)知識(shí)也越來(lái)越多。


    (圖五)

    轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/cuoqu/article/details/9058735

    目標(biāo)檢測(cè)(Object Detection)原理與實(shí)現(xiàn)(二)

    基于霍夫變換和廣義霍夫變換的目標(biāo)檢測(cè)

    ? ? ? ?上節(jié)討論了基于閾值處理的目標(biāo)檢測(cè),今天就來(lái)討論下基于霍夫投票的目標(biāo)檢測(cè),霍夫投票打算分成兩個(gè)小節(jié),第一個(gè)小節(jié)簡(jiǎn)單的說(shuō)下霍夫變換和廣義霍夫變換(generalized hough transform),他們投票的權(quán)重都是相等的,下一節(jié)討論概率空間中的霍夫投票,顧名思義他們的投票權(quán)重是不確定的。

    ? ? ?先來(lái)看下霍夫變換(hough transform),霍夫變換一般適用于有解析表達(dá)式的幾何形狀目標(biāo)檢測(cè),例如直線(xiàn)、圓、橢圓等。用個(gè)統(tǒng)一的解析表達(dá)式來(lái)表達(dá)他們:f(x,alpha)=0,其中x 是圖形上點(diǎn),alpha則是解析表達(dá)式參數(shù),比如歐式坐標(biāo)系中直線(xiàn)的參數(shù)就是斜率m和截距c(或者極坐標(biāo)系中的theta和ρ),圓的參數(shù)則是原點(diǎn)和半徑。霍夫變換的核心就是把圖像空間的直線(xiàn)變換到參數(shù)空間(也叫霍夫空間),比如一個(gè)直線(xiàn)y=mx+c,給定一個(gè)點(diǎn)(x’,y’),把它代入直線(xiàn)方程,得到y(tǒng)’=mx’+c,其實(shí)此時(shí)仍然是一條直線(xiàn)(在參數(shù)空間的直線(xiàn),斜率是-x’,截距是y’),圖像空間和霍夫空間的對(duì)應(yīng)關(guān)系如(圖一)所示:


    (圖一)

    ? ? (圖一)中左圖是圖像空間,右圖是霍夫空間(參數(shù)空間),對(duì)于圖像空間中線(xiàn)段pq上任意一點(diǎn)帶入直線(xiàn)方程后,都可以在霍夫空間中得到另外一條直線(xiàn),二者是對(duì)偶的,比如如(圖一)所示,把兩個(gè)端點(diǎn)帶入后,在右圖中得到的兩個(gè)對(duì)偶直線(xiàn),而且斜率是負(fù)的。現(xiàn)在問(wèn)題來(lái)了,機(jī)器是怎么知道pq是一條直線(xiàn)(假設(shè)還有其他噪聲點(diǎn)存在的話(huà))?我們不知道斜率也不知道截距,我們要做的就先假設(shè)圖像中有一條直線(xiàn),其方程為y=mx+c,我們要求他的參數(shù),然后把圖像空間中的每個(gè)點(diǎn)都代入直線(xiàn)方程,然后在霍夫空間里都產(chǎn)生了一條對(duì)偶直線(xiàn),因?yàn)閳D像空間中的那條直線(xiàn)上的點(diǎn)共用一個(gè)斜率m和截距c,因此他們的對(duì)偶直線(xiàn)必然相交于一點(diǎn),也就是說(shuō)m,c的值是唯一的,在右圖中也能體現(xiàn)出來(lái)。

    直線(xiàn)的霍夫變換檢測(cè)核心思想就是這些,但是考慮到斜率截距式直線(xiàn)表示法不能表示所有直線(xiàn),比如直線(xiàn)X=CONSTANT時(shí),斜率無(wú)線(xiàn)大,霍夫空間里無(wú)法表示此點(diǎn),因此我們把直線(xiàn)方程轉(zhuǎn)換成極坐標(biāo)表示的形式:,思想還是一樣,區(qū)別就是把參數(shù)m,c轉(zhuǎn)換成了theta和ρ),另外圖像空間中的點(diǎn)對(duì)應(yīng)的霍夫空間的幾何形狀不是直線(xiàn),而是曲線(xiàn),如(圖二)所示:



    (圖二)

    ? ? (圖二)中右圖的亮點(diǎn)就是我們要求的參數(shù),但是怎么求的,求交點(diǎn)?那也太麻煩了,霍夫投票方法此時(shí)就要登場(chǎng)了,你霍夫空間中的曲線(xiàn)也是個(gè)圖像嘛,我有的是內(nèi)存,對(duì)于個(gè)曲線(xiàn)上的每個(gè)點(diǎn)我都用一個(gè)字典來(lái)表示你們,字典索引就用霍夫空間的坐標(biāo)(theta和ρ)來(lái)檢索,字典的值表示該坐標(biāo)上有多少個(gè)曲線(xiàn)點(diǎn)(字典的學(xué)名叫累加器:accumulator)。對(duì)于(圖二)中的那個(gè)亮點(diǎn)對(duì)應(yīng)的字典值肯定很大,其實(shí)我們就是找大的最大值,峰值表示圖像空間中的很多點(diǎn)共用一個(gè)參數(shù)。該算法的實(shí)現(xiàn)步驟如下偽代碼所示:

    For each edge pixel (x,y) ?in image

    ? For θ= -90 to 90

    ? ? ? ρ= x cosθ+ y sin θ

    ? ? ? ++ H(iθ, jρ);

    ? ?end

    end

    直觀來(lái)說(shuō)就是你給我一個(gè)圖像空間中的點(diǎn),我就在霍夫空間中計(jì)算很多字典,然后相同位置上加1,簡(jiǎn)單的說(shuō)就是把霍夫空間分割了,分割的越精細(xì)越好,但是分的越細(xì)計(jì)算量也越大,畢竟圖像點(diǎn)很多,這個(gè)平衡讀者根據(jù)情況自己把握吧。累加器的示意圖如(圖三)所示:


    (圖三)

    圓和橢圓也都是類(lèi)似步驟,只不過(guò)圓有三個(gè)參數(shù),而橢圓有5個(gè)參數(shù),計(jì)算量更大。此算法實(shí)現(xiàn)在opencv里也有,直接調(diào)用一個(gè)函數(shù)即可,在此不多說(shuō),直接給一個(gè)OpenCV自帶的圖像進(jìn)行檢測(cè)直線(xiàn)的結(jié)果和他的霍夫空間示意圖,如(圖四)和(圖五)所示:

    (圖四)


    (圖五)


    ? ? (圖五)霍夫空間中的峰值點(diǎn)可能不嚴(yán)格的在同一個(gè)坐標(biāo)上,也就說(shuō)圖像空間中直線(xiàn)上的點(diǎn)并不嚴(yán)格的在同一直線(xiàn)上,我們要容許一部分誤差的存在,判斷峰值點(diǎn)是個(gè)技巧活。

    下面進(jìn)入廣義霍夫變換(Generalized Hough Transform)。

    ? ? ? 前面也說(shuō)了,霍夫變換只適用于具有解析表達(dá)式的形狀,對(duì)于一般形狀則無(wú)能為力,一般形狀沒(méi)有解析表達(dá)式,沒(méi)有解析表達(dá)式,那我們?cè)趺催M(jìn)入霍夫空間里呢?沒(méi)有霍夫空間,那我們?cè)趺赐镀?#xff1f;不投票怎么來(lái)檢測(cè)物體?有條件就上,沒(méi)條件創(chuàng)造條件也要上。一般物體雖然沒(méi)有解析表達(dá)式,但是他們有邊緣,說(shuō)的多一些,MARR教授一開(kāi)始就說(shuō)邊緣是人眼檢測(cè)判斷物體的重要條件之一,所以計(jì)算機(jī)視覺(jué)早期出現(xiàn)了很多邊緣檢測(cè)算法。有了邊緣就可以創(chuàng)造出切向量,切向量可以做參數(shù)嗎?仔細(xì)考慮一下,信息太少,ballard在1980年提出了廣義霍夫變換(generalized hough transform),它利用了如(圖六)所示的參數(shù):

    (圖六)


    ? ? ?(圖六)中的alpha表示參數(shù),可以看出參數(shù)很多,參數(shù)空間肯定是高維的,不過(guò)不管他多少維,方法和上面類(lèi)似,參數(shù)空間中投票嘛,考慮到這個(gè)方法選擇了一個(gè)參考點(diǎn),把圖像中的點(diǎn)到參考點(diǎn)的距離和相對(duì)方位信息作為參數(shù)來(lái)檢測(cè)物體,細(xì)心的同學(xué)可能感覺(jué)出來(lái)了,他和Hu moment(Hu矩)有些相似的地方,他們都需要一些模版來(lái)提取形狀參數(shù),但是它比Hu moment用到的信息多,而且是在霍夫空間中投票,可以抵抗一些噪聲、遮擋因素的影響,因此他的魯棒性更好。投票流程如(圖七)所示,其中A[a]為投票字典(累加器):

    (圖七)

    它的檢測(cè)效果如(圖八)所示:


    (圖八)

    ? ? 這節(jié)算是做個(gè)鋪墊吧,為下節(jié)的霍夫投票在計(jì)算機(jī)視覺(jué)中的應(yīng)用打下基礎(chǔ),因?yàn)榻裉斓耐镀笔恰肮健钡?#xff0c;每票的權(quán)重都一樣,當(dāng)遇到復(fù)雜問(wèn)題時(shí),比如部件的參數(shù)去投票時(shí),權(quán)重需要區(qū)分對(duì)待,這些放在下個(gè)小節(jié)來(lái)說(shuō)。廣義霍夫變換的代碼網(wǎng)上也有,如搜不到的同學(xué)想要的話(huà),可以留言索取。


    參考文獻(xiàn):

    GENERALIZING THE HOUGH TRANSFORM TO DETECTARBITRARY SHAPES


    目標(biāo)檢測(cè)(Object Detection)原理與實(shí)現(xiàn)(三)


    基于霍夫森林的目標(biāo)檢測(cè)



    ? ? ? 上節(jié)說(shuō)了霍夫變換(HT)和廣義霍夫變換(GHT),今天就接著廣義霍夫變換說(shuō)下去,在廣義霍夫變換中,每個(gè)投票元素(比如邊緣像素中的點(diǎn))在霍夫空間中累加投票的權(quán)重是相等的,每個(gè)元素投票的權(quán)重互不影響,這其實(shí)是假設(shè)了圖像空間中的每個(gè)像素點(diǎn)是獨(dú)立的,但現(xiàn)實(shí)是這樣的嗎?答案:不是,尤其是牽扯到我們今天的基于部件的投票時(shí),這種投票元素互相獨(dú)立的觀點(diǎn)更站不腳,學(xué)過(guò)概率圖模型(probabilistic graphic model)的都知道,圖模型里有一種V結(jié)構(gòu),如(圖一)所示:



    (圖一)

    ? ? ? ? X1,X2是投票元素,Y是我們?cè)诨舴蚩臻g中的投票,假設(shè)我們觀察Y時(shí),或者說(shuō)給定Y時(shí),就是觀察圖像空間中的目標(biāo),假設(shè)X1和X2是目標(biāo)生成的,X1和X2是獨(dú)立的嗎?很明顯不是,這些元素應(yīng)該向Y投票的權(quán)重應(yīng)該更大才說(shuō)的通,而其他元素投更小的權(quán)重(圖一也可以看出,當(dāng)給定Y=1時(shí),X1,X2的概率由0.25提高0.33)。這就是Judea peal提出的explain away問(wèn)題(Even if two hidden causes are independent in the prior, they can become dependent when we observe an effect that they can both influence)。既然有現(xiàn)成的框架:概率圖模型,或者嚴(yán)格的說(shuō)概率模型,那我們就改進(jìn)廣義霍夫投票,進(jìn)入概率空間。

    ? ? ? 先來(lái)說(shuō)說(shuō)霍夫森林吧,霍夫森林是Juergen Gall在2009發(fā)表在CVPR上的。它通過(guò)構(gòu)建一個(gè)隨機(jī)森林把圖像塊(patch appearance)直接映射成對(duì)目標(biāo)重心位置的投票,找到了目標(biāo)重心也就找到了目標(biāo),其他做法也有構(gòu)建codebook來(lái)作為投票元素。無(wú)論用什么方法,我們都可以把他們看成像霍夫變換中圖像空間里的像素點(diǎn)一樣的投票元素,然后進(jìn)入霍夫空間找峰值點(diǎn)來(lái)檢測(cè)目標(biāo)。別忘了今天的主題是進(jìn)入概率空間進(jìn)行投票,下面來(lái)看看作者是怎么進(jìn)入概率空間的。作者構(gòu)建一個(gè)隨機(jī)森林模型,叉開(kāi)一下,隨機(jī)森林由N個(gè)決策樹(shù)構(gòu)成,這N個(gè)決策時(shí)互相獨(dú)立,分別來(lái)對(duì)目標(biāo)分類(lèi),最終由N個(gè)分類(lèi)的數(shù)目類(lèi)別多少來(lái)決定目標(biāo)類(lèi)別。每個(gè)決策樹(shù)的訓(xùn)練樣本是

    ,其中I是目標(biāo)的一個(gè)局部圖像塊(patch),c是它的類(lèi)標(biāo)簽(1表示是目標(biāo),0表示背景),d表示bouding box內(nèi)圖像塊到目標(biāo)中心的偏移(offset)矢量(2D),這個(gè)對(duì)后面的目標(biāo)重心投票起著很大的作用;隨機(jī)樹(shù)生長(zhǎng)的目的是使節(jié)點(diǎn)樣本的類(lèi)別和offset不純度最小化,這兩項(xiàng)的具體定義如(圖二)中的公式(2)、(3)所示:



    (圖二)

    ? ? 節(jié)點(diǎn)上的分裂準(zhǔn)則采用了像素值比較的方法,通過(guò)交替的最小化(公式一)來(lái)完成決策樹(shù)的構(gòu)建。


    (公式一)

    ? ? ?最后葉子節(jié)點(diǎn)記錄兩項(xiàng)重要的信息:CL表示正樣本比例,DL樣本偏移的集合,這兩項(xiàng)(正樣本比例和offset矢量)就是投票元素。另外,訓(xùn)練的時(shí)候作者也采用類(lèi)似級(jí)聯(lián)的方式,forest=5trees+5trees+5trees,即第一次5棵樹(shù)生長(zhǎng)完成后,一些分類(lèi)比較困難的樣本再用來(lái)訓(xùn)練下一批樹(shù)。檢測(cè)階段,從圖像上提取patch,然后在隨機(jī)森林中的每個(gè)決策樹(shù)上進(jìn)行判處理,接著在霍夫空間中進(jìn)行投票,對(duì)圖像進(jìn)行密集塊采樣,最后輸出霍夫圖像。不過(guò)話(huà)說(shuō)回來(lái),概率空間體現(xiàn)在何處?關(guān)鍵點(diǎn)就在于如何投票,假設(shè)E(X)表示目標(biāo)重心在位置X的隨機(jī)事件的話(huà),表示給定圖像塊時(shí)目標(biāo)重心在位置X的概率,利用貝葉斯公式和一些等價(jià)替換,該概率可以分解如(公式二)所示:



    (公式二)

    ? ? ? (公式二)的最后一行有兩項(xiàng),第一項(xiàng)可以結(jié)合決策樹(shù)葉子節(jié)點(diǎn)的DL用pazen窗來(lái)估計(jì),而第二項(xiàng)則直接用葉子節(jié)點(diǎn)的CL來(lái)計(jì)算。這樣(公式二)又可轉(zhuǎn)換為(公式三):


    (公式三)

    ? ? 不過(guò)(公式三)只是一個(gè)決策樹(shù)的概率,考慮用到是隨機(jī)森林,對(duì)所有決策樹(shù)來(lái)個(gè)平均,計(jì)算下平均概率,如(公式四)所示:


    (公式四)

    ? ? ?這樣就完成了一個(gè)patch在概率空間對(duì)其附近目標(biāo)重心的投票,累加所有patch的投票如(公式五)所示:


    (公式五)

    ? ? ? ?檢測(cè)結(jié)果如(圖三)所示,不過(guò)要說(shuō)的是,檢測(cè)到重心并不能說(shuō)明會(huì)嚴(yán)格的框住目標(biāo),對(duì)于不同尺度的目標(biāo),需要區(qū)分對(duì)待,換句話(huà)要增加一個(gè)參數(shù)scale,如果還想考慮bounding box的aspect ratio,那就在增加一個(gè)參數(shù),不過(guò)計(jì)算量也會(huì)隨著參數(shù)增加而指數(shù)增長(zhǎng)。


    (圖三)

    ? ? ? 最后提下patch的構(gòu)成,作者在實(shí)驗(yàn)中使用的patch成分為:3 channels were used (intensity, absolute valueof x- and y-derivatives),實(shí)驗(yàn)結(jié)果不錯(cuò),但缺點(diǎn)也如上所述,實(shí)現(xiàn)代碼Juergen Gall首頁(yè)已掛出,還有一些細(xì)節(jié)實(shí)現(xiàn)請(qǐng)查閱參考文獻(xiàn)。霍夫森林雖然進(jìn)入了概率空間進(jìn)行投票,但是畢竟是從隨機(jī)森林中計(jì)算出來(lái)的,霍夫投票概率的好壞取決于隨機(jī)森林獲取的概率,而且投票元素和目標(biāo)之間沒(méi)有形成雙向因果推理,這是他的瑕疵,結(jié)合著概率圖模型,我們可以把概率空間中的霍夫投票理論整的更優(yōu)美些,并且降低與隨機(jī)森林之間的耦合度,使之可以擴(kuò)展到任意概率獲取方式,所以基于霍夫投票的目標(biāo)檢測(cè)打算再繼續(xù)擴(kuò)展一節(jié)。


    參考文獻(xiàn):

    Class-Specific Hough Forests for ObjectDetection. Juergen Gall



    目標(biāo)檢測(cè)(Object Detection)原理與實(shí)現(xiàn)(四)

    基于ASM的目標(biāo)檢測(cè)


    ? ? ? ASM(Active Shape Model:主動(dòng)形狀模型)是Tim Cootes于1995年提出來(lái)的,其實(shí)是在1992年提交,1994年被接受,1995被發(fā)表的。ASM方法是通過(guò)尋找一系列匹配點(diǎn)來(lái)檢測(cè)形狀的方法,和單純的基于shift(或者surf)特征點(diǎn)匹配的方法不一樣,后者是通過(guò)互相獨(dú)立的shift(或者surf)特征點(diǎn)匹配來(lái)做目標(biāo)檢測(cè),當(dāng)模版圖像和待匹配圖像之間的大多數(shù)shift(或者surf)匹配上了,就宣稱(chēng)目標(biāo)找到,優(yōu)點(diǎn)是仿射不變(旋轉(zhuǎn),縮放,簡(jiǎn)單的仿射變換),缺點(diǎn)是發(fā)生目標(biāo)發(fā)生形變的時(shí)候,此種方法會(huì)失效。而ASM可適用于有形變的目標(biāo)檢測(cè),這種方法和上節(jié)的霍夫投票的方法都是基于統(tǒng)計(jì)學(xué)習(xí)的框架來(lái)做的,ASM通過(guò)前期訓(xùn)練 (build階段)來(lái)獲得一個(gè)目標(biāo)的部件輪廓點(diǎn)分布模型,檢測(cè)階段(fit)通過(guò)匹配各個(gè)部件輪廓點(diǎn)來(lái)完成目標(biāo)檢測(cè),咋一聽(tīng),也是基于特征點(diǎn)匹配的,但是這些特征點(diǎn)之間不是獨(dú)立的,所有特征點(diǎn)都在小范圍內(nèi)尋找配對(duì)點(diǎn),當(dāng)所有配對(duì)之間的距離之和最小時(shí)就宣稱(chēng)完成了目標(biāo)檢測(cè),也就是說(shuō)每個(gè)特征點(diǎn)配對(duì)都最滿(mǎn)意咯。同樣搜索也會(huì)陷入局部最小,只有模型初始位置選的好,然后模型上的每個(gè)點(diǎn)小范圍內(nèi)搜索下就完成了匹配,因此初始的位置預(yù)估的好壞也影響著ASM的性能,這是他的缺點(diǎn),一般要借助于其他方法來(lái)進(jìn)行初始位置的預(yù)估,比如人臉匹配就要接助于cascade等方法來(lái)檢測(cè)到人臉的位置,然后進(jìn)行ASM匹配。TimCootes后來(lái)還提出了AAM(ActiveAppearance model:主動(dòng)外觀模型)算法,顧名思義偏重于紋理而不是形狀,二者的主要區(qū)別如下:

    ? ? ?1、ASM僅使用一小塊圖像區(qū)域的紋理來(lái)尋找特征點(diǎn),而AAM則使用整個(gè)特征點(diǎn)區(qū)域的圖像。

    ? ? ?2、ASM搜索特征點(diǎn)的準(zhǔn)則是沿著圖像邊界的法線(xiàn)來(lái)尋找,而AAM僅在當(dāng)前位置采樣。

    ? ? ?3、ASM是為了尋找所有特征點(diǎn)匹配距離最小,AAM則是使得合成模型圖像和目標(biāo)圖像匹配代價(jià)最小。

    下面就來(lái)看看ASM的工作原理吧:

    一、模型的建立(build)

    第一步:選擇合適的特征點(diǎn)

    選擇好的特征點(diǎn)對(duì)匹配起著決定性作用。好的特征點(diǎn)大概應(yīng)該或多或少滿(mǎn)足如下幾點(diǎn):邊緣點(diǎn)、曲率大的、T型連接點(diǎn)和以上這些點(diǎn)的連線(xiàn)上的等分點(diǎn),如(圖一)所示:

    (圖一)

    這些特征點(diǎn)是有序的,通過(guò)一系列特征點(diǎn)來(lái)描述物體,把這些特征點(diǎn)的坐標(biāo)串起來(lái)形成一個(gè)2n維的向量:

    ,注意坐標(biāo)不是成對(duì)排列的,如上述表達(dá)式所示,先是排列X,后排列Y。而這只是一個(gè)圖像實(shí)例形狀的描述,假設(shè)我們的訓(xùn)練集有S個(gè)圖像,那么這S個(gè)2n維的向量則構(gòu)成了2n維的向量分布,同樣也可以構(gòu)成一個(gè)2n維的向量空間,說(shuō)到向量空間就有點(diǎn)類(lèi)似于稀疏編碼的基咯,這個(gè)話(huà)題就此打住,感興趣的可以翻看前面關(guān)于稀疏編碼的博文。這個(gè)向量分布可以描述大多數(shù)的圖像模型,同樣也可以生成一個(gè)類(lèi)似于原始訓(xùn)練集的圖像目標(biāo)實(shí)例。如果這個(gè)實(shí)例很像訓(xùn)練集中的圖像形狀樣子,那么這個(gè)分布是可靠的。那怎么來(lái)得到這個(gè)分布呢?

    ? ?考慮到S個(gè)手工標(biāo)注2n維的向量冗余信息很大,可以對(duì)其采用PCA方法進(jìn)行降維。相當(dāng)于在這個(gè)2n維的向量空間里找到幾個(gè)空間軸來(lái)描述分布。基于此作者直接假設(shè)了下面的一個(gè)模型,如(公式一)所示:



    (公式一)

    其中P是包含了前t個(gè)主成分的協(xié)方差矩陣,也就是t個(gè)協(xié)方差的特征向量,b是一個(gè)t維的向量,用來(lái)控制特征點(diǎn)形狀的變化,可以用(公式二)在訓(xùn)練集中求取,這步還有個(gè)問(wèn)題,就是PCA中主成分個(gè)數(shù)t的選取,有兩種方法:1)選擇前s個(gè);2)選擇前k%的分量,這里作者推薦使用第二種方法。


    (公式二)

    當(dāng)b為0時(shí),X-bar(x上面一橫的那個(gè)符號(hào))即坐標(biāo)原點(diǎn)(平均形狀),其實(shí)是很好理解哈。但這里b不要太大,如果太大,會(huì)導(dǎo)致整個(gè)形狀變化超出人臉的變化范圍,會(huì)使人變得異常猙獰,大家懂的。。。所以作者這里做了約束,如(圖二)和(公式三)所示:



    (圖二)


    (公式三)

    ?

    二、檢測(cè)階段(fix)

    ? ? ? ? 這個(gè)階段就像剛開(kāi)始說(shuō)的,先用其他第三方方法檢測(cè)到目標(biāo)的大概位置,然后把模型初始位置選在那,接著完成兩個(gè)階段的任務(wù):一,模型輪廓大概匹配,二,特征點(diǎn)匹配 。模型輪廓大概匹配階段就是在模型初始位置定位好后,對(duì)模型進(jìn)行一些旋轉(zhuǎn),平移,縮放的調(diào)節(jié),使得模型的朝向和大小和圖像中的目標(biāo)大概差不多,如(公式四)所示:


    (公式四)

    ? ? ? ?其中X表示對(duì)應(yīng)待檢測(cè)圖像中調(diào)整后的模型的點(diǎn),(Xt,Yt)、s、theta分別表示平移,縮放,旋轉(zhuǎn)變換,這些變換在圖像處理中經(jīng)常用到的,具體如(公式五)所示:

    (公式五)


    ? ? ? ?對(duì)于公式五中的參數(shù)大家可能比較關(guān)系怎么求取這些參數(shù),在圖像中可以通過(guò)幾對(duì)對(duì)應(yīng)點(diǎn)來(lái)求解,這里給給出一些近似方法,這些參數(shù)的求取可按(圖三)所述步驟來(lái)完成:



    (圖三)

    模型輪廓大概匹配之后就進(jìn)行特征點(diǎn)匹配,具體來(lái)說(shuō)就是沿著輪廓邊緣法線(xiàn)的方向進(jìn)行搜索、匹配,匹配的方法可以使用圖像塊的SSD方法,SSD就是圖像塊之間的像素點(diǎn)差的平方和。也可以使用類(lèi)似sift的方法來(lái)匹配,但是sift被申請(qǐng)了專(zhuān)利,沒(méi)法免費(fèi)使用,本節(jié)的例子使用了類(lèi)似sift的方法:Histogram Array Transform。

    當(dāng)所有匹配點(diǎn)之間的歐式距離和最短時(shí),就完成了目標(biāo)檢測(cè)(匹配)。如(公式六)所示:


    (公式六)

    其中Y表示待檢測(cè)圖像中每個(gè)模型點(diǎn)附近的圖像點(diǎn),找到Y(jié),再利用Y反求b,并且更新b,直到收斂。目標(biāo)點(diǎn)搜尋匹配準(zhǔn)則如(圖四)所示:


    (圖四)

    最后對(duì)上述來(lái)個(gè)總結(jié),整體的匹配流程如(圖五)所示:

    (圖五)


    ? ? ? 點(diǎn)匹配過(guò)程在具體實(shí)現(xiàn)中也可以采用金字塔的方式,有粗到精來(lái)加快目標(biāo)點(diǎn)的搜索過(guò)程,另外還有些快速判斷先驗(yàn)信息,比如先驗(yàn)信息認(rèn)為特征點(diǎn)主要是圖像的強(qiáng)邊緣點(diǎn),并且圖像灰度的梯度服從高斯分布,只要找到模型特征點(diǎn)附近梯度最大的值,即認(rèn)為是特征點(diǎn)所在的位置。但有時(shí)這種信息會(huì)帶來(lái)誤判,如實(shí)驗(yàn)效果(圖六)和(圖七)所示:

    ?

    (圖六) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(圖七)


    ? ? (圖七)紅圈處的眼鏡邊緣處強(qiáng)的邊緣點(diǎn)被誤判成特征點(diǎn)。因此該算法還有很多該改進(jìn)的地方,雖然如此,ASM仍然是獲取人臉特征的強(qiáng)有力的方法,這節(jié)寫(xiě)的比較倉(cāng)促,如果有錯(cuò)誤的地方,請(qǐng)指出,謝謝。


    參考文獻(xiàn):

    ? ? ? An Introduction to Active Shape Models. Tim Cootes

    ? ? ? Locating Facial Features with an Extended Active ShapeModel.Stephen Milborrow

    ? ? ? Comparing Active Shape Models with Active Appearance Models.TimCootes

    ? ? ? Markov Random Field Modeling in Image Analysis. Stan Z.Li

    ? ? ?http://blog.sina.com.cn/s/blog_6d8e91f401015pv5.html


    轉(zhuǎn)載請(qǐng)注明來(lái)源:http://blog.csdn.net/cuoqu/article/details/9154685

    目標(biāo)檢測(cè)(Object Detection)原理與實(shí)現(xiàn)(五)


    基于Cascade分類(lèi)器的目標(biāo)檢測(cè)


    ? ? ? 從今天開(kāi)始進(jìn)入基于機(jī)器學(xué)習(xí)的目標(biāo)檢測(cè),前幾節(jié)雖然也接觸了一些機(jī)器學(xué)習(xí)的方法,但它主要是做輔助工作,機(jī)器學(xué)習(xí)的方法和非機(jī)器學(xué)習(xí)的方法結(jié)合在一起使用,說(shuō)到這想起來(lái)前幾天看到一位博士師兄發(fā)的笑話(huà),說(shuō)的是百度實(shí)驗(yàn)室:

    ? ? ?Theory is when you know everthing but nothing works.

    ? ? ?Practice is when everything works but no one knows why.

    ? ? ?In our lab,theory and practice are ?combined:nothing works and no one knows why.

    ? ? ? ? 目前而言,甭管理論好壞吧,只要實(shí)用就行,實(shí)用的未必是好理論,就像深度學(xué)習(xí)那樣,不說(shuō)太遠(yuǎn)了,繼續(xù)今天的話(huà)題,Cascade是Paul Viola發(fā)表在2001年的CVPR上,2002年Rainer Lienhart等人改進(jìn)了Paul的方法,主要是改進(jìn)了特征并且分析了不同的boosting算法對(duì)分類(lèi)性能的影響和計(jì)算復(fù)雜度,OpenCV實(shí)現(xiàn)的Cascade的分類(lèi)器也是Rainer的改進(jìn)版本。所謂不同的boosting算法就是說(shuō)不同的Adaboost弱分類(lèi)器,比如Discrete, Real 和 Gentle Adaboost弱分類(lèi)器,而Cascade(級(jí)聯(lián))分類(lèi)器就是基于多個(gè)Adaboot弱分類(lèi)器對(duì)不同的特征進(jìn)行依次處理(分類(lèi))來(lái)完成對(duì)目標(biāo)的檢測(cè),簡(jiǎn)單的說(shuō)有多個(gè)Adaboost串起來(lái),然后提取每個(gè)平滑窗(sliding window)上的不同特征,把這些特征依次放進(jìn)不同的Adaboost弱分類(lèi)器里判斷,如果所有的弱分類(lèi)器都判斷正標(biāo)簽(1),則表示該該平滑窗內(nèi)檢測(cè)到目標(biāo),如(圖一)所示。這樣做的好處是不但通過(guò)多個(gè)弱分類(lèi)器來(lái)形成一個(gè)強(qiáng)的級(jí)聯(lián)分類(lèi)器,而且可以減少運(yùn)算量,比如當(dāng)一個(gè)平滑窗第一個(gè)特征沒(méi)有通過(guò)第一個(gè)分類(lèi)器,那么就沒(méi)有必要繼續(xù)運(yùn)算下去,直接拒絕掉當(dāng)前平滑窗,轉(zhuǎn)而處理下一個(gè)平滑窗,事實(shí)上作者的目的就是為了快速拋棄沒(méi)有目標(biāo)的平滑窗,從而達(dá)到快速檢測(cè)目標(biāo)。



    (圖一)

    ? ? ? 知道了Cascade強(qiáng)分類(lèi)器是基于Adaboost算法的,那我們先看下Adaboost弱分類(lèi)器的工作原理吧,直接上圖,很簡(jiǎn)單,如圖二所示:


    (圖二)

    ? ? ? ?但OpenCV里還不是用的這個(gè)Adaboost,而是用的Rainer等人改進(jìn)的Gentle Adaboost弱分類(lèi)器,Gentle Adabboost弱分類(lèi)器的工作原理如(圖三)所示:


    (圖三)

    ? ? ? ? Rainer等人比較了DiscreteAdaboost,Real Adaboost,Gentle Adaboost弱分類(lèi)器,發(fā)現(xiàn)Gentle Adaboost弱分類(lèi)器比其他兩種效果,但是作者沒(méi)有詳細(xì)討論為什么比他們好,作者只是給出了實(shí)際檢測(cè)的性能比較分析圖,我也沒(méi)看出為什么,如果你們知道為什么,請(qǐng)毫不吝嗇的告知,在此先謝過(guò)了,為了嚴(yán)謹(jǐn),把三種分類(lèi)器的性能分析比較圖也發(fā)出來(lái)吧,如(圖四)所示:


    (圖四)

    ? ? ? ? 其中GAB表示Gentle Adaboost,RAB表示Real Adaboost,DAB表示Discrete Adaboost。

    ? ? ? ? 好了,介紹完了分類(lèi)器的工作原理,下面來(lái)看下使用的是什么特征。2001年P(guān)aul Viola的CVPR上用的幾個(gè)不同的特征很簡(jiǎn)單,就是平滑窗內(nèi)某些區(qū)域像素和的差值,比如(圖五)所示的,外圍黑色框表示平滑窗,窗內(nèi)固定的位置有個(gè)黑白相間的矩形區(qū)域,黑色表示該位置上的像素每個(gè)權(quán)重都是負(fù)一(-1),白色位置上的像素權(quán)重為正一(1),然后權(quán)重于像素卷積得到的值就是特征值,就一個(gè)數(shù)字(說(shuō)的白話(huà)一點(diǎn),就是每個(gè)像素值乘上權(quán)值后,然后黑白相間的矩形區(qū)域相加),不同的黑白相間的矩形區(qū)域的計(jì)算得到不同的特征,作者還提出一個(gè)加速計(jì)算這個(gè)特征的方法,就是積分圖,在此不說(shuō)了,網(wǎng)上很多。


    (圖五)

    ? ? ? ? 同樣,OpenCV的實(shí)現(xiàn)也沒(méi)有使用上述特征,而是使用了2002年Rainer 等人改進(jìn)的Harr-like特征,計(jì)算方法也類(lèi)似,如圖六所示:


    (圖六)

    ? ? ? ?也是矩形區(qū)域,不過(guò)不同的特征變化的樣式多了一些,Rainer也提出了一些快速計(jì)算方法,具體閱讀參考論文吧。有了特征,有了級(jí)聯(lián)分類(lèi)器,就是訓(xùn)練和檢測(cè)了。

    ? ? ? ?直接調(diào)用OpenCV的例子程序檢測(cè)的效果如(圖七)所示:


    (圖七)

    ? ? ? ? 這節(jié)比較簡(jiǎn)單,只所以要說(shuō)這個(gè)cascade分類(lèi)器,是因?yàn)榍耙还?jié)用到了這個(gè)分類(lèi)器用于檢測(cè)人臉,而且后續(xù)也會(huì)出現(xiàn)cascade級(jí)聯(lián)的思想,也可以給自己查漏補(bǔ)缺,寫(xiě)作倉(cāng)促,難免有錯(cuò),如發(fā)現(xiàn)請(qǐng)指出,謝謝。


    ? ? ?有人做過(guò)測(cè)試:Opencv的正臉檢測(cè)精度是68.84058%

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total images 1104

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Total correct ?760

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Total false negatives 314

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total false positives 30%

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?accurate ?68.84058

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 側(cè)臉識(shí)別精度是33.00091

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total images 1103
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total correct ?364
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total false ?negatives 721
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total false ?positives 18
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?% accurate 33.00091


    參考文獻(xiàn):

    ? ? ? [1]Rapid Object Detection using a Boosted Cascade of Simple Features. Paul Viola

    ? ? ? [2]Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object ?Detection. Rainer Lienhart, Alexander Kuranov, Vadim Pisarevsky


    轉(zhuǎn)載請(qǐng)注明來(lái)源:http://blog.csdn.net/cuoqu/article/details/9173645

    目標(biāo)檢測(cè)(Object Detection)原理與實(shí)現(xiàn)(六)


    基于形變部件模型(Deformable Part Models)的目標(biāo)檢測(cè)



    ? ? ? ?上節(jié)說(shuō)了基于cascade的目標(biāo)檢測(cè),cascade的級(jí)聯(lián)思想可以快速拋棄沒(méi)有目標(biāo)的平滑窗(sliding window),因而大大提高了檢測(cè)效率,但也不是沒(méi)缺點(diǎn),缺點(diǎn)就是它僅僅使用了很弱的特征,用它做分類(lèi)的檢測(cè)器也是弱分類(lèi)器,僅僅比隨機(jī)猜的要好一些,它的精度靠的是多個(gè)弱分類(lèi)器來(lái)實(shí)行一票否決式推舉(就是大家都檢測(cè)是對(duì)的)來(lái)提高命中率,確定分類(lèi)器的個(gè)數(shù)也是經(jīng)驗(yàn)問(wèn)題。這節(jié)就來(lái)說(shuō)說(shuō)改進(jìn)的特征,盡量使得改進(jìn)的特征可以檢測(cè)任何物體,當(dāng)然Deep Learning學(xué)習(xí)特征很有效,但今天還是按論文發(fā)表順序來(lái)說(shuō)下其他方法,(服務(wù)器還沒(méi)配置好,現(xiàn)在還不能大批跑Deep Learning ^.^),在第四節(jié)說(shuō)了ASM并且簡(jiǎn)單的提了下AAM,這兩個(gè)模型其實(shí)就是形變模型(deform model),說(shuō)到基于形變模型檢測(cè)物體的大牛,就不得說(shuō)說(shuō)芝加哥大學(xué)教授Pedro F. Felzenszwalb,Pedro發(fā)表很多有關(guān)基于形變部件來(lái)做目標(biāo)檢測(cè)的論文,并靠這個(gè)獲得了VOC組委會(huì)授予的終身成就獎(jiǎng),另外它早期發(fā)表的《Belief propagation for early vision》也很出名,雖然比不上Science那樣的開(kāi)辟新領(lǐng)域的Paper,但在不犧牲精度的情況下大大提高了BP算法的運(yùn)行效率,這個(gè)BP算法不是神經(jīng)網(wǎng)絡(luò)的BP算法,而是概率圖模型里的推理求解方法(最大后驗(yàn)概率),它也被用在了后面要說(shuō)基于霍夫推理的目標(biāo)檢測(cè)。貌似Pedro很擅長(zhǎng)做這種事情,他的另外一篇論文《Cascade Object Detection with Deformable Part Models》也是不犧牲精度的情況下把基于形變部件做目標(biāo)檢測(cè)的效率提高了20倍,今天就來(lái)學(xué)習(xí)一下這種基于形變部件的目標(biāo)檢測(cè)。

    ? ? ? ?基于形變部件的目標(biāo)檢測(cè)是現(xiàn)在除了深度學(xué)習(xí)之外的還相對(duì)不錯(cuò)的目標(biāo)檢測(cè)方法,先來(lái)看下為什么要使用形變部件,在(圖一)中,同一個(gè)人的不同姿態(tài),試問(wèn)用前面幾節(jié)中的什么方法可以檢測(cè)到這些不同姿態(tài)的人?閾值不行,廣義霍夫變換行嗎?人的姿態(tài)是變換無(wú)窮的,需要太多的模板。霍夫森林投票?貌似可以,但是霍夫森立的特征是圖像塊,只適用于一些形變不大的物體,當(dāng)圖像塊內(nèi)的形變很大時(shí)同樣不太適用。那么ASM可以嗎?想想也是和廣義霍夫變換一樣,需要太多的均值模板。歸根結(jié)底就是我們沒(méi)有很好的形狀描述方法,沒(méi)有好的特征。而Pedro幾乎每發(fā)表一篇論文就改進(jìn)一下形狀描述的方法,最終由簡(jiǎn)單的表示方法到語(yǔ)法形式的表示方法,其演化過(guò)程可以在參考文獻(xiàn)[4]中看出,參考文獻(xiàn)[4]是Pedro的博士論文。



    (圖一)

    ? ? ? ?既然上節(jié)中的幾種方法都不能解決大形變目標(biāo)的檢測(cè)問(wèn)題,那基于形變部件的目標(biāo)檢測(cè)也該上場(chǎng)了。Pedro的五篇關(guān)于目標(biāo)檢測(cè)的頂級(jí)paper,小生就不一一說(shuō)了,挑參考文獻(xiàn)中的三篇學(xué)習(xí)一下。參考文獻(xiàn)[1]、[2]、[3]分別講述了如何利用形變模型描述物體(特征階段)、如何利用形變部件來(lái)做檢測(cè)(特征處理+分類(lèi)階段)、如何加速檢測(cè)。首先來(lái)說(shuō)下文獻(xiàn)[1]的形變部件。在Deformable Part Model中,通過(guò)描述每一部分和部分間的位置關(guān)系來(lái)表示物體(part+deformable configuration)。其實(shí)早在1973年,Part Model就已經(jīng)在 “Therepresentation and matching of pictorial structures” 這篇文章中被提出了。


    (圖二)

    ? ? ? ? Part Model中,我們通過(guò)描述a collection of parts以及connection between parts來(lái)表示物體。(圖二)表示經(jīng)典的彈簧模型,物體的每一部分通過(guò)彈簧連接。我們定義一個(gè)energy function,該函數(shù)度量了兩部分之和:每一部分的匹配程度,部分間連接的變化程度(可以想象為彈簧的形變量)。與模型匹配最好的圖像就是能使這個(gè)energy function最小的圖片。形式化表示中,我們可以用一無(wú)向圖 G=(V,E) 來(lái)表示物體的模型,V={v1,…,vn} 代表n個(gè)部分,邊 (vi,vj)∈E 代表兩部分間的連接。物體的某個(gè)實(shí)例的configuration可以表示為 L=(l1,…,ln),li 表示為 vi 的位置(可以簡(jiǎn)單的將圖片的configuration理解為各部分的位置布局,實(shí)際configuration可以包含part的其他屬性)。給定一幅圖像,用 mi(li) 來(lái)度量vi 被放置圖片中的 li 位置時(shí),與模板的不匹配程度;用 dij(li,lj) 度量 vi,vj 被分別放置在圖片中的 li,lj位置時(shí),模型的變化程度。因此,一副圖像相對(duì)于模型的最優(yōu)configuration,就是既能使每一部分匹配的好,又能使部分間的相對(duì)關(guān)系與模型盡可能的相符的那一個(gè)。同樣的,模型也自然要描述這兩部分。可以通過(guò)下面的(公式一)描述最優(yōu)configuration:


    (公式一)

    ? ? ? ?優(yōu)化(公式一)其實(shí)就是馬爾科夫隨機(jī)場(chǎng)中的經(jīng)典問(wèn)題求解,可以用上面說(shuō)的BP算法求解。說(shuō)的理論些就是最大化后驗(yàn)概率(MAP),因?yàn)閺碾S機(jī)場(chǎng)中很容易轉(zhuǎn)換到概率測(cè)度中(gibbs measure),在這就不說(shuō)那么復(fù)雜了,想系統(tǒng)的學(xué)習(xí)相關(guān)理論可以學(xué)習(xí)概率圖模型(probabilistic graphical model)。識(shí)別的時(shí)候采用就是采用部件匹配,并且使得能量最小,這有點(diǎn)類(lèi)似于ASM,但是ASM沒(méi)有使用部件之間的關(guān)系,只是單純的讓各匹配點(diǎn)之間的代價(jià)和最小。匹配結(jié)果如(圖三)所示:


    (圖三)

    ? ? ? 上面的方法沒(méi)有用到機(jī)器學(xué)習(xí),另外部件的尋找也不是一件容易的事情,因?yàn)槭紫纫蟾蓬A(yù)估部件的位置,因此這個(gè)方法也有缺點(diǎn),但這個(gè)形變部件的思想可以用來(lái)作為特征,接著就來(lái)看下Pedro的第二篇文獻(xiàn)[2]如何用它來(lái)做目標(biāo)檢測(cè)。

    Pedro在文獻(xiàn)[2]中基于形變模型的目標(biāo)檢測(cè)用到了三方面的知識(shí):1.Hog Features 2.Part Model 3. Latent SVM。

    1. ? ? ?作者通過(guò)Hog特征模板來(lái)刻畫(huà)每一部分,然后進(jìn)行匹配。并且采用了金字塔,即在不同的分辨率上提取Hog特征。

    2. ? ? ?利用上段提出的Part Model。在進(jìn)行object detection時(shí),detect window的得分等于part的匹配得分減去模型變化的花費(fèi)。

    3. ? ? ?在訓(xùn)練模型時(shí),需要訓(xùn)練得到每一個(gè)part的Hog模板,以及衡量part位置分布cost的參數(shù)。文章中提出了Latent SVM方法,將deformable part model的學(xué)習(xí)問(wèn)題轉(zhuǎn)換為一個(gè)分類(lèi)問(wèn)題。利用SVM學(xué)習(xí),將part的位置分布作為latent values,模型的參數(shù)轉(zhuǎn)化為SVM的分割超平面。具體實(shí)現(xiàn)中,作者采用了迭代計(jì)算的方法,不斷地更新模型。

    針對(duì)上面三條,我們可能有幾個(gè)疑問(wèn):1、部件從何而來(lái)?2、如何用部件做檢測(cè)?在基于部件做目標(biāo)檢測(cè)之前,贏得PASCAL VOC 2006年挑戰(zhàn)的Dalal-Triggs的方法是直接用HOG作為特征,然后直接基于不同尺度的滑動(dòng)窗口做判別,像一個(gè)濾波器,靠這個(gè)濾波器贏得短時(shí)的榮譽(yù),但不能抗大形變的目標(biāo)。Pedro改進(jìn)了Dalal-Triggs的方法,他計(jì)算作為一個(gè)得分,其中beta是濾波器,phi(x)是特征向量。通過(guò)濾波器找到一個(gè)根(root)部件p0,根部件有專(zhuān)門(mén)的濾波器,另外還有一系列非根部件(parts)p1…pn,然后把他們組成一個(gè)星形結(jié)構(gòu),此時(shí)回顧(圖一)的形變模型思想。每個(gè)部件用來(lái)表示,其中X,Y是坐標(biāo),L表示金字塔級(jí)別。當(dāng)這個(gè)星形結(jié)構(gòu)的匹配得分減去模型變化的代價(jià)得到最終分最高時(shí),就完成了匹配,如(公式二)所示:


    (公式二)

    ? ? ? ?其中F’表示濾波器的向量化表示,b是偏移項(xiàng),H表示特征金字塔。現(xiàn)在假設(shè)濾波器解決了部件,完成了匹配,解答了第二個(gè)疑問(wèn),但是濾波器從何而來(lái),簡(jiǎn)單的說(shuō)就是這個(gè)濾波器的權(quán)重beta是多少?現(xiàn)在不知道部件,也不知道濾波器,沒(méi)有濾波器就沒(méi)有部件,沒(méi)有部件也求不出濾波器的參數(shù),這就是典型的EM算法要解決的事情,但是作者沒(méi)有使用EM算法,而是使用隱SVM(Latent SVM)的方法,隱變量其實(shí)就是類(lèi)似統(tǒng)計(jì)中的因子分析,在這里就是找到潛在部件。在訓(xùn)練的時(shí)候?qū)Σ糠植考M(jìn)行打標(biāo)簽,用他們求beta,然后用beta再來(lái)找潛在部件,因此使用coordinatedescent迭代求解,再一次遇到這個(gè)求解方法。有了部件和打分,就是尋找根部件和其他部件的結(jié)合匹配最優(yōu)問(wèn)題,可以使用動(dòng)態(tài)規(guī)劃,但很慢,具體請(qǐng)參考文獻(xiàn)[2]。

    ?

    ? ? ? 在文獻(xiàn)[2]中雖然使用了金字塔來(lái)加速搜尋速度,但是對(duì)星形結(jié)構(gòu)組合的搜索匹配計(jì)算量也很大,檢測(cè)速度稍慢。因此接著來(lái)看第三篇文獻(xiàn)[3],文獻(xiàn)[3]就是加速檢測(cè)過(guò)程,對(duì)于星形結(jié)構(gòu)模型采用cascade來(lái)判斷,來(lái)快速拋去沒(méi)有有效信息的part,其實(shí)實(shí)際中根部件的位置對(duì)匹配起著很大作用,然后依次對(duì)其他部件(n+1),有了這種關(guān)系,取一些部件子集后我們可以采用cascade來(lái)修剪、拋去一些不是好配置的部件組合(官方用語(yǔ)叫配置),這樣一些在弱分類(lèi)器中評(píng)分高的組合進(jìn)入更一步的判斷,類(lèi)似于cascade的級(jí)聯(lián)思想,但是要注意形變模型的每個(gè)部件應(yīng)該是相關(guān)的,而不應(yīng)該像上節(jié)那樣harr-like特征之間獨(dú)立,依次判斷在這里行不通,這里其實(shí)是個(gè)子序列匹配問(wèn)題,文獻(xiàn)[7]提出過(guò)一種解決方法,pedro又改進(jìn)了此方法,在原來(lái)n+1個(gè)部件的基礎(chǔ)上增加n+1可以快速計(jì)算的簡(jiǎn)單部件,這樣打亂之后,子序列匹配的代價(jià)就小了一些。

    下面正式進(jìn)入檢測(cè)流程,看看怎么來(lái)加速的,大概流程如(圖四)所示:


    (圖四)

    ? ? ?其中各個(gè)notation含義如(圖五)所示(特別注意p不是在上面說(shuō)的部件,而是表示部件vi的貢獻(xiàn)):


    (圖五)

    ? ? ? 基于部件檢測(cè)的主題思想到此差不多了,但是還有更多的trick沒(méi)有說(shuō),比如閾值選取、如何計(jì)算簡(jiǎn)單的部件等

    檢測(cè)效果如(圖六)所示:


    (圖六)

    ? ? ?這是一篇學(xué)習(xí)筆記式的“流水賬”,難免有說(shuō)錯(cuò)的地方,如發(fā)現(xiàn)請(qǐng)指出,謝謝。本節(jié)所有的文獻(xiàn)代碼都集成在一起掛在pedro主頁(yè)上。

    ?

    參考文獻(xiàn):

    [1] Pictorial Structures for Object Recognition. Pedro F.Felzenszwalb

    [2]Object Detection with Discriminatively Trained Part Based Models.Pedro F. Felzenszwalb

    [3]Cascade Object Detection with Deformable Part Models. Pedro F.Felzenszwalb

    [4]From RigidTemplates To Grammars: Object Detection With Structured Models. Pedro F.Felzenszwalb

    [5]Histogramsof oriented gradients for human detection. N. Dalal and B. Triggs

    [6]?http://bubblexc.com/y2011/422/

    [7]A computational model for visual selection.Y. Amit and D.Geman


    轉(zhuǎn)載請(qǐng)注明來(lái)源:http://blog.csdn.net/cuoqu/article/details/9244193


    總結(jié)

    以上是生活随笔為你收集整理的目标检测原理与实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。