1. 程式人生 > >目標檢測系列學習筆記(RCNN系列+YOLO系列)

目標檢測系列學習筆記(RCNN系列+YOLO系列)

小白一枚 記錄學習點滴

裡面的“?”是我還沒有太看懂的部分

1.      RCNN

article:  Rich feature hierarchiesfor accurate object detection and semantic segmentation(2014)

                27th IEEE Conference onComputer Vision and Pattern Recognition (CVPR)

                作者: Girshick, Ross; Donahue, Jeff; Darrell, Trevor; 等.

                被引頻次1161

code:   http://www.cs.berkeley.edu/~rbg/rcnn

傳統方法:HOG,DPM,LBP,SIFT,BoW

演算法思路:

1)        候選區域選擇

RegionProposal是一類傳統的區域提取方法(selective search),可以看作不同寬高的滑動視窗(1-2k個),通過視窗滑動獲得潛在的目標影象。然後進行歸一化,作為CNN的標準輸入

2)        CNN特徵提取(標準CNN過程,得到固定維度的輸出)

提取影象的所有候選框(選擇性搜尋)

對於每個區域,修正大小以適合CNN的輸入,將第五個池化層的輸出(對候選框提取到的特徵)存到硬碟

3)        分類與邊界迴歸

實際包含兩個子步驟,一是對上一步的輸出向量進行分類(SVM);二是通過邊界迴歸(bounding-boxregression) 得到精確的目標區域。

結果:

問題:

1)        多個候選區域對應的影象需要預先提取,佔用較大的磁碟空間;

2)        針對傳統CNN需要固定尺寸的輸入影象,crop/warp(歸一化)產生物體截斷或拉伸,會導致輸入CNN的資訊丟失;

3)        每一個Proposal Region都需要進入CNN網路計算,上千個Region存在大量的範圍重疊,重複的特徵提取帶來巨大的計算浪費。

附:

Ø  Proposal RegionSelective Search和edge Boxes)

Selective search for objectrecognition. IJCV, 2013.

Ø  Bounding Box Regression

對於視窗一般使用四維向量(x,y,w,h) 來表示,分別表示視窗的中心點座標和寬高。紅色的框 P 代表原始的Proposal, 綠色的框 G 代表目標的 Ground Truth,Bbox reg的目標是尋找一種關係使得輸入原始的視窗 P 經過對映得到一個跟真實視窗 G 更接近的迴歸視窗。

        article:Object Detection with Discriminatively Trained Part-Based Models(2010)

        作者: Felzenszwalb,Pedro F.; Girshick, Ross B.; McAllester, David; 等.

        IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE

        被引頻次: 2798 

Ø  SPPNet

思路:

1)        取消了crop/warp影象歸一化過程,解決影象變形導致的資訊丟失以及儲存問題

2)        採用空間金字塔池化(Spatial Pyramid Pooling )替換了全連線層之前的最後一個池化層

3)        只對原圖進行一次卷積得到整張圖的feature map,然後找到每個候選框在feature map上的對映patch,將此patch作為每個候選框的卷積特徵輸入到SPP layer和之後的層。節省了大量的計算時間,比R-CNN有一百倍左右的提速。

問題:

1)        和RCNN一樣,訓練過程仍然是隔離的,提取候選框、計算CNN特徵、SVM分類、Bounding Box迴歸獨立訓練,大量的中間結果需要轉存,無法整體訓練引數

2)        SPP-Net無法更新空間金字塔池層以下的權重(FastRCNN2.3解釋了?)

3)        在整個過程中,Proposal Region仍然很耗時

2.      FastR-CNN

article:  Fast R-CNN

                   作者: Girshick,Ross

                    會議: IEEE International Conference on Computer Vision

                   2015 IEEE INTERNATIONALCONFERENCE ON COMPUTER VISION (ICCV) 

                   被引頻次: 381 

code:  https://github.com/rbgirshick/fast-rcnn.

思路

1)        生成region proposal(通過selective search),每張圖片大約2000個候選框

2)        Fast-RCNN把整張圖片送入CNN,進行特徵提取

3)        Fast-RCNN把regionproposal對映到CNN的最後一層卷積feature map上

4)        通過RoI pooling層(其實是單層的SPP layer)使得每個建議視窗生成固定大小的feature map

5)        繼續經過兩個全連線層(FC)得到特徵向量,得到兩個輸出向量(稱為multi-task)

