1. 程式人生 > >目標檢測 (Object Detection) 演算法彙集

目標檢測 (Object Detection) 演算法彙集

基於深度學習的目標檢測綜述(一)(2018年03月16日
影象分類,檢測及分割是計算機視覺領域的三大任務。影象分類模型(詳情見這裡)是將影象劃分為單個類別,通常對應於影象中最突出的物體。但是現實世界的很多圖片通常包含不只一個物體,此時如果使用影象分類模型為影象分配一個單一標籤其實是非常粗糙的,並不準確。對於這樣的情況,就需要目標檢測模型,目標檢測模型可以識別一張圖片的多個物體,並可以定位出不同物體(給出邊界框)。目標檢測在很多場景有用,如無人駕駛和安防系統。 
這裡寫圖片描述

Google在2017年開源了TensorFlow Object Detection API,並對主流的Faster R-CNN,R-FCN及SSD三個演算法在MS COCO資料集上的效能做了細緻對比(見

Huang et al. 2017),如下圖所示。 
Faster R-CNN,R-FCN及SSD演算法在MS COCO資料集上的效能對比

對於一張圖片,R-CNN基於selective search方法大約生成2000個候選區域,然後每個候選區域被resize成固定大小(227×227227×227)並送入一個CNN模型中,最後得到一個4096-d的特徵向量。然後這個特徵向量被送入一個多類別SVM分類器中,預測出候選區域中所含物體的屬於每個類的概率值。每個類別訓練一個SVM分類器,從特徵向量中推斷其屬於該類別的概率大小。為了提升定位準確性,R-CNN最後又訓練了一個邊界框迴歸模型。訓練樣本為(P,G)(P,G),其中P=(Px,Py,Pw,Ph)P=(Px,Py,Pw,Ph)為候選區域,而G=(Gx,Gy,Gw,Gh)G=(Gx,Gy,Gw,Gh)為真實框,GG是與PP的IoU最大的真實框(只使用IoU大於0.6的樣本),迴歸器的目標值定義為: 
這裡寫圖片描述

 
在做預測時,利用上述公式可以反求出預測框的修正位置。R-CNN對每個類別都訓練了單獨的迴歸器,採用最小均方差損失函式進行訓練

R-CNN模型的訓練是多管道的,CNN模型首先使用2012 ImageNet中的影象分類競賽資料集進行預訓練。然後在檢測資料集上對CNN模型進行finetuning,其中那些與真實框的IoU大於0.5的候選區域作為正樣本,剩餘的候選區域是負樣本(背景)。共訓練兩個版本,第一版本使用2012 PASCAL VOC資料集,第二個版本使用2013 ImageNet中的目標檢測資料集。最後,對資料集中的各個類別訓練SVM分類器(注意SVM訓練樣本與CNN模型的funetuning不太一樣,只有IoU小於0.3的才被看成負樣本)。

總體來看,R-CNN是非常直觀的,就是把檢測問題轉化為了分類問題,並且採用了CNN模型進行分類,但是效果卻很好。最好的R-CNN模型在2012 PASCAL VOC資料集的mAP為62.4%(比第二名高出了22個百分點),在2013 ImageNet上的mAP為31.4%(比第二名高出7.1個百分點)。 
R-CNN模型結構圖

綜述:深度學習時代的目標檢測演算法(2018-03-05
目前目標檢測領域的深度學習方法主要分為兩類:two stage的目標檢測演算法;one stage的目標檢測演算法。前者是先由演算法生成一系列作為樣本的候選框,再通過卷積神經網路進行樣本分類;後者則不用產生候選框,直接將目標邊框定位的問題轉化為迴歸問題處理。正是由於兩種方法的差異,在效能上也有不同,前者在檢測準確率和定位精度上佔優,後者在演算法速度上佔優。 
目標檢測演算法脈絡

部分目標檢測演算法精度和速度對比

基於深度學習的影象目標檢測(上)(2018-01-02
一個效果評估mAP(mean average precision)

借用了文件檢索裡面的標準, 假設目標物體的預測在所有的影象中都進行預測, 在每個影象上計算準確和召回。 但是最後計算每個目標物體的AP的時候, 僅僅選用相關的影象,進行平均average, 最後計算mAP的時候再求平均mean。 是一個奇怪的名字,卻是一個蠻直觀的評價! 
這裡寫圖片描述

2013年之前, 基本由RBG和他導師的DPM主導, 當然離不開SS和SVM的應用,和後續Box Regression的修正。 
這裡寫圖片描述

這樣,我們就得到了最後RNN的框架,我們看到區域推薦、SVM和Bound Box Regression都是成熟的技術的整合: 
這裡寫圖片描述

這裡寫圖片描述

基於深度學習的「目標檢測」演算法綜述 
雲端計算時代來臨後,「目標檢測」演算法大家族主要劃分為兩大派系,一個是 R-CNN 系兩刀流,另一個則是以 YOLO 為代表的一刀流派。下面分別解釋一下 兩刀流 和 一刀流。 
兩刀流的天平主要傾向準, 
一刀流的天平主要傾向快。

基於深度學習的目標檢測研究進展(2016-06-27) 
傳統目標檢測的方法一般分為三個階段:區域選擇; 特徵提取;分類器 
傳統目標檢測方法

總結:傳統目標檢測存在的兩個主要問題:一個是基於滑動視窗的區域選擇策略沒有針對性,時間複雜度高,視窗冗餘;二是手工設計的特徵對於多樣性的變化並沒有很好的魯棒性。

對於影象分類,不得不提的是2012年ImageNet大規模視覺識別挑戰賽(ILSVRC)上,機器學習泰斗Geoffrey Hinton教授帶領學生Krizhevsky使用卷積神經網路將ILSVRC分類任務的Top-5 error降低到了15.3%,而使用傳統方法的第二名top-5 error高達 26.2%。

1)R-CNN (CVPR2014, TPAMI2015) 
這裡寫圖片描述 
上面的框架圖清晰的給出了R-CNN的目標檢測流程: 
(1) 輸入測試影象

(2) 利用selective search演算法在影象中提取2000個左右的region proposal。

(3) 將每個region proposal縮放(warp)成227x227的大小並輸入到CNN,將CNN的fc7層的輸出作為特徵。

(4) 將每個region proposal提取到的CNN特徵輸入到SVM進行分類。

針對上面的框架給出幾點解釋:

  • 上面的框架圖是測試的流程圖,要進行測試我們首先要訓練好提取特徵的CNN模型以及用於分類的SVM:使用在ImageNet上預訓練的模型(AlexNet/VGG16)進行微調得到用於特徵提取的CNN模型,然後利用CNN模型對訓練集提特徵訓練SVM。

  • 對每個region proposal縮放到同一尺度是因為CNN全連線層輸入需要保證維度固定。

  • 上圖少畫了一個過程——對於SVM分好類的region proposal做邊框迴歸(bounding-box regression),邊框迴歸是對region proposal進行糾正的線性迴歸演算法,為了讓region proposal提取到的視窗跟目標真實視窗更吻合。因為region proposal提取到的視窗不可能跟人手工標記那麼準,如果region proposal跟目標位置偏移較大,即便是分類正確了,但是由於IoU(region proposal與Ground Truth的視窗的交集比並集的比值)低於0.5,那麼相當於目標還是沒有檢測到。

小結:R-CNN在PASCAL VOC2007上的檢測結果從DPM HSC的34.3%直接提升到了66%(mAP)。如此大的提升使我們看到了region proposal+CNN的巨大優勢。

但是R-CNN框架也存在著很多問題:

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

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

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

針對速度慢的這個問題,SPP-NET給出了很好的解決方案。

Paper Reading | 解讀端到端的物體檢測演算法YOLO及YOLOv2(2018-03-21
該文為Momenta Paper Reading 第一季第二期回顧,始發於2017年3月4日。 
論文連結: 
1.You Only Look Once 
2.YOLO9000:Better, Faster, Stronger 
PPT下載連結:https://pan.baidu.com/s/1bJK-fTT-q5JjW-kYjmDMQA 密碼: 4kie 
分享視訊回放連結:undefined_騰訊視訊

一個神經網路模型包含了3個重要的特徵:1)引數;2)計算準則;3)判定規則。如果我們的任務是判斷一個3x3的影象(畫素值只有0或者1)是數字1還是數字0,那麼我們可以給出這樣一個模型,引數的規模也是3x3,和影象一致: 
這裡寫圖片描述

