cs231n學習筆記-CNN-目標檢測、定位、分割

cs231n學習筆記-CNN-目標檢測、定位、分割

cite from: http://blog.csdn.net/myarrow/article/details/51878004

1. 基本概念

1)CNN:Convolutional Neural Networks

2)FC:Fully Connected

3)IoU:Intersection over Union (IoU的值定義:Region Proposal與Ground Truth的窗口的交集比并集的比值,如果IoU低于0.5,那么相當于目標還是沒有檢測到)

4)ICCV:International Conference on Computer Vision

5)R-CNN:Region-based Convolutional Neural Networks

6)AR:Average Recall

7)mAP:mean Average Precision

8)RPN:Region Proposal Networks

9)FAIR:Facebook AI Research

10)w.r.t.:with respect to

11)Image Classification(what?):圖像分類

12)Object?Detection(what+where?)、Localization、Segmentation:對角檢測、定位、分割

2. CNN基本知識

2.1 CNN的卷積流程

卷積計算過程如下圖所示:

我們剛才描述的即是卷積。可以把卷積想象為信號處理中的一種奇特乘法。也可將兩個矩陣生成點積想象為兩個函數。圖像就是底層函數,而過濾器就是在其上“卷過”的函數。

圖像的主要問題在于其高維度,原因是對高維度的處理時間和運算能力成本很高。卷積網絡就是為了通過各種方式降低圖像的維度而設計的。過濾器步幅即是減少維度的一種方法,另一種方法是降采樣。

2.2 Activations maps的個數與Filter的個數一致

2.3 輸入層與Filter、Padding、Stride、參數和輸出層的關系

1) 參數個數由Filter定義及Filter個數決定,其公式為:

The number of parameters = (FxFxD + 1) * K

2)一個Activation Map共享一個Filter及其權重和偏差

3)Activation Map個數與Filter個數相同

2.4 Pooling(池化/降采樣)過程

1) ?Pooling在每個Activation Map上單獨做,在Pooling之后,Activation Map數量不變

Pooling層一般用于降維,將一個kxk的區域內取平均或取最大值,作為這一個小區域內的特征,傳遞到下一層。傳統的Pooling層是不重疊的,使Pooling層重疊可以降低錯誤率,而且對防止過擬合有一定的效果。

2)Pooling過程描述(Pooling過程不需要參數)

2.5 深度革命2015

1)深度革命中遇到的問題:

隨著CNN網絡的發展,尤其的VGG網絡的提出,大家發現網絡的層數是一個關鍵因素,貌似越深的網絡效果越好。但是隨著網絡層數的增加,問題也隨之而來。

(1)第一個問題: vanishing/exploding gradients(即梯度消失或爆炸):這就導致訓練難以收斂。但是隨著 normalized initialization and BN(Batch Normalization)的提出,解決了梯度消失或爆炸問題。

(2)第二個問題:網絡越深,訓練誤差和測試誤差越大。在收斂問題解決后,又一個問題暴露出來:隨著網絡深度的增加,系統精度得到飽和之后,迅速的下滑。讓人意外的是這個性能下降不是過擬合導致的。對一個合適深度的模型加入額外的層數導致訓練誤差變大。如下圖所示,可通過Deep Residual Learning 框架來解決這種因為深度增加而導致準確性下降問題。

3. 空間定位與檢測

參考信息《基于深度學習的目標檢測研究進展》

3.1 計算機視覺任務

3.2 傳統目標檢測方法

傳統目標檢測流程:

1)區域選擇(窮舉策略:采用滑動窗口,且設置不同的大小,不同的長寬比對圖像進行遍歷,時間復雜度高)

2)特征提取(SIFT、HOG等;形態多樣性、光照變化多樣性、背景多樣性使得特征魯棒性差)

3)分類器(主要有SVM、Adaboost等)

傳統目標檢測的主要問題:

1)基于滑動窗口的區域選擇策略沒有針對性,時間復雜度高,窗口冗余

2)手工設計的特征對于多樣性的變化沒有很好的魯棒性

3.3 基于侯選區域(Region Proposal)的深度學習目標檢測法

3.3.1 R-CNN (CVPR2014, TPAMI2015)

1)Region Proposal:可以解決滑動窗口的問題

候選區域(Region Proposal):是預先找出圖中目標可能出現的位置。它利用了圖像中的紋理、邊緣、顏色等信息,可以保證在選取較少窗口(幾千甚至幾百)的情況下保持較高的召回率(Recall)。

