1 背景介紹
目標(biāo)檢測,object detection,就是在給定的圖片中精確找到物體所在位置,并標(biāo)注出物體的類別。
目標(biāo)檢測要解決的問題有兩個:物體在哪里,物體是什么的整個流程問題。
目標(biāo)檢測問題的難點:物體的尺寸變化范圍很大;擺放物體的角度,姿態(tài)不定;而且可以出現(xiàn)在圖片的任何地方;物體還可以是多個類別。
目前主要算法分兩類:1) 候選區(qū)域/框 + 深度學(xué)習(xí)分類;2) 基于深度學(xué)習(xí)的回歸方法
目標(biāo)檢測中有很大一部分工作是做圖像分類。對于圖像分類,不得不提的是2012年ImageNet大規(guī)模視覺識別挑戰(zhàn)賽(ILSVRC)上,機器學(xué)習(xí)泰斗 Geoffrey Hinton 教授帶領(lǐng)學(xué)生Krizhevsky使用卷積神經(jīng)網(wǎng)絡(luò)將ILSVRC分類任務(wù)的Top-5 error降低到了15.3%,而使用傳統(tǒng)方法的第二名 top-5 error高達 26.2%。
此后,卷積神經(jīng)網(wǎng)絡(luò)CNN占據(jù)了圖像分類任務(wù)的絕對統(tǒng)治地位。
2 候選區(qū)域+深度學(xué)習(xí)
通過提取候選區(qū)域,并對相應(yīng)區(qū)域進行以深度學(xué)習(xí)方法為主的分類的方案,如:
2.1 R-CNN(Selective Search + CNN + SVM)
先找出圖中目標(biāo)可能出現(xiàn)的位置,即候選區(qū)域(Region Proposal)。
利用圖像中的紋理、邊緣、顏色等信息,可以保證在選取較少窗口(幾千甚至幾百)的情況下保持較高的召回率(Recall)。
有了候選區(qū)域,剩下的工作實際就是對候選區(qū)域進行圖像分類的工作(特征提取+分類)。
2014年,RBG(Ross B. Girshick)使用 Region Proposal + CNN代替?zhèn)鹘y(tǒng)目標(biāo)檢測使用的滑動窗口+手工設(shè)計特征,設(shè)計R-CNN框架,使得目標(biāo)檢測取得巨大突破,并開啟了基于深度學(xué)習(xí)目標(biāo)檢測的熱潮。
R-CNN的簡要步驟如下
輸入測試圖像
利用選擇性搜索Selective Search算法在圖像中從下到上提取2000個左右的可能包含物體的候選區(qū)域Region Proposal
因為取出的區(qū)域大小各自不同,所以需要將每個Region Proposal縮放(warp)成統(tǒng)一的227x227的大小并輸入到CNN,將CNN的fc7層的輸出作為特征
將每個Region Proposal提取到的CNN特征輸入到SVM進行分類
R-CNN 存在一個較大的問題:R-CNN雖然不再像傳統(tǒng)方法那樣窮舉,但R-CNN流程的第一步中對原始圖片通過Selective Search提取的候選框region proposal多達2000個左右,而這2000個候選框每個框都需要進行CNN提特征+SVM分類,計算量很大,導(dǎo)致R-CNN檢測速度很慢,一張圖都需要47s。
2.2 SPP-net(ROI Pooling)
SPP:Spatial Pyramid Pooling(空間金字塔池化)
SPP-Net是出自2015年發(fā)表在IEEE上的論文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》
2.3 Fast R-CNN(Selective Search + CNN + ROI)
Fast R-CNN 就是在R-CNN的基礎(chǔ)上采納了SPP Net方法,對R-CNN作了改進,使得性能進一步提高。
與R-CNN框架圖對比,可以發(fā)現(xiàn)主要有兩處不同:一是最后一個卷積層后加了一個ROI pooling layer,二是損失函數(shù)使用了多任務(wù)損失函數(shù)(multi-task loss),將邊框回歸 Bounding Box Regression 直接加入到CNN網(wǎng)絡(luò)中訓(xùn)練。
Fast-RCNN 很重要的一個貢獻是成功的讓人們看到了 Region Proposal + CNN 這一框架實時檢測的希望,原來多類檢測真的可以在保證準(zhǔn)確率的同時提升處理速度,也為后來的 Faster R-CNN 做下了鋪墊。
2.4 Faster R-CNN(RPN + CNN + ROI)
Fast R-CNN存在性能瓶頸:選擇性搜索,找出所有的候選框,也非常耗時。能不能找出一個更加高效的方法來求出這些候選框呢?
解決方法:加入一個提取邊緣的神經(jīng)網(wǎng)絡(luò),也就說找到候選框的工作也交給神經(jīng)網(wǎng)絡(luò)來做。
以上四種算法都基于region proposal 的R-CNN系列,是目標(biāo)檢測技術(shù)領(lǐng)域主要的一個分支。
3 基于深度學(xué)習(xí)的回歸方法
3.1 YOLO1
YOLO,全稱:You Only Look Once
以上介紹的 R-CNN 系列很難滿足實時性的要求。YOLO 一類的方法慢慢顯現(xiàn)出其重要性,這類方法使用回歸的思想,利用整張圖作為網(wǎng)絡(luò)的輸入,直接在圖像的多個位置上回歸出這個位置的目標(biāo)邊框,以及目標(biāo)所屬的類別。
YOLO將目標(biāo)檢測任務(wù)轉(zhuǎn)換成一個回歸問題,大大加快了檢測的速度,使得 YOLO 可以每秒處理45 張圖像。而且由于每個網(wǎng)絡(luò)預(yù)測目標(biāo)窗口時使用的是全圖信息,使得false positive比例大幅降低(充分的上下文信息)。
但是YOLO也存在問題:沒有了Region Proposal機制,只使用7*7的網(wǎng)格回歸會使得目標(biāo)不能非常精準(zhǔn)的定位,這也導(dǎo)致了YOLO的檢測精度并不是很高。
3.2 YOLO2
YOLOv2 相對v1版本,在繼續(xù)保持處理速度的基礎(chǔ)上,從預(yù)測更準(zhǔn)確(Better),速度更快(Faster),識別對象更多(Stronger)這三個方面進行了改進。其中識別更多對象也就是擴展到能夠檢測9000種不同對象,稱之為YOLO9000。
YOLO v2 代表著比較先進的物體檢測水平,在多種監(jiān)測數(shù)據(jù)集中都要快過其他檢測系統(tǒng),并可以在速度與精確度上進行權(quán)衡。
3.3 YOLO3
YOLO v3的模型比之前的模型復(fù)雜了不少,可以通過改變模型結(jié)構(gòu)的大小來權(quán)衡速度與精度。
速度上,YOLOv3 在實現(xiàn)相同準(zhǔn)確度下要顯著地比其它檢測方法快。
改進之處:
1).多尺度預(yù)測 (類FPN)
2).更好的基礎(chǔ)分類網(wǎng)絡(luò)(類ResNet)和分類器 darknet-53,見下圖。
3). 分類器-類別預(yù)測:
YOLOv3不使用Softmax對每個框進行分類,主要考慮因素有兩個:
a. Softmax使得每個框分配一個類別(score最大的一個),而對于Open Images這種數(shù)據(jù)集,目標(biāo)可能有重疊的類別標(biāo)簽,因此Softmax不適用于多標(biāo)簽分類。
b. Softmax可被獨立的多個logistic分類器替代,且準(zhǔn)確率不會下降。
分類損失采用 binary cross-entropy loss
多尺度預(yù)測
每種尺度預(yù)測3個box, anchor的設(shè)計方式仍然使用聚類,得到9個聚類中心,將其按照大小均分給3中尺度.
尺度1: 在基礎(chǔ)網(wǎng)絡(luò)之后添加一些卷積層再輸出box信息.
尺度2: 從尺度1中的倒數(shù)第二層的卷積層上采樣(x2)再與最后一個16x16大小的特征圖相加,再次通過多個卷積后輸出box信息.相比尺度1變大兩倍.
尺度3: 與尺度2類似,使用了32x32大小的特征圖.
4 總結(jié)
最后總結(jié)兩類算法的不同:
RCNN, Fast-RCNN,F(xiàn)aster-RCNN是基于深度學(xué)習(xí)的分類方法。
YOLO系列是基于深度學(xué)習(xí)的回歸方法。