論文標題:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks
標題翻譯:OverFeat:使用卷積神經網路整合識別,定位和檢測
論文作者:Pierre Sermanet David Eigen Xiang Zhang Michael Mathieu Rob Fergus Yann LeCun
論文地址:https://arxiv.org/pdf/1312.6229v4.pdf
宣告:小編翻譯論文僅為學習,如有侵權請聯絡小編刪除博文,謝謝!
小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。
這篇論文是紐約大學 Yann LeCun 團隊中 Pierre Sermanet,David Eigen和 Xiang Zhang等人在13年撰寫的一篇論文,本文改進了 AlexNet,並用影像縮放和滑窗方法在 test 資料集上測試網路;提出一種影像定位的方法;最後通過一個卷積網路來同時進行分類,定位和檢測三個計算機視覺任務,並在 ILSVRC2013中獲得了很好的結果。
摘要
我們提出了一個使用卷積網路進行分類,定位和檢測的整合框架。我們展示瞭如何在 ConvNet 中有效的實現多尺度滑動視窗方法。我們還介紹了一種新的深度學習方法,通過學習預測物件邊界來定位。然後累加而不是抑制邊界框,以增加檢測置信度。我們證明了使用一個共享網路可以同時學習不同的任務。該整合框架是 2013年 ImageNet 大規模視覺識別挑戰賽(ILSVRC 2013)定位任務的獲勝者,在檢測和分類任務中取得了非常有競爭力的結果。從賽後工作中,我們為檢測任務建立了一種新的狀態。最後,我們從我們最好的模型中釋出了一個叫做 OverFeat 的特徵提取器。
1,引言
識別影像中主要物件的類別是卷積網路(ConvNets)【17】多年來一直應用的一項任務,無論物件是手寫字元【16】,門牌編號【24】,無紋理玩具【18】,交通標誌【3,26】,Caltech-101資料集【14】中的物件,還是 1000類別的物件 ImageNet資料集【15】。ConvNets 在Caltech-101 等小型資料集上的準確度雖然不錯,但並沒有打破記錄。然而,更大資料集的出現使ConvNets 能夠顯著提高資料集的技術水平,如 1000類的 ImageNet【5】。
對於許多這樣的分類任務,卷積網路的主要優勢是從原始畫素到最終類別,整個系統都提供 end-to-end 解決方案,從而減少了手動設計合適的特徵提取器的要求;劣勢就是對於標籤資料集很貪婪。所以在大的資料集上面取得了很大的突破,但是在小的資料集上面突破不是很大。
本文的主要目的是表明:訓練一個卷積網路以同時對影像中的物件進行分類,定位和檢測可以提高分類精度以及所有任務的檢測和定位精度。本文提出了一種使用單個 ConvNet進行物件檢測,識別和定位的新整合方法。我們還介紹了一種通過累計預測邊界框進行定位和檢測的新方法。我們建議通過結合許多定位預測,無需對背景樣本進行訓練就可以檢測,並且可以避免耗時且複雜的自舉訓練過程。不進行背景樣本訓練也可以使網路僅專注於正樣本的分類,以獲得更高的準確性。
在ImageNet ILSVRC 2012 和 2013資料集上進行了實驗,建立了 ILSVRC 2013 定位和檢測任務的最新結果。
儘管從ImageNet資料集上選擇的分類圖片,物體大致分佈在圖片中心,但是感興趣的物體常常在尺寸和位置(以滑窗的方式)上有變化;解決這個問題的第一個想法就是在不同位置和不同縮放比例上應用卷積網路。但是一種滑窗的可視視窗可能只包含物體的一個部分(比如狗的頭),而不是整個物體;對於分類任務是可以接受的,但是對於定位和檢測有些不適合。第二個想法就是訓練一個卷積網路不僅產生類別分佈,還產生一個物體位置的預測和 Bounding box 的尺寸;第三個想法就是積累在每個位置和尺寸對應類別的置信度。
許多作者建議使用 ConvNets 進行檢測和定位,在多尺度上使用滑動視窗可以追溯到20世紀90年代早期的多字串【20】,人臉【30】和手【22】。最近,ConvNets被證明在自然影像中的文字檢測【4】,面部檢測【8, 23】和行人檢測方面具有最先進的效能。
一些作者還提出訓練 ConvNets 來直接預測待定位物件的例項化引數,例如相對於觀察視窗的位置或物件的姿勢。例如Osadchy等人【23】描述一個用於同時進行人臉檢測和姿態估計的ConvNet。面由九維輸出空間中的三維流行表示。歧管(manifold)上的位置指示姿勢(俯仰,偏航和側滾)。當訓練影像為人臉時,訓練網路在流形上的已知姿態處產生一個點。如果影像不是一個面,則輸出被推離流形。在測試時,到流形的距離表示影像是否包含面,流形上最近點的位置表示姿勢。泰勒等人【27,28】使用ConvNets來估計身體部位(手,頭等)的位置,從而得出人體姿勢。他們使用一個度量學習準則來訓練網路以產生身體姿勢流形上的點。Hinton等人他們還建議訓練網路計算特徵的顯式例項化引數,作為識別過程的一部分。
其他作者提出通過基於 ConvNet的分割來實現目標定位。最簡單的方法是訓練ConvNet將其觀察視窗的中心畫素(或體積影像的體素)分類為區域之間的邊界【13】。但當區域必須分類時,最好進行語義分割。其主要實現是訓練ConvNet將觀察視窗的中心畫素與其所屬物件的類別進行分類,並將視窗作為決策的上下文。應用範圍從生物影像分析【21】,到移動機器人的障礙物標記【10】到照片的標記【7】。這種方法的優點是邊界輪廓不必說矩形,區域也不必是邊界良好的物件。缺點是需要密集的訓練。這種分割預處理或物件建議步驟最近在傳統的計算機視覺中得到了廣泛的應用,以減少用於檢測的位置,比例和縱橫比的搜尋空間【19,2,6,29】。因此,可以在搜尋空間的最佳位置應用昂貴的分類方法,從而提高識別精度。另外,【29,1】認為這些方法通過大幅度減少不可能的目標區域來提高準確性,從而減少潛在的假陽性。然而,在 ILSVRC 2013檢測資料集上,我們的密集滑動視窗方法的效能優於物件建議方法。
Krizhevsky等人【15】最近使用大型ConvNet 展示了令人印象深刻的分類效能。其作者還參加了ImageNet 2012競賽,贏得了分類和定位挑戰。儘管他們展示了令人印象深刻的定位效能,但是還沒有發表過任何描述其方法的工作。因此,我們的論文首次明確說明了如何將ConvNets 用於 ImageNet 資料的定位和檢測。
在本文中,我們使用術語“定位”和“檢測”,這與他們在 ImageNet 2013競賽中的使用方法是一致的,即唯一的區別是所使用的評估標準,並且兩者都設計到預測影像中的每個物件的邊界框。
2,視覺任務
在這篇論文中,我們探討了三個計算機視覺任務的難度遞增順序:(i)分類,(ii)定位,(iii)檢測。每一個任務都是下一個任務的子任務。雖然所有任務都是通過一個單一的框架和一個共享的特性學習庫來解決的,但是我們將在下面的部分中分別描述他們。
在本文中,我們報告了 2013年 ImageNet 大規模視覺識別挑戰賽(ILSVRC 2013)的結果。在這個挑戰的分類任務中,每個影像被分配一個對應於影像中的主要標籤。五次猜測可以找到正確答案(這是因為影像也可以包含多個未標記的物件)。定位任務類似於每個影像允許5次猜測,但是除此之外,每個猜測都必須返回預測物件的邊界框。要想被認為是正確的,預測框必須至少與 groundtruth 匹配 50%(使用 PASCAL 的 IOU準則),並用正確的類進行標記(即每個預測都是一個關聯在一起的標籤和邊界框)。在任務定位中,每一個被測物件的平均精度(包括零)與被測影像中的平均值(誤差)不同。定位任務是分類和檢測之間的一個方便的中間步驟,它允許我們獨立於特定於檢測的挑戰(例如學習背景類)來評估我們的定位方法。在圖1中,我們展示了我們的定位/檢測預測以及相應的基本事實的影像示例。請注意,分類和定位共享同一個資料集,而檢測也有其他資料,其中物件可以更小。檢測資料還包含一組影像,其中某些物件不存在。這可以用於自舉,但我們還沒有在這項工作中使用它。
3,分類
我們的分類體系結構類似於 Krizhevsky 等人的最佳 ILSVRC 2012體系結構【15】。但是,我們在網路設計和推理步驟上進行了改進。由於時間的限制,Krizhevsky模型中的一些訓練特徵還沒有被探索,因此我們期望我們的結果能夠得到進一步的改進。這些將在未來的工作section 6 中探索。
3.1 模型設計和訓練
我們在ImageNet 2012 訓練集(有120萬張圖片和1000個類)【5】對網路進行訓練。我們的模型使用了Krizhevsky 等人提出的相同的固定輸入大小的方法進行訓練,但轉向多尺度分類,如下一節所述。每一個影像都被降取樣,因此最小尺寸為 256畫素。然後我們提取5個大小為 221*221 畫素的隨機裁剪(及其水平翻轉),並以 128大小的小批量(mini-batch)呈現給網路(總結:輸入圖片為 256*256,然後進行隨機裁剪,把221*221作為CNN的輸入)。網路中的權重隨機初始化為 (µ,σ)=(0,1×10−2),然後通過隨機梯度下降,伴隨動量項 0.6 和 l2 重量衰減 1*10-5 進行更新。學習率最初為 5*10-2,在迭代(30, 50, 60, 70, 80)個epoch之後,學習率連續下降 0.5倍。在分類器中的全連線層(第6層和第7層)上使用比率為 0.5的 Dropout【11】(也就是說在最後的兩個全連線層,才採用Dropout)。
我們在表1和表3中詳細說明了體系結構的大小。請注意,在訓練過程中,我們將此體系結構視為非空間的(大小為1*1的輸出對映),而不是生成空間輸出的推理步驟。第1~5層與Krizhevsky等人相似【15】,使用校正(‘relu’)非線性和最大池化,但有以下區別:(i)沒有使用對比度標準化;(ii)池化區域不重疊;(iii)我們的模型具有更大的第一層和第二層特徵圖,這是由於步長較小(即步長為2,而不是4)。較大的步長有助於提高速度,但會損害準確性。
表1:fast 模型的架構細節。特徵圖的空間大小取決於輸入影像的大小,在這我們的推斷步驟中是不同的(見附錄中的表5)。這裡我們展示了訓練的空間大小。第5層是最上面的卷積層。後續層完全連線,並在測試時以滑動視窗方式應用。在空間設定中,完全連線層也可以看做 1*1 卷積。精確模型的相似尺寸可以在附錄中找到。
注意上面的Fast model:
- 1,不使用 LRN
- 2,不使用over-pooling ,使用普通的 pooling
- 3,第3, 4, 5卷積層特徵數變大,從AlexNet的 384——384——256變為 512——1024——1024
- 4,fc6層的神經元個數減少,從 4096 變為 3072
- 5,卷積的方式從 valid 卷積變為維度不變的卷積方式,所以輸入變為 231*231
注意上面的 accurate model:
- 1,不使用LRN
- 2,不使用over-pooling ,使用普通的 pooling
- 3,第一個卷積層的間隔從4變為2(accurate model),卷積大小從11*11 變為 7*7;第二個卷積層filter從 5*5 升為 7*7
- 4,增加了一個第三層,然後卷積層變為六層;同時從AlexNet的384——384——256變為 512——512——1024——1024
在圖2中,我們展示了來自前兩個卷積層的濾波器係數。第一層過濾器捕捉定向的邊緣,圖案和斑點。在第二層,濾光片有多種形式,有些是漫反射的,有些是具有強線結構或定向邊緣的。
3.2 特徵提取器
為了給計算機視覺研究提供強大的功能,我們還發布了一個名為“OverFeat”的特徵提取器。提供兩種模型,一種 fast模型和一種 accurate 模型。表1和表3描述了每種體系結構。我們還比較了表4中引數和連線的尺寸。準確(accurate)的模型比快速(fast)模型更精確(表1為14.18% 的分類錯誤,而表2中為 16.39%),但是它需要的連線數幾乎是 fast 模型的兩倍。使用一個由 7 個準確模型組成的 committee 。分類誤差達到了 13.6%,如圖4所示。
從圖中可以看到Fast模型比Accurate模型的引數還多,連線數比較符合邏輯,那為什麼引數會多呢?
按理來說兩張圖大小有區別,accurate自然會小,這應該不是根本原因,我們知道的 caffemodel的引數主要集中在全連線層,第7層的連線數 fast model 少,說明特徵圖 6*6 大於 5*5 是導致模型引數大的主要因素。
3.3 多尺度分類
在AlexNet【15】中,多檢視投票(multi-view)用於提升效能:固定的10個檢視集(4個角和中心,水平翻轉)是平均的。但是,這種方法可以忽略影像的許多區域,並且在試圖重疊時在計算上是多餘的。此外,它僅以單一規模應用,可能不是ConvNet能夠以最佳置信度做出相應的尺寸。
相反,我們通過在每個位置和多個尺度上密集執行網路來探索整個影像。雖然滑動視窗方法可能在計算上對某些型別的模型來說可能計算代價高,但是在ConvNets 的情況下,它本質上是有效的(見第 3.5 節)。這種方法為投票產生了更多的檢視,這在保持效率的同時增加了健壯性。在任意的影像上卷積 ConvNet的結果是在每個尺寸上 C維向量的空間對映。
然而,上述網路中的總子取樣比率為2*3*2*3= 36。因此,當密集應用時,這種結構只能在輸入維上沿每個軸每 36個畫素生成一個分類向量。與 10檢視方案相比(10-views 是影像做了crop,四個 corner,加一箇中間,總共變為5個子影像,然後對影像進行翻轉,這樣就變成了10個影像),這種粗略的輸出分佈降低了效能,因為網路視窗與影像中的物件沒有很好地對齊。網路視窗與物件的對齊度越高,網路響應的置信度越強。為了避免這個問題,我們採取了類似於 Giusti 等人提出的方法【9】,並在每個偏移量應用最後一次子取樣操作。這消除了這一層的解析度損失,產生了 x12 而不是 x36的總子取樣比。
我們現在詳細解釋如何實現解析度增強。我們使用6個比例的輸入,這導致了不同解析度的非池化層第5層maps(詳見表5)。然後,使用圖3所示的以下過程將這些集合並呈現給分類器:
(a) 在給定的比例下,對於單個影像,我們從未池化的第五層特徵圖開始。
(b)每個非池化特徵圖都要經歷 3*3 的最大池化操作(非重疊區域),對於{0, 1, 2} 的(∆x,∆y)畫素偏移重複 3*3 次。
(c)這將生成一組池化的特徵圖,對於不同的(∆x,∆y)組合,複製(3*3)次
(d)分類器(第6, 7, 8層)的輸入大小固定為 5*5,併為集合對映中的每個位置生成一個C維輸出向量。該分類器以滑動視窗方式應用於集合對映,得到C維輸出對映(對於給定的(∆x,∆y)組合)
(e)不同(∆x,∆y)組合的輸出對映被重塑為單個 3D輸出對映(兩個空間維度 x C類)
上圖是一維的情況,有3種池化組合方法,如果是2維圖片的話,那麼(∆x,∆y)就會有9種取值情況(3*3);如果我們在做圖片分類的時候,在網路的某一個池化層加入了這種 offset 池化方法,然後把這 9種池化結果分別送到後面的網路層,最後圖片分類輸出結果就可以得到 9個預測結果(每個類別都可以得到 9種概率值,然後我們對每個類別的9種概率,取其最大值,作為此類別的預測概率值)。論文中圖(a)就是一系列操作以後得到的 20*20的圖,然後做3*3的 pooling得到上面說的 6*6 的 feature map,現在用三個 offset 來做三次 pooling,(b)表達了這個思想,這樣作者認為就將解析度提高了3倍,那麼橫座標這樣有3個offset,縱座標也是3個,這樣一結合就變為9個,所以之前的6*6就變成了(6*6)*(3*3),在這一系列的視窗上再去做滑窗,就變成了4*9=36個位置了。作者最後還做了一個 scale 上的變換,把影像放縮到6個尺度上,所以這個多尺度的滑動視窗的思想就得到了實現。
下面對上面圖分析,這裡我們學習一下 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開始組合,也就是我們說的其實有三種池化組合方法:
- 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種概率,取其最大值,作為此類別的預測概率值)。
這些操作可以被視為通過池化層將分類器的觀察視窗移動 1 個畫素,而無需進行子取樣,並在下一層使用跳過核(領域中的值是非相鄰的)。或者等效的,在每個可能的偏移量應用最終的池化層和完全連線層的堆疊,並通過交錯輸出來組合結果。
對於每個影像的水平翻轉版本,重複上述過程。然後,我們通過(i)取每個等級,每個等級和翻轉的空間最大值;(ii)平均不同比例尺寸和翻轉產生的 C維向量;(iii)從平均類向量中取前 1 個或前 5 個元素(取決於評估標準)。
在直觀的層面上,網路的兩部分——即特徵提取層(1~5)和分類器層(6~輸出)以相反的方式使用。在特徵提取部分,濾波器一次卷積在整個影像上。從計算的角度來看,這比在影像上滑動固定大小的特徵抽取器,然後將來自不同位置的結果聚合起來要高效的多。然而,對於網路的分類器部分,這些原則是相反的。在這裡,我們想在圖層5的不同位置的比例的特徵圖中尋找固定尺寸的表示。因此,分類器具有固定大小的 5*5 輸入,並且完全應用於第5層對映。窮舉池方案(使用單畫素偏移(∆x,∆y))確保我們可以在分類器和特徵對映中的物件表示之間獲得精確的對齊。
OverFeat 在測試階段,不再使用一張 221*221 大小的圖片作為網路的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如上表格所示,測試階段網路輸入圖片大小分別是245*245,281*317……461*569。
然後當網路前向傳導到layer 5的時候,就使出了前面我們所講的FCN、offset pooling這兩招相結合的招式。在這裡我們以輸入一張圖片為例(6張圖片的計算方法都相同),講解layer 5後面的整體過程,具體流程示意圖如上面講解所示。
從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得到的結果)。
從layer-5 post-pool到classifier map(pre-reshape):我們知道在訓練的時候,從卷積層到全連線層,輸入的大小是4096*(5*5),然後進行全連線,得到4096*(1*1)。但是我們現在輸入的是各種不同大小的圖片,因此接著就採用FCN的招式,讓網路繼續前向傳導。我們從layer-5 post-pool到第六層的時候,如果把全連線看成是卷積,那麼其實這個時候卷積核的大小為5*5,因為訓練的時候,layer-5 post-pool得到的結果是5*5。因此在預測分類的時候,假設layer-5 post-pool 得到的是7*9(上面表格中的scale 3),經過5*5的卷積核進行卷積後,那麼它將得到(7-5+1)*(9-5+1)=3*5的輸出。
然後我們就只需要在後面把它們拉成一維向量擺放就ok了,這樣在一個尺度上,我們可以得到一個C*N個預測值矩陣,每一列就表示圖片屬於某一類別的概率值,然後我們求取每一列的最大值,作為本尺度的每個類別的概率值。
最後我們一共用了6種不同尺度(文獻好像用了12張,另外6張是水平翻轉的圖片),做了預測,然後把這六種尺度結果再做一個平均,作為最最後的結果。
OK,至此overfeat圖片分類的任務就結束了,從上面過程,我們可以看到整個網路分成兩部分:layer 1~5這五層我們把它稱之為特徵提取層;layer 6~output我們把它們稱之為分類層。
3.4 結果
在表2中,我們用不同的方法進行了實驗,並將他們與Krizhevsky等人的單網路模型進行了比較。【15】供參考。上述方法有6個量表,top-5的錯誤率為 13.6%。正如預期的那樣,使用較小的尺度會損害效能:單標度模型更差,top-5的錯誤率為 16.97%。圖3中所示的精細步長技術在單尺度範圍內帶來了相對較小的改進,但是對於這裡所示的多尺度增益也很重要。
從表2我們可以看到:
- 1,fast模型比AlexNet結果提升了近 1%,本文 AlexNet模型結果為 18.2%,比他們自己測試的高了2%左右
- 2,accurate模型單個模型提升了近4%,說明增大網路可以提高分類效果
- 3,採用偏置的(offset) max-pooling 感覺提升效果很小,並沒有顯著的提升,可能是因為卷積特徵啟用值具有很高的聚集性,每個offset特徵圖很相似,max-pooling後也會很相似
- 4,多個縮放比例測試分類對於結果提升比較重要,通過多個比例可以把相對較小的物體放大,以便於特徵捕捉
圖4:測試集分類結果。在比賽中,使用平均7個快速模型,OverFeat產生了 14.2%的前5名錯誤率。在賽後的工作中,OverFeat使用較大的模型(更多的功能和更多的圖層)以 13.6%的誤差排名第5。
我們在圖4中報告了 2013年比賽的測試集結果,其中我們的模型(Overfeat)通過對7個ConvNet(每個ConvNet都經過不同的初始化訓練)的投票獲得了 14.2%的準確率,並在 18個團隊中排名第5.使用 ILSVRC 2013資料的最佳準確率為 11.7%。使用來自ImageNet Fall11 資料集的額外資料進行預訓練,將這個數字提高到 11.2%。在賽後的工作中,我們通過使用更大的模型(更多的特性和更多的層),將OverFeat結果的誤差降低到 13.6%。由於時間限制,這些較大的模型沒有得到充分的訓練,更多的改進有望及時出現。
3.5 卷積神經網路和滑動視窗效率
與許多滑動視窗方法一次只計算一個輸入視窗的整個管道不同,ConvNet 在以滑動方式應用時天生高效,因為他們自然地共享重疊區域的共同計算。當在測試時將我們的網路應用於較大的影像時,我們只需要將每個卷積應用於整個影像的範圍。這將擴充套件每個層的輸出以覆蓋新的影像大小,最終生成輸出類預測的對映,每個輸入的“視窗”(視野)都有一個空間位置。如圖5所示,卷積是自下而上應用的,因此相鄰視窗的公共計算只需要執行一次。
請注意,我們架構的最後一層是完全連線的線性層。在測試時,這些層具有 1*1 空間範圍核心的卷積運算有效的替換。因此,整個ConvNet 只是一系列卷積,最大池化核閾值運算的序列。
圖5:ConvNets 的檢測效率。在訓練期間,ConvNet只產生一個空間輸出(頂部)。但是當在測試時應用於較大的影像時,它會生成一個空間輸出對映,例如 2*2(底部)。由於所有層都是卷積應用的,因此較大影像所需的額外計算僅限於黃色區域。為了簡單起見,此圖省略了特性維度。
這個圖的意思就是:比如在訓練階段在小的 view(如圖14*14)下,訓練網路;測試階段在多個較大的圖片上測試,由於每個 14*14的 veiw區域產生一個分類預測分佈,上圖在 16*16的圖片上測試,有4個不同的 14*14的 view,所以最後產生一個4個分類預測分佈;組成一個具有C個特徵圖的2*2分類結果圖,然後按照1*1卷積方式計算全連線層部分;這個整個系統可以類似於一個完整的卷積系統。
有個部落格這樣解釋上面的內容(地址:https://blog.csdn.net/hjimce/article/details/50187881),我覺得我看完後茅塞頓開:
我們知道對於一個各層引數結構都設計好的網路模型來說,輸入的圖片大小是固定的,比如AlexNet設計完畢後,網路輸入圖片大小就是 227*227,這個時候我們如果輸入一張 500*500 的圖片,會是什麼樣子的結果?我們現在的希望是讓我們的網路可以一直前向傳到,讓一個已經設計完畢的網路,也可以輸入任意大小的圖片。這裡我們通過FCN來學習上面的意思,FCN演算法靈魂是:
- 1,把卷積層到全連線層,看成是對一整張圖片的卷積層運算
- 2,把全連線層到全連線層,看成是採用 1*1 大小的卷積核,進行卷積層運算
下面我們來對上圖來學習怎麼讓一個已經設計好的CNN模型,可以輸入任意大小的圖片:
假設我們設計了一個CNN模型,輸入圖片大小為 14*14,通過第一層卷積後我們得到 10*10 大小的圖片,然後接著池化得到 5*5 大小的圖片。接著我們看如何把 5*5大小的圖片縮放為1*1大小的圖片:
(1)傳統的 CNN:如果從以前的角度來進行理解的話,那麼這個過程就是全連線層,我們會把這個 5*5 大小的圖片,展平成一個一維的向量,進行計算(寫CNN程式碼的時候,這個時候經常會加上一個 flatten函式,就是為了展平一維向量)。
(2)FCN:FCN 並不是把 5*5 的圖片展平成一維向量,再進行計算,而是直接採用 5*5 的 卷積核,對一整張圖片進行卷積運算。
其實這兩個本質是相同的,只是角度不同,FCN把這個過程當成了對一整張圖片進行卷積,同樣,後面的全連線層也是把它當做是以 1*1 大小的卷積核進行卷積運算。
上面的例子中,我們看到網路的輸入是一張 14*14大小的圖片,而當輸入任意大小的圖片,比如上圖的下面,16*16大小的圖片,會是什麼樣的結果?
這個時候我們會發現,網路最後的輸出是一張 2*2 大小的圖片。這個時候,我們就可以發現採用 FCN 網路,可以輸入任意大小的圖片。同時需要注意的是網路最後輸出的圖片大小不再是一個 1*1 大小的圖片,而是一個與輸入圖片大小息息相關的一張圖片了。
這時候我們思考一個問題,比如AlexNet網路設計完畢後,我們也用 FCN的思想,把全連線層看成卷積層運算,這個時候我們就會發現如果 AlexNet輸入一張500*500圖片的話,那麼它將得到 1000張 10*10 大小的預測分類圖,這個時候我們可以簡單採用對著每一張 10*10大小的圖片求取平均值,作為圖片屬於各個類別的概率值。
其實AlexNet在測試階段的時候,採用了對輸入圖片的四個角度進行裁剪,進行預測,分別得到結果,最後的結果就是類似於對應上面 2*2 的預測圖。這個 2*2 的每個畫素點,就類似於對應於一個角落裁剪下來的圖片預測分類結果。只不過 AlexNet把這4個畫素點,相加在一起,求取平均值,作為該類別的概率值。
需要注意的是,OverFeat就是把採用FCN的思想把全連線層看成了卷積層,讓我們在網路測試階段可以輸入任意大小的圖片。
4,定位
從我們的分類訓練網路開始,我們用一個迴歸網路代替分類器層,並訓練它在每個空間位置和尺寸上預測物件邊界框。然後,我們將回歸預測與每個位置的分類結果結合在一起,正如我們現在所描述的那樣。
後面我們用於定位任務的時候,就把分類層(上面的layer 6~output)給重新設計一下,把分類改成迴歸問題,然後在各種不同尺度上訓練預測物體的bounding box。
我們把用圖片分類學習的特徵提取層的引數固定下來,然後繼續訓練後面的迴歸層的引數,網路包含了4個輸出,對應於bounding box的上左上角點和右下角點,然後損失函式採用歐式距離L2損失函式。
4.1 生成預測
為了生成物件邊界框預測,我們同時在所有位置和範圍內執行分類器和迴歸網路。由於他們共享相同的特徵提取層,因此在計算分類網路後僅需要重新計算最終迴歸層。在每個位置上類別C的最終Softmax層的輸出提供了c類物件在相應視野中存在(儘管不一定完全包含)的置信度得分。因此,我們可以為每個邊界框指定一個置信度。
4.2 regressor 訓練
迴歸網路將第5層的池化特徵圖圖作為輸入。它具有2個全連線的隱藏層,大小分別為 4096和1024個通道。最終輸出層有 4個單元,用於指定邊界框邊緣的座標。與分類一樣,由於∆x,∆y 偏移,整個過程中有(3*3)個副本。架構如圖8所示。
圖6:定位/檢測管道。原始分類器/檢測器為每個位置輸出一個類和一個置信度(第一個圖)。可以使用第 3.3 節(第二張圖)中所述的方法提高這些預測的解析度。然後迴歸預測物件相對於每個視窗的位置比例(第三張圖)。然後將這些邊界框合併並累加到少量物件(第四張圖)
其中:第一行圖片,不同的縮放比例上,預測結果不同,例如在原始影像上預測結果只有熊,在放大比例後(第三,第四個圖),預測分類中不僅有熊,還有鯨魚等其他物體。
第二行圖片,通過offset和Sliding window的方式可以有更多的類別預測
第三行圖片,在每個比例上預測 Bounding box ,放大比例越大的圖片,預測的 bounding box越多
第四行圖片,融合bounding box
在最終的分類中,鯨魚預測和其他的物體消失不僅是因為更低的置信度,還有就是他們的 bounding box集合Bs不像熊一樣連續,具有一致性,從而沒有持續的置信度積累。通過這種方式正確的物體持續增加置信度,而錯誤的物體識別由於缺少bounding box的一致性和置信度,最終消失。這種方法對於錯誤的物體具有魯棒性(但是圖中確實有一些魚,雖然不是鯨魚;但是系統並沒有識別出來;也可能是類別中有鯨魚,但是沒有此種魚的類別)
圖7:迴歸網路生成的邊界框示例。在合併到最終預測中之前,這裡所示的例子是在一個單一的比例。根據目標的不同,在其他尺寸下預測可能更為理想。在這裡,大多數最初組織為柵格的邊界框收斂到單個位置和比例。這表明網路對物件的位置非常有資訊,而不是隨機分佈。左上角的影像顯示,如果存在多個物件,它也可以正確識別多個位置。預測的邊界框的不同長寬比表明該網路能夠處理不同的物體姿態。
我們固定分類網路中特徵提取層(1~5),並使用每個樣本的預測邊界框和真實邊界框之間的 l2損失來訓練迴歸網路。最後的迴歸層是特定一類的,有1000個不同的版本,每個類一個版本。我們使用第三節中描述的同一組尺寸來訓練這個網路。我們將每個空間位置的迴歸網路的預測與groundture 邊界框進行比較,在卷積內,將其移動到迴歸器平移偏移的參考框架中(見圖8)。但是,我們不會在與輸入視野重疊小於50%的邊界框上訓練迴歸器:由於物件大多數位於這些位置之外,因此最好使用包含物件的迴歸視窗來處理它。
多尺度迴歸函式的訓練對於跨尺度預測組合具有重要意義。單一尺度的訓練在這個尺度上表現良好,在其他尺度上仍然可以合理的進行。然而,多尺度訓練將使預測在不同尺度間正確匹配,併成倍提高合併預測的置信度。反過來,這使我們能夠很好地只使用幾個scale,而不是像檢測中的典型情況那樣使用多個scale。行人檢測中【25】,從一個比例到另一個比例的典型比例約為 1.05~1.1,但是我們在這裡使用了大約 1.4 的大比例(這個數字因每個比例而異,因為尺寸被調整以完整適合我們網路的步長),這使我們能夠更快的執行我們的系統。
4.3 組合預測
我們使用以下演算法,通過應用於迴歸器邊界框的貪婪合併策略來組合各個預測(見圖7)
- 1,將每個尺度 s ∈ 1,....6 的前 k 個類別的集合分配到Cs,通過獲取該尺寸的空間位置上的最大檢測類輸出找到該集合。
- 2,將回歸器網路經過尺度為 s 的所有空間位置,為Cs中的每一類預測的邊界框集合分配到Bs
- 3,將 UsBs --> B
- 4,重複合併,直到完成
- 5,(b1*,b2*) = argminb1̸=b2∈Bmatch_score(b1,b2)
- 6,如果 match_score(b1*, b2*)> t, 停止
- 7,否則,設定 B <--B \ (b1*, b2*)U box_merge(b1*, b2*)
在上面,我們使用兩個邊界框的中心距離和框的相交面積來計算匹配分數。框合併計算邊界框座標的平均值。
最後的預測是以分類分數最大的合併邊界框來進行的。這是通過累積新增與預測每個邊界框的輸入視窗相關聯的檢測類輸出來計算的。關於合併到單個高置信度邊界框中的邊界框的示例,請參見圖6。在該示例中,一些海龜和鯨魚邊界框出現在中間多尺寸步驟中,但在最終檢測影像中消失。這些邊界框不僅分類置信度較低(分別為 0.11 和 0.12),而且他們的集合不像熊邊界框那樣一致,從而獲得顯著的置信提升。熊的boxes 有很強的置信度(每個量表平均約為 0.5分)和高匹配分數。因此,在合併後,許多熊的邊界框被融合到一個非常高的置信框中,而由於邊界框缺乏一致性和可信度,誤報會消失在檢測閾值以下。分析表明,與傳統的非最大值抑制方法相比,通過獎勵邊界框的連貫性,我們的方法通過對純分類模型產生的誤報自然要比傳統的非極大抑制(NMS)方法更健壯。
本文多個multi-scale和multi-view 的方式非常關鍵,multi-view 降低了 4%,multi-scale降低了6%。令人驚訝的是本文PCR的結果並沒有SCR的好,原因是PCR的有1000個模型,每個模型都是用自己類別的資料進行訓練,訓練資料不足可能導致欠擬合。而SCR通過權值共享,得到了充分的訓練。訓練分類模型只使用了單尺度,但後面訓練定位模型的時候用到了多尺度,個人認為是增加樣本——因為訓練1k個定位模型的話,每類的樣本太少了。“測試時實現多視角多尺度”方法,其本質上就是滑動視窗——多視角=滑動到不同的位置,多尺度=大小不一的視窗。
4.4 實驗
我們使用為比賽指定的定位標準將網路應用於 ImageNet 2012 驗證集。其結果如圖9所示。圖10顯示了 2012年和 2013年定位競賽的結果(這兩年的訓練和測試資料都相同)。我們的方法是 2013年競賽的獲勝者,錯誤率為 29.9%。
我們的多尺度和多檢視方法是獲得良好效能的關鍵,如圖9所示:僅使用單中心裁剪,我們的迴歸網路達到 40% 的錯誤率。通過在兩個尺度上結合所有空間位置的迴歸預測,我們獲得了 31.5% 的更好誤差率。新增第三和第四個 scale 進一步提高了效能,誤差為 30.0%
對於每個類(圖9中的每個類迴歸器(PCR))使用不同的頂層,令人驚訝的是,在所有類中僅使用一個共享的網路(44.1% VS 31.3%)的效能並不由於僅使用一個網路。這可能是因為在訓練集中,每個類用邊界框標註的例子相對較少,而網路的頂層引數多出 1000 倍,導致訓練不足。這種方法可以通過只在相似的類之間共享引數來改進(例如,為所有都是狗的類別訓練一個網路,為車輛訓練另一個網路,等等)。
5,檢測
檢測訓練與分類訓練相似,但是以空間方式進行的。可以同時訓練影像的多個位置。由於該模型是卷積的,因此所有權重在所有位置之間共享。與定位任務的主要區別是,當沒有物件存在時,需要預測背景類。傳統上,負面示例最初是隨機地接受訓練的。然後,最有害的的負錯誤會新增到引導過程中的訓練集中。獨立的引導過程使訓練變得複雜,並考嫩惡搞在否定示例手機和訓練時間之間造成潛在的不匹配。此外,需要調整自舉次數的大小,以確保訓練不會在小範圍內過大。為了避免所有這些問題,我們通過為每個影像選擇一些有趣的負面示例(例如隨機的或最令人反感的示例)來進行負面的訓練。這種方法在計算上的成本更加昂貴,但是使過程變得更加簡單。並且由於特徵提取最初是通過分類任務來訓練的,因此檢測微調無論如何都不會太長。
在表11中,我們報告了 ILSVRC 2013 競賽的結果,我們的檢測系統以 19.4%的平均精度(mAP)排名第三。我們後面用 24.3%的mAP建立了一種新的檢測技術。注意,排名前三的方法和其他團隊之間有很大的差距(第四種方法產生 11.5%的mAP)。此外,我們的方法與前兩個使用初始分割步驟將候選視窗從大約 200000 減少到 2000個的前兩個系統有很大的區別。這種技術加快了推斷速度,並大大減少了潛在誤報的數量。【20, 1】建議使用密集滑動視窗時檢測精度會下降,而選擇性搜尋會丟棄不太可能的目標位置,從而減少誤報。結合我們的方法,我們可以觀察到傳統的密集方法和基於分割的方法之間的類似改進。還應該注意的是,我們沒有像 NEC 和 UVA 那麼對檢測驗證集進行微調。驗證集和測試集的分佈與訓練集有很大的不同,僅此一項就可以將結果提高大約1個百分點。圖11中兩個OverFeat結果之間的改進是由於更長的訓練時間和上下文的使用,即每個尺度也使用較低解析度的尺度作為輸入。
6,討論
我們提出了一種多尺度的滑動視窗方法,可用於分類,定位和檢測。我們將其應用於 ILSVRC 2013資料集,目前它在分類這種排名第四,在定位排名第一,在檢測中排名第一。本文的第二個重要貢獻是解釋瞭如何將 ConvNets有效的用於檢測和定位任務。這些問題在【15】中從未得到解決,因此我們是第一個解釋如何在 ImageNet 2012 的背景下完成此工作,我們提出的方案設計對用於分類的網路進行的實質性修改,但清楚地表明 ConvNets 能夠實現這些更具挑戰性的問題任務。我們的定位方法在2013年 ILSVRC 競賽中獲勝,並且顯著優於 2012和2013年的所有方法。檢測模型在比賽中表現優異,在賽後成績排名第一。我們提出一個整合的管道,可以執行不同的任務,同時共享一個共同的特徵提取庫,完全可以從畫素中學習。
我們的方法仍可能在以下幾個方面得到改進。(i)對於定位任務而言,我們目前還沒有支援整個網路進行反向傳播訓練;這樣做可能會提高效能;(ii)我們使用的是 l2 損失,而不是直接優化衡量效能的IoU標註。由於IoU仍然是可區分的,如果有一些重疊的話,因此應該將損失轉換位 IoU可能會提升效能。(iii)邊界框的替代引數設定可能有助於解相關輸出,這將有助於網路訓練。
可以參考:https://yufeigan.github.io/2014/11/23/OverFeat-Integrated-Recognition-Localization-and-Detection-using-Convolutional-Networks/
https://blog.csdn.net/hjimce/article/details/50187881