物體檢測丨Faster R-CNN詳解


這篇文章把Faster R-CNN的原理和實現闡述得非常清楚,於是我在讀的時候順便把他翻譯成了中文,如果有錯誤的地方請大家指出。

原文:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

在這篇文章中,我將詳細描述最近引入的基於深度學習的對象檢測和分類方法,R-CNN(Regions with CNN features)是如何工作的。事實證明,R-CNN在檢測和分類自然圖像中的物體方面非常有效,其mAP遠高於之前的方法。R-CNN方法在Ross Girshick等人的以下系列論文中描述。

  1. R-CNN(https://arxiv.org/abs/1311.2524)
  2. Fast R-CNN(https://arxiv.org/abs/1504.08083)
  3. Faster R-CNN(https://arxiv.org/abs/1506.01497)

這篇文章描述了最后一篇論文中R-CNN方法的最終版本。我首先考慮介紹該方法從第一次引入到最終版本的演變,然而事實表明這是一項偉大的事業。我決定詳細描述最終版本。

幸運的是,在TensorFlow,PyTorch和其他機器學習庫中,網上有許多R-CNN算法的實現。我使用了以下實現:

https://github.com/ruotianluo/pytorch-faster-rcnn

本文中使用的大部分術語(例如,不同層的名稱)遵循代碼中使用的術語。
理解本文中提供的信息應該可以更容易地遵循PyTorch實現並進行自己的修改。

1. 文章組織

  • 第1部分 - 圖像預處理:在本節中,我們將描述應用於輸入圖像的預處理步驟。這些步驟包括減去平均像素值和縮放圖像。訓練和推理之間的預處理步驟必須相同。

  • 第2節 - 網絡組織:在本節中,我們將描述網絡的三個主要組成部分 —

    “head”network,region proposal network(RPN)和分類網絡。

  • 第3節 - 實現細節(訓練):這是該文章最長的部分,詳細描述了訓練R-CNN網絡所涉及的步驟。

  • 第4節 - 實現細節(推理):在本節中,我們將描述在推理過程涉及的步驟,使用訓練好的R-CNN網絡來識別有希望的區域並對這些區域中的對象進行分類。

  • 附錄:這里我們將介紹R-CNN運行過程中一些常用算法的細節,如非極大值抑制和Resnet50架構的細節。

2. 圖像預處理

在將圖像送入網絡之前,以下預處理步驟需要應用於圖像。對於訓練和測試,這些步驟必須相同。平均向量(\(3\times 1\),每個數值對應於每個顏色通道)不是當前圖像中像素值的平均值,而是對所有訓練和測試圖像都相同的配置值。

\(targetSize\)\(maxSize\)的默認值分別是600和1000。

3. 網絡組織

RCNN用神經網絡來解決兩個主要的問題:

  • 在輸入圖像中識別可能包含前景對象的區域(Region of Interest—RoI)。
  • 計算每個RoI的對象類概率分布—如計算RoI包含特定類對象的概率,然后用戶可以選擇概率最高的對象類作為分類結果。

RCNN包含三種主要網絡:

  1. Head
  2. Region Proposal Network(RPN)
  3. Classification Network

R-CNN使用預訓練網絡如ResNet50的前幾層來識別輸入圖像的特征。在一個數據集上使用針對不同問題的網絡是可能的,因為神經網絡顯示可以“遷移學習”(https://arxiv.org/abs/1411.1792)。

網絡的前幾層學習檢測一般特征,如邊緣和顏色斑點,這些特征在許多不同的問題上都是很好的識別特征。后一層學習到的特征是更高層次、更具體的問題特征。這些層既可以被移除,也可以在反向傳播期間微調這些層的權重。從預訓練網絡初始化的前幾層構成“head”網絡。然后,由head網絡生成的feature map通過Region Proposal Network(RPN),該網絡使用一系列卷積和全連接層來生成可能包含前景對象的ROI(上述問題1)。然后使用這些有可能的ROI從head網絡產生的feature map中裁剪出相應的區域。這稱為“Crop Pooling”。然后,通過crop Pooling產生的區域通過分類網絡,該分類網絡學習對每個ROI中包含的對象分類。

另外,你可能會注意到ResNet的權重以奇怪的方式初始化:

n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
m.weight.data.normal_(0, math.sqrt(2. / n))

如果您有興趣了解此方法的工作原理,請閱讀我關於初始化卷積和完全連接層的權重的文章。

http://www.telesens.co/2018/04/09/initializing-weights-for-the-convolutional-and-fully-connected-layers/

3.1. 網絡架構

下圖顯示了上述三種網絡類型的各個組件。我們展示了每個網絡層的輸入和輸出的維度,這有助於理解網絡的每個層如何轉換數據。並表示輸入圖像的寬度和高度(在預處理之后)。

4. 實現細節:Training

在本節中,我們將詳細描述訓練R-CNN所涉及的步驟。一旦了解了訓練的工作原理,理解推理就會輕松得多,因為它只是簡單地使用了訓練中涉及的一部分步驟。訓練的目標是調整RPN和分類網絡中的權重並微調head網絡的權重(這些權重從預訓練的網絡如ResNet初始化)。回想一下,RPN網絡的任務是產生有前景的ROI而分類網絡的任務是為每個ROI分配對象類分數。因此,為了訓練這些網絡,我們需要相應的ground truth,圖像中對象周圍bounding boxes的坐標和這些對象的類。這些ground truth來自開源的圖像數據庫,每個圖像附帶一個注釋文件。此注釋文件包含bounding box的坐標和圖像中每個對象的對象類標簽(對象類來自預定義對象類的列表)。這些圖像數據庫已被用於支持各種對象分類和檢測挑戰。兩個常用的數據庫是:

  • PASCAL VOC:VOC 2007數據庫包含9963張訓練/驗證/測試圖像,包含20個對象類別的24,640個注釋。
    • :人
    • 動物:鳥,貓,牛,狗,馬,羊
    • 交通工具:飛機,自行車,船,巴士,汽車,摩托車,火車
    • 室內:瓶,椅子,餐桌,盆栽,沙發,電視/顯示器

  • COCO(Common Objects in Context):COCO數據集要大得多。它包含> 200K標記圖像,包含90個對象類別。

我使用較小的PASCAL VOC 2007數據集進行訓練。R-CNN能夠在同一步驟中訓練region proposal網絡和分類網絡。

讓我們花一點時間來回顧一下本文其余部分廣泛使用的“bounding box 回歸系數”和“bounding box 重疊”的概念。

  • bounding box 回歸系數(也稱為“回歸系數”和“回歸目標”):R-CNN的目標之一是生產與對象邊界緊密匹配的良好bounding boxes。R-CNN通過采用給定的bounding boxes(由左上角的坐標,寬度和高度定義)並通過應用一組“回歸系數”來調整其左上角,寬度和高度來生成這些bounding boxes。這些系數計算如下(Appendix C of (https://arxiv.org/pdf/1311.2524.pdf))。讓目標和原始bounding box的左上角的x,y坐標分別表示為\(T_x,T_y,O_x,O_y\)並且目標和原始bounding box寬度/高度表示為\(T_w,T_h,O_w,O_h\)然后,回歸目標(將原始bounding box轉換為target box的函數系數)給出如下:

    • \(t_x = \frac{T_x-O_x}{O_w},t_y=\frac{T_y-O_y}{O_h},t_w=log(\frac{T_w}{O_w}),t_h=log(\frac{T_h}{O_h})\)

      該函數很容易轉換,即給定回歸系數和左上角的坐標以及原始bounding box的寬度和高度,可以容易地計算目標框的左上角和寬度和高度。注意,回歸系數對無剪切的仿射變換是不變的。這是一個重要的點,因為在計算分類損失時,目標回歸系數是按原始縱橫比計算的,而分類網絡輸出的回歸系數則是在ROI pooling步驟之后的正方形的feature map上計算出來的。當我們在下面討論分類損失時,這將變得更清楚。

  • 交互比(IoU)的重疊:我們需要測量給定bounding box與另一個bounding box的接近程度,該bounding boxes與所使用的單位(像素等)無關,以測量bounding boxes的尺寸。該度量應該是直觀的(兩個重合的bounding boxes overlap應該為1,並且兩個不重疊的boxes overlap應該為0)並且快速且易於計算。常用的重疊度量是“交互比(IoU)重疊”,計算如下所示。

通過這些預備知識,現在讓我們深入了解訓練R-CNN的實現細節。在代碼實現中,R-CNN執行分為幾個層,如下所示。一個層封裝了一系列邏輯步驟,這些步驟包括通過其中一個神經網絡運行數據和其他步驟例如比較bounding boxes之間的重疊程度,執行非極大值抑制等。

  • Anchor Generation Layer:該層首先生成9種不同比例和縱橫比的Anchor,然后通過跨越輸入圖像均勻間隔的網格點平移它們來復制這些Anchor,從而生成固定數量的“Anchor”(bouding boxes)。
  • Proposal Layer:根據bounding boxes回歸系數轉換anchor以生成轉換后的anchors。然后利用anchor作為前景的概率應用非極大值抑制(參見附錄)來修剪anchor的數量。
  • Anchor Target Layer:anchor target layer的目標是生成一組“好”的anchors和相應的前景/背景標簽和目標回歸系數來訓練Region Proposal Network。該層的輸出僅用於訓練RPN網絡,並且不被分類層使用。給定一組anchors(由anchor generation layer生成,anchor target layer識別有希望的前景和背景anchors。有希望的前景anchors是值與某些ground truth box重疊程度超過閾值。背景框是與任何重疊的ground truth box低於閾值。anchor target layer還輸出一組bounding boxes回歸量,即每個anchor目標離最近的bounding box有多遠的度量。這些回歸量只對前景框有意義,因為背景框沒有“最近的bounding box”的概念。
  • RPN Loss:RPN損失函數是在優化過程中最小化以訓練RPN網絡的指標。損失函數是以下組合:
    • RPN生成的bounding boxes被正確分類為前景/背景的比例。
    • 預測和目標回歸系數之間的距離度量。
  • Proposal Target Layer:proposal target layer的目標是修剪proposal layer生成的anchor列表,並生成特定類的bounding box回歸目標,可用於訓練分類層以生成良好的類別標簽和回歸目標
  • ROI Pooling Layer:實現空間轉換的網絡,在給定proposal target layer生成的region proposals的bounding boxes坐標的情況下對輸入feature map進行采樣。這些坐標通常不在整數邊界上,因此需要基於插值的采樣。
  • Classification Layer:分類層采用ROI Pooling Layer生成的輸出feature maps,並將它們傳遞給一系列卷積層。輸出通過兩個全連接層。第一層為每個region proposal生成類概率分布,第二層生成一組特定類的bounding boxes回歸量。
  • Classification Loss:類似於RPN損,分類損失是在優化過程中最小化以訓練分類網絡的指標。在反向傳播期間,誤差梯度也流向RPN網絡,因此訓練分類層也會修改RPN網絡的權重。我們稍后會談到這一點。分類損失是以下組合:
    • RPN生成的bounding boxes被正確分類的比例(作為正確的對象類)。
    • 預測和目標回歸系數之間的距離度量。

我們現在將詳細介紹這些層中的每一層。

4.1. Anchor Generation Layer

anchor generation layer生成一組大小和縱橫比不同的bounding boxes(稱為“anchor boxes”),分布在輸入圖像上。這些bounding boxes對於所有圖像是相同的,即它們不知道圖像的內容。這些bounding boxes中的一些將包圍前景對象,而大多數不會。RPN網絡的目標是學習識別哪些框是好框 —即可能包含前景對象,並產生目標回歸系數,當應用於anchor box時,將anchor box轉換為更好的bounding boxes (更緊密地擬合所包含的前景對象)。

下圖演示了如何生成這些anchor boxes。

4.2. Region Proposal Layer

物體檢測方法需要一個“region proposal system”作為輸入,它產生一組稀疏(例如seletive search(http://link.springer.com/article/10.1007/s11263-013-0620-5))或密集(例如在deformable part models(https://doi.org/10.1109/TPAMI.2009.167“)中使用的特征)一組特征。R-CNN系統的第一個版本使用seletive search方法來生成region proposal。在當前版本(稱為“Faster R-CNN”)中,使用基於“sliding window”的技術(在前一部分中描述)來生成一組密集候選區域,然后使用神經網絡驅動的proposal network網絡。根據region包含前景對象的概率對region proposals進行排名。region proposal layer有兩個目標:

  • 從anchors列表中識別背景和前景anchors。
  • 通過應用一組“回歸系數”來修改anchors的位置,寬度和高度,以提高anchors的質量(例如,使它們更好地適應對象的邊界。

region proposal layer由Region Proposal Network和三個層組成 —Poposal Layer,Anchor Target Layer和Proposal Target Layer。以下各節將詳細介紹這三層。

4.2.1. Region Proposal Network

region proposal layer通過卷積層(代碼中稱為rpn_net)處理head網絡生成的feature map,然后接着RELU。rpn_net的輸出通過兩個(1,1)卷積層運行,以產生背景/前景類分數和概率以及相應的bounding boxes回歸系數。head網絡的步長與生成anchor時使用的步長相匹配,因此anchor的數量與region proposal network產生的信息一一對應(anchor boxes數量 = 類別得分數 = bounding boxes回歸系數的數量 = \(\frac{w}{16}\times\frac{h}{16}\times9\)

4.3. Proposal Layer

proposal layer采用anchor generation layer生成的anchor boxes,並通過基於前景分數應用非極大值抑制來修剪框數(有關詳細信息,請參閱附錄)。它還通過將RPN生成的回歸系數應用於相應的anchor boxes來生成變換的bounding boxes。

4.4. Anchor Target Layer

anchor target layer的目標是選擇可用於訓練RPN網絡的有希望的anchor:

  1. 區分前景區域和背景區域,
  2. 並為前景框生成良好的bounding boxes回歸系數。

首先看一下如何計算RPN損失是很有用的。這將揭示計算RPN損失所需的信息,這使得易於遵循Anchor Target Layer的操作。

4.4.1. 計算RPN Loss

請記住,RPN層的目標是生成良好的bounding boxes。要從一組anchor boxes中執行此操作,RPN層必須學會將anchor box分類為背景或前景,並計算回歸系數以修改前景anchor box的位置,寬度和高度,使其成為“更好”的前景框(更貼近前景對象)。RPN Loss的制定方式是鼓勵網絡學習這種行為。

RPN損失是分類損失和bounding box回歸損失的總和。分類損失使用交叉熵損失懲罰錯誤分類的框,回歸損失使用真實回歸系數之間的距離函數(使用前景anchor最近匹配的ground truth計算)和網絡預測的回歸系數 (參見RPN網絡架構圖中的rpn_bbx_pred_net)。

\[RPNLoss=Classification\ Loss+Bounding\ Box\ Regression\ Loss \]

分類損失:

cross_entropy(predicted_class,actual_class)

bounding boxes回歸損失:

\(L_ {loc} = \ sum_{u \in all}foreground \ anchors \ l_u\)

對所有前景anchor的回歸損失求和。為背景anchor執行此操作沒有意義,因為背景anchor沒有關聯的ground truth。

\(l_u=\sum_{i\in x,y,w,h}smooth_{L1}(u_i(predicted)-u_i(target))\)

這顯示了如何計算給定前景anchor的回歸損失。我們采用預測(通過RPN)和目標(使用離anchor box最接近的ground truth box)的回歸系數之間的差異。有四個組件—對應於左上角的坐標和bounding boxes的寬度/高度。smooth L1函數定義如下:

\(smooth_{L1}=\begin{cases} \frac{\sigma^2x^2}{2}&||x||\lt\frac{1}{\sigma^2}\\||x||-\frac{0.5}{\sigma^2}&otherwise\end{cases}\)

這里\(\sigma\)是任意選擇的(在我的代碼中設置為3)。請注意,在python實現中,前景anchor的mask數組(稱為bbox_inside_weights)用於計算作為向量操作的損失並避免for-if循環。

因此,要計算損失,我們需要計算以下數值:

  1. 類標簽(背景或前景)和anchor boxes的分數
  2. 前景anchor boxes的目標回歸系數

我們現在將遵循anchor target layer的實現,以查看這些數值的計算方式。我們首先選擇位於圖像范圍內的anchor boxes。然后,首先計算所有anchor boxes(在圖像內)與所有ground truth的IoU重疊來選擇好的前景框。使用此重疊信息,兩種類型的框被標記為前景:

  1. 類型A:對於每個ground truth box,所有與ground truth box具有最大IoU重疊的前景框。
  2. 類型B:與某些ground truth box的最大重疊超過閾值的Anchor boxes。

這些框顯示在下圖中:

注意,僅選擇與某些ground truth重疊超過閾值的anchor box作為前景框。這樣做是為了避免向RPN提供“不可能的學習任務”即學習離最佳匹配ground truth box太遠的回歸系數。類似地,重疊小於負閾值的框被標記為背景框。並非所有不是前景框的框都標記為背景。既不是前景也不是背景的框被標記為“不關心”。這些框不包括在RPN損失的計算中。

有兩個額外的閾值與我們想要實現的背景和前景框的總數相關,以及應該是前景的這個數字的分數。如果通過測試的前景框數超過閾值,我們會將多余的前景框隨機標記為“不關心”。類似的邏輯應用於背景框。

接下來,我們計算前景框和相應ground truth之間的bounding box回歸系數,最大重疊。這很容易,只需要按照公式計算回歸系數。

這結束了我們對anchor target layer的討論。回顧一下,讓我們列出該層的參數和輸入/輸出:

參數:

  • TRAIN.RPN_POSITIVE_OVERLAP:用於選擇anchor box是否為良好前景框的閾值(默認值:0.7)
  • TRAIN.RPN_NEGATIVE_OVERLAP:如果anchor與groud truth的最大重疊低於此閾值,則將其標記為背景。重疊> RPN_NEGATIVE_OVERLAP但<RPN_POSITIVE_OVERLAP的框被標記為“不關心”。(默認值:0.3)
  • TRAIN.RPN_BATCHSIZE:背景和前景anchor的總數(默認值:256)
  • TRAIN.RPN_FG_FRACTION:batch size中前景anchor的比例(默認值:0.5)。
    如果找到的前景anchors大於TRAIN.RPN_BATCHSIZE\(\times\) TRAIN.RPN_FG_FRACTION,則超出(索引是隨機選擇的)標記為“不關心”。

輸入:

  • RPN網絡輸出(預測的前景/背景類標簽,回歸系數)
  • Anchor boxes(由anchor generation layer生成)
  • Ground truth boxes

輸出:

  • 良好的前景/背景框和相關的類標簽
  • 目標回歸系數

其他層,proposal target layer, ROI Pooling layer和分類層用於生成計算分類損失所需的信息。正如我們對anchor target layer所做的那樣,讓我們首先看一下如何計算分類損失以及計算分類損失需要哪些信息。

4.5. 計算分類層Loss

與RPN損失類似,分類層損失有兩個組成部分— 分類損失和bounding box回歸損失

\[RPNLoss=Classification\ Loss+Bounding\ Box\ Regression\ Loss \]

RPN層和分類層之間的關鍵區別在於,雖然RPN層只處理兩個類—前景和背景,但分類層處理我們網絡用於訓練分類的所有對象類(加上背景)。

分類損失是以實際對象類別和預測類別得分為參數的交叉熵損失。它的計算方法如下所示。

bounding boxes回歸損失也與RPN類似地計算,除了現在回歸系數是類特定的。
網絡計算每個對象類的回歸系數。目標回歸系數顯然僅適用於正確的類,該類是與給定anchor具有最大重疊的ground truth的bounding boxes的對象類。

在計算損失時,使用mask數組,該mask數組標記每個anchor的正確對象類。忽略不正確的對象類的回歸系數。該mask數組允許將損失計算轉變為矩陣乘法,而不是需要for-each循環。

因此,需要以下數量來計算分類層損失:

  1. 預測類標簽和bounding box回歸系數(這些是分類網絡的輸出)
  2. 每個anchor的類標簽
  3. 目標bounding boxes的回歸系數

現在讓我們看看這些數值在proposal target和分類層是如何計算的。

4.6. Proposal Target Layer

proposal tarrget layer的目標是從proposal layer的ROI列表中選擇有希望的ROI。這些有希望的ROI將用於從head layer產生的feature map執行crop pooling並傳遞到網絡的其余部分(head_to_tail),其計算預測的類別得分和框回歸系數。

與anchor target layer類似,重要的是選擇好的proposals(與gt框重疊的那些)以傳遞給分類層。否則,我們將要求分類層學習“無望的學習任務”。

proposal target layer以proposal layer計算的ROI開始。使用每個ROI與所有groud truth boxes的最大重疊,它將ROI分類為背景和前景ROI。前景ROI是最大重疊超過閾值的那些(TRAIN.FG_THRESH,默認值:0.5)。背景ROI是最大重疊落在TRAIN.BG_THRESH_LOTRAIN.BG_THRESH_HI之間的值(默認值分別為0.1,0.5)。這是用於向分類器提供困難背景樣本的“難例挖掘”的示例。

還有一些額外的邏輯試圖確保前景和背景區域的總數是恆定的。如果找到的背景區域太少,它會嘗試通過隨機重復一些背景索引來填補批次,以彌補不足。

接下來,在每個ROI和最接近的匹配ground truth box之間計算bounding box目標回歸目標(這也包括背景ROI,因為這些ROI也存在重疊的ground truth)。這些回歸目標針對所有類進行了擴展,如下圖所示。

輸入:

  • proposal layer生成的ROI
  • ground truth信息

輸出:

  • 選擇符合重疊標准的前景和背景ROI。
  • ROI的類特定目標回歸系數

參數:

  • TRAIN.FG_THRESH :(默認值:0.5)用於選擇前景ROI。與ground truth最大重疊超過FG_THRESH的ROI標記為前景
  • TRAIN.BG_THRESH_HI :(默認為0.5)
  • TRAIN.BG_THRESH_LO :(默認為0.1)這兩個閾值用於選擇背景ROI。
    最大重疊位於BG_THRESH_HIBG_THRESH_LO之間的ROI標記為背景
  • TRAIN.BATCH_SIZE :(默認為128)所選的前景和背景框的最大數量。
  • TRAIN.FG_FRACTION :(默認為0.25)。
    前景框的數量不能超過BATCH_SIZE * FG_FRACTION

4.7. Crop Pooling

Proposal tarrget layer為我們提供了有希望的ROI,以便在訓練期間使用相關的類標簽和回歸系數進行分類。下一步是從head網絡產生的卷積feature map中提取對應於這些ROI的區域。然后,提取的特征圖通過網絡的其余部分(上面所示的網絡圖中的“尾部”)運行,以產生每個ROI的對象類概率分布和回歸系數。Crop Pooling層的工作是從卷積feature maps執行區域提取。

crop pooling的關鍵思想在關於“空間變換網絡”(Anon.2016)*的論文中有所描述。目標是將warping函數(由\(2\times3\)的仿射變換矩陣描述)應用於輸入feature map以輸出warped feature map。如下圖所示

crop pooling涉及兩個步驟:

  1. 對於一組目標坐標,應用給定的仿射變換以生成源坐標。

    \(\left[\begin{matrix}x^s_i\\y^s_i\end{matrix}\right]=\left[\begin{matrix}\theta_{11}&\theta_{12}&\theta_{13}\\\ \theta_{21}&\theta_{22}&\theta_{23}\end{matrix}\right]\left[\begin{matrix}x^t_t\\y^t_i\\1\end{matrix}\right]\)。其中\(x^s_i,y^s_i,x^t_i,y^t_i\)是高度/寬度標准化坐標(類似於圖形中使用的紋理坐標),所以\(-1\leq x^s_i,y^s_i,x^t_i,y^t_i\leq1\)

  2. 在第二步中,在源坐標處對輸入(源)map進行采樣以產生輸出(目標)map。在此步驟中,每個\((x^s_i,y^s_i)\)坐標定義輸入中的空間位置,其中應用采樣內核(例如雙線性采樣內核)以獲取輸出feature map中特定像素的值。

空間變換中描述的采樣方法提供了可微分的采樣機制,允許損失梯度流回傳feature map和采樣網格坐標。

幸運的是,crop pooling在PyTorch中實現,API包含兩個鏡像這兩個步驟的函數。torch.nn.functional.affine_grid采用仿射變換矩陣並生成一組采樣坐標,並且torch.nn.functional.grid_sample對這些坐標處的網格進行采樣。反向步驟中的反向傳播梯度由pyTorch自動處理。

要使用裁剪池,我們需要執行以下操作:

  1. 將ROI坐標除以“頭部”網絡的步長。由proposal target layer產生的ROIs的坐標在原始圖像空間(800$\times$600)中。為了將這些坐標代入由“head”產生的輸出feature map的空間中,我們必須將它們除以步長(當前實現中的16)。

  2. 要使用上面顯示的API,我們需要仿射變換矩陣。計算該仿射變換矩陣如下所示。

  3. 我們還需要目標特征圖上的和點的數量。這由配置參數cfg.POOLING_SIZE(默認為7)提供。因此,在crop pooling期間,非方形ROI用於從卷積特征圖中裁剪出區域,這些區域被warped成恆定大小的方形窗口。當crop pooling的輸出被傳入進一步的卷積和全連接層,這種warping必須進行。

4.8. 分類層

crop pooling采用proposal target layer輸出的ROI框和“head”網絡輸出的卷積feature maps,並輸出方形feature maps。然后通過沿空間維度的aaverage pooling,將feature map傳遞到ResNet的layer 4。結果(代碼中稱為“fc7”)是每個ROI的一維特征向量。此過程如下所示。

然后,特征向量通過兩個全連接—bbox_pred_netcls_score_netcls_score_net層為每個bounding box生成類別分數(可以通過應用softmax將其轉換為概率)。bbox_pred_net層生成類特定的bounding box回歸系數,該回歸系數與proposal target layer產生的原始bounding box坐標組合以產生最終bounding box。這些步驟如下所示。

回想一下兩組bounding box回歸系數之間的差異是很好的 — 一組由RPN網絡產生,另一組由分類網絡產生。第一組用於訓練RPN層以產生良好的前景bounding boxes(更緊密地圍繞對象邊界)。目標回歸系數,即將ROI框與其最接近的ground truth的bounding box對齊所需的系數由anchor target layer生成。很難准確識別這種學習是如何工作的,但我想象RPN卷積和全連接層學習如何將神經網絡生成的各種圖像特征解釋為解碼好的對象bounding boxes。當我們在下一節中考慮推理時,我們將看到如何使用這些回歸系數。

第二組bounding box系數由分類層生成。這些系數是類特定的,即對於每個ROI框,每個對象類生成一組系數。這些目標回歸系數由proposal target layer生成。注意,分類網絡在方形feature map上操作,該方形feature map是應用於head網絡輸出的仿射變換(如上所述)的結果。然而,由於回歸系數對於沒有剪切的仿射變換是不變的,因此可以將由proposal target layer計算的目標回歸系數與由分類網絡產生的目標回歸系數進行比較,並且充當有效學習信號。事后看來這一點顯而易見,但花了我一些時間來理解。

有趣的是,在訓練分類層時,誤差梯度也傳播到RPN網絡。這是因為在crop pooling期間使用的ROI框坐標本身是網絡輸出,因為它們是將RPN網絡生成的回歸系數應用於anchor boxes的結果。在反向傳播期間,誤差梯度將通過crop pooling傳播回RPN層。計算和應用這些梯度將非常棘手,但幸運的是,crop pooling API由PyTorch作為內置模塊提供,計算和應用梯度的細節在內部處理。這一點在Faster RCNN論文(Ren et al.2015)*的第3.2(iii)節中討論。

5. 實現細節:Inference

推理期間執行的步驟如下所示:

不使用anchor target layer和proposal target layer。RPN網絡應該學習如何將anchor分類為背景框和前景框並生成良好的bounding box系數。proposal layer簡單地將bounding box系數應用於排名靠前的anchor boxes並執行NMS以消除具有大量重疊的框。為清楚起見,下面顯示了這些步驟的輸出。生成的框被發送到分類層,在該分類層中生成類分數和類特定的bounding boxes回歸系數。

紅色框顯示按分數排名的前6個anchor。綠框顯示應用RPN網絡計算的回歸參數后的anchor boxes。綠色框似乎更緊密地貼合潛在的對象。注意,在應用回歸參數之后,矩形仍然是矩形,即沒有剪切。還要注意矩形之間的重要重疊。通過應用非極大值抑制來解決該冗余

紅色框顯示NMS前的前5個bounding boxes,綠色框顯示NMS之后的前5個框。通過抑制重疊的方框,其他方框(得分列表中的較低位置)有機會向上移動

從最終的分類得分數組(dim:n,21),我們選擇對應於某個前景對象的列,比如說汽車。然后,我們選擇與此數組中最大分數對應的行。此行對應於最有可能是汽車的proposal。設這個行的索引為car_score_max_idx現在,讓最終bounding boxes坐標數組(在應用回歸系數之后)為bbox(dim:n,21 * 4)。從這個數組中,我們選擇對應於car_score_max_idx的行。我們期望對應於汽車列的bounding box應該比其他bounding box(對應於錯誤的對象類)更好地適合測試圖像中的汽車。確實如此。紅色框對應於原始proposal,藍色框是計算的汽車類bounding boxes,白色框對應於其他(不正確的)前景類。可以看出,藍色盒子比其他盒子更適合實際的汽車。

為了顯示最終的分類結果,我們應用另一輪NMS並將目標檢測閾值應用於類別分數。然后,我們繪制對應於滿足檢測閾值的ROI的所有變換的bounding box。結果如下所示。

6. 附錄

6.1. ResNet 50網絡架構

6.2. 非極大值抑制(NMS)

非極大值抑制是一種通過消除重疊大於一個數值的框來減少候選框數量的技術。這些框首先按一些標准排序(通常是右下角的y坐標)。然后,我們瀏覽框的列表並禁止與所考慮框IoU重疊超過閾值的框。按y坐標對框進行排序會導致保留一組重疊框中的最低框。這可能並不總是理想的結果。R-CNN中使用的NMS按前景分數對框進行排序。這導致保留一組重疊框中具有最高分數的框。下圖顯示了兩種方法之間的差異。黑色數字是每個框的前景分數。右側的圖像顯示了將NMS應用於左側圖像的結果。第一個數字使用標准NMS(方框按右下角的y坐標排列)。這導致保留較低分數的框。第二個數字使用修改的NMS(框按前景分數排名)。這導致保留具有最高前景分數的框,這是更期望的。在這兩種情況下,假設框之間的重疊高於NMS重疊閾值。

7. 參考

Anon. 2014. . October 23. https://arxiv.org/pdf/1311.2524.pdf.

Anon. 2016. . February 5. https://arxiv.org/pdf/1506.02025.pdf.

Anon. . http://link.springer.com/article/10.1007/s11263-013-0620-5.

Anon. Object Detection with Discriminatively Trained Part-Based Models - IEEE Journals & Magazine. https://doi.org/10.1109/TPAMI.2009.167.

Girshick, Ross. 2015. Fast R-CNN. arXiv.org. April 30. https://arxiv.org/abs/1504.08083.

Girshick, Ross, Jeff Donahue, Trevor Darrell, and Jitendra Malik. 2013. Rich feature hierarchies for accurate object detection and semantic segmentation. arXiv.org. November 11. https://arxiv.org/abs/1311.2524.

Ren, Shaoqing, Kaiming He, Ross Girshick, and Jian Sun. 2015. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. arXiv.org. June 4. https://arxiv.org/abs/1506.01497.

Yosinski, Jason, Jeff Clune, Yoshua Bengio, and Hod Lipson. 2014. How transferable are features in deep neural networks? arXiv.org. November 6. https://arxiv.org/abs/1411.1792.


免責聲明!

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



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