第一個是分類,使用softmax(比SVM效果好),第二個是每一類的boundingbox迴歸。利用SoftMax Loss和Smooth L1 Loss對分類概率和邊框迴歸聯合訓練

    cls_score層用於分類,輸出K+1維陣列p,表示屬於K類和背景的概率。

    bbox_prdict層用於調整候選區域位置,輸出4*K維陣列t,表示分別屬於K類時,應該平移縮放的引數

優點

1)        平均準確率(mAP)高於R-CNN,SPPnet

2)        提速

在訓練時,SGD分層次取樣,先採樣N張影象,然後在每張影象上取樣R/N個RoI。來自於同一張影象的RoIs共享計算和記憶體。

3)        全連線層通過SVD加速(?)

4)        採用mult-task loss,將softmax分類器和bounding-box regressors聯合優化

5)        訓練可以更新所有網路層

6)        不需要快取特徵

結果

問題

1)        Fast R-CNN中採用selectivesearch演算法提取候選區域,而目標檢測大多數時間都消耗在這裡

2)        Fast R-CNN並沒有實現真正意義上的端到端訓練模式

3.      FasterR-CNN

article:  Faster R-CNN: TowardsReal-Time Object Detection with Region Proposal Networks

作者: Ren,Shaoqing; He, Kaiming; Girshick, Ross; 等.

 International Conference on Neural Information ProcessingSystems(2015)被引頻次: 1661

IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE (2016)被引頻次: 67 

RPN:

RPN負責尋找proposal,Fast-RCNN負責對RPN的結果進一步優化。RPN可以找到圖片中每個物體的種類和位置,如果更注重速度而不是精度的話完全可以只使用RPN。RPN是一個FCN,可以輸入任意解析度的影象,經過網路後就得到一個feature map

anchors:由generate_anchors.py生成的一組矩形

對RPN的改進: SSD(SingleShot MultiBox Detector)。RPN對小物體檢測效果很差,假設輸入為512*512,經過網路後得到的feature map是32*32,那麼feature map上的一個點就要負責周圍至少是16*16的一個區域的特徵表達,那對於在原圖上很小的物體它的特徵就難以得到充分的表示,因此檢測效果比較差。2016年的SSD允許從CNN各個level的feature map預測檢測結果,這樣就能很好地適應不同scale的物體,對於小物體可以由更底層的feature map做預測。

思路:

通過滑動視窗的方式實現候選框的提取,每個滑動視窗位置生成9個候選視窗(不同尺度、不同寬高),提取對應9個候選視窗(anchor)的特徵,用於目標分類和邊框迴歸,與FastRCNN類似。

目標分類只需要區分候選框內特徵為前景或者背景。邊框迴歸確定更精確的目標位置

 

候選框的選取依據:

1)丟棄跨越邊界的anchor

2)與樣本重疊區域大於0.7的anchor標記為前景,重疊區域小於0.3的標定為背景

訓練方式:

1)根據現有網路初始化權值w,訓練RPN

2)用RPN提取訓練集上的候選區域,用候選區域訓練FastRCNN,更新權值w

3)重複1、2,直到收斂


結果

小結:



4.      YOLO 

4.1 YOLOv1

article:You Only Look Once:Unified, Real-Time Object Detection

2016 IEEE Conference on Computer Vision andPattern Recognition (CVPR)

作者: Redmon, Joseph; Divvala, Santosh; Girshick, Ross; 等.

被引頻次: 164 

思想:

YOLO將輸入影象分成S*S個格子,每個格子負責檢測‘落入’該格子的物體。若某個物體的中心位置的座標落入到某個格子,那麼這個格子就負責檢測出這個物體。如下圖所示,圖中物體狗的中心點(紅色原點)落入第5行、第2列的格子內,所以這個格子負責預測影象中的物體狗。


網路結構

        其中,卷積層用來提取影象特徵,全連線層用來預測影象位置和類別概率值。

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

輸出:

每個cell代表:

每個boundingbox的x,y,w,h和confidence

每一種類別的probabilities

對於 Pascal VOC:

7*7  grid

2    Bounding boxes

20   classes

       

loss函式:

由於小框的變化對識別的影響比大框要大,所以使用根號讓小框的影響更大

 

訓練:

1.        預訓練

使用ImageNet 1000類資料以一半解析度(224×224輸入影象)預先訓練YOLO網路的前20個卷積層+1個average池化層+1個全連線層。然後將解析度加倍以進行檢測。