常用的Region Proposal有(詳見"What

makes for effective detection proposals?"):

-Selective Search

-Edge Boxes

2)R-CNN:可以解決特征魯棒性的問題

參考信息

(1) 輸入測試圖像

(2) 利用selective search算法在圖像中從下到上提取2000個左右的Region Proposal

(3) 將每個Region Proposal縮放(warp)成227x227的大小并輸入到CNN,將CNN的fc7層的輸出作為特征

(4) 將每個Region Proposal提取到的CNN特征輸入到SVM進行分類

注:1)對每個Region Proposal縮放到同一尺度是因為CNN全連接層輸入需要保證維度固定。

2)上圖少畫了一個過程——對于SVM分好類的Region Proposal做邊框回歸(bounding-box

regression),邊框回歸是對region proposal進行糾正的線性回歸算法,為了讓region

proposal提取到的窗口跟目標真實窗口更吻合。因為region proposal提取到的窗口不可能跟人手工標記那么準,如果region

proposal跟目標位置偏移較大,即便是分類正確了,但是由于IoU(region

proposal與Ground Truth的窗口的交集比并集的比值)低于0.5,那么相當于目標還是沒有檢測到。

3)R-CNN缺點:

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

(2) 訓練耗時,占用磁盤空間大:5000張圖像產生幾百G的特征文件

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

(4)?測試速度慢:每個候選區域需要運行整個前向CNN計算

(5) SVM和回歸是事后操作:在SVM和回歸過程中CNN特征沒有被學習更新

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

3.3.2 SPP-NET (ECCV2014, TPAMI2015)

SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

先看一下R-CNN為什么檢測速度這么慢,一張圖都需要47s!仔細看下R-CNN框架發現,對圖像提完Region

Proposal(2000個左右)之后將每個Proposal當成一張圖像進行后續處理(CNN提特征+SVM分類),實際上對一張圖像進行了2000

次提特征和分類的過程!這2000個Region

Proposal不都是圖像的一部分嗎,那么我們完全可以對圖像提一次卷積層特征,然后只需要將Region

Proposal在原圖的位置映射到卷積層特征圖上,這樣對于一張圖像我們只需要提一次卷積層特征,然后將每個Region

Proposal的卷積層特征輸入到全連接層做后續操作。(對于CNN來說,大部分運算都耗在卷積操作上,這樣做可以節省大量時間)。

現在的問題是每個Region Proposal的尺度不一樣,直接這樣輸入全連接層肯定是不行的,因為全連接層輸入必須是固定的長度。SPP-NET恰好可以解決這個問題。

由于傳統的CNN限制了輸入必須固定大小(比如AlexNet是224x224),所以在實際使用中往往需要對原圖片進行crop或者warp的操作:

-?crop:截取原圖片的一個固定大小的patch

- warp:將原圖片的ROI縮放到一個固定大小的patch

無論是crop還是warp,都無法保證在不失真的情況下將圖片傳入到CNN當中:

- crop:物體可能會產生截斷,尤其是長寬比大的圖片。

- warp:物體被拉伸,失去“原形”,尤其是長寬比大的圖片

SPP為的就是解決上述的問題,做到的效果為:不管輸入的圖片是什么尺度,都能夠正確的傳入網絡。

具體思路為:CNN的卷積層是可以處理任意尺度的輸入的,只是在全連接層處有限制尺度——換句話說,如果找到一個方法,在全連接層之前將其輸入限制到等長,那么就解決了這個問題。

具體方案如下圖所示:

如果原圖輸入是224x224,對于conv5出來后的輸出,是13x13x256的,可以理解成有256個這樣的filter,每個filter對應一張13x13的activation map。如果像上圖那樣將activationmap pooling成4x4 2x2 1x1三張子圖,做max pooling后,出來的特征就是固定長度的(16+4+1)x256那么多的維度了。如果原圖的輸入不是224x224,出來的特征依然是(16+4+1)x256;直覺地說,可以理解成將原來固定大小為(3x3)窗口的pool5改成了自適應窗口大小,窗口的大小和activation map成比例,保證了經過pooling后出來的feature的長度是一致的。

使用SPP-NET相比于R-CNN可以大大加快目標檢測的速度,但是依然存在著很多問題:

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