有了這些基礎,想必我們理解YOLO會非常的容易。與YOLO的第一次邂逅是在2015年6月,當時以Fast R-CNN, Faster R-CNN引領的proposal + classification的兩階段檢測方法已非常成熟,YOLO的橫空出世打破了這一架構,將detection的任務統一在端到端的網路之中。它的pipeline異常簡單: 
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述 
在2016年年底,YOLOv2問世。在全新的YOLOv2中引入了奧林匹克精神:更高、更快、更強。同樣,加強版的YOLOv2以傲人的速度和極高的效能吸引了大量圍觀群眾。作者高調release了一個007的檢測視訊,網路上都可以搜尋到。總的來看,效能相當不錯,很多細小、遮擋的物件都能很魯棒地檢測出來。

5分鐘學會AI - How to use YOLO with python(2017-12-21
YOLO 是時下最流行(state of the art)的物體檢測(Object Detection) AI 模型之一,流行的原因是因為好用,好用的標準歸納為3條:

檢測範圍廣:YOLO9000 覆蓋了9000種常用分類,YOLOv2 覆蓋了PASCAL VOC和COCO資料集分類。(說人話:就是可以檢測出9000種常見物體) 
檢測準確率高 
檢測速度快:平民玩家用普通CPU就能執行低配乞丐版(Tiny YOLO),人民幣玩家用GPU執行高配豪華版 (YOLOv2)。作者大神給出的參考值是 Tiny YOLO 可以達到200FPS,YOLOv2 達到40FPS,當然這是用 NVIDIA Titan X 傳奇裝備跑出來的分數。

《論文三部曲》Yolo- SSD-Yolo v2 (2018-01-24
yolo :之前處理目標檢測的演算法都歸為了分類問題,然而作者將物體檢測任務當做一個regression問題來處理,使用一個神經網路,直接從一整張影象來預測出bounding box 的座標、box中包含物體的置信度和物體的probabilities。整個檢測流程都在一個網路中,實現了end-to-end來優化目標檢測。與之前的網路對比圖如下: 
這裡寫圖片描述

詳解YOLO 2與YOLO 9000目標檢測系統 | 分享總結(2017-09-30
訓練YOLO 2的第一步是在ImageNet上預先學習darknet-19,在224x224影象上,它僅需5.58個G-ops。此外,YOLO 2在VOC2007,VOC2012和COCO檢測資料集上有很好的表現。 
在YOLO 2的基礎上,論文中進一步提出了YOLO 9000,可以產生9418個類別的目標檢測。首先是需要建立一個基於wordNet結構的wordTree。這個樹包含imagenet上最流行的9000個分類,還有COCO的80個大類。YOLO 9000的最後一層採用層次分類的方法,來計算400多個條件概率,用它來產生目標的最終分類。 
這裡寫圖片描述 
Darknet-19計算量 
Darknet-19計算量

使用Detectron進行目標檢測(2018-03-24
上個月的時候(2018年1月),Facebook終於開源了他們的目標檢測平臺Detectron: facebookresearch/Detectron。這一平臺是在老舊的py-faster-rcnn停止維護2年後才開源出來的,所以直覺上變化會很大。本文Gemfield將介紹Detectron的使用步驟,注意一點,Detectron是基於Caffe2的,而Caffe2只有GPU版本。

Object detection分為兩大經典路線,一個是基於RPN的two-stage,一類是基於SSD和YOLO的one-stage,前者檢測精度高,後者檢測速度快。本論文研究two-stage慢於one-stage的原因,發現 Faster R-CNN 和 R-FCN 會在 RoI warping 之前或之後進行高強度的計算。Faster R-CNN 包含兩個全連線層用於 RoI 識別,而 R-FCN 會生成一個大型得分圖(classes × p × p,class是類別,p是pool size)。這些網路的速度會被架構的 heavy-head(頭重腳輕)設計拖慢速度(本論文是在R-FCN基礎上的優化,body是主幹網路,截止到2048通道特徵圖,RoI及之後部分為head)。

曠視科技和清華大學聯合推出的這篇論文,主要在簡化第二個階段,提出Light-Head R-CNN,通過使用一個稀疏的特徵圖(RoI之前,使用可分卷積核心縮小特徵圖維度到((α × p × p, α ≤ 10))和一個輕量的 R-CNN 子網路(池化和單全連線層)(全連線層是否也可以被取代?分類必須用全連層?,這也是paper的一個方向?),把網路的頭部儘可能輕量化(說白了,就是把特徵圖的通道數從class降低到α ≤ 10)。基於輕量頭部的結構,檢測器可以在speed和accuracy取得平衡。

另外一個trick就是降低特徵圖通道的手段就是通過separable convolution。separable convolution可分離卷積說白了就是在inception v3模型提出的k ×k卷積分離成 k×1和1 ×k,這樣可以顯著降低卷積核的引數以及特徵圖的維度。計算複雜度可以通過 C_mid 和 C_out 進一步進行控制。

使用ResNet101為主幹網路,精確度優於Mask R-CNN/Faster R-CNN等;使用基於Xception的為主幹網的模型速度優於SSD和YOLO等。但是Light-Head R-CNN是否在可以在同一個主幹網上達到精確度和速度兩個方面都是最優的?如果本論文不能實現,是否還可以繼續優化達到兩個方面都是state-of-the-art?

個人感覺,主幹網路可以更優化,2048通道的特徵圖輸出也可以優化