1. 程式人生 > >【更新中】目標檢測——梳理,準備面試

【更新中】目標檢測——梳理,準備面試

最近在準備找工作面試,本文在此梳理了目標檢測中涉及的面試要用的知識點,包含了一下幾方面:

My paper reading 過程總結:

實際步驟 所花時間 評價 改進
先看了abstract, 1 introduction 以及 4 related works這三個部分,對objection detection 有了大致瞭解 0.5U
看了2.1的Model部分,上網查詢RCNN系列以及SSD和YOLO系列的總結對比 0.75U 對這些模型底層實現都不瞭解,所以網上的總結整理有點沒太看懂 先看SSD的具體原理,再速看YOLO系列原理,和SSD對比,R-CNN系列可以不看
focus on SSD

模型列表:

  1. R-CNN
  2. SPPnet
  3. Fast R-CNN
  4. Faster R-CNN
  5. YOLO
  6. SSD

閱讀部落格(主要閱讀):

參考部落格:

部落格筆記:

筆記:
(1) 分類:
1 以RCNN為代表的基於Region Proposal的深度學習目標檢測演算法(RCNN,SPP-NET,Fast-RCNN,Faster-RCNN等);
2 以YOLO為代表的基於迴歸方法的深度學習目標檢測演算法(YOLO,SSD等)。

RCNN系列:

模型 原理總結 優點 缺點
傳統方法 區域選擇(滑窗)、特徵提取(SIFT、HOG等)、分類器(SVM、Adaboost等)三個部分 一方面滑窗選擇策略沒有針對性、時間複雜度高,視窗冗餘;另一方面手工設計的特徵魯棒性較差
RCNN

流程;

1 使用Selective Search提取Proposes,然後利用CNN等識別技術進行分類。

2 使用識別庫進行預訓練,而後用檢測庫調優引數。

3 使用SVM代替了CNN網路中最後的Softmax,同時用CNN輸出的4096維向量進行Bounding Box迴歸。

4 流程前兩個步驟(候選區域提取+特徵提取)與待檢測類別無關,可以在不同類之間共用;同時檢測多類時,需要倍增的只有後兩步驟(判別+精修),都是簡單的線性運算,速度很快。

1 訓練分為多個階段,步驟繁瑣: 微調網路+訓練SVM+訓練邊框迴歸器。

2 訓練耗時,佔用磁碟空間大:5000張影象產生幾百G的特徵檔案。

3 速度慢: 使用GPU, VGG16模型處理一張影象需要47s。

SPP net

1 通過Spatial Pyramid Pooling解決了深度網路固定輸入層尺寸的這個限制,使得網路可以享受不限制輸入尺寸帶來的好處。

2 解決了RCNN速度慢的問題,不需要對每個Proposal(2000個左右)進行Wrap或Crop輸入CNN提取Feature Map,只需要對整圖提一次Feature Map,然後將Proposal區域對映到卷積特徵層得到全連結層的輸入特徵。

 
Fast R-CNN

1 Fast-RCNN直接使用Softmax替代了RCNN中SVM進行分類,同時在網路中加入了多工函式邊框迴歸,實現了端到端的訓練(除SS Region Proposal階段)。

2 借鑑SPP-NET,提出了一個ROI層。ROI Pooling Layer實際上是SPP-NET的一個精簡版,SPP-NET對每個Proposal使用了不同大小的金字塔對映,而ROI Pooling Layer只需要下采樣到一個7x7的特徵圖。對於VGG16網路conv5_3有512個特徵圖,這樣所有Region Proposal對應了一個7*7*512維度的特徵向量作為全連線層的輸入。

3 使用了不同於SPP-NET的訓練方式,訓練時,把同張圖片的Prososals作為一批進行學習,而Proposals的座標直接對映到conv5層上,這樣相當於一張圖片的所有訓練樣本只卷積了一次。

4 論文在迴歸問題上並沒有用很常見的2範數作為迴歸,而是使用所謂的魯棒L1範數作為損失函式。

5 論文將比較大的全連結層用SVD分解了一下使得檢測的時候更加迅速。

使用Selective Search提取Region Proposals,沒有實現真正意義上的端對端,操作也十分耗時。

Faster R-CNN

1 提出了Region Proposal Network(RPN),將Proposal階段和CNN分類融到了一起,實現了一個完全的End-To-End的CNN目標檢測模型。RPN可以快速提取高質量的Proposal,不僅加快了目標檢測速度,還提高了目標檢測效能。

2 將Fast-RCNN和RPN放在同一個網路結構中訓練,共享網路引數。

雖然現在也是用的滑動視窗策略,但是,滑動視窗操作是在卷積層特徵圖上進行的,維度較原始影象降低了16*16倍(16如何得到的可參見前文);多尺度採用了9種Anchor,對應了三種尺度和三種長寬比,加上後邊接了邊框迴歸,所以即便是這9種Anchor外的視窗也能得到一個跟目標比較接近的Region Proposal。
總結

preview

YOLO和SSD:

