論文筆記:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks DeepLearning 》


一、Abstract綜述

  訓練出一個CNN可以同時實現分類,定位和檢測..,三個任務共用同一個CNN網絡,只是在pool5之后有所不同

 

二、分類

 這里CNN的結構是對ALEXNET做了一些改進,具體的在論文中都說了,就不再贅述了。說幾個關鍵的地方。

 1.之前在多尺度的情況下,Krizhevsky用的是multi—view的方法,也就是對給定的圖片分別取四個角,中間以及翻轉的圖塊輸入到CNN中,得到的結果取均值。這個方法的缺陷在於有些區域的組合會被忽略(比如   ground truth在中間偏右,但是此方法並沒有檢測這個框),只關注了一個scale導致結果的置信度不高,而且重疊區域的計算很耗時。所以這里采用的方法是multi—scale。

   傳統的檢測/定位算法是固定輸入圖像不變,采用不同大小的滑窗來支持不同尺度的物體。這里因為采用的是全卷積網絡,訓練時固定輸入大小,使用的時候可以multi-scale,這個待會再詳細講,只要清楚每次輸入的時候,滑窗的大小就是訓練時輸入圖像的大小,是不可以改變的。那么,CNN支持多尺度的辦法就是,固定滑窗的大小,改變輸入圖像的大小。具體來說,對於一幅給定的待處理的圖像,將圖像分別resize到對應的尺度上,然后,在每一個尺度上執行上述的密集采樣的算法,最后,將所有尺度上的結果結合起來,得到最終的結果。

這樣做的好處就是:1.速度快,卷積處理的速度當然快 2.預測時不用對圖像做尺度處理。

但是固定slide window也有壞處,就是步長固定了, 整個網絡的子采樣比例=2*3*2*3=36,即當應用網絡計算時,輸入圖像的每個維度上,每36個像素才能產生一個輸出。文章采用的解決方法是使用模型前5層卷積層來提取特征,layer 5在 pooling 之前給定 x,y 一個偏移,,即對每個 feature map 滑窗從(0,0), (0,1), (0,2), (1,0), (1,1)...處分別開始滑動,得到9種不同的feature map,那么下一層的 feature map 總數為9*前一層的 num_output。這樣的話就會把sampling從36降到了12.

2.offset  max-pooling

 上面的方法是可以單獨拉出來說一說的,以下圖為例,這是一維的,classfilier的輸入要求是1*5,我們先用offset max_pooling得到三個1*6的feature map(注意這里是non-overlapping regions的),然后對每個用1*5的滑動窗口計算,也就是放到分類器里面,會得到2*3=6個輸出,然后融合以后就可以得到分類器的1*6的輸出。

 

 

2.全卷積網絡的好處

 

  如上圖所示,可以看到后面的全連接層被轉換為卷積層了,本來訓練的時候只有14*14的輸入,最后得到1*1的輸出,在predict的時候,如果輸入時16*16,最后得到的結果是2*2的output,這個相當於四個滑動窗口在16*16的input上滑動的輸出結果,但計算明顯減輕了很多。

 

  3.上面這樣做還有一個問題,就是不同的scale輸出的feature map大小不同,而最后的classifier要求固定的input,所以這里需要calssifier在feature map上做滑動窗口,這樣最后就有了multi-scale的預測:最對某一個類別,分別對不同scale矩陣取最大值,然后取該類別中不同矩陣最大值的均值,最后輸出所有類別的top-1 or top-5

 

 三、定位

定位問題的模型也是一個CNN,1-5層作為特征提取層和分類問題完全一樣,后面接兩個全連接層,組成regressor network ,也就是用回歸的方法來訓練得到bounding box的四個角點的坐標,使用預測邊界和真實邊界之間的L2范數作為代價函數,來訓練回歸網絡。對於每個class都要單獨訓練一個定位層,這樣,假設類別數有1000,則這個 regressor network 輸出1000個 bounding box ,每一個 bounding box對應一類。

 

1.算法流程

(1)初始化模型后,進來一張圖片,利用滑動窗口技術提取出來多個patch。

(2)對於每個patch,用分類模型確定好類別,然后使用對用的定位模型來確定物體的位置。

(3)根據分類的分數可以選出k個候選的patch

(4)對patch進行合並

2.合並多框

 因為論文里面使用的方法是重合率超過百分50就可以留下,所以會有很多的bounding box,所以最后需要做一個合並多框的方法,這里采用的是貪心策略 

a)在6個縮放比例上運行分類網絡,在每個比例上選取top-k個類別,就是給每個圖片進行類別標定Cs

b)在每個比例上運行預測boundingbox網絡,產生每個類別對應的bounding box集合Bs

c)各個比例的Bs到放到一個大集合B

d)融合bounding box。具體過程應該是選取兩個bounding box b1,b2;計算b1和b2的匹配分式,如果匹配分數大於一個閾值,就結束,如果小於閾值就在B中刪除b1,b2,然后把b1和b2的融合放入B中,在進行循環計算。

最終的結果通過融合具有最高置信度的bounding box給出。

3.為什么訓練定位的時候要用multi-scale的輸入

是為了在predic的時候可以做到across—scale的預測,多尺度的訓練會讓后面的合並的可信度更高,當然這也有問題,就是只能在處理訓練的時候這幾個尺度上的圖片有好的效果,其他的時候不行。

三、檢測

  同時跑上面兩個,得到的結果就是的了...

 

四、總結

 最大的亮點在於在pool層用小的滑動窗口代替input的大的滑動窗口吧,大大提高了計算效率,而且這樣可以fix住feature提取的那部分,所以檢測和定位就可以共用了,所以整個CNN的效率和精度都有了很大的提高.暫時了解的只有這么多了,以后有新的理解還要再來修改。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM