天天看點

關于學習使用Faster-RCNN做目标檢測和對象捕捉問題

這裡主要是為了做遙感方向的對象捕捉問題而從目标檢測開始入手,首先大體采用的是遷移學習的思路,注主要是對模型遷移,在img做了切割和西工大及北航的資料集上進行一個交叉訓練,這樣使得RPN的網絡外面的打分函數有了一個更好的0.7的結果,

這個結果主要是通過對reuL這個網絡進行求導發現這個函數的凸性問題進而得到局部最優,這樣保證在訓練時候能夠更好的從機率密度函數中選取L2而不是L1,

通過以下流程說明網絡種的核心(前後景問題)

首先RPN會找到一個提取候選框通過坐标的五個參數映射到特征圖上(這個過程使用傳統的CNN相關結構提取特征)得到RoI,下一步會出現RoI的調整尺寸,調整完後進行固定出現了帶特征的RoI的pooling,通過RoI的特征可以回歸(這個其實就是研究函數變化問題找到一個合适的參數)和分類(一般這個就是通過距離函數計算樣本的有關距離問題)。

通過上面的辦法得到的是Region Proposal Networks(候選網絡/區域生成網絡)得到的是最終檢測框+類别(兩個目标/這就是目标檢測不是單純的分類),這個過程種的分類工作是神經網絡獲得特征計算距離分類完成,而RPN實作的是提取候選區域實作輸出的目标檢測。

從rate上來看應該是ZF的RPN+FastRCNN比較好,效率高同時mAP好。接下來說哥關鍵環節

RPN在fasterRcnn中是介于feature Map和fastRcnn之間

RPN裡面是三次卷積,流程如下:

公共特征區域就是說(Feature Map)後的(H x W),首先進行一次256*(H x W),這三個均為256個次元,圖像的參數(x y w h),這裡需要厘清楚那個前景的分數和那個是後景的參數,同時我們要清楚的一個概念是HxW的2scores+4個坐标

每做一次卷積就會得到1xHxW和2個xHxW的特征圖,這個HxW其實就是Anchor boxes

當我們得到9個anchor時候就是說9個HxWx9個結果:其實是18個scores和36個坐标。每個anchor對于K個框(HxWxk框映射位anchor boxes)這裡出現了相對于原圖的坐标位移同時k一般是9個,9個anchor得到兩層score,前後景的score。框大小和比例是:(128X128 256X256 512X512)長寬比例:2:1,1:1,1:2,

整體網絡流程:

CNN——3x3卷積/RPN——256x16x16(16x16個256次元的特征向量)——1x1卷積出現兩層((2x9)x16x16/(4x9)x16x16)的兩個scores和四個坐标——通過NMS删除背景框(16x16x9)的那個升序排序中分數最低的框,同時取出最高分數的K個框

關于學習使用Faster-RCNN做目标檢測和對象捕捉問題

object localization

多任務學習,網絡帶有兩個輸出分支。一個分支用于做圖像分類,即全連接配接+softmax判斷目标類别,和單純圖像分類差別在于這裡還另外需要一個“背景”類。另一個分支用于判斷目标位置,即完成回歸任務輸出四個數字标記包圍盒位置(例如中心點橫縱坐标和包圍盒長寬),該分支輸出結果隻有在分類分支判斷不為“背景”時才使用。

object detection

在目标定位中,通常隻有一個或固定數目的目标,而目标檢測更一般化,其圖像中出現的目标種類和數目都不定。是以,目标檢測是比目标定位更具挑戰性的任務。

基于候選區域的目标檢測算法‘

候選區域生成算法通常基于圖像的顔色、紋理、面積、位置等合并相似的像素,最終可以得到一系列的候選矩陣區域。這些算法,如selective search或EdgeBoxes,通常隻需要幾秒的CPU時間,而且,一個典型的候選區域數目是2k,相比于用滑動窗把圖像所有區域都滑動一遍,基于候選區域的方法十分高效。另一方面,這些候選區域生成算法的查準率(precision)一般,但查全率(recall)通常比較高,這使得我們不容易遺漏圖像中的目标

興趣區域彙合(region of interest pooling, RoI pooling)