相比較於RCNN系列:利用迴歸的思想(既給定輸入影象,直接在影象的多個位置上回歸出這個位置的目標邊框以及目標類別),很大的加快了檢測的速度

模型 原理總結 優點 缺點
YOLO

yolo :之前處理目標檢測的演算法都歸為了分類問題,然而作者將物體檢測任務當做一個regression問題來處理,使用一個神經網路,直接從一整張影象來預測出bounding box 的座標、box中包含物體的置信度和物體的probabilities。整個檢測流程都在一個網路中,實現了end-to-end來優化目標檢測。

一、大致流程

1 給個一個輸入影象,首先將影象劃分成7*7的網格。

2 對於每個網格,我們都預測2個邊框(包括每個邊框是目標的置信度以及每個邊框區域在多個類別上的概率)。

3 根據上一步可以預測出7*7*2個目標視窗,然後根據閾值去除可能性比較低的目標視窗,最後NMS去除冗餘視窗即可。

版本一:

1 將物體檢測作為迴歸問題求解。基於一個單獨的End-To-End網路,完成從原始影象的輸入到物體位置和類別的輸出,輸入影象經過一次Inference,便能得到影象中所有物體的位置和其所屬類別及相應的置信概率。

2 YOLO網路借鑑了GoogLeNet分類網路結構。不同的是,YOLO未使用Inception Module,而是使用1*1卷積層(此處1*1卷積層的存在是為了跨通道資訊整合)+3*3卷積層簡單替代。

3 Fast YOLO使用9個卷積層代替YOLO的24個,網路更輕快,速度從YOLO的45fps提升到155fps,但同時損失了檢測準確率。

4 使用全圖作為 Context 資訊,背景錯誤(把背景錯認為物體)比較少。

5 泛化能力強。在自然影象上訓練好的結果在藝術作品中的依然具有很好的效果。

版本二:

  • 速度快,能夠達到實時的要求。在 Titan X 的 GPU 上 能夠達到 45 幀每秒。
  • 使用全圖作為 Context 資訊,可以更好地避免背景錯誤(背景錯誤不到Faster-R-CNN的一半)。
  • 可以學到目標的泛化特徵。
SSD

設計思想:

ssd 在特徵圖上採用卷積核來預測一系列的 default bounding boxes 的類別分數、偏移量,同時實現end-to-end 的訓練。

特點:

  • 從YOLO中繼承了將detection轉化為regression的思路,一次完成目標定位與分類
  • 基於Faster RCNN中的Anchor,提出了相似的Prior box;
  • 加入基於特徵金字塔(Pyramidal Feature Hierarchy)的檢測方式,即在不同感受野的feature map上預測目標
  • 速度上,比yolo還要快
  • 在檢測精度上,可以和Faster RCNN相媲美

版本二:

  • SSD最大的貢獻,就是在多個feature map上進行預測,這點我在上一篇FPN也說過它的好處,可以適應更多的scale。
  • 第二個是用小的卷積進行分類迴歸,區別於YOLO及其faster rcnn的fc,大大降低引數和提速

速度對比:

  1. 需要人工設定prior box的min_size,max_size和aspect_ratio值。網路中prior box的基礎大小和形狀不能直接通過學習獲得,而是需要手工設定。而網路中每一層feature使用的prior box大小和形狀恰好都不一樣,導致除錯過程非常依賴經驗。
  2. 雖然採用了pyramdial feature hierarchy的思路,但是對小目標的recall依然一般,並沒有達到碾壓Faster RCNN的級別。作者認為,這是由於SSD使用conv4_3低階feature去檢測小目標,而低階特徵卷積層數少,存在特徵提取不充分的問題。
YOLO V2

yolo v2 的改進的點:

  1. Batch Normalization 在卷基層後面增加了batch Normalization,加快了收斂速度,同時mApt提高了2%
  2. High Resolution Classifier 訓練網路的時候將網路從224*224變為448*448,當然後續為了保證特徵圖中只有基數個定位位置,從而保證只有一箇中心細胞,網路最終設定為416*416。最終實現了4%的mAP提升。
  3. Convoutional with Anchor Boxes 去掉yolo1 的全連線層,加入了anchor boxes。提高了召回率。81% 到 88%。當然 mAP 下降了0.3.(69.5-39.2)
  4. Dimension Clusters 提出了kmeans聚類(k =5) 這種c選擇了模型複雜度和召回率。使用歐式距離進行邊界框優先權的衡量,距離越小,優先權越高。
  5. Direction location prediction: 尤其是訓練開始 模型非常不穩定。使用了logistic 啟用函式,使得網路在(0-1)之間波動。
  6. Fine-Grained Features 使用了passthrough layer。 組合了高分辨的特徵和低解析度的特徵通過融合相鄰的特徵到不同的通道中。
  7. Multi-Scale Training 不是固定好尺寸來進行訓練,在訓練的過程中,隔10 batches,隨機地選擇一種尺度來進行訓練
YOLO 9000
YOLO V3

筆記:

Faster R-CNN

  • canonical model