目標檢測:從overfeat到Fast R-CNN

以下內容摘自斯坦福cs231n目標檢測課程:

計算機視覺任務

ImageNet 分類和定位任務

Idea #1定位問題視爲迴歸問題

實現步驟:

1. 訓練(或下載)一個分類模型(AlexNet, VGG, Inception

2. 添加新的全連接層用作“迴歸”

3. 僅訓練“迴歸”模塊,SGDL2 Loss

4. 測試時加入“分類”和“迴歸”

迴歸分爲兩種:

獨立於類別的迴歸:

Class agnostic 4 numbers / per box

類別明確的迴歸:

Class specific C*4 numbers / per box

定位多個目標:

定位K個目標, eg: cat, cat head, cat left ear, cat right ear

對於迴歸head,爲K*4 numbers   one box per object

迴歸模塊的位置:

 

Idea #2滑動窗口方法(Sliding Window

  1. 在高分辨率圖像上取多個位置運行分類+迴歸網絡;
  2. 將全連接層轉爲卷積層以進行足夠多的運算;
  3. 將所有不同尺度的box結合起來分析確定box位置。

Overfeat:滑動窗口法 

 

 

1FCNFully Convolutional Networks

網絡最後輸出的圖片大小不在是一個1*1大小的圖片,而是一個與輸入圖片大小息息相關的一張圖片了。

Alexnet網絡設計完畢後,也用FCN的思想,把全連接層看成是卷積層運算,發現如果Alexnet輸入一張500*500圖片的話,那麼它將得到100010*10大小的預測分類圖,這個時候可以簡單採用對着每一張10*10大小的圖片求取平均值,作爲圖片屬於各個類別的概率值

 

其實Alexnet在測試階段的時候,採用了對輸入圖片的四個角落進行裁剪,進行預測,分別得到結果,最後的結果就是類似對應於上面2*2的預測圖。這個2*2的每個像素點,就類似於對應於一個角落裁剪下來的圖片預測分類結果。只不過Alexnet把這4個像素點,相加在一起,求取平均值,作爲該類別的概率值。

 

需要注意的是,overfeat就是把採用FCN的思想把全連接層看成了卷積層,讓我們在網絡測試階段可以輸入任意大小的圖片。

2offset max-pooling

offset池化,以一維爲例:

x軸上有20個神經元,如果我們選擇池化size=3的非重疊池化,那麼根據我們之前所學的方法應該是:對上面的20個,從1位置開始進行分組,每3個連續的神經元爲一組,然後計算每組的最大值(最大池化)1920號神經元將被丟棄,如下圖所示:

也可以在20號神經元后面,人爲的添加一個數值爲0的神經元編號21,與1920成爲一組,這樣可以分成7:[1,2,3][4,5,6]……,[16,17,18],[19,20,21],最後計算每組的最大值,這就是我們以前CNN中池化層的源碼實現方法了。

如果我們只分6組的話,我們除了以1作爲初始位置進行連續組合之外,也可以從位置2或者3開始進行組合。也就是說我們其實有3種池化組合方法:

A、△=0分組:[1,2,3][4,5,6]……,[16,17,18]

B、△=1分組:[2,3,4][5,6,7]……,[17,18,19]

C、△=2分組:[3,4,5][6,7,8]……,[18,19,20]

以往的CNN中,一般我們只用了△=0,得到池化結果後,就送入了下一層。於是文獻的方法是把上面的△=0、△=1、△=2的三種組合方式的池化結果,分別送入網絡的下一層。這樣的話,我們網絡在最後輸出的時候,就會出現3種預測結果了。

如果是2維圖片的話,那麼(△x,△y)就會有9種取值情況(3*3)如果我們在做圖片分類的時候,在網絡的某一個池化層加入了這種offset 池化方法,然後把這9種池化結果,分別送入後面的網絡層,最後我們的圖片分類輸出結果就可以得到9個預測結果(每個類別都可以得到9種概率值,然後我們對每個類別的9種概率,取其最大值,做爲此類別的預測概率值)

 

OverFeat滑動窗口方法:

overfeat圖片分類

1. paper網絡架構與訓練階段

(1)網絡架構

對於網絡的結構,文獻給出了兩個版本,快速版、精確版,一個精度比較高但速度慢;另外一個精度雖然低但是速度快。下面是高精度版本的網絡結構表相關參數:

網絡輸入:221*221AlexNet不同之處在於:

(a) 沒有使用LRN

(b)然後也沒有Overlap-pooling

(c)在第一層卷積層,stride2(AlexNet4)

這邊需要注意的是需要把f7這一層,看成是卷積核大小爲5*5的卷積層

(2) 網絡訓練

訓練輸入:對於每張原圖片爲256*256,然後進行隨機裁剪爲221*221的大小作爲CNN輸入,進行訓練。

優化求解參數設置:訓練的min-batchs選擇128,權重初始化選擇高斯分佈的隨機初始化:

  • 採用SGD,momentum=0.6,L2-decay=10-5。lr=0.05,每隔幾十次的迭代後,就把lr減小一半。
  • DropOut,最後的兩個全連接層,dropout比率選擇0.5,也就是網絡的第6、7層。

2、網絡測試階段

不再是用一張221*221大小的圖片了作爲網絡的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如下表格所示:

layer-5 pre-poollayer-5 post-pool:這一步的實現是通過池化大小爲(3,3)進行池化,然後△x=012, △y=012,這樣得到對於每一張特徵圖,都可以得到9幅池化結果圖。以上面表格中的sacle1爲例,layer-5 pre-pool大小是17*17,經過池化後,大小就是5*5然後有3*3張結果圖(不同offset得到的結果)

把最後一列不同尺度結果再做一個平均,作爲最最後的結果。

Scale3,輸出:15*9*C,共15*9個不同尺度,分別求各尺度類別,最後求平均。

定位任務

把分類層(上面的layer 6~output)給重新設計一下,把分類改成迴歸問題,然後在各種不同尺度上訓練預測物體的bounding box

實際實現中,用到了不同位置不同尺度的圖像

ImageNet 分類+定位:

1. AlexNet:定位算法未公佈;

2. Overfeat:多尺度box迴歸;

3. VGG:同Overfeat,但尺度和位置更少;方法簡單,受益於更深層提取的特徵;

4. ResNetRPN網絡,更深層次的特徵。

計算機視覺任務

 

將檢測問題看做分類問題:

問題:需要檢測很多位置和尺度的box

解決:分類速度快,尚且可行。

HOG行人檢測:(Histogram of Oriented Gradients

DPM:(Deformable Parts Model

Deformable Parts Models are CNNs:

將檢測問題看做分類問題:

問題:需要檢測很多位置和尺度的box

解決:僅分類可能性很大的box

 

R-CNN

區域建議法:(Region Proposals

查找可能包含有目標的區域:

區域建議法:Selective Search:

區域建議法:其他方法

區域建議+CNN->R-CNN

R-CNN訓練:

1. 訓練一個ImageNet分類器模型。

2. Fine-tune model.分類類別變爲20類,去除最後一層,添加新的分類層共21個輸出(含背景)

3. 提取特徵:

  • 提取region proposal;
  • 對於每個region:放縮輸入,保存pool5特徵圖的特徵;
  • PASCAL數據集大約200GB的特徵。

4. 爲每一類訓練一個2分類的SVM分類器:

5. box迴歸:

每一類訓練一個線性迴歸模型,從特徵到GT box偏移量的映射

對於窗口一般採用思維向量(x,y,w,h)表示,分別表示中心點和寬高。紅色P爲原始Proposal,綠色GGround Truth,目標是尋找一種PG的映射,得到G^,更接近G

即,給定(Px, Py, Ph, Pw)尋找映射f,使得:

 

目標真值不是Ground Truth,而是tx, ty, tw, th

目標函數爲:

損失函數:

數據集統計:

 

 

PASCAL VOC (2010)

ImageNet Detection (ILVRC 2014)

MS-COCO

(2014)

Number of classes

20

200

80

Number of images (train + val)

~20K

~470K

~120K

Mean objects per image

2.4

1.1

7.2

測試結果:

mAPmean average precision。爲每個類計算APaverage precision),然後計算平均

TPiou>0.5

TL;DR mAP範圍【0,100】,越大越好

RCNN 存在問題:

  • 測試時速度慢:需要爲每個Region Proposal前向傳播計算特徵;
  • SVM和Box迴歸與CNN不在一條Pipline,使得SVM和Box迴歸無法對CNN特徵進行響應;
  • Pipline有多條,複雜。

Fast R-CNN

RCNN 存在問題1需要爲每個Region Proposal前向傳播計算特徵

解決方案:

Region Proposal共享前面的卷積層

RCNN 存在問題2 SVMBox迴歸與CNN不在一條Pipline

解決方案:

端到端的訓練(end-to-end),取消SVM,用神經網絡代替。

Fast RCNN(核心):ROI Pooling層(Region of Interest Pooling

 

訓練數據:

R個候選框構成如下:

類別

比例

方式

前景

25%

與某個GTBoxiou[0.5, 1]

背景

75%

與某個GTBoxiou[0.1, 0.5)

ROI Pooling層結構:(VGG16

代價函數

檢測結果

Using VGG-16 CNN on Pascal VOC 2007 dataset

 

問題:

上表結果不含Region ProposalRegion Proposal 時間爲2s,整體提升才近21倍。

 

解決:

CNNRegion Proposal

 

後續:詳見 Faster R-CNN

 

參考:

  1. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks
  2. Dalal and Triggs, “Histograms of Oriented Gradients for Human Detection”, CVPR2005
  3. Felzenszwalb et al, “Object Detection with Discriminatively Trained Part Based Models”, PAMI 2010
  4. Girschick et al, “Deformable Part Models are Convolutional Neural Networks”, CVPR2015
  5. Uijlings et al. “Selective Search for Object Detection”, IJCV 2013.
  6. Girschick et al, “Rich feature hierarchies for accurate object detection and semantic segmentation”, CVPR 2014
  7. Wang et al, “Regionlets for Generic Object Detection”, ICCV 2013
  8. Ross Girshick, "Fast R-CNN", ICCV 2015
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章