興趣區域彙合旨在由任意大小的候選區域對應的局部卷積特征提取得到固定大小的特征,這是因為下一步的兩分支網絡由于有全連接配接層,需要其輸入大小固定。其做法是,先将候選區域投影到卷積特征上,再把對應的卷積特征區域空間上劃分成固定數目的網格(數目根據下一步網絡希望的輸入大小确定,例如VGGNet需要7×7的網格),最後在每個小的網格區域内進行最大彙合,以得到固定大小的彙合結果。和經典最大彙合一緻,每個通道的興趣區域彙合是獨立的。

為什麼要使用錨盒(anchor box)

錨盒是預先定義形狀和大小的包圍盒。使用錨盒的原因包括:(1). 圖像中的候選區域大小和長寬比不同,直接回歸比對錨盒坐标修正訓練起來更困難。(2). conv5特征感受野很大,很可能該感受野内包含了不止一個目标,使用多個錨盒可以同時對感受野内出現的多個目标進行預測。(3). 使用錨盒也可以認為這是向神經網絡引入先驗知識的一種方式。我們可以根據資料中包圍盒通常出現的形狀和大小設定一組錨盒。錨盒之間是獨立的,不同的錨盒對應不同的目标,比如高瘦的錨盒對應于人,而矮胖的錨盒對應于車輛。

基于候選區域的目标檢測算法通常需要兩步:第一步是從圖像中提取深度特征,第二步是對每個候選區域進行定位(包括分類和回歸)。其中,第一步是圖像級别計算,一張圖像隻需要前饋該部分網絡一次,而第二步是區域級别計算,每個候選區域都分别需要前饋該部分網絡一次。是以,第二步占用了整體主要的計算開銷。R-CNN, Fast R-CNN, Faster R-CNN, R-FCN這些算法的演進思路是逐漸提高網絡中圖像級别計算的比例,同時降低區域級别計算的比例。R-CNN中幾乎所有的計算都是區域級别計算,而R-FCN中幾乎所有的計算都是圖像級别計算。

(3) 基于直接回歸的目标檢測算法

YOLO的優點在于:(1). 基于候選區域的方法的感受野是圖像中的局部區域,而YOLO可以利用整張圖像的資訊。(2). 有更好的泛化能力。

YOLO的局限在于:(1). 不能很好處理網格中目标數超過預設固定值,或網格中有多個目标同時屬于一個錨盒的情況。(2). 對小目标的檢測能力不夠好。(3). 對不常見長寬比的包圍盒的檢測能力不強。(4). 計算損失時沒有考慮包圍盒大小。大的包圍盒中的小偏移和小的包圍盒中的小偏移應有不同的影響。

相比YOLO,SSD在卷積特征後加了若幹卷積層以減小特征空間大小,并通過綜合多層卷積層的檢測結果以檢測不同大小的目标。此外,類似于Faster R-CNN的RPN,SSD使用3×3卷積取代了YOLO中的全連接配接層,以對不同大小和長寬比的錨盒來進行分類/回歸。SSD取得了比YOLO更快,接近Faster R-CNN的檢測性能。後來有研究發現,相比其他方法,SSD受基礎模型性能的影響相對較小。

FPN融合多層特征,以綜合高層、低分辨率、強語義資訊和低層、高分辨率、弱語義資訊來增強網絡對小目标的處理能力。此外,和通常用多層融合的結果做預測的方法不同,FPN在不同層獨立進行預測。FPN既可以與基于候選區域的方法結合,也可以與基于直接回歸的方法結合。FPN在和Faster R-CNN結合後,在基本不增加原有模型計算量的情況下,大幅提高對小目标的檢測性能。

RetinaNet

RetinaNet認為,基于直接回歸的方法性能通常不如基于候選區域方法的原因是,前者會面臨極端的類别不平衡現象。基于候選區域的方法可以通過候選區域過濾掉大部分的背景區域,但基于直接回歸的方法需要直接面對類别不平衡。是以,RetinaNet通過改進經典的交叉熵損失以降低對已經分的很好的樣例的損失值,提出了焦點(focal)損失函數,以使模型訓練時更加關注到困難的樣例上。RetinaNet取得了接近基于直接回歸方法的速度,和超過基于候選區域的方法的性能。

語義分割(semantic segmentation)

