筆者言:
學習目标檢測架構過程中記錄自己的了解過程,個人認為理論知識足夠完備前不急動手,單純學習理論又過于無聊,寫部落格複述自己的了解是個不錯的選擇,當做筆記。
背景:
發源于RCNN、fast-rcnn,最大創新點,提出RPN網絡和Anchor機制(錨框機制),物體檢測分兩步實作,第一步找到前景物體,給出先驗框;第二步對先驗框内物體分類并修正目标位置。
主要環節:
(1)特征提取網絡:一般選用VGG16或Resnet
(2)RPN子產品:區域生成子產品,用于生成預設256個建議框
(3)RoI Pooling:承上啟下,接收RPN輸出的不同大小特征圖,輸出固定次元特征圖到RCNN
(4)RCNN子產品:接收ROI Pooling輸出的特征圖,預測出物體類别及位置偏移量
算法過程示意圖:
關鍵詞了解:
速記:真值是根據标簽得出來的,是絕對真實準确的,預測量是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。
(2)RPN卷積網絡
RPN卷積網絡計算流程
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個的話選取是随機選取。
(4) 生成proposal
此處不好了解的是損失計算和生成proposal有什麼關系,确實沒有直接關系~,損失可以了解為訓練過程中用到的概念,生成proposal可以了解為驗證識别的過程中用到的概念。經過RPN網絡的識别調整後會有很多(大于12000個)anchors,這時候進行修剪超尺寸的、按得分排序選12000個,再經NMS篩選,再排序選2000個,排序都是根據RPN網絡中的分類網絡的預測得分選擇。
注意此處的篩選和計算loss的篩選沒有關系。
簡單講該部分就是将RPN網絡輸出的 anchors數目降到了2000個
(5)篩選proposal,得到RoI
該環節目的,将上一步得到的2000個proposal進一步篩選,得到總共256個roi,同時要求其中正樣本不超過64個,多了就随機選取,其他為負樣本,即比例基本滿足1:3。
實作:再次計算IOU,因為RPN調整了anchors了,不是最初的了,是以計算有意義和之前的值不同,此時IOU選擇,大于等于0.5---正樣本,小于0.5---負樣本,不同于loss計算的規則(總共這兩個地方用到IOU限制,容易搞混)。根據IOU值确定正樣本負樣本,再進行選取。
經上述過程,得出來256個ROI,并且每一個帶有正負樣本的标簽及偏移量。
三、RoI Pooling
簡介:
上述過程最終生成了256個ROI,但是各個roi大小不一,特征大小不同,是以需要修正為同一次元,是以該部分承上啟下主要負責次元轉換。
流程介紹:
目标是輸出7x7的方格,但是ROI的特征圖區域大小為20x20,20/7=2,是以定義個卷積核2x2的,步長為2,類似于最大池化,選取最大值,選取出7x7的區域。
缺點,精度不高,忽略了小數,取整損失精度。
更好的辦法:RoI Align
定義一個2x2的方格,每個方格内部再定義四個小方格,每個方格的中心作為黑點位置,可以了解為取值位置,用該框周遊特征圖,選取四個點處的值最大的為池化後的值。
四、全連接配接子產品-RCNN
上面流程得出來的是256個ROI,輸入RCNN,最終輸出的是分類結果和回歸結果,即分類和偏移預測,21個類别,84個位置偏移(每個類别4個)。