深度學習論文筆記:Fast R-CNN

知識點

  • mAP:detection quality.

Abstract

  • 本文提出一種基於快速區域的卷積網絡方法(快速R-CNN)用於對象檢測。
  • 快速R-CNN採用多項創新技術來提高訓練和測試速度,同時提高檢測精度。
  • 採用VGG16的網絡:VGG: 16 layers of 3x3 convolution interleaved with max pooling + 3 fully-connected layers

Introduction

  • 物體檢測相對於圖像分類是更復雜的,應爲需要物體準確的位置。
    • 首先,必須處理許多候選對象位置(通常稱爲“proposal”)。
    • 其次,這些候選者只提供粗略的定位,必須進行精確定位才能實現精確定位。
    • 這些問題的解決方案經常損害 速度準確性簡單性

R-CNN and SPPnet

  • R-CNN(Region-based Convolution Network)具有幾個顯著的缺點:
    • 訓練是一個多級管道。
    • 訓練在空間和時間上是昂貴的。
    • 物體檢測速度很慢。
  • R-CNN是慢的,因爲它對每個對象proposal執行ConvNet正向傳遞,而不共享計算(sharing computation)。
  • Spatial pyramid pooling networks(SPPnets),利用sharing computation對R-CNN進行了加速,但是SPPnets也具有明顯的缺點,像R-CNN一樣,SPPnets也需要:
    • 訓練是一個多階段流程,
    • 涉及提取特徵,
    • 用對數損失精簡網絡
    • 訓練SVM
    • 賦予邊界框迴歸。
    • 特徵也需要也寫入磁盤。
  • 但與R-CNN 不同 ,在[11]中提出的fine-tuning算法不能更新在空間金字塔池之前的卷積層。 不出所料,這種限制(固定的卷積層)限制了非常深的網絡的精度。

Contributions

  • Fast R-CNN優點:
    1. 比R-CNN,SPPnet更高的檢測質量(mAP)
    2. 訓練是單階段的,使用多任務損失(multi-task loss)
    3. 訓練可以更新所有網絡層
    4. 特徵緩存不需要磁盤存儲

Fast R-CNN architecture and training

  • 整體框架

  • 快速R-CNN網絡將整個圖像和一組對象位置作爲輸入。

    • 網絡首先使用幾個卷積(conv)和最大池層來處理整個圖像,以產生conv feature map。
    • 然後,對於每個對象proposal, 感興趣區域(RoI)池層 從特徵圖中抽取固定長度的特徵向量。
    • 每個特徵向量被饋送到完全連接(fc)層序列,其最終分支成兩個同級輸出層:
    • 一個產生對K個對象類加上全部捕獲的“背景”類的softmax概率估計(one that produces softmax probability estimates over K object classes plus a catch-all “background” class)
    • 另一個對每個K對象類輸出四個實數,每組4個值編碼提煉定義K個類中的一個的的邊界框位置。(another layer that outputs four real-valued numbers for each of the K object classes. Each set of 4 values encodes refined bounding-box positions for one of the K classes.)

The RoI pooling layer

  • Rol pooling layer的作用主要有兩個:
    • 一個是將image中的RoI定位到feature map中對應patch
    • 另一個是用一個單層的SPP layer將這個feature map patch下采樣爲大小固定的feature再傳入全連接層。
  • RoI池層使用最大池化將任何有效的RoI區域內的特徵轉換成具有H×W(例如,7×7)的固定空間範圍的小feature map,其中H和W是層超參數 它們獨立於任何特定的RoI。
  • 在本文中,RoI是conv feature map中的一個矩形窗口。
  • 每個RoI由定義其左上角(r,c)及其高度和寬度(h,w)的四元組(r,c,h,w)定義。
  • RoI層僅僅是Sppnets中的spatial pyramid pooling layer的特殊形式,其中只有一個金字塔層