語義分割是目标檢測更進階的任務,目标檢測隻需要框出每個目标的包圍盒,語義分割需要進一步判斷圖像中哪些像素屬于哪個目标。

逐像素進行圖像分類。我們将整張圖像輸入網絡,使輸出的空間大小和輸入一緻,通道數等于類别數,分别代表了各空間位置屬于各類别的機率,即可以逐像素地進行分類。

全卷積網絡+反卷積網絡

為使得輸出具有三維結構,全卷積網絡中沒有全連接配接層,隻有卷積層和彙合層。但是随着卷積和彙合的進行,圖像通道數越來越大,而空間大小越來越小。要想使輸出和輸入有相同的空間大小,全卷積網絡需要使用反卷積和反彙合來增大空間大小。(3) 語義分割常用技巧

擴張卷積(dilated convolution)

經常用于分割任務以增大有效感受野的一個技巧。标準卷積操作中每個輸出神經元對應的輸入局部區域是連續的,而擴張卷積對應的輸入局部區域在空間位置上不連續。擴張卷積保持卷積參數量不變,但有更大的有效感受野。

執行個體分割(instance segmentation)

語義分割不區分屬于相同類别的不同執行個體。例如,當圖像中有多隻貓時,語義分割會将兩隻貓整體的所有像素預測為“貓”這個類别。與此不同的是,執行個體分割需要區分出哪些像素屬于第一隻貓、哪些像素屬于第二隻貓。

基本思路

目标檢測+語義分割。先用目标檢測方法将圖像中的不同執行個體框出,再用語義分割方法在不同包圍盒内進行逐像素标記。

Mask R-CNN

用FPN進行目标檢測,并通過添加額外分支進行語義分割(額外分割分支和原檢測分支不共享參數),即Master R-CNN有三個輸出分支(分類、坐标回歸、和分割)。此外,Mask R-CNN的其他改進有:(1). 改進了RoI彙合,通過雙線性內插補點使候選區域和卷積特征的對齊不因量化而損失資訊。(2). 在分割時,Mask R-CNN将判斷類别和輸出模闆(mask)這兩個任務解耦合,用sigmoid配合對率(logistic)損失函數對每個類别的模闆單獨處理,取得了比經典分割方法用softmax讓所有類别一起競争更好的效果。

Coursera吳恩達《卷積神經網絡》課程筆記(3)– 目标檢測

Object Localization目标檢測

Landmark Detection 除了使用矩形區域檢測目标類别和位置外,我們還可以僅對目标的關鍵特征點坐标進行定位,這些關鍵點被稱為landmarks。

該網絡模型共檢測人臉上64處特征點,加上是否為face的标志位,輸出label共有64x2+1=129個值。通過檢測人臉特征點可以進行情緒分類與判斷,或者應用于AR領域等等。

除了人臉特征點檢測之外,還可以檢測人體姿勢動作

Object Detection

目标檢測的一種簡單方法是滑動窗算法,Convolutional Implementation of Sliding Windows

滑動窗算法可以使用卷積方式實作,以提高運作速度,節約重複運算成本。

首先,單個滑動視窗區域進入CNN網絡模型時,包含全連接配接層。那麼滑動視窗算法卷積實作的第一步就是将全連接配接層轉變成為卷積層

這一節主要介紹YOLO算法的流程,算是對前幾節内容的回顧。網絡結構如下圖所示,包含了兩個Anchor Boxes。

  1. For each grid call, get 2 predicted bounding boxes.
  2. Get rid of low probability predictions.
  3. For each class (pedestrian, car, motorcycle) use non-max suppression to generate final predictions.Region Proposals的方法。具體做法是先對原始圖檔進行分割算法處理,然後支隊分割後的圖檔中的塊進行目标檢測。

    Region Proposals共有三種方法:

R-CNN: 滑動窗的形式,一次隻對單個區域塊進行目标檢測,運算速度慢。

Fast R-CNN: 利用卷積實作滑動窗算法,類似第4節做法。

Faster R-CNN: 利用卷積對圖檔進行分割,進一步提高運作速度。

比較而言,Faster R-CNN的運作速度還是比YOLO慢一些。

人臉識别、目标檢測、目标定位、語言分割的函數都不一樣。接下來針對這塊做詳細的學習