(2) SPP-NET在微調網絡的時候固定了卷積層,只對全連接層進行微調,而對于一個新的任務,有必要對卷積層也進行微調。(分類的模型提取的特征更注重高層語義,而目標檢測任務除了語義信息還需要目標的位置信息)

針對這兩個問題,RBG又提出Fast R-CNN, 一個精簡而快速的目標檢測框架。

3.3.3?Fast R-CNN(ICCV2015)

有了前邊R-CNN和SPP-NET的介紹,我們直接看Fast R-CNN的框架圖:

與R-CNN框架圖對比,可以發現主要有兩處不同:一是最后一個卷積層后加了一個ROI pooling layer,二是損失函數使用了多任務損失函數(multi-task loss),將邊框回歸直接加入到CNN網絡中訓練。

(1) ROI pooling

layer實際上是SPP-NET的一個精簡版,SPP-NET對每個proposal使用了不同大小的金字塔映射,而ROI pooling

layer只需要下采樣到一個7x7的特征圖。對于VGG16網絡conv5_3有512個特征圖,這樣所有region

proposal對應了一個7*7*512維度的特征向量作為全連接層的輸入。

(2) R-CNN訓練過程分為了三個階段,而Fast R-CNN直接使用softmax替代SVM分類,同時利用多任務損失函數邊框回歸也加入到了網絡中,這樣整個的訓練過程是端到端的(除去region proposal提取階段)。

(3) Fast R-CNN在網絡微調的過程中,將部分卷積層也進行了微調,取得了更好的檢測效果。

性能對比數據:

1)Fast R-CNN優點:

Fast R-CNN融合了R-CNN和SPP-NET的精髓,并且引入多任務損失函數,使整個網絡的訓練和測試變得十分方便。在Pascal VOC2007訓練集上訓練,在VOC2007測試的結果為66.9%(mAP),如果使用VOC2007+2012訓練集訓練,在VOC2007上測試結果為70%(數據集的擴充能大幅提高目標檢測性能)。使用VGG16每張圖像總共需要3s左右。

2)Fast R-CNN 缺點:

Region Proposal的提取使用selective search,目標檢測時間大多消耗在這上面(提Region Proposal2~3s,而提特征分類只需0.32s),無法滿足實時應用,而且并沒有實現真正意義上的端到端訓練測試(region proposal使用selective search先提取處來)。那么有沒有可能直接使用CNN直接產生Region Proposal并對其分類?Faster R-CNN框架就是符合這樣需要的目標檢測框架。

3.3.4??Faster R-CNN(NIPS2015)

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

在Region Proposal +

CNN分類的這種目標檢測框架中,Region

Proposal質量好壞直接影響到目標檢測任務的精度。如果找到一種方法只提取幾百個或者更少的高質量的假選窗口,而且召回率很高,這不但能加快目標檢

測速度,還能提高目標檢測的性能(假陽例少)。RPN(Region Proposal Networks)網絡應運而生。

1)RPN的核心思想

是使用卷積神經網絡直接產生Region Proposal,使用的方法本質上就是滑動窗口。RPN的設計比較巧妙,RPN只需在最后的卷積層上滑動一遍,因為Anchor機制和邊框回歸可以得到多尺度多長寬比的Region Proposal。

2)Faster R-CNN架構

3)RPN架構

RPN采用任意大小的的圖像作為輸入,并輸出一組候選的矩形,每個矩形都有一個對象分數。

RPN被用于訓練直接產生候選區域,不需要外部的候選區域。

Anchor是滑動窗口的中心,它與尺度和長寬比相關,默認采3種尺度(128,256,512),3種長寬比(1:1,1:2,2:1),則在每一個滑動位置k=9 anchors。

我們直接看上邊的RPN網絡結構圖(使用了ZF模型),給定輸入圖像(假設分辨率為600*1000),經過卷積操作得到最后一層的卷積特征圖(大小約為40*60)。在這個特征圖上使用3*3的卷積核(滑動窗口)與特征圖進行卷積,最后一層卷積層共有256個feature

map,那么這個3*3的區域卷積后可以獲得一個256維的特征向量,后邊接cls layer(box-classification layer)和reg layer(box-regression layer)分別用于分類和邊框回歸(跟Fast R-CNN類似,只不過這里的類別只有目標和背景兩個類別)。3*3滑窗對應的每個特征區域同時預測輸入圖像3種尺度(128,256,512),3種長寬比(1:1,1:2,2:1)的region