Initializing from pre-trained networks

  • 用了3個預訓練的ImageNet網絡(CaffeNet/ VGG_CNN_M_1024 /VGG16)。預訓練的網絡初始化Fast RCNN要經過三次變形:
    1. 最後一個max pooling層替換爲RoI pooling層,設置H’和W’與第一個全連接層兼容。
    2. 最後一個全連接層和softmax(原本是1000個類)替換爲softmax的對K+1個類別的分類層,和bounding box 迴歸層。
    3. 輸入修改爲兩種數據:一組N個圖形,R個RoI,batch size和ROI數、圖像分辨率都是可變的。

Fine-tuning for detection

  • 利用反向傳播算法進行訓練所有網絡的權重是Fast R-CNN很重要的一個能力。
  • 我們提出了一種更有效的訓練方法,利用在訓練期間的特徵共享(feature sharing during training)。
  • 在Fast R-CNN訓練中, 隨機梯度下降(SGD)小批量分層採樣 ,首先通過採樣N個圖像,然後通過從每個圖像採樣 R/N個 RoIs。
  • 關鍵的是,來自同一圖像的RoI在向前和向後傳遞中 共享計算 和存儲。
  • 此外爲了分層採樣,Fast R-CNN使用了一個流水線訓練過程,利用一個fine-tuning階段來聯合優化一個softmax分類器和bounding box迴歸,而非訓練一個softmax分類器,SVMs,和regression在三個獨立的階段。
  • Multi-task loss:

    • 兩個loss,以下分別介紹:
    • 對於分類loss,是一個N+1路的softmax輸出,其中的N是類別個數,1是背景。
    • 對於迴歸loss,是一個4xN路輸出的regressor,也就是說對於每個類別都會訓練一個單獨的regressor的意思,比較有意思的是,這裏regressor的loss不是L2的,而是一個平滑的L1,形式如下:

  • 我們利用一個multi-task loss L 在每個被標註的RoI上來聯合訓練分類器和bounding box regression

  • Mini-batch sampling:在微調時,每個SGD的mini-batch是隨機找兩個圖片,R爲128,因此每個圖上取樣64個RoI。從object proposal中選25%的RoI,就是和ground-truth交疊至少爲0.5的。剩下的作爲背景。
  • Back-propagation through RoI pooling layers:

    • RoI pooling層計算損失函數對每個輸入變量x的偏導數,如下:

    y是pooling後的輸出單元,x是pooling前的輸入單元,如果y由x pooling而來,則將損失L對y的偏導計入累加值,最後累加完R個RoI中的所有輸出單元。下面是我理解的x、y、r的關係:

    20151208163114338

Scale invariance

  • 這裏討論object的scale問題,就是網絡對於object的scale應該是要不敏感的。這裏還是引用了SPP的方法,有兩種:
    • brute force (single scale),也就是簡單認爲object不需要預先resize到類似的scale再傳入網絡,直接將image定死爲某種scale,直接輸入網絡來訓練就好了,然後期望網絡自己能夠學習到scale-invariance的表達。
    • image pyramids (multi scale),也就是要生成一個金字塔,然後對於object,在金字塔上找到一個大小比較接近227x227的投影版本,然後用這個版本去訓練網絡。
  • 可以看出,2應該比1更加好,作者也在5.2討論了,2的表現確實比1好,但是好的不算太多,大概是1個mAP左右,但是時間要慢不少,所以作者實際採用的是第一個策略,也就是single scale。
  • 這裏,FRCN測試之所以比SPP快,很大原因是因爲這裏,因爲SPP用了2,而FRCN用了1。

Fast R-CNN detection

  • 大型全連接層很容易的可以通過將他們與 truncated SVD(奇異值分解) 壓縮來加速計算。

Main results

  • All Fast R-CNN results in this paper using VGG16 fine-tune layers conv3 1 and up; all experments with models S and M fine-tune layers conv2 and up.

Design evaluation

Do we need more training data?

  • 在訓練期間,作者做過的唯一一個數據增量的方式是水平翻轉。 作者也試過將VOC12的數據也作爲拓展數據加入到finetune的數據中,結果VOC07的mAP從66.9到了70.0,說明對於網絡來說, 數據越多就是越好的。
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章