以下內容摘自斯坦福cs231n目標檢測課程:
計算機視覺任務:
ImageNet 分類和定位任務:
Idea #1:定位問題視爲迴歸問題
實現步驟:
1. 訓練(或下載)一個分類模型(AlexNet, VGG, Inception)
2. 添加新的全連接層用作“迴歸”
3. 僅訓練“迴歸”模塊,SGD,L2 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)
- 在高分辨率圖像上取多個位置運行分類+迴歸網絡;
- 將全連接層轉爲卷積層以進行足夠多的運算;
- 將所有不同尺度的box結合起來分析確定box位置。
Overfeat:滑動窗口法
1、FCN(Fully Convolutional Networks)
網絡最後輸出的圖片大小不在是一個1*1大小的圖片,而是一個與輸入圖片大小息息相關的一張圖片了。
Alexnet網絡設計完畢後,也用FCN的思想,把全連接層看成是卷積層運算,發現如果Alexnet輸入一張500*500圖片的話,那麼它將得到1000張10*10大小的預測分類圖,這個時候可以簡單採用對着每一張10*10大小的圖片求取平均值,作爲圖片屬於各個類別的概率值。
其實Alexnet在測試階段的時候,採用了對輸入圖片的四個角落進行裁剪,進行預測,分別得到結果,最後的結果就是類似對應於上面2*2的預測圖。這個2*2的每個像素點,就類似於對應於一個角落裁剪下來的圖片預測分類結果。只不過Alexnet把這4個像素點,相加在一起,求取平均值,作爲該類別的概率值。
需要注意的是,overfeat就是把採用FCN的思想把全連接層看成了卷積層,讓我們在網絡測試階段可以輸入任意大小的圖片。
2、offset max-pooling
offset池化,以一維爲例:
在x軸上有20個神經元,如果我們選擇池化size=3的非重疊池化,那麼根據我們之前所學的方法應該是:對上面的20個,從1位置開始進行分組,每3個連續的神經元爲一組,然後計算每組的最大值(最大池化),19、20號神經元將被丟棄,如下圖所示:
也可以在20號神經元后面,人爲的添加一個數值爲0的神經元編號21,與19、20成爲一組,這樣可以分成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*221;AlexNet不同之處在於:
(a) 沒有使用LRN;
(b)然後也沒有Overlap-pooling;
(c)在第一層卷積層,stride爲2, (AlexNet是4)。
這邊需要注意的是需要把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-pool到layer-5 post-pool:這一步的實現是通過池化大小爲(3,3)進行池化,然後△x=0、1、2, △y=0、1、2,這樣得到對於每一張特徵圖,都可以得到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. ResNet:RPN網絡,更深層次的特徵。
計算機視覺任務:
將檢測問題看做分類問題:
問題:需要檢測很多位置和尺度的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,綠色G爲Ground Truth,目標是尋找一種P到G的映射,得到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 |
測試結果:
mAP:mean average precision。爲每個類計算AP(average precision),然後計算平均
TP:iou>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: SVM和Box迴歸與CNN不在一條Pipline
解決方案:
端到端的訓練(end-to-end),取消SVM,用神經網絡代替。
Fast RCNN(核心):ROI Pooling層(Region of Interest Pooling)
訓練數據:
R個候選框構成如下:
類別 |
比例 |
方式 |
前景 |
25% |
與某個GTBox的iou∈[0.5, 1] |
背景 |
75% |
與某個GTBox的iou∈[0.1, 0.5) |
ROI Pooling層結構:(VGG16)
代價函數
檢測結果
Using VGG-16 CNN on Pascal VOC 2007 dataset
問題:
上表結果不含Region Proposal,Region Proposal 時間爲2s,整體提升才近21倍。
解決:
用CNN做Region Proposal。
後續:詳見 Faster R-CNN
參考:
- OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks
- Dalal and Triggs, “Histograms of Oriented Gradients for Human Detection”, CVPR2005
- Felzenszwalb et al, “Object Detection with Discriminatively Trained Part Based Models”, PAMI 2010
- Girschick et al, “Deformable Part Models are Convolutional Neural Networks”, CVPR2015
- Uijlings et al. “Selective Search for Object Detection”, IJCV 2013.
- Girschick et al, “Rich feature hierarchies for accurate object detection and semantic segmentation”, CVPR 2014
- Wang et al, “Regionlets for Generic Object Detection”, ICCV 2013
- Ross Girshick, "Fast R-CNN", ICCV 2015