2.        用步驟1)得到的前20個卷積層網路引數來初始化YOLO模型前20個卷積層的網路引數,然後用VOC 20類標註資料進行YOLO模型訓練。為提高影象精度,在訓練檢測模型時,將輸入影象解析度加倍以進行檢測(resize到448x448)。

優點;

1.        快。

YOLO將物體檢測作為迴歸問題進行求解,整個檢測網路pipeline簡單。在titan x GPU上,在保證檢測準確率的前提下(63.4% mAP,VOC 2007 test set),可以達到45fps的檢測速度。

2.        背景誤檢率低。

YOLO在訓練和推理過程中能‘看到’整張影象的整體資訊,而基於region proposal的物體檢測方法(如rcnn/fast rcnn),在檢測過程中,只‘看到’候選框內的區域性影象資訊。因此,若當影象背景(非物體)中的部分資料被包含在候選框中送入檢測網路進行檢測時,容易被誤檢測成物體。測試證明,YOLO對於背景影象的誤檢率低於fast rcnn誤檢率的一半。

3.        通用性強。

YOLO對於藝術類作品中的物體檢測同樣適用。它對非自然影象物體的檢測率遠遠高於DPM和RCNN系列檢測方法。

缺點:

1.        識別物體位置精準性差。

2.        召回率低。

3.        由於輸出層為全連線層,因此在檢測時,YOLO訓練模型只支援與訓練影象相同的輸入解析度。

4.        雖然每個格子可以預測B個bounding box,但是最終只選擇只選擇IOU最高的bounding box作為物體檢測輸出,即每個格子最多隻預測出一個物體。當物體佔畫面比例較小,如影象中包含畜群或鳥群時,每個格子包含多個物體,但卻只能檢測出其中一個。

創新點:

1.        YOLO訓練和檢測均是在一個單獨網路中進行。

2.        YOLO將物體檢測作為一個迴歸問題進行求解,輸入影象經過一次inference,便能得到影象中所有物體的位置和其所屬類別及相應的置信概率。

fast YOLO

它只有9個卷積層和2個全連線層。使用titanx GPU,fast YOLO可以達到155fps的檢測速度,但是mAP值也從YOLO的63.4%降到了52.7%,但卻仍然遠高於以往的實時物體檢測方法(DPM)的mAP值

參考:

https://www.bilibili.com/video/av11200546/

4.2 YOLOv2

作者: Redmon, Joseph; Farhadi, Ali

30th IEEE/CVF Conference on Computer Visionand Pattern Recognition (CVPR)

YOLO2主要有兩個大方面的改進:

使用一系列的方法對YOLO進行了改進,在保持原有速度的同時提升精度得到YOLOv2。

提出了一種目標分類與檢測的聯合訓練方法,同時在COCO和ImageNet資料集中進行訓練得到YOLO9000,實現9000多種物體的實時檢測。

1 Better

1.1 Batch Normalization

批量標準化。通過在YOLO中的所有卷積層上新增批量歸一化,mAP中獲得超過2%的改進效果。可以在捨棄dropout優化後依然不會過擬合。

1.2 High ResolutionClassifier

高解析度分類器。原來的YOLO在224×224解析度上訓練分類器網路,並將解析度增加到448以用於檢測。YOLOv2首先在448×448的解析度下使用分類網路(darknet)對ImageNet上的10個epoch進行微調。然後在檢測時微調所得到的網路。這種高解析度分類網路增加了近4%的mAP。

1.3 Convolutional WithAnchor Boxes

(借鑑了Faster R-CNN中的anchor思想)

1.        從YOLO中刪除全連線層,並使用anchor box預測邊界框。

2.        消除一個池化層,使網路的卷積層的輸出更高的解析度。

3.        縮小網路將輸入尺寸為416*416而不是448*448。目的是為了讓後面產生的卷積特徵圖的寬高都為奇數,這樣就可以產生一個center cell(大物體通常佔據了影象的中間位置,就可以只用中心的一個cell來預測這些物體的位置,否則就要用中間的4個cell來進行預測)。

4.        YOLO的卷積層將影象下采樣32倍,所以通過使用輸入影象416,得到13×13的輸出特徵圖。

5.        YOLOv2不再由柵格去預測條件類別概率,而由Bounding boxes去預測。在YOLOv1中輸出的維度為S * S * (B * 5 + C ),而YOLOv2為S * S * (B * (5 + C))。

