【更新中】目標檢測——梳理,準備面試
最近在準備找工作面試,本文在此梳理了目標檢測中涉及的面試要用的知識點,包含了一下幾方面:
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 |
模型列表:
- R-CNN
- SPPnet
- Fast R-CNN
- Faster R-CNN
- YOLO
- 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。 | |
總結 |
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 泛化能力強。在自然影象上訓練好的結果在藝術作品中的依然具有很好的效果。 版本二:
|
|
SSD |
設計思想: ssd 在特徵圖上採用卷積核來預測一系列的 default bounding boxes 的類別分數、偏移量,同時實現end-to-end 的訓練。 特點:
|
版本二:
速度對比: |
|
YOLO V2 |
yolo v2 的改進的點:
|
||
YOLO 9000 | |||
YOLO V3 |
筆記:
Faster R-CNN
- canonical model