系列博客鏈接:
概述:
1、目標檢測-Overfeat模型
2、目標檢測-R-CNN模型
2.1 完整R-CNN結構(R-CNN的完整步驟)
2.2 R-CNN訓練過程
2.3 R-CNN測試過程
2.4 總結(缺點即存在的問題)
PS: 因為手敲,因此目錄稍微出入,請見諒。
引言:
對於一張圖片當中多個目標,多個類別的時候。前面的輸出結果是不定的,有可能是以下有四個類別輸出這種情況。或者N個結果,這樣的話,網絡模型輸出結構不定
所以需要一些他的方法解決目標檢測(多個目標)的問題,試圖將一個檢測問題簡化成分類問題
1、目標檢測-Overfeat模型
1.1 滑動窗口
目標檢測的暴力方法是從左到右、從上到下滑動窗口,利用分類識別目標。為了在不同觀察距離處檢測不同的目標類型,我們使用不同大小和寬高比的窗口。如下圖所示:
這樣就變成每張子圖片輸出類別以及位置,變成分類問題。但是滑動窗口需要初始設定一個固定大小的窗口,這就遇到了一個問題,有些物體適應的框不一樣,
所以需要提前設定K個窗口,每個窗口滑動提取M個,總共K x M 個圖片,通常會直接將圖像變形轉換成固定大小的圖像,變形圖像塊被輸入 CNN 分類器中,
提取特征后,我們使用一些分類器識別類別和該邊界框的另一個線性回歸器。
簡而言之,當一張圖片中存在多個目標時,我們需要想辦法將其轉變成多張固定大小的子圖片,然后通過CNN提取特征,再進行類別分類(識別)和邊框回歸(后面會說)。
這樣,一個多目標的檢測問題,就轉變成了機器學習常見的多分類問題。
那這種方法是怎么去利用數據訓練的?
1.2 訓練數據集
首先我們會准備所需要的訓練集數據,每張圖片的若干個子圖片以及每張圖片的類別位置,如下我們從某張圖片中滑動出的若干的圖片。
1.3 Overfeat模型總結
這種方法類似一種暴力窮舉的方式,會消耗大量的計算力量,並且由於窗口大小問題可能會造成效果不准確
。但是提供了一種解決目標檢測問題的思路。
2 目標檢測-R-CNN模型
在CVPR 2014年中Ross Girshick提出R-CNN。
2.1 完整R-CNN結構
不使用暴力方法,而是用候選區域方法(region proposal method),創建目標檢測的區域改變了圖像領域實現物體檢測的模型思路,R-CNN是以深度神經網絡為基礎的物體檢測的模型 ,R-CNN在當時以優異的性能令世人矚目,以R-CNN為基點,后續的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着這個物體檢測思路。
步驟(以AlexNet網絡為基准)
- 1.找出圖片中可能存在目標的侯選區域region proposal
- 2.進行圖片大小調整為了適應AlexNet網絡的輸入圖像的大小227×227,通過CNN對候選區域提取特征向量,2000個建議框的CNN特征組合成2000×4096維矩陣
- 3.將2000×4096維特征與20個SVM組成的權值矩陣4096×20相乘(20種分類,SVM是二分類器,則有20個SVM),獲得2000×20維矩陣
- 4.分別對2000×20維矩陣中每一列即每一類進行非極大值抑制(NMS:non-maximum suppression)剔除重疊建議框,得到該列即該類中得分最高的一些建議框
- 5.修正bbox,對bbox做回歸微調
2.2 候選區域
選擇性搜索(SelectiveSearch,SS)中,首先將每個像素作為一組。然后,計算每一組的紋理,並將兩個最接近的組結合起來。但是為了避免單個區域吞噬其他區域,我們首先對較小的組進行分組。我們繼續合並區域,直到所有區域都結合在一起。下圖第一行展示了如何使區域增長,第二行中的藍色矩形代表合並過程中所有可能的 ROI。
SelectiveSearch在一張圖片上提取出來約2000個侯選區域,需要注意的是這些候選區域的長寬不固定。 而使用CNN提取候選區域的特征向量,需要接受固定長度的輸入,所以需要對候選區域做一些尺寸上的修改。
2.3 Crop+Warp
傳統的CNN限制了輸入必須固定大小,所以在實際使用中往往需要對原圖片進行crop或者warp的操作
- crop:截取原圖片的一個固定大小的patch
- warp:將原圖片的ROI縮放到一個固定大小的patch
無論是crop還是warp,都無法保證在不失真的情況下將圖片傳入到CNN當中。會使用一些方法盡量讓圖片保持最小的變形。
-
1.各向異性縮放:即直接縮放到指定大小,這可能會造成不必要的圖像失真
-
2.各向同性縮放:在原圖上出裁剪侯選區域, (采用侯選區域的像素顏色均值)填充到指定大小在邊界用固定的背景顏色
2.4 CNN網絡提取特征
在侯選區域的基礎上提取出更高級、更抽象的特征,這些高級特征是作為下一步的分類器、回歸的輸入數據。
提取的這些特征將會保存在磁盤當中(這些提取的特征才是真正的要訓練的數據)
2.5 特征向量訓練分類器SVM
假設一張圖片的2000個侯選區域,那么提取出來的就是2000 x 4096這樣的特征向量(R-CNN當中默認CNN層輸出4096特征向量)。那么最后需要對這些特征進行分類,R-CNN選用SVM進行二分類。假設檢測N個類別,那么會提供20個不同類別的SVM分類器,每個分類器都會對2000個候選區域的特征向量分別判斷一次,這樣得出[2000, 20]的得分矩陣,如下圖所示
更通俗的解釋:
假設原圖片有2000個候選區,將其輸入進一個CNN中(進行卷積、池化...得到各種抽象的特征),輸出2000x4096的特征向量。此時找到N個(需要分類多少個找多少個,如分為20類)SVM分類器,每個分類器都會對2000個候選區域的特征向量分別判斷一次,即2000x4094的特征向量分別與N個不同類的SVM分類器,然后再得到最終的得分矩陣,矩陣默認N行(代表N類),2000列(2000個候選區),其中一共是2000N個"數",這些"數"即該候選區屬於某一類的概率。
每個SVM分類器做的事情
- 判斷2000個候選區域是某類別,還是背景
2.6 非最大抑制(NMS)
- 目的
- 篩選候選區域,得到最終候選區域結果
- 迭代過程
- 對於所有的2000個候選區域得分進行概率篩選
- 然后對剩余的候選框,每個類別進行IoU(交並比)>= 0.5 篩選
假設現在滑動窗口有:A、B、C、D、E 5個候選框,
- 第一輪:假設B是得分最高的,與B的IoU>0.5刪除。現在與B計算IoU,DE結果>0.5,剔除DE,B作為一個預測結果
- 第二輪:AC中,A的得分最高,與A計算IoU,C的結果>0.5,剔除C,A作為一個結果
最終結果為在這個5個中檢測出了兩個目標為A和B
2.7 修正候選區域(邊框回歸)
那么通過非最大抑制篩選出來的候選框不一定就非常准確怎么辦?R-CNN提供了這樣的方法,建立一個bbox regressor
- 回歸用於修正篩選后的候選區域,使之回歸於ground-truth,默認認為這兩個框之間是線性關系,因為在最后篩選出來的候選區域和ground-truth很接近了
修正過程(線性回歸)
- 給定:anchor
和
- 尋找一種變換F,使得:
,其中
解釋:這里我們經過2.6步NMS預測得到的bbox是A筐,再經過2.7步,邊框回歸,進行修正,得到G',減少了原A與真實邊框G的誤差。
2.3 R-CNN訓練過程
步驟:正負樣本准備+預訓練+微調網絡+訓練SVM+訓練邊框回歸器
2.3.1 正負樣本准備
對於訓練集中的所有圖像,采用selective search方式來獲取,最后每個圖像得到2000個region proposal。但是每個圖像不是所有的候選區域都會拿去訓練。保證正負樣本比例1:3。
樣本 | 描述 |
---|---|
正樣本 | 某個region proposal和當前圖像上的所有ground truth中重疊面積最大的那個的IOU大於等於0.5,則該region proposal作為這個ground truth類別的正樣本 |
負樣本 | 某個region proposal和當前圖像上的所有ground truth中重疊面積最大的那個的IOU都小於0.5,則該region proposal作為這個ground truth類別的負樣本 |
這樣得出若干個候選區域以及對應的標記結果。
2.3.2 預訓練(pre-training)
CNN模型層數多,模型的容量大,通常會采用2012年的著名網絡AlexNet來學習特征,包含5個卷積層和2個全連接層,利用大數據集訓練一個分類器,比如著名的ImageNet比賽的數據集,來訓練AlexNet,保存其中的模型參數。
所謂預訓練,其實就是拿別人訓練好的模型來用,但是還沒有真的開始訓練。
2.3.3 微調(fine-tuning)
AlexNet是針對ImageNet訓練出來的模型,卷積部分可以作為一個好的特征提取器,后面的全連接層可以理解為一個好的分類器。R-CNN需要在現有的模型上微調卷積參數。
- 將第一步中得到的樣本進行尺寸變換,使得大小一致,然后作為預訓練好的網絡的輸入,繼續訓練網絡(遷移學習)
所謂微調,就是預訓練拿來用的model1,給model1輸入我們的數據(固定尺寸的圖像),然后訓練得到model2,model2就是我們微調后的模型,本質就是遷移學習,不同於預訓練的是,這是真的訓練了。
2.3.4 SVM分類器
針對每個類別訓練一個SVM的二分類器。舉例:貓的SVM分類器,輸入維度是2000x4096,目標還是之前第一步標記是否屬於該類別貓,訓練結果是得到SVM的權重矩陣W,W的維度是4096x20。
2.3.5 bbox回歸器訓練(邊框回歸)
只對那些跟ground truth的IoU超過某個閾值且IOU最大的region proposal回歸,其余的region proposal不參與。
2.4 R-CNN測試過程
-
輸入一張圖像,利用selective search得到2000個region proposal。
-
對所有region proposal變換到固定尺寸並作為已訓練好的CNN網絡的輸入,每個候選框得到的4096維特征
- 采用已訓練好的每個類別的svm分類器對提取到的特征打分,所以SVM的weight matrix(權重矩陣)是4096xN,N是類別數,這里一共有20個SVM,得分矩陣是2000x20
-
采用non-maximun suppression(NMS)去掉候選框
-
得到region proposal(oU超過某個閾值且IOU最大)進行邊框回歸。
2.5 R-CNN總結
2.5.1 流程總結
表現
- 在VOC2007數據集上的平均精確度達到66%
2.5.2 缺點
-
1、訓練階段多:步驟繁瑣: 微調網絡+訓練SVM+訓練邊框回歸器。
-
2、訓練耗時:占用磁盤空間大:5000張圖像產生幾百G的特征文件。(VOC數據集的檢測結果,因為SVM的存在)
-
3、處理速度慢: 使用GPU, VGG16模型處理一張圖像需要47s。
- 4、圖片形狀變化:候選區域要經過crop/warp進行固定大小,無法保證圖片不變形