proposal,這種映射的機制稱為anchor。所以對于這個40*60的feature map,總共有約20000(40*60*9)個anchor,也就是預測20000個region proposal。

這樣設計的好處是什么呢?雖然現在也是用的滑動窗口策略,但是:滑動窗口操作是在卷積層特征圖上進行的,維度較原始圖像降低了16*16倍(中間經過了4

次2*2的pooling操作);多尺度采用了9種anchor,對應了三種尺度和三種長寬比,加上后邊接了邊框回歸,所以即便是這9種anchor外的

窗口也能得到一個跟目標比較接近的region proposal。

4)總結

Faster R-CNN將一直以來分離的region proposal和CNN分類融合到了一起,使用端到端的網絡進行目標檢測,無論在速度上還是精度上都得到了不錯的提高。然而Faster R-CNN還是達不到實時的目標檢測,預先獲取Region Proposal,然后在對每個Proposal分類計算量還是比較大。比較幸運的是YOLO這類目標檢測方法的出現讓實時性也變的成為可能。

總的來說,從R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走來,基于深度學習目標檢測的流程變得越來越精簡,精度越來越高,速度也越來越快。可以說基于Region Proposal的R-CNN系列目標檢測方法是當前目標最主要的一個分支。

3.3.5 R-FCN(2016.5)

R-FCN: Object Detection via Region-based Fully Convolutional Networks

顧名思議:全卷積網絡,就是全部是卷積層,而沒有全連接層(fc)。

R-FCN(基于區域的檢測器)的方法是:在整個圖像上共享計算,通過移除最后的fc層實現(即刪除了所有的子網絡)。使用“位置敏感的得分圖”來解決了圖像分類平移不變性與對象檢測平移變化之間的矛盾。

此矛盾為:物體分類要求平移不變性越大越好 (圖像中物體的移動不用區分),而物體檢測要求有平移變化。所以,ImageNet 分類領先的結果證明盡可能有平移不變性的全卷積結構更受親睞。另一方面,物體檢測任務需要一些平移變化的定位表示。比如,物體的平移應該使網絡產生響應,這些響應對描述候選框覆蓋真實物體的好壞是有意義的。我們假設圖像分類網絡的卷積層越深,則該網絡對平移越不敏感。

CNN隨著網絡深度的增加,網絡對于位置(Position)的敏感度越來越低,也就是所謂的translation-invariance,但是在Detection的時候,需要對位置信息有很強的的敏感度。

那么ResNet-101的detection是怎么做的?

在R-FCN之前,很簡單,把ROI-pooling層放到了前面的卷積層,然后后面的卷積層不共享計算,這樣一可以避免過多的信息損失,二可以用后來的卷積層學習位置信息。

R-FCN:采用全卷積網絡結構作為 FCN,為給 FCN 引入平移變化,用專門的卷積層構建位置敏感分數地圖 (position-sensitive score maps)。每個空間敏感地圖編碼感興趣區域的相對空間位置信息。 在FCN上面增加1個位置敏感 RoI 池化層來監管這些分數地圖。

R-FCN思路就是利用最后一層網絡通過FCN構成一個position-sensitive的feature

map。具體而言,每一個proposal的位置信息都需要編碼,那么先把proposal分成k*k個grid,然后對每一個grid進行編碼。在最后

一層map之后,再使用卷積計算產生一個k*k*(C+1)的map(k*k代表總共的grid數目,C代表class

num,+1代表加入一個背景類)。

RPN 給出感興趣區域,R-FCN 對該感興趣區域分類。R-FCN

在與 RPN 共享的卷積層后多加1個卷積層。所以,R-FCN 與 RPN 一樣,輸入為整幅圖像。但 R-FCN

最后1個卷積層的輸出從整幅圖像的卷積響應圖像中分割出感興趣區域的卷積響應圖像。

R-FCN 最后1個卷積層在整幅圖像上為每類生成k*k個位置敏感分數圖,有C類物體外加1個背景,因此有k*k(C+1)個通道的輸出層。k*k個分數圖對應描述位置的空間網格。比如,k×k=3×3,則9個分數圖編碼單個物體類的 {top?left,top?center,top?right,...,bottom?right}。

R-FCN 最后用位置敏感 RoI 池化層,給每個 RoI

