基於深度學習的目標檢測算法綜述


1.目標檢測要解決的核心問題

除了圖像分類之外,目標檢測要解決的核心問題是:

a.目標可能出現在圖像的任何位置。

b.目標有各種不同的大小。
c.目標可能有各種不同的形狀。
如果用矩形框來定義目標,則矩形有不同的寬高比。由於目標的寬高比不同,因此采用經典的滑動窗口+圖像縮放的方案解決通用目標檢測問題的成本太高。

2.目標檢測相關算法:

DPM算法:先提取DPM人工特征,再用latentSVM分類。這種特征提取方式存在明顯的局限性,首先,DPM特征計算復雜,計算速度慢;其次,人工特征對於旋轉、拉伸、視角變化的物體檢測效果差。

AlexNet:有5個卷積層(前五個)和3個全連接層(后三個),作者發現移除任意一層都會降低最終的效果。

OverFeat

主要的亮點是:

a.共享卷基層用於多任務學習(提取候選框)。
b.全卷積網絡思想。
c.在特征層進行滑窗操作(Sliding Window)避免大量重復運算,這也是后來的系列算法不斷沿用和改進的經典做法。
幾個明顯的缺陷:

a.采用了多尺度貪婪的划窗策略,導致計算量還是很大
b.由於當時並沒有太優秀的backbone網絡,共享特征層的表征能力不是太強,沒有考慮多尺度特征融合,對小目標效果差,整體的檢測效果不盡如人意。ILSVRC 2013數據集上的mAP(可以簡單的理解為檢測准確率)為24.3%。

  經典的卷積神經網絡有一個問題是它只能接受固定大小的輸入圖像,這是因為第一個全連接層和它之前的卷積層之間的權重矩陣大小是固定的,而卷積層、全連接層本身對輸入圖像的大小並沒有限制。而在做目標檢測時,卷積網絡面臨的輸入候選區域圖像大小尺寸是不固定的。全卷積網絡(FCN)可以支持任意大小圖片輸入。如果在最后一個卷積層和第一個全連接層之間做一些處理,將不同大小的圖像變為固定大小的全連接層輸入也可以解決問題。

R-CNN:不采用滑動窗口方案

R-CNN檢測時的主要步驟為:

1.使用Selective Search算法從待檢測圖像中提取2000個左右的區域候選框,這些候選框可能包含要檢測的目標。

2.把所有侯選框縮放成固定大小(原文采用227×227)。

3.用DCNN提取每個候選框的特征,得到固定長度的特征向量。

4.把特征向量送入SVM進行分類得到類別信息,送入全連接網絡進行回歸得到對應位置坐標信息。

簡單來說,RCNN使用以下四步實現目標檢測: 

a. 在圖像中確定約1000-2000個候選框 

b. 對於每個候選框內圖像塊,使用深度網絡提取特征 

c. 對候選框中提取出的特征,使用分類器判別是否屬於一個特定類 

d. 對於屬於某一特征的候選框,用回歸器進一步調整其位置

缺點:

1.重復計算。R-CNN雖然不再是窮舉,但通過Proposal(Selective Search)的方案依然有兩千個左右的候選框,這些候選框都需要單獨經過backbone網絡提取特征,計算量依然很大,候選框之間會有重疊,因此有不少其實是重復計算。

2.訓練測試不簡潔。候選區域提取、特征提取、分類、回歸都是分開操作,中間數據還需要單獨保存。

3.速度慢。前面的缺點最終導致R-CNN出奇的慢,GPU上處理一張圖片需要十幾秒,CPU上則需要更長時間。

4.輸入的圖片Patch必須強制縮放成固定大小(原文采用227×227),使用crop/warp歸一化,會造成物體形變,導致檢測性能下降。

SPPNet:將提取候選框特征向量的操作轉移到卷積后的特征圖上進行

SPPNet引入了Spatial Pyramid pooling層,對卷積特征圖像進行空間金字塔采樣獲得固定長度的輸出,可對特征層任意長寬比和尺度區域進行特征提取。具體做法是對特征圖像區域進行固定數量的網格划分,對不同寬高的圖像,每個網格的高度和寬度是不規定的,對划分的每個網格進行池化,這樣就可以得到固定長度的輸出。
Fast RCNN:

其主要創新是RoI Pooling 層,它將不同大小候選框的卷積特征圖統一采樣成固定大小的特征。roi_pool層將每個候選區域均勻分成M×N塊,對每塊進行max pooling。將特征圖上大小不一的候選區域轉變為大小統一的數據,送入下一層。 

方法解決了RCNN方法三個問題:

問題一:測試時速度慢 
RCNN一張圖像內候選框之間大量重疊,提取特征操作冗余。 
本文將整張圖像歸一化后直接送入深度網絡。在鄰接時,才加入候選框信息,在末尾的少數幾層處理每個候選框。

