1. 程式人生 > >卷積神經網路之OverFeat(2014)

卷積神經網路之OverFeat(2014)

文章目錄

OverFeat

文件存放更新地址:https://github.com/lartpang/ML_markdown

文章書寫匆忙,有些使用了網上其他朋友的文字以及圖片,但是沒有及時複製對應的連結,在此深表歉意,以及深深的感謝。
如有朋友看到了對應的出處,或者作者發現,可以留言,小弟馬上修改,新增引用。

前言

卷積網路的主要優勢是提供end-to-end解決方案;劣勢就是對於標籤資料集很貪婪。所以在大的資料集上面取得了很大的突破,但是在小的資料集上面突破不是很大。

ImageNet資料集上的分類圖片,物體大致分佈在圖片中心,但是感興趣的物體常常在尺寸和位置(以滑窗的方式)上有變化.

解決這個問題的第一個想法想法就是在不同位置和不同縮放比例上應用卷積網路。但是滑窗的可視視窗可能只包涵物體的一個部分,而不是整個物體;對於分類任務是可以接受的,但是對於定位和檢測有些不適合。

第二個想法就是訓練一個卷積網路不僅產生類別分佈,還產生一個物體位置的預測和bounding box的尺寸

.

第三個想法就是積累在每個位置和尺寸對應類別的置信度。

在多縮放尺度下以滑窗的方式利用卷積網路用了偵測和定位很早就有人提出了,一些學者直接訓練卷積網路進行預測物體的相對於滑窗的位置或者物體的姿勢。還有一些學者通過基於卷積網路的影象分割來定位物體。

概要

提出了一種利用卷積網路進行分類、定位和檢測的整合框架。我們展示瞭如何在 ConvNet 中有效地實現多尺度和滑動視窗方法。通過學習預測物件邊界, 我們還引入了一種新的深度學習方法來定位。因此, 為了提高檢測的可信度, 邊界框將被累積而不是被抑制。我們表明, 可以使用單個共享網路同時學習不同的任務。該整合框架是 ImageNet 大規模視覺識別挑戰 2013 (ILSVRC2013) 定位任務的贏家, 為檢測和分類任務獲得了非常有競爭力的結果。在後競爭的工作中, 我們為檢測任務建立了新的技術狀態。最後, 我們釋出了一個特徵提取器從我們最好的模型稱為 OverFeat。

ConvNets 對許多識別主導物件的類別任務的主要優點是, 整個系統都經過訓練, 從原始畫素到最終類別, 從而減輕了手動設計合適的特徵抽取器的要求。主要的缺點是他們對標記訓練樣本的貪婪胃口。

  • 本文的重點是對卷積網路進行同時分類、定位和檢測影象中的物件的訓練, 可以提高所有任務的分類精度和檢測和定位精度。提出了一種用一個卷積網路整合物體檢測、識別和定位的新方法。

  • 本文還介紹了一種通過累積預測邊界盒來進行定位和檢測的新方法。我們建議, 通過結合許多定位預測, 可以在沒有背景樣本的訓練的情況下進行檢測, 並且有可能避免耗時和複雜的引導訓練通過。沒有在後臺進行訓練, 也讓網路只專注於真實的等級, 以提高準確性。

雖然 ImageNet 分類資料集中的影象主要被選擇為包含一個以粗略為中心的物件來填充大部分影象, 但感興趣的物件有時在影象中的大小和位置上有很大的差異。

  • 解決此事的第一個想法是在影象中的多個位置應用一個 ConvNet, 在滑動視窗中, 並在多個尺度上。儘管如此, 許多檢視視窗可能包含物件的一個完全可識別的部分 (如狗的頭部), 但不是整個物件, 甚至不是物件的中心。這導致了分類效果不錯, 但缺乏定位和檢測的準確度。
  • 因此, 第二個想法是訓練系統, 不僅為每個視窗的類別生成分佈, 而且還可以對包含物件相對於視窗的邊界框的位置和大小產生預測。
  • 第三個想法是為每個類別在每個位置和大小積累證據。