使用anchorboxes, 模型的的精度有一點點下降,但是Recall有大幅上升。沒有anchor box,我們的中間模型的mAP為69.5,Recall為81%。使用anchor boxes 模型的mAP為69.2,Recall為88%。

1.4 Dimension Clusters(維度聚類)

使用anchor的第一個問題:如何選擇anchorboxes。Faster R-CNN的anchor boxes是手工精心挑選的,但未必是最好的。

使用K-means從訓練集中聚類得到的anchorboxes可能更好。傳統的K-means聚類方法使用的是歐氏距離函式,但是較大的boxes會比較小的boxes產生更多的error,聚類結果可能會偏離。因此採用的評判標準是IOU得分

左圖顯示了通過k的各種選擇獲得的平均IOU。 發現k = 5為模型的召回率與複雜性提供了良好的折衷。右圖顯示了VOC和COCO的相對質心。這兩種套裝都喜歡更薄,更高的盒子,而COCO的尺寸比VOC更大。

兩種anchor選擇方法的對比試驗:使用聚類方法,僅僅5種boxes的召回率就和Faster R-CNN的9種相當

1.5 Direct locationprediction(直接位置預測)

使用anchor的第二個問題:模型不穩定,尤其是在早期迭代的時候。原因是

x=(tx∗wa)+xa

y=(ty∗wa)+ya

這個公式沒有任何限制,使得無論在什麼位置進行預測,任何anchor boxes可以在影象中任意一點結束,可能會出現anchor檢測很遠的目標box的情況,效率比較低,且不穩定。

1.6 Fine-Grained Features(細粒度特徵)

添加了一個轉移層(passthrough layer),這一層要把淺層特徵圖(解析度為26 * 26,是底層解析度4倍)連線到深層特徵圖。

前面26 * 26 *512的特徵圖使用按行和按列隔行取樣的方法,就可以得到4個新的特徵圖,維度都是13 * 13 * 512,然後做concat操作,得到13 * 13 * 2048的特徵圖,將其拼接到後面的層,相當於做了一次特徵融合,有利於檢測小目標。?

1.7 Multi-Scale Training

目的是希望YOLOv2具有不同尺寸圖片的魯棒性。每經過10 epoch,就會隨機選擇新的圖片尺寸。YOLO網路使用的降取樣引數為32,那麼就使用32的倍數進行池化{320,352,…,608}。

小尺寸圖片檢測中,YOLOv2成績很好,輸入為228 *228的時候,幀率達到90FPS,mAP幾乎和Faster R-CNN的水準相同。

2 Faster

Darknet-19

YOLOv2使用了一個新的分類網路作為特徵提取部分。使用Darknet-19在標準1000類的ImageNet上用隨機梯度下降法訓練了160次

 

Training for detection

去掉了原網路最後一個卷積層,轉而增加了三個3* 3 * 1024的卷積層,每一個後面跟一個1 * 1的卷積層,輸出維度是檢測所需的數量(B * (5 + C))。加入了passthrough layer,從最後一個輸出為26 * 26 * 512的卷積層連線到新加入的三個卷積核尺寸為3 * 3的卷積層的第二層,使模型有了細粒度特徵。 

3 Stronger

提出了一種在分類資料集和檢測資料集上聯合訓練的機制。

Hierarchical classification(層次式分類)

從ImageNet標籤的WordNet(有向圖)中構建了一個層次樹結構(hierarchical tree)

建立層次樹的步驟是:

1.        遍歷ImageNet的所有視覺名詞

2.        對每一個名詞,在WordNet上找到從它所在位置到根節點(“physical object”)的路徑。許多同義詞集只有一條路徑。所以先把這些路徑加入層次樹結構。

3.        然後迭代檢查剩下的名詞,得到路徑,逐個加入到層次樹。路徑選擇辦法是:如果一個名詞有兩條路徑到根節點,其中一條需要新增3個邊到層次樹,另一條僅需新增一條邊,那麼就選擇新增邊數少的那條路徑。


預測每個節點的條件概率。例如: 在“terrier”節點會預測:

如果想求得特定節點的絕對概率,只需要沿著路徑做連續乘積。例如 如果想知道一張圖片是不是“Norfolkterrier ”需要計算:(分類時假設圖片包含物體:Pr(physical object) = 1)


對於同義詞(屬於某個類別的節點),採用softmax方法進行分類:

Dataset combination withWordTree

使用WordTree把多個數據集整合在一起。YOLO9000從COCO檢測資料集中學習如何在圖片中尋找物體,從ImageNet資料集中學習更廣泛的物體分類。

