视觉目标检测和识别之过去,现在及可能
1. 傳統(tǒng)的目標(biāo)檢測(cè)算法:Cascade + Harr / SVM + HOG / DPM 以及上述的諸多改進(jìn)、優(yōu)化;
2. 候選窗+深度學(xué)習(xí)分類(lèi):通過(guò)提取候選區(qū)域,并對(duì)相應(yīng)區(qū)域進(jìn)行以深度學(xué)習(xí)方法為主的分類(lèi)的方案,如:RCNN / Fast-RCNN / Faster-RCNN / SPP-net / R-FCN 等系列方法;
3. 基于深度學(xué)習(xí)的回歸方法:YOLO / SSD / DenseBox 等方法;以及最近出現(xiàn)的結(jié)合RNN算法的RRC detection;結(jié)合DPM的Deformable CNN等
對(duì)于檢測(cè)的目標(biāo),早期工業(yè)界關(guān)注的主要是人臉,人,車(chē)這些對(duì)監(jiān)控、交通等領(lǐng)域非常重要的目標(biāo),到現(xiàn)在為止,計(jì)算機(jī)需要更全面的理解場(chǎng)景,檢測(cè)的類(lèi)別擴(kuò)展到了生活的方方面面。
文章會(huì)針對(duì)上述的方法進(jìn)行簡(jiǎn)單的介紹,以及表達(dá)一些筆者認(rèn)為這種演進(jìn)趨勢(shì)背后的原因。總結(jié)起來(lái),實(shí)際上所有的方法都可以概括成:候選窗口 + 分類(lèi)or回歸;邏輯上滑窗也是提取候選窗口的一種方式。
基于深度學(xué)習(xí)的方案的計(jì)算效率和進(jìn)度大致對(duì)比如下:
注:以上數(shù)據(jù)摘自論文
下面對(duì)上面的3類(lèi)目標(biāo)檢測(cè)的算法進(jìn)行說(shuō)明:
傳統(tǒng)的目標(biāo)檢測(cè)算法:
傳統(tǒng)的做目標(biāo)檢測(cè)的算法基本流程如下:
1. 使用不同尺度的滑動(dòng)窗口選定圖像的某一區(qū)域?yàn)楹蜻x區(qū)域;
2. 從對(duì)應(yīng)的候選區(qū)域提取如Harr HOG LBP LTP等一類(lèi)或者多類(lèi)特征;
3. 使用Adaboost SVM 等分類(lèi)算法對(duì)對(duì)應(yīng)的候選區(qū)域進(jìn)行分類(lèi),判斷是否屬于待檢測(cè)的目標(biāo)。
2001年viola的cascade+harr進(jìn)行人臉檢測(cè)的方案取得了很好的正面人臉的檢測(cè)效果;其實(shí)這之前通過(guò)普通的顏色特征,形狀特征也可以處理一些基本的目標(biāo)檢測(cè)問(wèn)題,并且這類(lèi)方法至今在工業(yè)檢測(cè)的場(chǎng)景仍然在使用;下面我們對(duì)viola的cascade+harr人臉檢測(cè)的方案進(jìn)行詳細(xì)的介紹,并為后續(xù)的方法埋下伏筆。
假設(shè)我們現(xiàn)在已經(jīng)獲取了一個(gè)圖像區(qū)域,我們要判斷這個(gè)區(qū)域是不是人臉,應(yīng)該怎么做呢?那我們首先從這個(gè)區(qū)域提取特征,然后將特征送給分類(lèi)器進(jìn)行分類(lèi)。特征呢?在viola的方案中主要使用的是harr特征,描述兩個(gè)圖像block之間的明暗對(duì)比;而分類(lèi)器呢,最好是又快又好,viola提出的方法是Adaboost,通過(guò)弱分類(lèi)器的組合和級(jí)聯(lián)完成分類(lèi)任務(wù);假如一個(gè)640*480大小的圖片,滑窗時(shí)每次移動(dòng)3個(gè)像素的話(huà),總體上也有10w量級(jí)的滑窗,再加上由于目標(biāo)尺寸的變化,需要對(duì)圖片進(jìn)行縮放或者擴(kuò)大,總體滑窗的數(shù)量又會(huì)上升,因此對(duì)分類(lèi)器的效率要求非常高。所以級(jí)聯(lián)的cascade方法很好的解決了這個(gè)問(wèn)題,在初期使用很少的計(jì)算量過(guò)濾掉大部分的候選窗口,對(duì)于越難進(jìn)行分類(lèi)的樣本就計(jì)算更多的特征來(lái)進(jìn)行判斷,直到所有的候選窗口的分類(lèi)完畢。后續(xù)會(huì)針對(duì)檢測(cè)的結(jié)果進(jìn)行重疊窗口以及不同尺度圖像上窗口的融合。
viola最早提出來(lái)的harr特征主要是水平方向和豎直方向,后續(xù)又出現(xiàn)了非常多的變化;adaboost方法在后續(xù)也出現(xiàn)了非常多的變種,這里將harr特征的變化以及adaboost的變種進(jìn)行一個(gè)羅列:
基本上可以看到,以上harr的變種都是改變明暗對(duì)比的計(jì)算方法。還有一些改進(jìn):如將harr特征進(jìn)行組合的joint harr feature,如利用pixel明暗對(duì)比進(jìn)行組合的joint pixel harr feature;基本邏輯就是獲得更為全面的特征描述能力,以及提高計(jì)算速度。
這對(duì)adaboost也有非常多的改進(jìn),以及training方法的改進(jìn)也很多,這里對(duì)adaboost的改進(jìn)進(jìn)行羅列,感興趣的朋友可以查看:
vector boosting
output code to boost multiclass learning
multiple instance boosting(MIL等)
multi-class boosting
floatboost learning
multi-class adaboost
textonboost
等等
改進(jìn)非常多,不過(guò)基本邏輯依舊是提升模型的表達(dá)能力;traning的改進(jìn)在此不做羅列,總結(jié)起來(lái)基本上是:難分負(fù)樣本的處理,trainning效率等。
使用SVM+HOG的方法進(jìn)行行人檢測(cè)方法和上述方案基本一致,不過(guò)針對(duì)行人檢測(cè)的場(chǎng)景,harr通過(guò)區(qū)域的明暗對(duì)比計(jì)算的特征顯然不能夠太好的描述;而HOG特征本身含有一定的位置特性,正好可以描述人體如頭部,四肢等不同的部位。方法的流程如下:
HOG特征能夠很好的描述人體的輪廓特性,大致可以有個(gè)直觀的感受參考這個(gè)圖:
但上面的方案有個(gè)問(wèn)題,實(shí)際上人的正面和側(cè)面從視覺(jué)輪廓上來(lái)看,差異非常大;比如車(chē)輛也一樣,從正面看,主要是擋風(fēng)玻璃和前臉部分,從側(cè)面看則是車(chē)門(mén)和輪廓部分;所以出現(xiàn)了后來(lái)非常出名的dpm算法。dpm算法的思想如下:
1. 物體都是由不同的part組成的,由于各種variations導(dǎo)致物體整體的視覺(jué)效果不一樣,但是有些part的變化實(shí)際上不大,因此可以訓(xùn)練針對(duì)不同part的檢測(cè)模塊;
2. 一個(gè)物體,不同的part之間實(shí)際上是存在天然的拓?fù)浣Y(jié)構(gòu)的關(guān)系,比如人體頭大部分情況都位于軀干的上面,車(chē)大部分情況輪子的部分都在地面上等等。也就是說(shuō)這些不同的part之間的距離和位置關(guān)系符合一個(gè)標(biāo)準(zhǔn)的分布,某種位置關(guān)系非常多,而有些位置關(guān)系存在但很少,有些則根本不存在;
3. 有了各個(gè)部件,有了位置關(guān)系,就可以將不同的位置關(guān)系對(duì)目標(biāo)物體的貢獻(xiàn)看待成一個(gè)權(quán)重,最后由權(quán)重求和得到是否是需要檢測(cè)的目標(biāo)。
整體流程參考:
root filter 和 n個(gè)part filter進(jìn)行最終的加權(quán),得到檢測(cè)目標(biāo)。
dpm算法本身的進(jìn)步roadmap可以參考這個(gè):
傳統(tǒng)的目標(biāo)檢測(cè)方法介紹到這里,而實(shí)際上后續(xù)的基于深度學(xué)習(xí)的目標(biāo)檢測(cè)方案多多少少參考了前面的工作,以及在深度學(xué)習(xí)目標(biāo)檢測(cè)的框架中也在結(jié)合以上方法中的思想,后面一一介紹。
候選窗+深度學(xué)習(xí)分類(lèi)的目標(biāo)檢測(cè)方案:
滑窗有一個(gè)問(wèn)題,就是產(chǎn)生的候選窗口數(shù)量巨大,所以有各種region proposal的方案出來(lái),最根本的需求就是在減少可能窗口的miss的情況下找到更少的候選窗口;從這個(gè)角度講,金字塔+滑動(dòng)窗口的方案實(shí)際上是一個(gè)100%召回的方案。
使用深度學(xué)習(xí)方法進(jìn)行分類(lèi)能夠更好的提取特征,以及模型能夠具備更強(qiáng)大的描述能力;所以基本上對(duì)深度學(xué)習(xí)的使用也慢慢的從當(dāng)成特征提取進(jìn)步到特征提取與分類(lèi)、回歸等問(wèn)題結(jié)合起來(lái)的end-to-end的方式。
先介紹rgbd大神的系列工作rcnn -> fast rcnn -> faster rcnn;以上工作非常有連續(xù)性,建議讀者讀原論文研讀。這個(gè)鏈接有一些說(shuō)明:
RCNN, Fast-RCNN, Faster-RCNN的一些事rcnn目標(biāo)檢測(cè)的基本流程如下:
通過(guò)selective search的方式從圖片中提取可能的目標(biāo)的候選窗口,將窗口warp到同一個(gè)尺寸,通過(guò)卷積網(wǎng)絡(luò)從warp之后的候選窗口提取特征,將特征送給分類(lèi)器進(jìn)行分類(lèi),最后在加上bounding box regression等操作得到更準(zhǔn)確的目標(biāo)位置。
以上方案有幾個(gè)問(wèn)題:1. selective search方式提取候選窗口非常耗時(shí),同時(shí)會(huì)miss掉一些窗口;2. 從warp之后的候選窗口提取dnn特征的時(shí)候,重疊部分的卷積操作重復(fù)計(jì)算了;3. 提取特征之后再丟給SVM進(jìn)行分類(lèi),邏輯上每一步都是分開(kāi)訓(xùn)練,不利于全局最優(yōu)。
rgbd大神在fast rcnn中提出了ROI pooling層來(lái)解決重復(fù)的卷積計(jì)算的問(wèn)題,框架如下:
ROI pooling層邏輯上可以理解成,對(duì)于一個(gè)任意尺寸的box,都可以通過(guò)將這個(gè)box分成4*4,8*8等同樣數(shù)量的網(wǎng)格,然后每個(gè)網(wǎng)格通過(guò)max, mean等操作計(jì)算相應(yīng)的特征,就可以將不同尺寸的box轉(zhuǎn)化成相同維度的特征。
還不夠,是否可以簡(jiǎn)化掉最費(fèi)時(shí)的selective search 提取候選窗口呢?顯然可以。rgbd大神在faster rcnn中引入region proposal network替代selective search,同時(shí)引入anchor box應(yīng)對(duì)目標(biāo)形狀的變化問(wèn)題。
在結(jié)合end-to-end的training,faster rcnn基本做到的實(shí)時(shí)。
SPP-net的主要思想是去掉原始圖像上的crop/warp操作,通過(guò)在卷積特征層上的空間金字塔池化來(lái)達(dá)成;二者的差異可以參考這個(gè)圖:
Spatial pyramid pooling的示意圖如下,是一個(gè)非常重要的將尺寸不一致的圖像pooling到相同的特征緯度的方法:
R-FCN方案也使用region proposal network提取候選窗口,同時(shí)使用和RPN同享的特征進(jìn)行分類(lèi)和回歸,流程如下,請(qǐng)讀者參考論文詳情:
以上方案可以看到明顯的進(jìn)步,并且每一個(gè)進(jìn)步都有重要的背后的邏輯。幾個(gè)值得關(guān)注的點(diǎn)重申如下:
ROI pooling 操作
Anchor box機(jī)制
RPN特征共享
卷積層的空間金字塔
等等
基于深度學(xué)習(xí)end-to-end的回歸方法用于目標(biāo)檢測(cè):
YOLO可以認(rèn)為是這類(lèi)方法的開(kāi)篇之作,速度很快,詳細(xì)介紹如下。有人說(shuō)yolo的方案去除了候選窗口或者滑窗的思想,但實(shí)際上并沒(méi)有,只是yolo使用對(duì)輸出的圖像進(jìn)行網(wǎng)格劃分來(lái)提取候選窗口而已。
YOLO方案的輸入是比如448*448的圖片,輸入是一個(gè)7*7的網(wǎng)格,每個(gè)網(wǎng)格的信息包含:1. 存在某個(gè)類(lèi)別的物體的概率,比如有20類(lèi)目標(biāo)需要檢測(cè),那就是20類(lèi)+1類(lèi)(backgroud);2. 對(duì)應(yīng)物體的bounding box參數(shù),使用4個(gè)數(shù)字描述;3. 對(duì)應(yīng)目標(biāo)的概率。
這個(gè)問(wèn)題就被format成一個(gè)回歸問(wèn)題,448*448*3作為輸入;7*7*(b*5+c)作為回歸的參數(shù),然后進(jìn)行end-to-end的學(xué)習(xí)。
顯然,YOLO的方案有幾個(gè)問(wèn)題:1. 針對(duì)小目標(biāo)的檢測(cè)效果會(huì)不太好,因?yàn)?*7的網(wǎng)格的劃分可能太粗糙了;2. 經(jīng)過(guò)多層卷積和pooling的操作,圖像的邊緣特征可能丟失較多了,而回歸bounding box參數(shù)的只使用了高層的卷積層特征,會(huì)導(dǎo)致bounding box不準(zhǔn)確;3. 當(dāng)兩個(gè)目標(biāo)同時(shí)落入7*7的某一個(gè)網(wǎng)格中的時(shí)候,對(duì)應(yīng)位置只能檢測(cè)到一個(gè)物體。
SSD方案則是faster rcnn和yolo的結(jié)合,使用了yolo end-to-end訓(xùn)練的思想,同時(shí)有結(jié)合了anchor box,不同層的卷積特征的組合等方案。SSD的整體流程如下:
SSD網(wǎng)絡(luò)和YOLO網(wǎng)絡(luò)的差異如下:
anchor機(jī)制的引入,以及多個(gè)卷積層特征的組合能夠幫助SSD獲得更為準(zhǔn)確的對(duì)目標(biāo)bounding box的估計(jì)。
KITTI上top 20的目標(biāo)檢測(cè)方案及精度大致如下:
對(duì)排名第7的RRC 方案做一個(gè)描述,之所以介紹這個(gè)方法,是因?yàn)樗趆ard上的得分超過(guò)了其他方案非常多,并且在moderate easy上的結(jié)果也和最好的結(jié)果差異不大,而筆者也認(rèn)為這個(gè)方案背后的思想值得學(xué)習(xí)。
RRC實(shí)際上是把RNN的一些思想融入到了目標(biāo)檢測(cè)當(dāng)中:
網(wǎng)絡(luò)結(jié)構(gòu)比較復(fù)雜,做如下幾個(gè)說(shuō)明:
1. 我們?cè)谧鯾ounding box回歸的時(shí)候,一定是需要一些有用的底層的邊緣信息的,但并不是所有的底層信息都有用,那這些信息可以通過(guò)一定的方式傳遞的后面的決策層;
2. 利用當(dāng)前層進(jìn)行預(yù)測(cè)的時(shí)候,實(shí)際上和他的上一層和下一層的信息是有關(guān)的。
詳細(xì)請(qǐng)參考RRC detection論文。
Deformable CNN方法:是一種把DPM和CNN結(jié)合起來(lái)的思想。我們一起思考一下,卷積核一般情況下都是一個(gè)固定的尺寸或者是性狀,比如3*3,5*5;但實(shí)際上在我們進(jìn)行目標(biāo)檢測(cè)的時(shí)候,我們的目標(biāo)的性狀是千差萬(wàn)別的。比如人的手掌,實(shí)際上就是一個(gè)長(zhǎng)方形或者有一定弧形的區(qū)域。那么如果我們可以通過(guò)某種方式將卷積核變成或者說(shuō)是訓(xùn)練成可能的目標(biāo)的部件的性狀,那么他計(jì)算出來(lái)的特征就越合理。
所以我們是否可以在學(xué)習(xí)卷積核的時(shí)候,也引入一些可學(xué)習(xí)的卷積核的形狀參數(shù)呢?答案是肯定的,這個(gè)就是deformable cnn卷積:
通過(guò)對(duì)卷積核引入offsets來(lái)實(shí)現(xiàn)。
通過(guò)一個(gè)直觀的感受來(lái)看看學(xué)習(xí)到的deformable cnn核是什么樣子?
可以看到,學(xué)習(xí)到的deformable cnn核會(huì)遵循目標(biāo)的輪廓進(jìn)行分布;我們可以想見(jiàn),或許學(xué)習(xí)到的對(duì)人臉特別敏感的核應(yīng)該是一個(gè)橢圓形的等等。
感受一些deformable cnn的效果:
邏輯上:deformable cnn的效果可以通過(guò)多個(gè)標(biāo)準(zhǔn)的卷積核組合得到,就相當(dāng)于橢圓可以通過(guò)很多個(gè)矩形來(lái)近似一樣;這種組合似乎有一些inception v3 v4里面的組合的味道;不過(guò)我個(gè)人認(rèn)為這種人造的組合可能上限會(huì)比通過(guò)參數(shù)學(xué)習(xí)的組合低,筆者認(rèn)為deformable cnn的方案還是非常值得期待的。
總結(jié)、可能:
基本上對(duì)于過(guò)去和現(xiàn)在的方法總結(jié)得差不多了,似乎該展望未來(lái)。不過(guò)筆者對(duì)于未來(lái)的判斷一般都沒(méi)有準(zhǔn)確過(guò),所以不敢使用未來(lái)這個(gè)字眼。但是對(duì)于目標(biāo)檢測(cè)的一些思考和可能也有一些自己的判斷。
基于深度學(xué)習(xí)方法的幾個(gè)可能的方向:
1. 想辦法從原始圖像、低層的feature map層,以及高層的語(yǔ)義層獲取更多的信息,從而得到對(duì)目標(biāo)bounding box的更準(zhǔn)確的估計(jì);
2. 對(duì)bounding box的估計(jì)可以結(jié)合圖片的一些coarse-to-fine的分割信息;
3. bounding box的估計(jì)可能需要更多的局部的content的信息,需要想辦法引入;
4. 目標(biāo)檢測(cè)數(shù)據(jù)集的標(biāo)注難度非常大,如何把其他如classfication領(lǐng)域?qū)W習(xí)到的知識(shí)用于檢測(cè)當(dāng)中,甚至是將classification的數(shù)據(jù)和檢測(cè)數(shù)據(jù)集做co-training(如YOLO9000)的方式,至少可以從數(shù)據(jù)層面獲得更多的信息;
5. 更好的啟發(fā)式的學(xué)習(xí)方式,人在識(shí)別物體的時(shí)候,第一次可能只是知道這是一個(gè)單獨(dú)的物體,也知道bounding box,但是不知道類(lèi)別;當(dāng)人類(lèi)通過(guò)其他渠道學(xué)習(xí)到類(lèi)別的時(shí)候,下一次就能夠識(shí)別了;目標(biāo)檢測(cè)也是如此,我們不可能標(biāo)注所有的物體的類(lèi)別,但是如何將這種快速學(xué)習(xí)的機(jī)制引入,也是一個(gè)問(wèn)題;
6. RRC,deformable cnn中卷積和其他的很好的圖片的操作、機(jī)器學(xué)習(xí)的思想的結(jié)合未來(lái)也有很大的空間;
7. 語(yǔ)意信息和分割的結(jié)合,可能能夠?yàn)槟繕?biāo)檢測(cè)提供更多的有用的信息;
8. 場(chǎng)景信息也會(huì)為目標(biāo)檢測(cè)提供更多信息;比如天空不會(huì)出現(xiàn)汽車(chē)等等。
筆者自己一直喜歡非常簡(jiǎn)單的框架,比如cascade+harr,比如yolo;這種簡(jiǎn)單的框架對(duì)工程上的實(shí)現(xiàn)以及后續(xù)的優(yōu)化提供了最多的可能性;也信奉一個(gè)道理,在工業(yè)界應(yīng)該是simple is beautiful
到這里基本上已經(jīng)寫(xiě)完了,檢測(cè)和識(shí)別這些基本的task的進(jìn)步才能夠讓計(jì)算機(jī)更好的理解世界,共勉!
原文地址
https://zhuanlan.zhihu.com/p/27546796
總結(jié)
以上是生活随笔為你收集整理的视觉目标检测和识别之过去,现在及可能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IOS CoreImage实现人脸识别
- 下一篇: 人脸识别的过程和算法