許多作者建議在多個尺度上使用 ConvNets 的檢測和定位的一個滑動視窗. More recently, ConvNets have been shown to yield state of the art performance on text detection in natural images(最近, 卷積網路已經證明在自然影象上的文字檢測表現出了最先進的效能).

一些作者還建議訓練 ConvNets 直接預測要定位的物件的例項化引數, 例如相對於檢視視窗的位置或物件的姿態。

最簡單的方法是訓練ConvNet將其觀察視窗的中心畫素(或體素影象的體素)分類為區域之間的邊界與否[13]. 但是, 當區域必須進行分類時, 最好進行語義分割。其主要思想是訓練 ConvNet 將檢視視窗的中心畫素與它所屬物件的類別進行分類, 並使用視窗作為決策的上下文。這種方法的優點是, 邊界輪廓不必是矩形, 並且區域不需要有良好的界限物件。缺點是它需要密集的畫素級標籤進行訓練。這種分割預處理或物件提議步驟最近在傳統計算機視覺中得到普及,以減少用於檢測的位置,比例和縱橫比的搜尋空間[19,2,6,29]。因此,可以在搜尋空間中的最佳位置處應用昂貴的分類方法,從而提高識別精度。此外, [29, 1] 建議這些方法通過大幅度減少不太可能的物件區域來提高準確性, 從而減少潛在的誤報(potential false positives)。但是, 我們的密集滑動視窗方法能夠勝過 ILSVRC13 檢測資料集上的物件建議方法。

AlexNet雖然展示了令人印象深刻的定位表現,但是沒有已發表的作品描述他們的方法。Our paper is thus the first to provide a clear explanation how ConvNets can be used for localization and detection for ImageNet data.

本文研究了三種計算機視覺任務的增加難度順序: (一) 分類(二) 定位 (三) 檢測。

每個任務都是下一個任務的子任務。雖然使用單個框架和共享功能學習庫(a single framework and a shared feature le arning base)解決了所有任務,但我們將在以下部分中單獨描述它們.

  1. 分類任務的指標: 在五個猜測裡考察是否存在正確的結果(Top5錯誤率)

  2. 定位任務的指標: Top5錯誤率 + 每個猜測要返回對應的邊界框(為了考察正確程度, 預測框必須至少匹配真實框的50% using the PASCAL criterion of union over intersection(IoU Intersection over Union))(IoU只是一個評估指標。可以使用IoU評估任何提供預測邊界框作為輸出的演算法)

    https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

    Figure 2: Computing the Intersection of Union is as simple as dividing the area of overlap between the bounding boxes by the area of union (thank you to the excellent Pittsburg HW4 assignment for the inspiration for this figure).

    def bb_intersection_over_union(boxA, boxB):
    	# determine the (x, y)-coordinates of the intersection rectangle
    	xA = max(boxA[0], boxB[0])
    	yA = max(boxA[1], boxB[1])
    	xB = min(boxA[2], boxB[2])
    	yB = min(boxA[3], boxB[3])
     
    	# compute the area of intersection rectangle
    	interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)
     
    	# compute the area of both the prediction and ground-truth
    	# rectangles
    	boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
    	boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)
     
    	# compute the intersection over union by taking the intersection
    	# area and dividing it by the sum of prediction + ground-truth
    	# areas - the interesection area
    	iou = interArea / float(boxAArea + boxBArea - interArea)
     
    	# return the intersection over union value
    	return iou
    
  3. 檢測任務的指標: (每個影象中都可以有任意數量的物件, 也可以沒有)使用平均精度(mAP)來度量.

模型

OverFeat

釋出了一個特徵抽取器取名為”OverFeat“,以便為計算機視覺研究提供強有力的特徵。提供了2個模型,一個快速版本一個精確版本。每一個結構都在表1和表3中描述。我們在表4中關於引數和連線方面比較了他們的尺寸。我們準確模型比快速模型更準確(14.18%的分類錯誤率對比於16.39%的錯誤率,在表2中可以看到),然而它需要幾乎兩倍多的連線。使用7個精確模型的連合可以達到13.6%的分類誤差,如圖4所示。