joint classification anddetection(聯合訓練分類和檢測)

WordTree有9418個類別。採用基本YOLOv2的結構,anchor box數量由5調整為3用以限制輸出大小。

當網路遇到一張檢測圖片就正常反向傳播。其中對於分類損失只在當前及其路徑以上對應的節點類別上進行反向傳播。

當網路遇到一張分類圖片僅反向傳播分類損失。在該類別對應的所有bounding box中找到一個置信度最高的(作為預測座標),同樣只反向傳播該類及其路徑以上對應節點的類別損失。反向傳播objectness損失基於如下假設:預測box與ground truth box的重疊度至少0.31IOU。

採用這種聯合訓練,YOLO9000從COCO檢測資料集中學習如何在圖片中尋找物體,從ImageNet資料集中學習更廣泛的物體分類。

參考:

4.3 YOLOv3

article: YOLOv3: AnIncremental Improvement

論文連結:https://pjreddie.com/media/files/papers/YOLOv3.pdf

Bounding Box Prediction(邊界框的預測)

1.        yolov3的anchor boxes也是通過聚類的方法得到的。yolov3對每個boundingbox預測四個座標值(tx, ty, tw, th)。對bounding box按如下方式預測:

2.        採用了sum of squared error loss(平方和距離誤差損失)

3.        對每個bounding box通過邏輯迴歸預測一個物體的得分,如果預測的這個bounding box與真實的邊框值大部分重合且比其他所有預測的要好,那麼這個值就為1.如果overlap沒有達到一個閾值(yolov3中這裡設定的閾值是0.5),那麼這個預測的bounding box將會被忽略,也就是會顯示成沒有損失值。

4.        one bounding box prior for eachground truth

Class Prediction

1.        不使用softmax,而是邏輯迴歸independent logistic classifiers。使用softmax強加了一個假設,即每個盒子只有一個類別,通常情況並非如此,因為一些物體具有重疊的標籤(例如,Woman and Person)。所以每個bounding box使用multilabel classification

2.        使用binary cross-entropy loss(對數損失)做分類預測。

Predictions Across Scales(跨尺度預測)

1.        YOLOv3 用3種不同的尺度預測box

2.        使用類似FPN提取尺度的特徵


3.        仍然使用K-means選擇了9個聚類(clusters)和3個尺度(scales),然後在整個尺度上均勻分割聚類,每個尺度有3個boxes。所以對於4個邊界框偏移量,1個目標性預測和80個類別預測,張量為N×N×[3 *(4 + 1 + 80)]。

4.        從之前的兩層中取得特徵圖,並將其上取樣2倍。還從較早的網路中獲取特徵圖(?),並使用element-wise addition將其與上取樣特徵進行合併。能夠獲得更有意義的語義資訊。然後再新增幾個卷積層來處理這個組合的特徵圖。

Feature Extractor

使用新網路(混合了YOLOv2,Darknet-19, and residual network)

相比Darknet-19,Res Net-101和 Res Net-152


結果

失敗案例

Anchor box x,y offset predictions。我們嘗試使用正常anchor box預測機制,這裡你使用線性啟用來預測x,y offset作為box的寬度或高度的倍數。我們發現這種方法降低了模型的穩定性,並且效果不佳。

Linear x,y predictions instead of logistic。我們嘗試使用線性啟用來直接預測x,y offeset 而不是邏輯啟用。這導致mAP下降了幾個點。

Focal loss。我們嘗試使用focal loss。它使得mAp降低了2個點。YOLOv3對focal loss解決的問題可能已經很強大,因為它具有單獨的物件預測和條件類別預測。因此,對於大多數例子來說,類別預測沒有損失?或者其他的東西?我們並不完全確定。

Dual IOU thresholds and truth assignment。Faster R-CNN在訓練期間使用兩個IOU閾值。如果一個預測與groundtruth重疊達到0.7,它就像是一個正樣本,如果達到0.3-0.7,它被忽略,如果小於0.3,這是一個負樣本的例子。我們嘗試了類似的策略,但無法取得好成績。

我們非常喜歡我們目前的表述,似乎至少在區域性最佳狀態。有些技術可能最終會產生好的結果,也許他們只是需要一些調整來穩定訓練。

創新點

Darknet-53

使用金字塔網路

用邏輯迴歸替代softmax作為分類器

-----------------------------------我是分割線--------------------------------------------

目前就看了這些,裡面的“?”是我還沒有太看懂的部分