1個分數。選擇性池化圖解:看上圖的橙色響應圖像 (top?left),摳出橙色方塊 RoI,池化橙色方塊 RoI 得到橙色小方塊

(分數);其它顏色的響應圖像同理。對所有顏色的小方塊投票 (或池化) 得到1類的響應結果。

生完了這張map之后,再根據proposal產生一個長寬各為k,channel數目為C+1的score map。具體產生score

map的方法是,假如k=3,C=20,那么score

map的20個類每個類都有3*3的feature,一共9個格子,每一個格子都記錄了空間信息。而這每一個類的每一個格子都對應前面那個channel

數為3*3*21的大map的其中一個channel的map。現在把score

map中的格子對應的區域的map中的信息取平均,然后這個平均值就是score map格子中的值。最后把score

map的值進行vote(avg pooling)來形成一個21維的向量來做分類即可。

當分類正確時,該類通道的位置敏感分數圖 (中間) 的大多數橙色實線網格內的響應在整個 RoI 位置范圍內最強。

對應的bbox regression只需要把C+1設成4就可以了。

R-FCN采用的一些方法比Faster

R-CNN的baseline提高了3個點,并且比原來Faster R-CNN更快(因為全部計算都共享了)。但是和改進過的Faster

R-CNN相比(ROI

Pooling提前那種)提高了0.2個點,速度快了2.5倍。所以目前為止這個方法的結果應該是所有方法中速度和Performance結合的最好的。

3.4?基于回歸方法的深度學習目標檢測算法

Faster R-CNN的方法目前是主流的目標檢測方法,但是速度上并不能滿足實時的要求。YOLO一類的方法慢慢顯現出其重要性,這類方法使用了回歸的思想,即給定輸入圖像,直接在圖像的多個位置上回歸出這個位置的目標邊框以及目標類別。

3.4.1YOLO (CVPR2016, oral)

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

我們直接看上面YOLO的目標檢測的流程圖:

(1) 給個一個輸入圖像,首先將圖像劃分成7*7(設S=7)的網格

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

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

可以看到整個過程非常簡單,不需要中間的Region Proposal在找目標,直接回歸便完成了位置和類別的判定。

那么如何才能做到直接在不同位置的網格上回歸出目標的位置和類別信息呢?上面是YOLO的網絡結構圖,前邊的網絡結構跟GoogLeNet的模型比較類

似,主要的是最后兩層的結構,卷積層之后接了一個4096維的全連接層,然后后邊又全連接到一個7*7*30維的張量上。實際上這7*7就是劃分的網格

數,現在要在每個網格上預測目標兩個可能的位置以及這個位置的目標置信度和類別,也就是每個網格預測兩個目標,每個目標的信息有4維坐標信息(中心點坐

標+長寬),1個是目標的置信度,還有類別數20(VOC上20個類別),總共就是(4+1)*2+20

= 30維的向量。這樣可以利用前邊4096維的全圖特征直接在每個網格上回歸出目標檢測需要的信息(邊框信息加類別)。

總結:

YOLO將目標檢測任務轉換成一個回歸問題,大大加快了檢測的速度,使得YOLO可以每秒處理45張圖像。而且由于每個網絡預測目標窗口時使用的是全圖信息,使得false positive比例大幅降低(充分的上下文信息)。但是YOLO也存在問題:沒有了Region Proposal機制,只使用7*7的網格回歸會使得目標不能非常精準的定位,這也導致了YOLO的檢測精度并不是很高。

3.4.2 SSD(單次檢測)

SSD: Single Shot MultiBox Detector

上面分析了YOLO存在的問題,使用整圖特征在7*7的粗糙網格內回歸對目標的定位并不是很精準。那是不是可以結合Region

Proposal的思想實現精準一些的定位?SSD結合YOLO的回歸思想以及Faster R-CNN的anchor機制做到了這點。

上圖是SSD的一個框架圖,首先SSD獲取目標位置和類別的方法跟YOLO一樣,都是使用回歸,但是YOLO預測某個位置使用的是全圖的特征,SSD預

測某個位置使用的是這個位置周圍的特征(感覺更合理一些)。那么如何建立某個位置和其特征的對應關系呢?可能你已經想到了,使用Faster

R-CNN的anchor機制。如SSD的框架圖所示,假如某一層特征圖(圖b)大小是8*8,那么就使用3*3的滑窗提取每個位置的特征,然后這個特征