1

快速模型結構

特徵對映的空間大小取決於輸出影象大小,在我們的推理步驟時會有改變。在這裡我們展示了訓練的空間大小。第5層是頂層卷積層。後續層次是全連線層,並在測試的時候以滑動視窗的方式應用。全連線層也可以看成空間中的1*1的卷積。)

Input(231,231,3)→96F(11,11,3,s=4)→max-p(2,2,s=2)→256F(5,5,96,1) →max-p(2,2,2) →512F(3,3,512,1) →1024F(3,3,1024,1) →1024F(3,3,1024) →max-p(2,2,2) →3072fc→4096fc→1000softmax

  1. 不使用LRN;

  2. 不使用over-pooling使用普通pooling;

  3. 第3,4,5卷基層特徵數變大,從Alex-net的384→384→256;變為512→1024→1024.

  4. fc-6層神經元個數減少,從4096變為3072

  5. 卷積的方式從valid卷積變為維度不變的卷積方式,所以輸入變為231*231

1

這裡第一層的輸入為231,經過11的卷積,4的補償,2的補償的2的遲化,結果不是24.

((231-11)/4+1)/2=28

但是這裡為什麼是24?

精確模型改進

Input(231,231,3)→96F(7,7,3,s=2)→max-p(3,3,3)→256F(7,7,96,1)→max-p(2,2,2) →512F(3,3,512,1) →512F(3,3,512,1) →1024F(3,3,1024,1) →1024F(3,3,1024,1) →max-p(3,3,3) →4096fc→4096fc→1000softmax

  1. 不使用LRN;

  2. 不使用over-pooling使用普通pooling,更大的pooling間隔S=2或3

  3. 第一個卷基層的間隔從4變為2(accurate 模型),卷積大小從11*11變為7*7;第二個卷基層filter從5*5升為7*7

  4. 增加了一個第三層,是的卷積層變為6層;從Alex-net的384→384→256;變為512→512→1024→1024.

1

它與快速模型的不同之處主要在第一個卷積層的步長,階段的數量,和特徵對映層的數量上。

分類

  • 我們的模型在訓練期間使用與 Krizhevsky等人相同的固定輸入大小的方法,但是轉向多尺度分類,如下一節中所述。每個影象都被下采樣,使得最小的維度是256個畫素。
  • 然後,我們提取了5個大小為 221 221 221*221 個畫素的隨機剪裁(及其水平翻轉),並將這些影象以大小為128的小批量呈現給網路。
  • 這些網路中的權重用 μ σ = 0 1 1 0 2 (μ,σ)=(0,1∗10^{−2})
  • 它們用隨機梯度下降演算法更新,momentum係數是0.6, 並且l2權重衰減係數為 1 1 0 5 1∗10^{−5}
  • 學習率最初設為 5 1 0 2 5∗10^{−2} ,並且在(30,50,60,70,80)次訓練次數之後依次減小0.5倍。
  • 在分類器中的全連線層(第6和第7)上dropout設為0.5。

多尺度卷積(FCN)

訓練完網路之後,在測試階段,我們不再是用一張221*221大小的圖片了作為網路的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如下表格所示.

1541145806245

