1
本文作者: 大牛講堂 | 2016-11-03 11:50 |
雷鋒網(wǎng)按:作者山世光博士,中科院計(jì)算所研究員、博導(dǎo),主要從事計(jì)算機(jī)視覺(jué)、模式識(shí)別、機(jī)器學(xué)習(xí)等相關(guān)研究工作。迄今已發(fā)表CCF A類論文50余篇,全部論文被Google Scholar引用9000余次?,F(xiàn)任IEEE TIP,TIPNeurocomputing和PRL等國(guó)際學(xué)術(shù)刊物的編委(AE)。研究成果曾獲2005年度國(guó)家科技進(jìn)步二等獎(jiǎng)和2015年度國(guó)家自然科學(xué)獎(jiǎng)二等獎(jiǎng)。
本文中,山世光博士主要給我們分享梳理了物體檢測(cè)技術(shù)的近期進(jìn)展。
物體檢測(cè)在整個(gè)計(jì)算機(jī)領(lǐng)域里,比較成功的一個(gè)例子,就是在大概2000年前后出現(xiàn)的Viola-Jones人臉檢測(cè)器,其使得物體檢測(cè)相比而言成了一項(xiàng)較為成熟的技術(shù)。
這個(gè)方法基本的思路就是滑動(dòng)窗口式的,用一個(gè)固定大小的窗口在輸入圖像進(jìn)行滑動(dòng),窗口框定的區(qū)域會(huì)被送入到分類器,去判斷是人臉窗口還是非人臉窗口。滑動(dòng)的窗口其大小是固定的,但是人臉的大小則多種多樣,為了檢測(cè)不同大小的人臉,還需要把輸入圖像縮放到不同大小,使得不同大小的人臉能夠在某個(gè)尺度上和窗口大小相匹配。這種滑動(dòng)窗口式的做法有一個(gè)很明顯的問(wèn)題,就是有太多的位置要去檢查,去判斷是人臉還是非人臉。
判斷是不是人臉,這是兩個(gè)分類問(wèn)題。在2000年的時(shí)候,采用的是AdaBoost分類器。進(jìn)行分類時(shí),分類器的輸入用的是Haar特征,這是一種非常簡(jiǎn)單的特征,在圖上可以看到有很多黑色和白色的小塊,Haar特征就是把黑色區(qū)域所有像素值之和減去白色區(qū)域所有像素值之和,以這個(gè)差值作為一個(gè)特征,黑色塊和白色塊有不同的大小和相對(duì)位置關(guān)系,這就形成了很多個(gè)不同的Haar特征。AdaBoost分類器是一種由多個(gè)弱分類器組合而成的強(qiáng)分類器,Viola-Jones檢測(cè)器是由多個(gè)AdaBoost分類器級(jí)聯(lián)組成,這種級(jí)聯(lián)結(jié)構(gòu)的一個(gè)重要作用就是加速。
2000年人臉檢測(cè)技術(shù)開始成熟起來(lái)之后,就出現(xiàn)了相關(guān)的實(shí)際應(yīng)用,例如數(shù)碼相機(jī)中的人臉對(duì)焦的功能,照相的時(shí)候,相機(jī)會(huì)自動(dòng)檢測(cè)人臉,然后根據(jù)人臉的位置把焦距調(diào)整得更好。
Viola-Jones人臉檢測(cè)器之后,在2009年出現(xiàn)了另外一個(gè)比較重要的方法:deformable part model(DPM),即可變形部件模型。
就人臉檢測(cè)而言,人臉可以大致看成是一種剛體,通常情況下不會(huì)有非常大的形變,比方說(shuō)嘴巴變到鼻子的位置上去。但是對(duì)于其它物體,例如人體,人可以把胳膊抬起來(lái),可以把腿翹上去,這會(huì)使得人體有非常多非常大的非剛性變換,而DPM通過(guò)對(duì)部件進(jìn)行建模就能夠更好地處理這種變換。
剛開始的時(shí)候大家也試圖去嘗試用類似于Haar特征+AdaBoost分類器這樣的做法來(lái)檢測(cè)行人,但是發(fā)現(xiàn)效果不是很好,到2009年之后,有了DPM去建模不同的部件,比如說(shuō)人有頭有胳膊有膝蓋,然后同時(shí)基于局部的部件和整體去做分類,這樣效果就好了很多。DPM相對(duì)比較復(fù)雜,檢測(cè)速度比較慢,但是其在人臉檢測(cè)還有行人和車的檢測(cè)等任務(wù)上還是取得了一定的效果。后來(lái)出現(xiàn)了一些加速DPM的方法,試圖提高其檢測(cè)速度。DPM引入了對(duì)部件的建模,本身是一個(gè)很好的方法,但是其被深度學(xué)習(xí)的光芒給蓋過(guò)去了,深度學(xué)習(xí)在檢測(cè)精度上帶來(lái)了非常大的提升,所以研究DPM的一些人也快速轉(zhuǎn)到深度學(xué)習(xí)上去了。
對(duì)于基于深度學(xué)習(xí)的物體檢測(cè)方法,這里把最近兩三年里面出現(xiàn)的比較有代表性的工作做一個(gè)概括性地介紹。一個(gè)就是R-CNN系列,另一個(gè)是傳統(tǒng)方法和深度學(xué)習(xí)的方法的結(jié)合。這些方法出現(xiàn)之后帶來(lái)檢測(cè)性能的極大的提升,待會(huì)我的博士生會(huì)介紹性能提升的具體情況,大家可以看到,檢測(cè)精度幾乎是成倍地增長(zhǎng)。當(dāng)然這里面還是存在一些問(wèn)題,就是檢測(cè)速度,我知道很多工業(yè)界的朋友都在想辦法對(duì)基于深度學(xué)習(xí)的檢測(cè)方法進(jìn)行加速。
所謂的R-CNN,是基于這樣一種非常簡(jiǎn)單的想法,對(duì)于輸入圖像,通過(guò)selective search等方法,先確定出例如2000個(gè)最有可能包含物體的窗口,對(duì)于這2000個(gè)窗口,我們希望它能夠?qū)Υ龣z測(cè)物體達(dá)到非常高的召回率。然后對(duì)這2000個(gè)中的每一個(gè)去用CNN進(jìn)行特征提取和分類。對(duì)這2000個(gè)區(qū)域都要去跑一次CNN,那么它的速度是非常慢的,即使每次只需要0.5秒,2000個(gè)窗口的話也是需要1000秒,為了加速2014年的時(shí)候何凱明提出了SPP-net,其做法是對(duì)整個(gè)圖跑一次CNN,而不需要每一個(gè)窗口單獨(dú)做,但是這樣有一個(gè)小困難,就是這2000個(gè)候選窗口每一個(gè)的大小都不一樣,為了解決這個(gè)問(wèn)題,SPP-net設(shè)計(jì)了spatial pyramid pooling,使得不同大的小窗口具有相同維度的特征。這個(gè)方法使得檢測(cè)時(shí)不需要對(duì)每一個(gè)候選窗口去計(jì)算卷積,但是還是不夠快,檢測(cè)一張圖像還是需要幾秒的時(shí)間。
Fast R-CNN借鑒了SPP-net的做法,在全圖上進(jìn)行卷積,然后采用ROI-pooling得到定長(zhǎng)的特征向量。例如不管窗口大小是多少,轉(zhuǎn)換成7x7這么大。
Fast R-CNN還引入了一個(gè)重要的策略,在對(duì)窗口進(jìn)行分類的同時(shí),還會(huì)對(duì)物體的邊框進(jìn)行回歸,使得檢測(cè)框更加準(zhǔn)確。前面我們說(shuō)候選窗口會(huì)有非常高的召回率,但是可能框的位置不是很準(zhǔn),例如一個(gè)人體框可能是缺胳膊缺腿,那么通過(guò)回歸就能夠?qū)z測(cè)框進(jìn)行校準(zhǔn),在初始的位置上求精。Fast R-CNN把分類和回歸放在一起來(lái)做,采用了多任務(wù)協(xié)同學(xué)習(xí)的方式。
Faster R-CNN相比于Fast R-CNN又帶來(lái)了一個(gè)比較大的變化,其將產(chǎn)生候選窗口這一步也用深度網(wǎng)絡(luò)來(lái)做,并且讓這個(gè)網(wǎng)絡(luò)和Fast R-CNN的分類網(wǎng)絡(luò)共享了卷積層,這個(gè)產(chǎn)生候選窗口的網(wǎng)絡(luò)叫做RPN,是Faster R-CNN的核心。
RPN替代了之前非常慢的Selective Search,而且通常所用的候選窗口的數(shù)目也比較少,只需要300個(gè)就夠了,這使得后面分類的速度會(huì)更快。為了檢測(cè)各種各樣的物體,RPN引入了所謂anchor box的設(shè)計(jì),具體來(lái)說(shuō),RPN在最后一個(gè)卷積層輸出的特征圖上,先用3x3的卷積得到每個(gè)位置的特征向量,然后基于這個(gè)特征向量去回歸9個(gè)不同大小和長(zhǎng)寬比的窗口,如果特征圖的大小是40x60,那么總共就會(huì)有大約2萬(wàn)多個(gè)窗口,把這些窗口按照信度進(jìn)行排序,然后取前300個(gè)作為候選窗口,送去做最終的分類。通過(guò)用RPN替換Selective Search,并采用共享卷積層的方式,同時(shí)降低了候選窗口的數(shù)量,F(xiàn)aster R-CNN在速度上有了明顯提高,其在GPU上可以達(dá)到5fps的速度。
2015年出現(xiàn)了一個(gè)名為YOLO的方法,其最終發(fā)表在CVPR 2016上。這是一個(gè)蠻奇怪的方法,對(duì)于給定的輸入圖像,YOLO不管三七二十一最終都劃分出7x7的網(wǎng)格,也就是得到49個(gè)窗口,然后在每個(gè)窗口中去預(yù)測(cè)兩個(gè)矩形框。這個(gè)預(yù)測(cè)是通過(guò)全連接層來(lái)完成的,YOLO會(huì)預(yù)測(cè)每個(gè)矩形框的4個(gè)參數(shù)和其包含物體的信度,以及其屬于每個(gè)物體類別的概率。YOLO的速度很快,在GPU上可以達(dá)到45fps。
在YOLO之后,在2015年Liu Wei提出了名為SSD的方法。前面提到的YOLO有一個(gè)明顯的缺點(diǎn),就是最多只能檢測(cè)7x7=49個(gè)物體,如果圖像中有超過(guò)49個(gè)物體,那么肯定會(huì)有檢測(cè)不到的,YOLO在每個(gè)網(wǎng)格里面只會(huì)檢測(cè)一個(gè)物體,如果一個(gè)網(wǎng)格里面同時(shí)放入兩個(gè)物體,那么其中一個(gè)就會(huì)被漏檢。
相比之下,SSD采用了類似于RPN中anchor box的機(jī)制,YOLO基于整個(gè)特征圖用全局信息一起去回歸所有位置的檢測(cè)框,而SSD是用卷積基于局部特征去回歸各個(gè)位置的檢測(cè)框,并且SSD還用到了不同層的特征,之前YOLO只用了最后一個(gè)卷積層上的特征,這樣做的缺點(diǎn)就是難以檢測(cè)小尺度的物體,最后一個(gè)卷積層上的神經(jīng)元其感受野會(huì)非常大,小尺度的物體在這上面的特征就非常不明顯。從速度上來(lái)看,在一些情況下,SSD甚至?xí)萗OLO更快,在GPU上達(dá)到58fps的速度。
在物體檢測(cè)領(lǐng)域,過(guò)去有這樣一種現(xiàn)象,就是對(duì)每一個(gè)物體我們都需要去設(shè)計(jì)和學(xué)習(xí)單獨(dú)的檢測(cè)器,例如做人臉檢測(cè)和車輛檢測(cè),兩個(gè)檢測(cè)器特征會(huì)不一樣,分類器也不一樣,對(duì)于每一類物體,需要去嘗試不同的特征和分類器的組合。但是到了現(xiàn)在,不管是R-CNN那一系列方法,還是YOLO和SDD,都沒(méi)有在物體類別上有任何限制,可以檢測(cè)人臉,也可以同時(shí)檢測(cè)其他類別的物體,這是一個(gè)非常重要的優(yōu)勢(shì)。但是在特定類別物體的檢測(cè)上,現(xiàn)在也還是有一些專門的方法,比方說(shuō)做人臉檢測(cè)的Cascade CNN,其用CNN替換了AdaBoost分類器,為了保證速度足夠快,其采用非常簡(jiǎn)單的CNN,比方說(shuō)把卷積核的數(shù)量控制得非常少。在cascade的前面級(jí)上,需要非??焖俚靥幚砘瑒?dòng)窗口,因此用的CNN會(huì)非常簡(jiǎn)單,到后面級(jí)上窗口變少,分類難度變大,會(huì)需要稍微復(fù)雜一點(diǎn)的CNN。目前Cascade CNN在公開的人臉檢測(cè)評(píng)測(cè)集FDDB上,在產(chǎn)生100個(gè)誤檢的的時(shí)候,召回率能夠達(dá)到85%。
上面介紹了一些代表性的基于深度學(xué)習(xí)的物體檢測(cè)方法,簡(jiǎn)單總結(jié)一下:
首先深度學(xué)習(xí)給檢測(cè)精度確實(shí)帶來(lái)了非常大的提升。
以ImageNet上的物體檢測(cè)任務(wù)為例,mAP從2013年的0.23提升到了2015年的0.62,這個(gè)變化是非常顯著的。
其次,物體檢測(cè)方法中發(fā)生了的一個(gè)重要的變化,就是bounding box regression的引入。回歸的方式開始興起,這不僅有利于定位,還有助于得到更為準(zhǔn)確的檢測(cè)框。
最后,產(chǎn)生窗口的方式有很大的變化,從原來(lái)遍歷式的滑動(dòng)窗口,轉(zhuǎn)變成了去尋找最有可能出現(xiàn)物體的窗口,只對(duì)少量的窗口去進(jìn)行分類。
雷鋒網(wǎng)注:本文由大牛講堂授權(quán)發(fā)布,如需轉(zhuǎn)載請(qǐng)聯(lián)系原作者,并注明作者和出處,不得刪減內(nèi)容。有興趣可以關(guān)注公號(hào)【地平線機(jī)器人技術(shù)】,了解最新消息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。