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