測試階段網路輸入圖片大小分別是245*245,281*317……461*569。

  1. 全卷積是什麼: 上圖中後三層的全連線層實際上使用的是全卷積,全連線層是可以轉為全卷積的,舉例來說,全連線層的輸入shape為5*5*1024的feature map,輸出為4096的話,引數個數就是5*5*1024*4096,這個時候轉為全卷積層,那麼卷積的引數就是,卷積核大小為5*5*1024,卷積核個數為4096,二者的引數量是一樣的。
  2. 全卷積導致了什麼: 如下圖所示,對14*14的影象進行卷積操作,在得到5*5的feature map後的這一步,如果使用全連線,就會把它壓平再全連線,這樣就破壞了feature map的影象位置關係,直接轉為一列特徵。但是如果使用的是全卷積,最後會得到1*1*C的feature map,C是channel數,也是類別的大小。這個時候如果來了一張16*16的影象,經過全卷積後就會得到2*2*C的feature map,這個時候可以對這個2*2的4個值做一個取最大或平均,就會變成一個值了,以此類推,來了更大的影象,最後得到的feature map就是3*3*C,4*4*C,5*5*C的大小,輸出的大小和輸入的大小相關,但總是可以對這個輸出map池化(取最大)來得到這個類別的值
  3. 全卷積的好處: 第一個圖是訓練時用14*14的影象,最後產生一個輸出,下面的圖是測試時,可以用16*16的影象產生了“2*2”個輸出,以此類推我們可以在測試時使用更大的影象(使用多scale),產生“更多”的輸出進行(取最大)預測。這個做法相對於傳統的滑動視窗(用14*14大小,步長為2的滑動視窗在16*16的影象上執行4次卷積操作進行分類)的優點是,只需要執行一次,保證了效率同時可以建模用各種不同尺度影象,不侷限於固定的裁剪翻轉方式(相對於AlexNet測試階段的做法),而且消除了很多冗餘計算,提高了模型的魯棒性又保證了效率。

1

注意到我們的結構的最後一層是全連線線性層。在測試的時候,這些層次被1*1空間範圍內的卷積核操作有效地替換。然後,整個ConvNet僅僅是卷積,最大池化層和閾值操作層的序列。

多尺度分類(offset池化)

image

傳統的檢測/定位演算法是固定輸入影象不變,採用不同大小的滑窗來支援不同尺度的物體。對於CNN來說,滑窗的大小就是訓練時輸入影象的大小,是不可以改變的。那麼,CNN支援多尺度的辦法就是,固定滑窗的大小,改變輸入影象的大小

網路結構在訓練完後,引數的個數、結構是固定的,而這一步的演算法並沒有改變網路的結構,也更不肯可能去改變網路引數。

我們知道AlexNet預測的方法是輸入一張圖片256*256,然後進行multi-view裁剪,也就是從圖片的四個角進行裁剪,還有就是一圖片的中心進行裁剪,這樣可以裁剪到5張224*224的圖片。然後把原圖片水平翻轉一下,再用同樣的方式進行裁剪,又可以裁剪到5張圖片。把這10張圖片作為輸入,分別進行預測分類,在後在softmax的最後一層,求取個各類的總概率,求取平均值。

然而Alexnet這種預測方法存在兩個問題:

  • 首先這樣的裁剪方式,把圖片的很多區域都給忽略了,說不定你這樣的裁剪,剛好把圖片物體的一部分給裁剪掉了, 比如ground truth在中間偏右,但是此方法並沒有檢測這個框.
  • 另外一方面,只關注了一個scale導致結果的置信度不高。裁剪視窗重疊存在很多冗餘的計算,像上面我們要分別把10張圖片送入網路,可見測試階段的計算量還是蠻大的。

對其的改進是使用了multi-scale, 通過在每個位置和多個尺寸上密集地執行網路來探索整個影象。將ConvNet卷積在任意大小的影象上的結果是C維向量的空間對映。然而,在上面描述的網路中的完整的下采樣率是2∗3∗2∗3,或者說是36。因此當被密集應用時,該結構僅能夠在沿著每個軸的輸入維度中每36個畫素產生一個分類向量。這種輸出的粗分佈減少了效能,因為網路視窗不能與影象中的目標很好的對準。網路視窗和物件對齊的更好,網路響應的置信度越高。為了解決這個問題,我們採取了類似於Giusti等人的方法[9],並且在每個偏移處應用最後的下采樣操作。這消除了該層的解析度損失,產生了x12而不x36的總的下采樣率。

取樣的間隔(也就是滑窗的 stride)等於執行所有卷積和pooling操作後圖像縮小的倍數,也就是所有 卷積層 和 pooling層 的 stride 的乘積

可以看上面的精確模型, 所有的stride(padding+conv)也就是2個2,以及2個3

在這裡我們以輸入一張圖片為例(6張圖片的計算方法都相同),講解layer 5後面的整體過程,具體流程示意圖如下:

1

用於分類的輸出對映計算的1維示例,使用來自表中的scale 2的y維作為示例。

這邊需要注意的是我們需要把f7這一層,看成是卷積核大小為5*5的卷積層,總之就是需要把網路看成我們前面所學的FCN模型,沒有了全連線層的概念,因為在測試階段我們可不是僅僅輸入221*221這樣大小的圖片,我們在測試階段要輸入各種大小的圖片。

(a)對於一個給定尺寸的影象,我們從未經池化的第5層特徵對映開始, 20個畫素的未經池化的第5層特徵圖。

(b)使用size=3, stride=3(不重疊)的最大池化來處理特徵圖. 使用遲化操作起始的偏移為∆ ={0,1,2}個畫素(各自表示為紅色,綠色,藍色). 重複3∗3次。(X方向3次,Y方向也是3次,組合起來就是9次)。

(c)對於不同的Δ,得到池化後的對映, 一種情況有6個輸出值。一共有9種結果.

(d)5畫素的分類器(6,7,8層)有一個固定的5*5的輸入大小,並且在池化後的對映中的每一個位置都會產生一個C維(最終的類別維度)的輸出向量。分類器以滑動視窗的方式應用到池化後的對映圖上,產生了C維的輸出對映的結合(對於一個給定的(Δx,Δy), 產生2個畫素的C個對映。

(e)對於不同的(Δx,Δy)的結合的輸出對映圖被重新形成一個單獨的3維的輸出對映圖(兩個空間維*C個類別)。

1

從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的輸出。

當網路前向傳導到layer 5的時候,就使出了前面我們所講的FCN、offset pooling這兩招相結合的招式。

然後我們就只需要在後面把它們拉成一維向量擺放就ok了,這樣在一個尺度上,我們可以得到一個C*N個預測值矩陣,每一列就表示圖片屬於某一類別(全卷積層輸出的通道維度就是所謂的類別維度)的概率值,然後我們求取每一列的最大值,作為本尺度的每個類別的概率值。

最後我們一共用了6種不同尺度(文獻好像用了12張,另外6張是水平翻轉的圖片),做了預測,然後把這六種尺度結果再做一個平均,作為最後的結果。

OK,至此overfeat圖片分類的任務就結束了,從上面過程,我們可以看到整個網路分成兩部分:layer 1~5這五層我們把它稱之為特徵提取層;layer 6~output我們把它們稱之為分類層。

img

其中coarse stride表示 D e l t a = 0 Delta=0 ,fine stride表示 D e l t a = 0 , 1 , 2 Delta=0,1,2

  1. 使用fine stride可以提升模型表現,但是提升不大,說明實際上offset-pooling在這裡的作用不大。
  2. 使用多scale,增加scale可以提升模型表現。
  3. 最後多模型融合,又提升了表現

定位

從訓練的分類網路開始,我們用迴歸網路替換分類層並且訓練它在每一個空間位置和尺寸上預測物件邊界框。然後我們將回歸預測結合在一起,連同每個位置的分類結果.

為了生成物件邊界框的預測值,我們在所有的位置和尺寸上執行分類器和迴歸網路。因為它們共享相同的特徵提取層,因此在計算了分類網路之後,僅需要計算最後的迴歸層

在每個位置處的類c的最終softmax層的輸出提供了類c的物件存在(但不一定完全包含)在對應視場中的置信得分。因此,我們可以為每個邊界框分配置信度。

迴歸層最後是1000個版本(類),下圖中只是表示了一個類。

1

以尺度2對於第5層的特徵應用迴歸網路。

  1. 對於(3*3)Δx,Δy偏移中的每一個,在這個尺寸下,迴歸器的輸入是6∗7個畫素,空間上具有256個通道。

  2. 迴歸網路中的第一層的每個單元連線到層5對映中的5∗5的領域上,以及所有的256個通道。移動5∗5的領域會產生2∗3的空間範圍的對映,對於層中4096通道中的每一個,以及對於(3*3)Δx,Δy偏移中的每一個。

    也就是針對九組特徵圖的處理

  3. 第二個迴歸層有1024個單元並且是全連線的(即,紫色元素僅僅連線到(b)中的紫色元素,跨所有的4096個通道). (這裡並不改變W*H的維度大小)

  4. 迴歸網路的輸出在2∗3的對映上的每一個位置上都是一個4個數的向量(指定邊界框的邊界),以及(3∗3)Δx,Δy偏移中的每一個。

    ©的輸出是大小為(3x3)x(2x3x4)的張量, 針對一張圖

我們固定住分類網路中的特徵抽取值(1-5),並且使用每個例子的預測和真實邊界框之間的l2損失訓練迴歸網路。最後的迴歸層是類特定的,有1000個不同的版本,每個類一個

我們使用與第3節中描述的相同的配置來訓練這個網路。我們比較每個空間位置處的迴歸網路的預測值與真實值,並且轉移到卷積內的迴歸器的平移偏移參考系中。

然而,我們不在與輸入視場小於50%重疊的邊界框上訓練迴歸器:因為物件大部分在這些位置之外,所以將更好的通過包含物件的迴歸視窗來處理。

以多尺度的方式訓練迴歸器對於跨尺度預測組合是重要的。在單個尺度上的訓練將在該尺度上表現良好,並且在其他尺度上仍表現合理。然而,多尺度訓練將使預測在尺度上正確匹配,並且以指數方式增加合併預測的置信度。反過來,這允許我們只用幾個尺度就可以表現的良好,而不是通常在檢測中的情況下的許多尺度。

在行人檢測中,從一個刻度到另一個刻度的典型比率是大約1.05到1.1,但是在這裡我們使用大約1.4的大比率(由於尺度被調整以適合我們的網路的步幅,因此每個刻度的該比率是不同的),這使得我們能夠更快地執行我們的系統。

組合預測

我們通過應用於迴歸器邊界框的貪婪合併策略來組合各個預測(參見圖7).

1541151469513

迴歸網路產生的邊界框的例子,在被合併成最終的預測之前。

這裡顯示的示例是單一比例的。這主要取決於物件,預測在其他尺度上可能更優化。

在這裡,大多數最初組織為網格的邊界框會聚到一個位置並縮放。這表明網路在物體的位置的判斷上非常穩定,而不是隨機分佈。

左上角的影象顯示,如果存在多個物件,它也可以正確識別多個位置。

預測的邊界框的各種縱橫比表明網路能夠處理各種物件姿勢。

使用以下演算法:

  1. Assign to Cs the set of classes in the top k for each scale s 1...6 s ∈ 1 . . . 6 , found by taking the maximum detection class outputs across spatial locations for that scale. 在6個縮放比例上執行分類網路,在每個比例下基於top-k標準, 找到的可能類別, 這就是給每個圖片進行類別標定Cs

    為什麼選擇6個? 因為在測試階段,我們不再是用一張221*221大小的圖片了作為網路的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如下表格所示.

    1541145806245

  2. Assign to Bs the set of bounding boxes predicted by the regressor network for each class in Cs, across all spatial locations at scale s. 令Bs為Cs中這些類別的預測框, 在每個比例上執行預測boundingbox網路,產生每個類別對應的bounding box集合Bs

  3. Assign B ← Us Bs 然後合併所有scale的bounding box得到集合B

  4. Repeat merging until done. 融合bounding box。

    找B集合裡面兩個框的中心距離和相交面積之和最小的一對,如果和大於給定閾值t,則結束,否則從B中刪去兩個框(這時,中心距離和相交面積之和在閾值之上, 也就是距離較遠, 或者相交面積之和較大),合併這一對, 用他們的均值構成新的一個框,加入B

    1541158918790

    其中

    • m a t c h _ s c o r e ( b 1 , b 2 ) match\_score(b_1, b_2) 使用兩個邊界框的中心之間的距離和框的交叉區域之和來計算匹配分數,當它大於某個閾值時演算法停止;

      這裡應該是與距離成正比,與交集區域成反比才對?

      這樣的重複才會將不連續的, 置信度確實低的框剔除.

    • b o x _ m e r g e ( b 1 , b 2 ) box\_merge(b_1^*, b_2^*) 計算的是兩個box座標的平均值。

  5. 最後的預測是通過採用具有最大類分數的合併邊界框來給出。

具體融合過程見下圖:

  1. 不同的縮放比例上,預測結果不同,例如在原始影象上預測結果只有熊,在放大比例後(第三,第四個圖),預測分類中不僅有熊,還有鯨魚等其他物體

    img

  2. 通過offset和sliding window的方式可以有更多的類別預測

    img

  3. 在每個比例上預測bounding box,放大比例越大的圖片,預測的bounding box越多

    img

  4. 融合bouding box

img

在最終的分類中,鯨魚預測和其他的物體消失不僅使因為更低的置信度,還有就是他們的bounding box集合Bs不像熊一樣連續,具有一致性,從而沒有持續的置信度積累

通過這種方式正確的物體持續增加置信度,而錯誤的物體識別由於缺少bounding box的一致性和置信度,最終消失

這種方法對於錯誤的物體具有魯棒性(但是圖片中確實有一些魚,雖然不是鯨魚;但是系統並沒有識別出來;也可能是類別中有鯨魚,但是沒有此種魚的類別)。

在這個例子中,一些烏龜和鯨魚邊框出現在中間的多尺度步驟中,但在最終檢測影象中消失。這些邊界框不僅具有較低的分類置信度(分別至多為0.11和0.12),它們的收集並不像熊邊框那樣一致,以獲得顯著的置信度。熊的邊框具有較強的置信度(平均每個規模約為0.5)和高匹配分數。因此,合併後,許多熊繫結框被融合成一個具有高置信度的邊界,而錯誤的負樣本在檢測閾值以下,因為它們缺乏邊界框的一致性和置信度。這個分析表明,我們的方法自然地比純傳統的非最大抑制方法更有利於增強分類模型的假陽性,通過獎勵邊界框的一致性。

假陽性: 被當真了

假陰性: 被誤解了

1541161334724

https://www.shuxuele.com/data/probability-false-negatives-positives.html

我們將網路應用到Imagenet 2012驗證集中,使用為競賽指定的定位標準。

img

令人驚訝的是,僅使用所有類別共享的單一網路反而要比每個類別的迴歸網路中為每類使用不同的頂層(Per-Class Regressor(PCR))表現效果更好(44.1%對31.3%).

這可能是因為訓練集中用邊界框註釋的每個類的例子相對較少,而網路的頂層引數多了1000倍,導致訓練不足。可以通過僅在類似類別之間共享引數來改善該方法(例如,針對所有型別的狗訓練一個網路,針對車輛訓練一個網路等)。

檢測

檢測訓練類似於分類訓練,但是以空間方式。可以同時訓練影象的多個位置。由於模型是卷積的,所有權重都在所有位置之間共享。

與定位任務的主要區別是當沒有物件存在時,必須預測背景類。

傳統上,負樣本最初是隨機的訓練。然後將最有罪的負面錯誤新增到bootstrapping passes中的訓練集中。

Independent bootstrapping 通過渲染訓練的負樣本集和訓練時間之間的複雜和潛在風險不匹配。另外,需要調整自舉通行的大小,以確保訓練不會在一小組上過度使用。為了規避所有這些問題,我們通過選擇一些有趣的負樣本,例如隨機的或最令人討厭的,來進行負樣本訓練。這種方法在計算上更昂貴,但是使程式更簡單。並且由於特徵提取最初是用分類任務訓練的,所以檢測微調不是很長。

在圖11中,我們報告了ILSVRC 2013比賽的結果,我們的檢測系統排名第三,平均精度為19.4%(mAP)。之後,以24.3%的mAP建立了新的檢測狀態。

請注意,前3名方法與其他隊伍之間存在巨大差距(第4種方法產生11.5%的mAP)。此外,我們的方法與使用初始分段步驟將候選視窗從大約20萬到2000減少的前2個其他系統有很大不同。

這種技術加速了推理,並大大減少了潛在的假陽性數量。[29,1]表明,當使用密集滑動視窗時,檢測精度下降,而不是選擇性搜尋,從而丟棄不太可能的物件位置,從而減少誤報。結合我們的方法,我們可以觀察到類似的改進,如傳統密集方法和基於分割的方法之間所見。還應該指出的是,我們沒有對NEC和UvA的檢測驗證集進行微調。驗證和測試集分佈與培訓集中的差異顯著不足,單獨將測試結果提高約1個點。圖11中兩個OverFeat結果之間的改善是由於更長的訓練時間和上下文的使用,即每個刻度也使用較低的解析度刻度作為輸入

img

總結

https://blog.csdn.net/buwan86658/article/details/78054081#t15

(該論文內容細節與只直接的分類網路以往不同, 這個總結部分要仔細理解.)

  • 我們提出了一種可以用於分類,定位和檢測的多尺度滑動視窗方法。我們將其應用於ILSVRC 2013資料集,目前在分類中排名第四,定位第一,檢測第一。

  • 本文的第二個重要貢獻是解釋了ConvNets如何有效地用於檢測和定位任務。這些從未在[15]中得到解決,因此我們是第一個解釋如何在ImageNet 2012的背景下進行的。我們提出的方案涉及到對分類設計的網路的大量修改,但清楚地表明,ConvNets有能力應對這些更具挑戰性的任務。

    我們的定位方法贏得了2013年的ILSVRC比賽,並且明顯優於2012和2013年的所有方法。檢測模式在比賽中名列前茅,排名第一。

    我們提出了一個完整的方法,可以在共享一個共同的特徵提取基礎時執行不同的任務,直接從畫素學到。

我們的方法在一下幾個方面任需要繼續改善。

  1. 對於定位,我們目前並不支援整個網路; 這樣做可能會提高效能。
  2. 在測試效能的時候, 我們使用L2損失, 而不是直接優化IOU。交換損失應該是可能的,因為IOU仍然是可以區分的,只要有一些重疊。(Swapping the loss to this should be possible since IOU is still differentiable, provided there is some overlap.)
  3. 邊界框的替代引數化可能有助於將輸出關聯起來,這將有助於網路訓練。(Alternate parameterizations of the bounding box may help to decorrelate the outputs, which will aid network training)

  1. 本文使用一個CNN來整合三個任務,分類,定位和檢測(共享前層的特徵)。
  2. 第一次具體解釋了CNN是如何被用於定位和檢測的。
  3. 提出了一個多尺度的,滑動視窗的方法,能夠提升任務的表現。
  4. 在多尺度分類這一塊,在feature map上滑窗,相比於傳統的原始影象滑窗(用一個滑窗對整幅影象進行密集取樣,然後處理每一個取樣得到的影象,再組合結果),大大提高了效率

訓練時:

  • 前面5層的引數由 classification network 給定,只需要訓練後面的兩個全連線層。
  • 這個 regressor network 的輸出就是一個 bounding box ,也就是說,如果將一幅影象或者一個影象塊送到這個regressor network中,那麼,這個 regressor network 輸出一個相對於這個影象或者影象塊的區域,這個區域中包含感興趣的物體
  • 這個 regressor network 的最後一層是class specific的,也就是說,對於每一個class,都需要訓練單獨最後一層。
  • 這樣,假設類別數有1000,則這個 regressor network 輸出1000個 bounding box ,每一個bounding box 對應一類。

定位問題:

  • 測試時,在每一個尺度上同時執行 classification network 和 regressor network 。
  • 對於每一個尺度來說, classification network 給出了影象塊的類別的概率分佈,regressor network 進一步為每一類給出了一個 bounding box, 這樣,對於每一個 bounding box,就有一個置信度與之對應。
  • 最後,綜合這些資訊,給出定位結果。