回歸得到目標的坐標信息和類別信息(圖c)。

不同于Faster R-CNN,這個anchor是在多個feature map上,這樣可以利用多層的特征并且自然的達到多尺度(不同層的feature map 3*3滑窗感受野不同)。

小結:

SSD結合了YOLO中的回歸思想和Faster

R-CNN中的anchor機制,使用全圖各個位置的多尺度區域特征進行回歸,既保持了YOLO速度快的特性,也保證了窗口預測的跟Faster

R-CNN一樣比較精準。SSD在VOC2007上mAP可以達到72.1%,速度在GPU上達到58幀每秒。

總結:YOLO的提出給目標檢測一個新的思路,SSD的性能則讓我們看到了目標檢測在實際應用中真正的可能性。

3.5?基于殘差(Residual)方法的深度學習目標檢測算法

3.5.1 深度殘差網絡(Deep Residual Networks)

Deep Residual Networks

它使用殘差學習的這一思想使得學習更深的網絡成為可能,從而學習到更好的表達。

層數越多的神經網絡越難以訓練。當層數超過一定數量后,傳統的深度網絡就會因優化問題而出現欠擬合(underfitting)的情況。殘差學習框架

大幅降低訓練更深層網絡的難度,也使準確率得到顯著提升。在 ImageNet 和 COCO 2015 競賽中,共有 152 層的深度殘差網絡

ResNet 在圖像分類、目標檢測和語義分割各個分項都取得最好成績,相關論文更是連續兩次獲得 CVPR 最佳論文。

最新研究發現,當殘差網絡將身份映射作為 skip

connection 并實現 inter-block activation,正向和反向信號能夠直接從一個區塊傳播到另一個區塊,這樣就達到了

1001 層的殘差網絡。由此可見,神經網絡的深度這一非常重要的因素,還有很大的提升空間。

1)深度譜

2)為使用網絡層數更多,通常采用的方法有:初始化算法,BN方法

3)是否簡單堆疊的網絡層數越多,訓練誤差和測試誤差就越小?答案正好相反

4)目前流行的深度神經網絡結構大致可以分為三類:

- 直線型(如AlexNet, VGGNet)

- 局部雙分支型(ResNet)

-局部多分支型(GoogleNet)

很久以前人們就已經認識到更深的網絡能夠產生更好的數據表達,但是如何訓練一個很深的網絡卻一直是一個困擾人們的問題,這主要是由于梯度消失或爆炸以

及尺度不均勻的初始化造成的。圍繞這一問題,人們提出了ReLU、Xavier、pReLU、batch

normalization和path-SGD等一系列方法,但是本文作者卻發現即使有這些方法,神經網絡的訓練仍然呈現了degradation的現

象。所謂degradation現象,就是隨著網絡深度的增加,網絡的性能反而下降,而且這種性能的下降并不是由前面所說的問題造成的。

4)深度殘差學習(Deep Residual Learning)的思想

假如目前有一個可以工作的很好的網絡A,這時來了一個比它更深的網絡B,只需要讓B的前一部分與A完全相同,后一部分只實現一個恒等映射(identity mapping),這樣B最起碼能獲得與A相同的性能,而不至于更差。深度殘差學習的思想也由此而產生,既然B后面的部分完成的是恒等映射,何不在訓練網絡的時候加上這一先驗(在網絡訓練過程中,加入先驗信息指導非常重要,合理的先驗往往會取得非常好的效果),于是構造網絡的時候加入了捷徑(shortcut)連接,即每層的輸出不是傳統神經網絡中的輸入的映射,而是輸入的映射和輸入的疊加,如下圖中的"Residual net"所示。

在Residual net中:

(1)identity:為恒等映射,此條路徑一直存在

(2)F(x):為需要學習的殘差函數(residual function):H(x)-x = F(x)

問題的重新表示或預處理會簡化問題的優化!

假設我們期望的網絡層關系映射為 H(x), 我們讓 the stacked nonlinear layers 擬合另一個映射, F(x):= H(x)-x , 那么原先的映射就是 F(x)+x。 這里我們假設優化殘差映射F(x) 比優化原來的映射 H(x)容易。

這里我們首先求取殘差映射 F(x):= H(x)-x,那么原先的映射就是 F(x)+x。盡管這兩個映射應該都可以近似理論真值映射 the desired functions (as hypothesized),但是它倆的學習難度是不一樣的。