問題二:訓練時速度慢 
原因同上。 
在訓練時,本文先將一張圖像送入網絡,緊接着送入從這幅圖像上提取出的候選區域。這些候選區域的前幾層特征不需要再重復計算。

問題三:訓練所需空間大 
RCNN中獨立的分類器和回歸器需要大量特征作為訓練樣本。 
本文把類別判斷和位置精調統一用深度網絡實現,不再需要額外存儲。

Faster RCNN:faster RCNN可以簡單地看做“區域生成網絡+fast RCNN“的系統

目標檢測的四個基本步驟(候選區域生成,特征提取,分類,位置精修)終於被統一到一個深度網絡框架之內。所有計算沒有重復,完全在GPU中完成,大大提高了運行速度。

在整個faster RCNN算法中,有三種尺度: 

原圖尺度:原始輸入的大小。不受任何限制,不影響性能。 

歸一化尺度:輸入特征提取網絡的大小,在測試時設置,源碼中opts.test_scale=600。anchor在這個尺度上設定。這個參數和anchor的相對大小決定了想要檢測的目標范圍。 

網絡輸入尺度:輸入特征檢測網絡的大小,在訓練時設置,源碼中為224*224。

R-FCN

R-FCN沿用了 Faster RCNN 的框架結構,不同的是在Faster R-CNN的基礎上通過引入位置敏感得分圖,將RoI-wise subnetwork消滅了,直接在位置敏感得分圖上利用ROI Pooling進行信息采樣融合分類和位置信息。

Mask R-CNN

Faster R-CNN在做下采樣和RoI Pooling時都對特征圖大小做了取整操作,這種做法對於分類任務基本沒有影響,但對檢測任務會有一定影響,對語義分割這種像素級任務的精度影響則更為嚴重。為此,作者對網絡中涉及特征圖尺寸變化的環節都不使用取整操作,而是通過雙線性差值填補非整數位置的像素。這使得下游特征圖向上游映射時沒有位置誤差,不僅提升了目標檢測效果,還使得算法能滿足語義分割任務的精度要求。

YOLO系列:

YOLO舍去了候選框提取分支(Proposal階段),直接將特征提取、候選框回歸和分類在同一個無分支的卷積網絡中完成,使得網絡結構變得簡單,檢測速度較Faster R-CNN也有近10倍的提升。

算法將待檢測圖像縮放到統一尺寸,為了檢測不同位置的目標,將圖像等分成的網格,如果某個目標的中心落在一個網格單元中,此網格單元就負責預測該目標。
SSD

SSD對YOLO進行了改進,達到了和兩階段方法相當的精度,同時又保持了較快的運行速度。SSD也采用了網格划分的思想,和Faster RCNN不同的是它將所有的操作整合在一個卷積網絡中完成。為了檢測不同尺度的目標,SSD對不同卷積層的特征圖像進行滑窗掃描;在前面的卷積層輸出的特征圖像中檢測小的目標,在后面的卷積層輸出的特征圖像中檢測大的目標。它的主要特點是:

  1. 基於多尺度特征圖像的檢測:在多個尺度的卷積特征圖上進行預測,以檢測不同大小的目標,一定程度上提升了小目標物體的檢測精度。
  2. 借鑒了Faster R-CNN中的Anchor boxes思想,在不同尺度的特征圖上采樣候選區域,一定程度上提升了檢測的召回率以及小目標的檢測效果。

FPN:

FPN(Feature Pyramid Network)方法同時利用低層特征高分辨率和高層特征的高語義信息,通過融合這些不同層的特征達到提升預測的效果的作用。FPN中預測是在每個融合后的特征層上單獨進行的,這和常規的特征融合方式有所不同。

目前主流檢測框架有4種使用特征的形式:

  1. 圖像金字塔。即將圖像縮放到不同的大小,然后不同大小的圖像生成對應的特征。這種方法的缺點是增加了時間成本。有些算法會在檢測時采用這種圖像金字塔的方案。
  2. 單一尺度特征層。SPPNet,Fast RCNN,Faster RCNN采用這種方式,即僅采用網絡最后一層卷積層的特征。
  3. SSD采用這種多尺度特征融合的方式,但是沒有上采樣過程,即從網絡不同層抽取不同尺度的特征做預測,這種方式不會增加額外的計算量。SSD算法中沒有用到足夠低層的特征(在SSD中,最低層的特征是VGG網絡的conv4_3),而足夠低層的特征對於檢測小物體是很有幫助的。
  4. FPN采用bottom-up與top-down的結構,實現了低層特征和高層語義特征的融合,提高了特征映射的信息密度和分辨率,提高了小目標物體的檢測效果;區別於SSD,FPN每層都是獨立預測的。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM