天天看點

Faster-rcnn目标檢測流程深入了解

筆者言:

        學習目标檢測架構過程中記錄自己的了解過程,個人認為理論知識足夠完備前不急動手,單純學習理論又過于無聊,寫部落格複述自己的了解是個不錯的選擇,當做筆記。

背景:

        發源于RCNN、fast-rcnn,最大創新點,提出RPN網絡和Anchor機制(錨框機制),物體檢測分兩步實作,第一步找到前景物體,給出先驗框;第二步對先驗框内物體分類并修正目标位置。

主要環節:

(1)特征提取網絡:一般選用VGG16或Resnet

(2)RPN子產品:區域生成子產品,用于生成預設256個建議框

(3)RoI Pooling:承上啟下,接收RPN輸出的不同大小特征圖,輸出固定次元特征圖到RCNN

(4)RCNN子產品:接收ROI Pooling輸出的特征圖,預測出物體類别及位置偏移量

算法過程示意圖:

Faster-rcnn目标檢測流程深入了解

關鍵詞了解:

速記:真值是根據标簽得出來的,是絕對真實準确的,預測量是RPN網絡預測出來的

RPN的真值: 類别真值:根據IoU判斷Anchor屬于前景或背景

                       偏移真值:根據标簽判斷Anchor的位置偏移量 

RPN的預測量:類别預測值:RPN網絡預測出的類别,前景or背景

                          偏移預測值:RPN網絡預測出的偏移量,四個變量的偏移

一、特征提取網絡

        一般使用VGG16或Resnet作為特征提取網絡,當然可以換成其他,但注意調整好輸入輸出。訓練的時候一般用别人訓練好的這部分,鎖定該部分參數不進行訓練,是以訓練1-2個epoch就會收斂的很厲害。鎖定部分參數便于縮減訓練時間。

        該部分無多少新意,沿用現成的網絡。

二、RPN子產品

簡介:該部分為fasterrcnn的新穎之處,目标檢測的第一步

子子產品:(1)生成Anchors

               (2)RPN卷積網絡

               (3)計算RPN loss 

               (4)生成proposal

               (5)篩選proposal,得到RoI

 (1)生成Anchors

        在原圖上生成一些固定 的先驗框,為适應不同物體的大小與寬高, 在作者的論文中, 預設在每一個點上抽取了9種Anchors, 具體Scale為{8,16,32}, Ratio為{0.5,1,2}, 将這9種Anchors的大小反算到原圖上, 即得到不同的原始Proposal。

Faster-rcnn目标檢測流程深入了解

(2)RPN卷積網絡

RPN卷積網絡計算流程

Faster-rcnn目标檢測流程深入了解

         VGG特征提取後的feature map輸入到RPN網絡,左側為分類網絡分支,右側為回歸網絡分支。特征圖輸進來之後,最終輸出的是對該點處的9個Anchor的類别的預測(前景、背景,9x2=18,分别為前景的機率,背景的機率)和對該9個Anchor的4個偏移量預測(9x4=36)

(3)計算RPN loss 

        首先計算真值和預測值,真值可由公式直接計算出,預測值可通過RPN網絡得到,是以可進行下一步,損失函數設計,RPN使用交叉熵損失,整體包含兩部分,分類損失和回歸損失,并對兩部分進行平衡。有了損失函數便可以對網絡進行優化了

        計算損失函數需注意anchor的選取,不能全部參與計算,為了樣本均衡,如何選取呢,簡單講在IOU<0.3和IOU>0.7的IOU中,各選128個分别作為負樣本和正樣本參與計算,正樣本多于128個的話選取是随機選取。

Faster-rcnn目标檢測流程深入了解
Faster-rcnn目标檢測流程深入了解

(4) 生成proposal

         此處不好了解的是損失計算和生成proposal有什麼關系,确實沒有直接關系~,損失可以了解為訓練過程中用到的概念,生成proposal可以了解為驗證識别的過程中用到的概念。經過RPN網絡的識别調整後會有很多(大于12000個)anchors,這時候進行修剪超尺寸的、按得分排序選12000個,再經NMS篩選,再排序選2000個,排序都是根據RPN網絡中的分類網絡的預測得分選擇。

        注意此處的篩選和計算loss的篩選沒有關系。

        簡單講該部分就是将RPN網絡輸出的 anchors數目降到了2000個

Faster-rcnn目标檢測流程深入了解

 (5)篩選proposal,得到RoI

        該環節目的,将上一步得到的2000個proposal進一步篩選,得到總共256個roi,同時要求其中正樣本不超過64個,多了就随機選取,其他為負樣本,即比例基本滿足1:3。

        實作:再次計算IOU,因為RPN調整了anchors了,不是最初的了,是以計算有意義和之前的值不同,此時IOU選擇,大于等于0.5---正樣本,小于0.5---負樣本,不同于loss計算的規則(總共這兩個地方用到IOU限制,容易搞混)。根據IOU值确定正樣本負樣本,再進行選取。

        經上述過程,得出來256個ROI,并且每一個帶有正負樣本的标簽及偏移量。

Faster-rcnn目标檢測流程深入了解

 三、RoI Pooling

簡介:

        上述過程最終生成了256個ROI,但是各個roi大小不一,特征大小不同,是以需要修正為同一次元,是以該部分承上啟下主要負責次元轉換。

流程介紹:

Faster-rcnn目标檢測流程深入了解

         目标是輸出7x7的方格,但是ROI的特征圖區域大小為20x20,20/7=2,是以定義個卷積核2x2的,步長為2,類似于最大池化,選取最大值,選取出7x7的區域。

        缺點,精度不高,忽略了小數,取整損失精度。

更好的辦法:RoI Align

        定義一個2x2的方格,每個方格内部再定義四個小方格,每個方格的中心作為黑點位置,可以了解為取值位置,用該框周遊特征圖,選取四個點處的值最大的為池化後的值。

Faster-rcnn目标檢測流程深入了解

  四、全連接配接子產品-RCNN

Faster-rcnn目标檢測流程深入了解

        上面流程得出來的是256個ROI,輸入RCNN,最終輸出的是分類結果和回歸結果,即分類和偏移預測,21個類别,84個位置偏移(每個類别4個)。

繼續閱讀