這種改寫啟發于"網絡層數越多,訓練和測試誤差越大"性能退化問題違反直覺的現象。如果增加的層數可以構建為一個恒等映射(identity mappings),那么增加層數后的網絡訓練誤差應該不會增加,與沒增加之前相比較。性能退化問題暗示多個非線性網絡層用于近似identity mappings 可能有困難。使用殘差學習改寫問題之后,如果identity mappings 是最優的,那么優化問題變得很簡單,直接將多層非線性網絡參數趨0。

實際中,identity mappings 不太可能是最優的,但是上述改寫問題可能幫助預處理問題。如果最優函數接近identity mappings,那么優化將會變得容易些。 實驗證明該思路是對的。

F(x)+x 可以通過shortcut connections 來實現,如下圖所示:

上圖中的shortcut connections執行一個簡單的恒等映射;既沒有參數,也沒有計算復雜度。

公式分析如下:

(1)需要學習的殘差映射

(2)x和F的維數必須相同

如果x和F的維數不相同,則對x進行線性投影(linear projection)使用其與F的維數一致,公式如下:

5)網絡架構

5.1)普通網絡(Plain Network)

設計原則:

(1)對于輸出特征圖大小相同的層,它們的卷積擁有相同的filter個數

(2)如果輸出的特征圖大小減半,則filter個數乘以2,以確保每層的時間復雜度相同

5.2)殘并網絡(Residual Network)

在遵循普通網絡設計原則的基礎上,增加了shortcut connections。

6)恒等映射的重要性

6.1)平滑的正向傳播

任意xl被直接正向傳播到xL,xL是xl與殘差相加的結果。

6.2)平滑的反向傳播

7)保持最短路徑盡量平滑

- 如果h(x)不是identity mapping,它將阻塞正向、反向傳播,從而導致誤差增加

- BN可能阻塞傳播

- ReLU可能阻塞傳播

3.5?提高目標檢測方法

R-CNN系列目標檢測框架和YOLO目標檢測框架給了我們進行目標檢測的兩個基本框架。除此之外,研究人員基于這些框架從其他方面入手提出了一系列提高目標檢測性能的方法。

(1) 難分樣本挖掘(hard negative mining)

R-CNN在訓練SVM分類器時使用了難分樣本挖掘的思想,但Fast

R-CNN和Faster

R-CNN由于使用端到端的訓練策略并沒有使用難分樣本挖掘(只是設置了正負樣本的比例并隨機抽取)。CVPR2016的Training

Region-based Object Detectors with Online Hard Example

Mining(oral)將難分樣本挖掘(hard example mining)機制嵌入到SGD算法中,使得Fast

R-CNN在訓練的過程中根據region proposal的損失自動選取合適的Region

Proposal作為正負例訓練。實驗結果表明使用OHEM(Online Hard Example Mining)機制可以使得Fast

R-CNN算法在VOC2007和VOC2012上mAP提高 4%左右。

(2) 多層特征融合

Fast R-CNN和Faster R-CNN都是利用了最后卷積層的特征進行目標檢測,而由于高層的卷積層特征已經損失了很多細節信息(pooling操作),所以在定位時不是很精準。HyperNet等一些方法則利用了CNN的多層特征融合進行目標檢測,這不僅利用了高層特征的語義信息,還考慮了低層特征的細節紋理信息,使得目標檢測定位更精準。

(3) 使用上下文信息

在提取Region Proposal特征進行目標檢測時,結合Region Proposal上下文信息,檢測效果往往會更好一些。(Object detection via a multi-region & semantic segmentation-aware CNN model以及Inside-Outside Net等論文中都使用了上下文信息)

3.6 總結

Localization:

-Find a fixed number of objects (one or many)

- L2 regression from CNN features to box coordinates

- Much simpler than detection; consider it for your projects!

- Overfeat: Regression + efficient sliding window with FC -> conv conversion

- Deeper networks do better

Object Detection:

-Find a variable number of objects by classifying image regions

- Before CNNs: dense multiscale sliding window (HoG, DPM)

- Avoid dense sliding window with region proposals

- R-CNN: Selective Search + CNN classification / regression

- Fast R-CNN: Swap order of convolutions and region extraction

- Faster R-CNN: Compute region proposals within the network

- Deeper networks do better

Implementation as Matrix Multiplication. Note that the convolution operation essentially performs

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容