1. 程式人生 > >Localization and Object Detection

Localization and Object Detection

Localization

思路1:看作迴歸問題

首先考慮單個物體的檢測,對單個物體的分類來說,已經很清楚了,在網路的最後一層加上softmax層或者multi-svm即可。對於檢測問題,我們需要獲得矩形邊框的位置,一個簡單的思路是將這個問題看作迴歸問題(x, y, w, h),所以很簡單將分類問題的最終一層換為regression即可。
其基本思路是:
(1)訓練一個分類網路(Alex net, VGG net等)
(2)在網路的最後一層附加上一個regression層
(3)用SGD和L2 loss訓練regression層的引數
(4)在測試階段同時得到物體所屬的類別以及box的4個引數
而對於多個物體的檢測也是類似,只是regression層輸出的個數為K*4

思路2:滑動視窗

比較有名的是overfeat
這裡寫圖片描述
將全連線層換為卷積層,更加有效

Object Detection

物體檢測的難點在於不清楚圖片中物體的個數,如果物體個數很多,利用localization的方法無疑是不可行的。

這裡寫圖片描述

圖片大小縮放

分為個向同性縮放和個向異性縮放,其中個向異性縮放指不管影象是否扭曲,直接將圖形變換到適當的大小;但由於圖形扭曲後可能會對識別精度有影響,故考慮其他兩種思路:a、先擴充後裁剪。即直接在原始圖片中,將bounding box擴充成正方形,然後再進行裁剪。若已經延伸到原始圖片的邊界則用bounding box中顏色均值進行補充;b、先裁剪後擴充。先把bounding box裁剪出來,然後再用bounding box中顏色的均值進行填充成正方形。在C-RNN的文獻中作者經過試驗,當padding=16採用個向異性縮放時效果最好

重疊度IOU

對於bounding box的定位精度,有一個很重要的概念: 因為我們演算法不可能百分百跟人工標註的資料完全匹配,因此就存在一個定位精度評價公式:IOU。 它定義了兩個bounding box的重疊度,即為兩個區域的並集除以交集

非極大值抑制NMS

非極大值抑制的方法是:先假設有6個矩形框,根據分類器的類別分類概率做排序,假設從小到大屬於車輛的概率 分別為A、B、C、D、E、F。
(1)從最大概率矩形框F開始,分別判斷A~E與F的重疊度IOU是否大於某個設定的閾值;
(2)假設B、D與F的重疊度超過閾值,那麼就扔掉B、D;並標記第一個矩形框F,是我們保留下來的。
(3)從剩下的矩形框A、C、E中,選擇概率最大的E,然後判斷E與A、C的重疊度,重疊度大於一定的閾值,那麼就扔掉;並標記E是我們保留下來的第二個矩形框。
就這樣一直重複,找到所有被保留下來的矩形框。

非極大值抑制(NMS)顧名思義就是抑制不是極大值的元素,搜尋區域性的極大值。這個區域性代表的是一個鄰域,鄰域有兩個引數可變,一是鄰域的維數,二是鄰域的大小。這裡不討論通用的NMS演算法,而是用於在目標檢測中用於提取分數最高的視窗的。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後,每個視窗都會得到一個分數。但是滑動視窗會導致很多視窗與其他視窗存在包含或者大部分交叉的情況。這時就需要用到NMS來選取那些鄰域裡分數最高(是行人的概率最大),並且抑制那些分數低的視窗。

R-CNN

首先,想到的一個思路是把圖片分成很多小框框,然後再來檢測這些小框框屬於哪一類就好了。這種方法叫做R-CNN方法,其主要思路是:
(1)用某種演算法(用的較多的是Selective Search)將圖片劃分為region proposal,一般約2000個。
(2)利用大量樣本資料訓練(或者下載)一個網路(如imagenet的資料)
(3)將輸出層的單元個數變為N(N個物體)+1(背景),進行fine tuning。並將RPI標記為正負樣本。正負樣本的定義是,若IOU大於0.5則為正樣本,否則為負樣本。
(4)約2K個RPI(region proposal interest)的大小不一,這樣就沒法放入到訓練後的CNN中(輸入大小是固定的),採用個向同性縮放和個向異性縮放兩種圖形變換的思路,將圖形的大小固定為CNN的輸入大小。將每個RPI放入到訓練過的CNN中提取特徵。
(5)利用SVM對每一個RPI的特徵進行分類(為何用SVM,CNN的softmax分類器不行嗎?CNN對bounding box的要求相對比較寬鬆,即只要稍微包含物體就行了。而SVM的要求嚴格,更符合我們的需求。同時,由於樣本數量少,CNN容易過擬合,而SVM比較適合小樣本的訓練)此時,正負樣本的定義有別於CNN,作者試驗當IOU小於0.3時將其標位負樣本
(6)對於每一類,用線性迴歸對邊框進行微調

測試階段:
1、使用selective search的方法在測試圖片上提取2000個region propasals ,將每個region proposals歸一化到227x227,然後再CNN中正向傳播,將最後一層得到的特徵提取出來。然後對於每一個類別,使用為這一類訓練的SVM分類器對提取的特徵向量進行打分,得到測試圖片中對於所有region proposals的對於這一類的分數,再使用貪心的非極大值抑制(NMS)去除相交的多餘的框。再對這些框進行canny邊緣檢測,就可以得到bounding-box(then B-BoxRegression)。

2、(非極大值抑制(NMS)先計算出每一個bounding box的面積,然後根據score進行排序,把score最大的bounding box作為選定的框,計算其餘bounding box與當前最大score與box的IoU,去除IoU大於設定的閾值的bounding box。然後重複上面的過程,直至候選bounding box為空,然後再將score小於一定閾值的選定框刪除得到這一類的結果(然後繼續進行下一個分類)。作者提到花費在region propasals和提取特徵的時間是13s/張-GPU和53s/張-CPU,可以看出時間還是很長的,不能夠達到及時性。

R-CNN的主要問題:
a、測試時間長,需要將每一個PRI放入CNN
b、SVM分類器和迴歸器都是後面新新增,與CNN沒有直接聯絡。從CNN中提取的特徵的變化並不能影響到它們。
c、訓練流程很複雜

fast R-CNN

針對R-CNN的三個問題,解決思路是:
1、針對問題a,可以採用共享的卷積層
2、針對問題b、c,可以訓練整個端對端的網路
採用共享卷積層的一個問題是怎麼保證卷積層輸出的問題,由於PRI大小不一。作者提供的思路是將區域劃分為hXw的網格,然後做max pooling這樣就可以保證了卷積層輸出不一致的問題。
這裡寫圖片描述

faster R-CNN

fast R-CNN雖然相比R-CNN提升不少,但是Selective Search依然飽受詬病,faster R-CNN對此進行了改進,通過插入RPN層來獲取region proposal
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

YOLO

faster R-cnn很快了,但現實中可能需要實時的Object Detection,YOLO是you only look for once,是一個實時的系統
這裡寫圖片描述

這裡寫圖片描述