【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

產業智慧官發表於2018-03-21

選自tryolabs

作者:Matt Simon

機器之心編譯


本文詳細解釋了 Faster R-CNN 的網路架構和工作流,一步步帶領讀者理解目標檢測的工作原理,作者本人也提供了 Luminoth 實現,供大家參考。


  • Luminoth 實現:https://github.com/tryolabs/luminoth/tree/master/luminoth/models/fasterrcnn


在閱讀本文之前,若想了解 R-CNN 網路家族的發展,可以參看機器之心的文章:


深度 | 用於影像分割的卷積神經網路:從R-CNN到Mark R-CNN


去年,我們決定深入瞭解 Faster R-CNN,閱讀原始論文以及其中引用到的其他論文,現在我們對其工作方式和實現方法有了清晰的理解。


我們最終在 Luminoth 中實現了 Faster R-CNN,Luminoth 是基於 TensorFlow 的計算機視覺工具包,易於訓練和監控,支援多種不同的模型。到目前為止,Luminoth 已經吸引了很大的關注,我們在 ODSC Europe 和 ODSC West 的論壇中也介紹過這個專案。

(ODSC,Open Data Science Conference,專注於開源資料科學的會議)。


基於開發 Luminoth 的工作和過去的報告,我們認為把所有實現 Faster RCNN 的細節和相關連結整合到一篇部落格中是一個不錯的點子,這對未來其他對此領域感興趣的人會很有意義。


背景


Faster R-CNN 最早在 2015 年的 NIPS 釋出。其在釋出後經歷了幾次修改,這在之後博文中會有討論。Faster-RCNN 是 RCNN 系列論文的第三次迭代,這一系列論文的一作和聯合作者是 Ross Girshick。


這一切始於 2014 年的一篇論文「Rich feature hierarchies for accurate object detection and semantic segmentation」(R-CNN),其使用了稱為 Selective Search 的演算法用來提取感興趣候選區域,並用一個標準的卷積神經網路 (CNN) 去分類和調整這些區域。Fast R-CNN 從 R-CNN 演變優化而來,Fast R-CNN 釋出於 2015 年上半年,其中一種稱為感興趣區域池化的技術,使得網路可以共享計算結果,從而讓模型提速。這一系列演算法最終被優化為 Faster R-CNN,這是第一個完全可微分的模型。


框架


Faster R-CNN 的框架由幾個模組部件組成,所以其框架有些複雜。我們將從高層次的概述開始,之後會介紹不同組成部分的具體細節。


從一張圖片開始,我們將會得到:


  • 一個邊框列表

  • 每個邊框會被分配一個標籤

  • 每對標籤和邊框所對應的概率

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程


完整的 Faster R-CNN 框架


輸入的圖片以長×寬×高的張量形式表徵,之後會被饋送入預訓練好的卷積神經網路,在中間層得到特徵圖。使用該特徵圖作為特徵提取器並用於下一流程。


上述方法在遷移學習中經常使用,尤其在為小資料集訓練分類器時,其通常取用了在另一個較大資料集訓練好的權重。我們在下一章節會深入瞭解這個部分。接著,我們會使用到區域建議網路(Region Proposal Network,RPN)。使用 CNN 計算得到的特徵,去尋找到預設好數量的可能包含目標的區域 (邊框)。


使用深度學習進行目標檢測最大的困難可能是生成一個長度可變的邊框列表。使用深度神經網路建模時,模型最後一部分通常是一個固定尺寸的張量輸出(除了迴圈神經網路)。例如,在圖片分類中,輸出是 (N,) 形狀的張量,N 是類別的數量,其中在第 i 個位置標量含有該圖片屬於類別 i 的概率。


RPN 中長度可變列表的問題可以使用錨點解決:使用固定尺寸的參考邊框在原始圖片上一致地定位。不是直接探測目標在哪,而是把問題分兩個方面建模,對每個錨點,我們考慮:


  • 這個錨點包含相關目標嗎?

  • 如何調整錨點以更好的擬合到相關目標?


可能會有點困擾,但是沒關係,下面會深入瞭解。


在取得一系列的相關目標和其在原始圖片上的位置後,目標探測問題就可以相對直觀地解決了。使用 CNN 提取到的特徵和相關目標的邊框,我們在相關目標的特徵圖上使用感興趣區域池化 (RoI Pooling),並將與目標相關的特徵資訊存入一個新的張量。之後的流程與 R-CNN 模型一致,利用這些資訊:


  • 對邊框內的內容分類(或者捨棄它,並用「背景」標記邊框內容)

  • 調整邊框的座標(使之更好地包含目標)


顯然,這樣做會遺失掉部分資訊,但這正是 Faster-RCNN 如何進行目標探測的基本思想。下一步,我們會仔細討論框架、損失函式以及訓練過程中各個元件的具體細節。


基礎網路


之前提到過,Faster R-CNN 第一步要使用在圖片分類任務 (例如,ImageNet) 上預訓練好的卷積神經網路,使用該網路得到的中間層特徵的輸出。這對有深度學習背景的人來說很簡單,但是理解如何使用和為什麼這樣做才是關鍵,同時,視覺化中間層的特徵輸出也很重要。沒有一致的意見表明哪個網路框架是最好的。原始的 Faster R-CNN 使用的是在 ImageNet 上預訓練的 ZF 和 VGG,但之後出現了很多不同的網路,且不同網路的引數數量變化很大。例如,MobileNet,以速度優先的一個小型的高效框架,大約有 330 萬個引數,而 ResNet-152(152 層),曾經的 ImageNet 圖片分類競賽優勝者,大約有 6000 萬個引數。最新的網路結構如 DenseNet,可以在提高準確度的同時縮減引數數量。


VGG


在討論網路結構孰優孰劣之前,讓我們先以 VGG-16 為例來嘗試理解 Faster-RCNN 是如何工作的。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

VGG 網路結構


VGG,其名字來自於在 ImageNet ILSVRC 2014 競賽中使用此網路的小組組名,首次釋出於論文」Very Deep Convolutional Networks for Large-Scale Image Recognition」, 作者是 Karen Simonyan 和 Andrew Zisserman。以今天的標準來看這個網路談不上深度,但是在釋出之際 VGG16 比當時常用的網路要多一倍的層數,其推動了「深度 → 更強大效能 → 更好結果」的浪潮(只要訓練是可行的)。


當使用 VGG 進行分類任務時,其輸入是 224×224×3 的張量 (表示一個 224×224 畫素大小的 RGB 圖片)。在分類任務中輸入圖片的尺寸是固定的,因為網路最後一部分的全連線層需要固定長度的輸入。在接入全連線層前,通常要將最後一層卷積的輸出展開成一維張量。


因為要使用卷積網路中間層的輸出,所以輸入圖片的尺寸不再有限制。至少,在這個模組中不再是問題,因為只有卷積層參與計算。讓我們深入瞭解一下底層的細節,看看具體要使用哪一層卷積網路的輸出。Faster R-CNN 論文中沒有具體指定使用哪一層;但是在官方的實現中可以觀察到,作者使用的是 conv5/conv5_1 這一層 (caffe 程式碼)。


每一層卷積網路都在前一層的資訊基礎上提取更加抽象的特徵。第一層通常學習到簡單的邊緣,第二層尋找目標邊緣的模式,以啟用後續卷積網路中更加複雜的形狀。最終,我們得到一個在空間維度上比原始圖片小很多,但表徵更深的卷積特徵圖。特徵圖的長和寬會隨著卷積層間的池化而縮小,深度會隨著卷積層濾波器的數量而增加。

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

從圖片到卷積特徵圖


卷積特徵圖將圖片的所有資訊編碼到深度的維度上,同時保留著原始圖片上目標物體的相對位置資訊。例如,如果圖片左上角有一個紅色矩形,經過卷積層的啟用,那麼紅色矩形的位置資訊仍然保留在卷積特徵圖的左上角。


VGG vs ResNet


如今,ResNet 已經取代大多數 VGG 網路作為提取特徵的基礎框架。Faster-RCNN 的三位聯合作者 (Kaiming He, Shaoqing Ren 和 Jian Sun) 也是論文「Deep Residual Learning for Image (https://arxiv.org/abs/1512.03385) Recognition」的作者,這篇論文最初介紹了 ResNets 這一框架。


ResNet 對比 VGG 的優勢在於它是一個更深層、大型的網路,因此有更大的容量去學習所需要的資訊。這些結論在圖片分類任務中可行,在目標探測的問題中也應該同樣有效。


ResNet 在使用殘差連線和批歸一化的方法後更加易於訓練,這些方法在 VGG 釋出的時候還沒有出現。


錨點


現在,我們將使用處理過後的特徵圖並建議目標區域,也就是用於分類任務的感興趣區域。之前提到過錨點是解決長度可變問題的一種方法,現在將詳細介紹。


我們的目標是尋找圖片中的邊框。這些邊框是不同尺寸、不同比例的矩形。設想我們在解決問題前已知圖片中有兩個目標。那麼首先想到的應該是訓練一個網路,這個網路可以返回 8 個值:包含(xmin, ymin, xmax, ymax)的兩個元組,每個元組都用於定義一個目標的邊框座標。這個方法有著根本問題,例如,圖片可能是不同尺寸和比例的,因此訓練一個可以直接準確預測原始座標的模型是很複雜的。另一個問題是無效預測:當預測(xmin,xmax)和(ymin,ymax)時,應該強制設定 xmin 要小於 xmax,ymin 要小於 ymax。


另一種更加簡單的方法是去預測參考邊框的偏移量。使用參考邊框(xcenter, ycenter, width, height),學習預測偏移量(Δxcenter,Δycenter,Δwidth,Δheight),因此我們只得到一些小數值的預測結果並挪動參考變數就可以達到更好的擬合結果。


錨點是用固定的邊框置於不同尺寸和比例的圖片上,並且在之後目標位置的預測中用作參考邊框。


我們在處理的卷積特徵圖的尺寸分別是 convwidth×convheight×convdepth,因此在卷積圖的 convwidth×convheight 上每一個點都生成一組錨點。很重要的一點是即使我們是在特徵圖上生成的錨點,這些錨點最終是要對映回原始圖片的尺寸。


因為我們只用到了卷積和池化層,所以特徵圖的最終維度與原始圖片是呈比例的。數學上,如果圖片的尺寸是 w×h,那麼特徵圖最終會縮小到尺寸為 w/r 和 h/r,其中 r 是次級取樣率。如果我們在特徵圖上每個空間位置上都定義一個錨點,那麼最終圖片的錨點會相隔 r 個畫素,在 VGG 中,r=16。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

原始圖片的錨點中心


為了選擇一組合適錨點,我們通常定義一組固定尺寸 (例如,64px、128px、256px,此處為邊框大小) 和比例 (例如,0.5、1、1.5,此處為邊框長寬比) 的邊框,使用這些變數的所有可能組合得到候選邊框 (這個例子中有 1 個錨點和 9 個邊框)。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

左側:錨點、中心:特徵圖空間單一錨點在原圖中的表達,右側:所有錨點在原圖中的表達


區域建議網路

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

RPN 採用卷積特徵圖並在影像上生成建議。


像我們之前提到的那樣,RPN 接受所有的參考框(錨點)併為目標輸出一套好的建議。它通過為每個錨點提供兩個不同的輸出來完成。


第一個輸出是錨點作為目標的概率。如果你願意,可以叫做「目標性得分」。注意,RPN 不關心目標的類別,只在意它實際上是不是一個目標(而不是背景)。我們將用這個目標性得分來過濾掉不好的預測,為第二階段做準備。第二個輸出是邊框迴歸,用於調整錨點以更好的擬合其預測的目標。


RPN 是用完全卷積的方式高效實現的,用基礎網路返回的卷積特徵圖作為輸入。首先,我們使用一個有 512 個通道和 3x3 卷積核大小的卷積層,然後我們有兩個使用 1x1 卷積核的並行卷積層,其通道數量取決於每個點的錨點數量。

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

RPN 架構的卷積實現,其中 k 是錨點的數量。


對於分類層,我們對每個錨點輸出兩個預測值:它是背景(不是目標)的分數,和它是前景(實際的目標)的分數。


對於迴歸或邊框調整層,我們輸出四個預測值:Δxcenter、Δycenter、Δwidth、Δheight,我們將會把這些值用到錨點中來得到最終的建議。


使用最終的建議座標和它們的目標性得分,然後可以得到一套很好的對於目標的建議。


訓練、目標和損失函式


RPN 執行兩種不同型別的預測:二進位制分類和邊框迴歸調整。為了訓練,我們把所有的錨點分成兩類。一類是「前景」,它與真實目標重疊並且其 IoU(Intersection of Union)值大於 0.5;另一類是「背景」,它不與任何真實目標重疊或與真實目標的 IoU 值 小於 0.1。


然後,我們對這些錨點隨機取樣,構成大小為 256 的 mini batch——維持前景錨點和背景錨點之間的平衡比例。


RPN 用所有以 mini batch 篩選出來的錨點和二進位制交叉熵(binary cross entropy)來計算分類損失。然後它只用那些標記為前景的 mini batch 錨點來計算迴歸損失。為了計算迴歸的目標,我們使用前景錨點和最接近的真實目標,並計算將錨點轉化為目標所需的正確 Δ。


論文中建議使用 Smooth L1 loss 來計算迴歸誤差,而不是用簡單的 L1 或 L2 loss。Smooth L1 基本上就是 L1,但是當 L1 的誤差足夠小,由確定的 σ 定義時,可以認為誤差幾乎是正確的且損失以更快的速率減小。


使用 dynamic batches 是具有挑戰性的,這裡的原因很多。即使我們試圖維持前景錨點和背景錨點之間的平衡比例,但這並不總是可能的。根據影像上的真實目標以及錨點的大小和比例,可能會得到零前景錨點。在這種情況下,我們轉而使用對於真實框具有最大 IoU 值的錨點。這遠非理想情況,但是為了總是有前景樣本和目標可以學習,這還是挺實用的。


後處理


非極大抑制(Non-maximum suppression):由於錨點經常重疊,因此建議最終也會在同一個目標上重疊。為了解決重複建議的問題,我們使用一個簡單的演算法,稱為非極大抑制(NMS)。NMS 獲取按照分數排序的建議列表並對已排序的列表進行迭代,丟棄那些 IoU 值大於某個預定義閾值的建議,並提出一個具有更高分數的建議。


雖然這看起來很簡單,但對 IoU 的閾值設定一定要非常小心。太低,你可能會丟失對目標的建議;太高,你可能會得到對同一個目標的很多建議。常用值是 0.6。


建議選擇:應用 NMS 後,我們保留評分最高的 N 個建議。論文中使用 N=2000,但是將這個數字降低到 50 仍然可以得到相當好的結果。


獨立應用程式


RPN 可以獨立使用,而不需要第二階段的模型。在只有一類物件的問題中,目標性概率可以用作最終的類別概率。這是因為在這種情況下,「前景」=「目標類別」以及「背景」=「不是目標類別」。


一些從獨立使用 RPN 中受益的機器學習問題的例子包括流行的(但仍然是具有挑戰性的)人臉檢測和文字檢測。


僅使用 RPN 的優點之一是訓練和預測的速度都有所提高。由於 RPN 是一個非常簡單的僅使用卷積層的網路,所以預測時間比使用分類基礎網路更快。


興趣區域池化


在 RPN 步驟之後,我們有很多沒有分配類別的目標建議。我們接下來要解決的問題就是如何將這些邊框分類到我們想要的類別中。


最簡單的方法是採用每個建議,裁剪出來,然後讓它通過預訓練的基礎網路。然後,我們可以用提取的特徵作為基礎影像分類器的輸入。這種方法的主要問題是執行所有 2000 個建議的計算效率和速度都是非常低的。


Faster R-CNN 試圖通過複用現有的卷積特徵圖來解決或至少緩解這個問題。這是通過用興趣區域池化為每個建議提取固定大小的特徵圖實現的。R-CNN 需要固定大小的特徵圖,以便將它們分類到固定數量的類別中。

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

興趣區域池化


一種更簡單的方法(被包括 Luminoth 版本的 Faster R-CNN 在內的目標檢測實現方法所廣泛使用),是用每個建議來裁剪卷積特徵圖,然後用插值(通常是雙線性的)將每個裁剪調整為固定大小(14×14×convdepth)。裁剪之後,用 2x2 核大小的最大池化來獲得每個建議最終的 7×7×convdepth 特徵圖。


選擇這些確切形狀的原因與下一模組(R-CNN)如何使用它有關,這些設定是根據第二階段的用途得到的。


基於區域的卷積神經網路


基於區域的卷積神經網路(R-CNN)是 Faster R-CNN 工作流的最後一步。從影像上獲得卷積特徵圖之後,用它通過 RPN 來獲得目標建議並最終為每個建議提取特徵(通過 RoI Pooling),最後我們需要使用這些特徵進行分類。R-CNN 試圖模仿分類 CNNs 的最後階段,在這個階段用一個全連線層為每個可能的目標類輸出一個分數。


R-CNN 有兩個不同的目標:


1. 將建議分到一個類中,加上一個背景類(用於刪除不好的建議)。

2. 根據預測的類別更好地調整建議的邊框。


在最初的 Faster R-CNN 論文中,R-CNN 對每個建議採用特徵圖,將它平坦化並使用兩個大小為 4096 的有 ReLU 啟用函式的全連線層。


然後,它對每個不同的目標使用兩種不同的全連線層:


  • 一個有 N+1 個單元的全連線層,其中 N 是類的總數,另外一個是背景類。

  • 一個有 4N 個單元的全連線層。我們希望有一個迴歸預測,因此對 N 個類別中的每一個可能的類別,我們都需要 Δcenterx、Δcentery、Δwidth、Δheight。

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

R-CNN 架構


訓練和目標


R-CNN 的目標與 RPN 的目標的計算方法幾乎相同,但是考慮的是不同的可能類別。我們採用建議和真實邊框,並計算它們之間的 IoU。


那些有任何真實邊框的建議,只要其 IoU 大於 0.5,都被分配給那個真實資料。那些 IoU 在 0.1 和 0.5 之間的被標記為背景。與我們在為 RPN 分配目標時相反的是,我們忽略了沒有任何交集的建議。這是因為在這個階段,我們假設已經有好的建議並且我們對解決更困難的情況更有興趣。當然,這些所有的值都是可以為了更好的擬合你想找的目標型別而做調整的超引數。


邊框迴歸的目標是計算建議和與其對應的真實框之間的偏移量,僅針對那些基於 IoU 閾值分配了類別的建議。


我們隨機抽樣了一個尺寸為 64 的 balanced mini batch,其中我們有高達 25% 的前景建議(有類別)和 75% 的背景。


按照我們對 RPN 損失所做的相同處理方式,現在的分類損失是一個多類別的交叉熵損失,使用所有選定的建議和用於與真實框匹配的 25% 建議的 Smooth L1 loss。由於 R-CNN 邊框迴歸的全連線網路的輸出對於每個類都有一個預測,所以當我們得到這種損失時必須小心。在計算損失時,我們只需要考慮正確的類。


後處理


與 RPN 相似,我們最終得到了很多已經分配了類別的目標,在返回它們之前需要進一步處理。


為了實施邊框調整,我們必須考慮哪個類別具有對該建議的最高概率。我們也需要忽略具有最高概率的背景類的建議。


在得到最終目標和忽略被預測為背景的目標之後,我們應用基於類的 NMS。這通過按類進行分組完成,通過概率對其排序,然後將 NMS 應用於每個獨立的組。


對於我們最後的目標列表,我們也可以設定一個概率閾值並且對每個類限制目標的數量。


訓練


在最初的論文中,Faster R-CNN 是用多步法訓練的,獨立地訓練各部分並且在應用最終的全面訓練方法之前合併訓練的權重。之後,人們發現進行端到端的聯合訓練會帶來更好的結果。


把完整的模型放在一起後,我們得到 4 個不同的損失,兩個用於 RPN,另外兩個用於 R-CNN。我們在 RPN 和 R-CNN 中有可訓練的層,我們也有可以訓練(微調)或不能訓練的基礎網路。


是否訓練基礎網路的決定取決於我們想要學習的目標特性和可用的計算能力。如果我們想檢測與在原始資料集(用於訓練基礎網路)上的資料相似的目標,那麼除了嘗試壓縮我們能獲得的所有可能的效能外,其他做法都是沒有必要的。另一方面,為了擬合完整的梯度,訓練基礎網路在時間和必要的硬體上都是昂貴的。


用加權和將四種不同的損失組合起來。這是因為相對於迴歸損失,我們可能希望給分類損失更大的權重,或者相比於 RPN 可能給 R-CNN 損失更大的權重。


除了常規的損失之外,我們也有正則化損失,為了簡潔起見,我們可以跳過這部分,但是它們在 RPN 和 R-CNN 中都可以定義。我們用 L2 正則化一些層。根據正在使用哪個基礎網路,以及如果它經過訓練,也有可能進行正則化。


我們用隨機梯度下降的動量演算法訓練,將動量值設定為 0.9。你可以輕鬆的用其他任何優化方法訓練 Faster R-CNN,而不會遇到任何大問題。


學習率從 0.001 開始,然後在 50K 步後下降到 0.0001。這是通常最重要的超引數之一。當用 Luminoth 訓練時,我們經常從預設值開始,並以此開始做調整。


評估


在一些特定的 IoU 閾值下,使用標準平均精度均值(mAP)來完成評估(例如,mAP@0.5)。mAP 是源於資訊檢索的度量標準,並且常用於計算排序問題中的誤差和評估目標檢測問題。


我們不會深入討論細節,因為這些型別的度量標準值得用一篇完整部落格來總結,但重要的是,當你錯過了你應該檢測到的框,以及當你發現一些不存在的東西或多次檢測到相同的東西時,mAP 會對此進行懲罰。


結論


到目前為止,你應該清楚 Faster R-CNN 的工作方式、設計目的以及如何針對特定的情況進行調整。如果你想更深入的瞭解它的工作原理,你應該看看 Luminoth 的實現。


Faster R-CNN 是被證明可以用相同的原理解決複雜的計算機視覺問題的模型之一,在這個新的深度學習革命剛開始的時候,它就展現出如此驚人的結果。


目前正在建立的新模型不僅用於目標檢測,還用於基於這種原始模型的語義分割、3D 目標檢測等等。有的借用 RPN,有的借用 R-CNN,還有的建立在兩者之上。因此,充分了解底層架構非常重要,從而可以解決更加廣泛的和複雜的問題。【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程


原文地址: https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/



用於影像分割的卷積神經網路:從R-CNN到Mark R-CNN

2017-04-24 


選自Athelas

作者:Dhruv Parthasarathy

機器之心編譯

參與:王宇欣、hustcxy、黃小天



卷積神經網路(CNN)的作用遠不止分類那麼簡單!在本文中,我們將看到卷積神經網路(CNN)如何在影像例項分割任務中提升其結果。


自從 Alex Krizhevsky、Geoff Hinton 和 Ilya Sutskever 在 2012 年贏得了 ImageNet 的冠軍,卷積神經網路就成為了分割影像的黃金準則。事實上,從那時起,卷積神經網路不斷獲得完善,並已在 ImageNet 挑戰上超越人類。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

現在,卷積神經網路在 ImageNet 的表現已超越人類。圖中 y 軸代表 ImageNet 錯誤率。


雖然這些結果令人印象深刻,但與真實的人類視覺理解的多樣性和複雜性相比,影像分類還是簡單得多。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

分類挑戰賽使用的影像例項。注意影像的構圖以及物件的唯一性。


在分類中,影像的焦點通常是一個單一目標,任務即是對影像進行簡單描述(見上文)。但是當我們在觀察周遭世界時,我們處理的任務相對複雜的多。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

現實中的情景通常由許多不同的互相重疊的目標、背景以及行為構成。


我們看到的情景包含多個互相重疊的目標以及不同的背景,並且我們不僅要分類這些不同的目標還要識別其邊界、差異以及彼此的關係!


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

在影像分割中,我們的目的是對影像中的不同目標進行分類,並確定其邊界。來源:Mask R-CNN


卷積神經網路可以幫我們處理如此複雜的任務嗎?也就是說,給定一個更為複雜的影像,我們是否可以使用卷積神經網路識別影像中不同的物體及其邊界?事實上,正如 Ross Girshick 和其同事在過去幾年所做的那樣,答案毫無疑問是肯定的。


本文的目標


在本文中,我們將介紹目標檢測和分割的某些主流技術背後的直觀知識,並瞭解其演變歷程。具體來說,我們將介紹 R-CNN(區域 CNN),卷積神經網路在這個問題上的最初的應用,及變體 Fast R-CNN 和 Faster R-CNN。最後,我們將介紹 Facebook Research 最近釋出的一篇文章 Mask R-CNN,它擴充套件了這種物件檢測技術從而可以實現畫素級分割。上述四篇論文的連結如下:


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

4. Mask R-CNN: https://arxiv.org/abs/1703.06870


2014 年:R-CNN - 首次將 CNN 用於目標檢測


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

目標檢測演算法,比如 R-CNN,可分析影像並識別主要物件的位置和類別。


受到多倫多大學 Hinton 實驗室的研究的啟發,加州伯克利大學一個由 Jitendra Malik 領導的小組,問了他們自己一個在今天看來似乎是不可避免的問題:


Krizhevsky et. al 的研究成果可在何種程度上被推廣至目標檢測?


目標檢測是一種找到影像中的不同目標並進行分類的任務(如上圖所示)。通過在 PASCAL VOC Challenge 測試(一個知名的物件檢測挑戰賽,類似於 ImageNet),由 Ross Girshick(將在下文細講)、Jeff Donahue 和 Trevor Darrel 組成的團隊發現這個問題確實可通過 Krizhevsky 的研究結果獲得解決。他們寫道:


Krizhevsky et. al 第一次提出:相比基於更簡單、HOG 般的特徵的系統,卷及神經網路可顯著提升 PASCAL VOC 上的目標檢測效能。


現在讓我們花點時間來了解他們的架構 R-CNN 的運作的方式。


理解 R-CNN


R-CNN 的目的為接收影像,並正確識別影像中主要目標(通過邊界框)的位置。


  • 輸入:影像

  • 輸出:邊界框+影像中每個目標的標註


但是我們如何找出這些邊界框的位置?R-CNN 做了我們也可以直觀做到的——在影像中假設了一系列邊界,看它們是否可以真的對應一個目標。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

通過多個尺度的視窗選擇性搜尋,並搜尋共享紋理、顏色或強度的相鄰畫素。圖片來源:https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf


R-CNN 創造了這些邊界框,或者區域提案(region proposal)關於這個被稱為選擇性搜尋(Selective Search)的方法,可在這裡(連結:http://www.cs.cornell.edu/courses/cs7670/2014sp/slides/VisionSeminar14.pdf)閱讀更多資訊。在高階別中,選擇性搜尋(如上圖所示)通過不同尺寸的視窗檢視影像,並且對於不同尺寸,其嘗試通過紋理、顏色或強度將相鄰畫素歸類,以識別物體。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

在建立一組區域提案(region proposal)後,R-CNN 只需將影像傳遞給修改版的 AlexNet 以確定其是否為有效區域。


一旦建立了這些提案,R-CNN 簡單地將該區域捲曲到一個標準的平方尺寸,並將其傳遞給修改版的 AlexNet(ImageNet 2012 的冠軍版本,其啟發了 R-CNN),如上所示。


在 CNN 的最後一層,R-CNN 新增了一個支援向量機(SVM),它可以簡單地界定物體是否為目標,以及是什麼目標。這是上圖中的第 4 步。


提升邊界框


現在,在邊界框裡找到了目標,我們可以收緊邊框以適應目標的真實尺寸嗎?我們的確可以這樣做,這也是 R-CNN 的最後一步。R-CNN 在區域提案上執行簡單的線性迴歸,以生成更緊密的邊界框座標從而獲得最終結果。下面是這一回歸模型的輸入和輸出:


  • 輸入:對應於目標的影像子區域

  • 輸出:子區域中目標的新邊界框座標


所以,概括一下,R-CNN 只是以下幾個簡單的步驟


1. 為邊界框生成一組提案。

2. 通過預訓練的 AlexNet 執行邊界框中的影像,最後通過 SVM 來檢視框中影像的目標是什麼。

3. 通過線性迴歸模型執行邊框,一旦目標完成分類,輸出邊框的更緊密的座標。


2015: Fast R-CNN - 加速和簡化 R-CNN


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

Ross Girshick 編寫了 R-CNN 和 Fast R-CNN,並持續推動著 Facebook Research 在計算機視覺方面的進展。


R-CNN 效能很棒,但是因為下述原因執行很慢:


1. 它需要 CNN(AlexNet)針對每個單影像的每個區域提案進行前向傳遞(每個影像大約 2000 次向前傳遞)。


2. 它必須分別訓練三個不同的模型 - CNN 生成影像特徵,預測類別的分類器和收緊邊界框的迴歸模型。這使得傳遞(pipeline)難以訓練。


2015 年,R-CNN 的第一作者 Ross Girshick 解決了這兩個問題,並創造了第二個演算法——Fast R-CNN。下面是其主要思想。


Fast R-CNN 見解 1:ROI(興趣區域)池化


對於 CNN 的前向傳遞,Girshick 意識到,對於每個影像,很多提出的影像區域總是相互重疊,使得我們一遍又一遍地重複進行 CNN 計算(大約 2000 次!)。他的想法很簡單:為什麼不讓每個影像只執行一次 CNN,然後找到一種在 2000 個提案中共享計算的方法?


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

在 ROIPool 中,建立了影像的完整前向傳遞,並從獲得的前向傳遞中提取每個興趣區域的轉換特徵。來源:CS231N 幻燈片,Fei Fei Li、Andrei Karpathy、和 Justin Johnson 史丹佛大學


這正是 Fast R-CNN 使用被稱為 RoIPool(興趣區域池化)的技術所完成的事情。其要點在於,RoIPool 分享了 CNN 在影像子區域的前向傳遞。在上圖中,請注意如何通過從 CNN 的特徵對映選擇相應的區域來獲取每個區域的 CNN 特徵。然後,每個區域的特徵簡單地池化(通常使用最大池化(Max Pooling))。所以我們所需要的是原始影像的一次傳遞,而非大約 2000 次!


Fast R-CNN 見解 2:將所有模型併入一個網路


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

Fast R-CNN 將卷積神經網路(CNN),分類器和邊界框迴歸器組合為一個簡單的網路。


Fast R-CNN 的第二個見解是在單一模型中聯合訓練卷積神經網路、分類器和邊界框迴歸器。之前我們有不同的模型來提取影像特徵(CNN),分類(SVM)和緊縮邊界框(迴歸器),而 Fast R-CNN 使用單一網路計算上述三個模型。


在上述影像中,你可以看到這些工作是如何完成的。Fast R-CNN 在 CNN 頂部用簡單的 softmax 層代替了支援向量機分類器(SVM classfier)以輸出分類。它還新增了與 softmax 層平行的線性迴歸層以輸出邊界框座標。這樣,所有需要的輸出均來自一個單一網路!下面是整個模型的輸入和輸出:


  • 輸入:帶有區域提案的影像

  • 輸出:帶有更緊密邊界框的每個區域的目標分類


2016:Faster R-CNN—加速區域提案


即使有了這些進步,Faster R-CNN 中仍存在一個瓶頸問題——區域提案器(region proposer)。正如我們所知,檢測目標位置的第一步是產生一系列的潛在邊界框或者供測試的興趣區域。在 Fast R-CNN,通過使用選擇性搜尋建立這些提案,這是一個相當緩慢的過程,被認為是整個流程的瓶頸。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

微軟研究院首席研究員孫劍領導了 Faster R-CNN 團隊。


2015 年中期,由 Shaoqing Ren、Kaiming He、Ross Girshick 和孫劍組成的微軟研究團隊,找到了一種被其命為 Faster R-CNN 的架構,幾乎把區域生成步驟的成本降為零。


 Faster R-CNN 的洞見是,區域提案取決於通過 CNN 的前向(forward pass)計算(分類的第一步)的影像特徵。為什麼不重複使用區域提案的相同的 CNN 結果,以取代單獨執行選擇性搜尋演算法?


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

在 Faster R-CNN,單個 CNN 用於區域提案和分類。


事實上,這正是 Faster R-CNN 團隊取得的成就。上圖中你可以看到單個 CNN 如何執行區域提案和分類。這樣一來,只需訓練一個 CNN,我們幾乎就可以免費獲得區域提案!作者寫道:


我們觀察到,區域檢測器(如 Fast R-CNN)使用的卷積特徵對映也可用於生成區域提案 [從而使區域提案的成本幾乎為零]。


以下是其模型的輸入和輸出:

 

  • 輸入:影像(注意並不需要區域提案)。

  • 輸出:影像中目標的分類和邊界框座標。


如何生成區域


讓我們花點時間看看 Faster R-CNN 如何從 CNN 特徵生成這些區域提案。Faster R-CNN 在 CNN 特徵的頂部新增了一個簡單的完全卷積網路,建立了所謂的區域提案網路。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

區域提案網路在 CNN 的特徵上滑動一個視窗。在每個視窗位置,網路在每個錨點輸出一個分值和一個邊界框(因此,4k 個框座標,其中 k 是錨點的數量)。

 

區域生成網路的工作是在 CNN 特徵對映上傳遞滑動視窗,並在每個視窗中輸出 k 個潛在邊界框和分值,以便評估這些框有多好。這些 k 框表徵什麼?


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

我們知道,用於人的邊框往往是水平和垂直的。我們可以使用這種直覺,通過建立這樣維度的錨點來指導區域提案網路。


我們知道影像中的目標應該符合某些常見的縱橫比和尺寸。例如,我們想要一些類似人類形狀的矩形框。同樣,我們不會看到很多非常窄的邊界框。以這種方式,我們建立 k 這樣的常用縱橫比,稱之為錨點框。對於每個這樣的錨點框,我們在影像中每個位置輸出一個邊界框和分值。


考慮到這些錨點框,我們來看看區域提案網路的輸入和輸出:

 

  • 輸入:CNN 特徵圖。

  • 輸出:每個錨點的邊界框。分值表徵邊界框中的影像作為目標的可能性。


然後,我們僅將每個可能成為目標的邊界框傳遞到 Fast R-CNN,生成分類和收緊邊界框。


2017:Mask R-CNN - 擴充套件 Faster R-CNN 以用於畫素級分割


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

影像例項分割的目的是在畫素級場景中識別不同目標。


到目前為止,我們已經懂得如何以許多有趣的方式使用 CNN,以有效地定點陣圖像中帶有邊框的不同目標。


我們能進一步擴充套件這些技術,定位每個目標的精確畫素,而非僅限於邊框嗎?這個問題被稱為影像分割。Kaiming He 和一群研究人員,包括 Girshick,在 Facebook AI 上使用一種稱為 Mask R-CNN 的架構探索了這一影像分割問題。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

Facebook AI 的研究員 Kaiming He 是 Mask R-CNN 的主要作者,也是 Faster R-CNN 的聯合作者。


很像 Fast R-CNN 和 Faster R-CNN,Mask R-CNN 的基本原理非常簡單直觀。鑑於 Faster R-CNN 目標檢測的效果非常好,我們能將其簡單地擴充套件到畫素級分割嗎?


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

在 Mask R-CNN 中,在 Faster R-CNN 的 CNN 特徵的頂部新增了一個簡單的完全卷積網路(FCN),以生成 mask(分割輸出)。請注意它是如何與 Faster R-CNN 的分類和邊界框迴歸網路並行的。


Mask R-CNN 通過簡單地向 Faster R-CNN 新增一個分支來輸出二進位制 mask,以說明給定畫素是否是目標的一部分。如上所述,分支(在上圖中為白色)僅僅是 CNN 特徵圖上的簡單的全卷積網路。以下是其輸入和輸出:


  • 輸入:CNN 特徵圖。

  • 輸出:在畫素屬於目標的所有位置上都有 1s 的矩陣,其他位置為 0s(這稱為二進位制 mask)。


但 Mask R-CNN 作者不得不進行一個小的調整,使這個流程按預期工作。


RoiAlign——重對齊 RoIPool 以使其更準確

 

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

影像通過 RoIAlign 而不是 RoIPool 傳遞,使由 RoIPool 選擇的特徵圖區域更精確地對應原始影像的區域。這是必要的,因為畫素級分割需要比邊界框更細粒度的對齊。


當執行沒有修改的原始 Faster R-CNN 架構時,Mask R-CNN 作者意識到 RoIPool 選擇的特徵圖的區域與原始影像的區域略不對齊。因為影像分割需要畫素級特異性,不像邊框,這自然地導致不準確。


作者通過使用 RoIAlign 方法簡單地調整 RoIPool 來更精確地對齊,從而解決了這個問題。


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

我們如何準確地將原始影像的相關區域對映到特徵圖上?


想象一下,我們有一個尺寸大小為 128x128 的影像和大小為 25x25 的特徵圖。想象一下,我們想要的是與原始影像中左上方 15x15 畫素對應的區域(見上文)。我們如何從特徵圖選擇這些畫素?


我們知道原始影像中的每個畫素對應於原始影像中的〜25/128 畫素。要從原始影像中選擇 15 畫素,我們只需選擇 15 * 25/128〜=2.93 畫素。

 

在 RoIPool,我們會捨棄一些,只選擇 2 個畫素,導致輕微的錯位。然而,在 RoIAlign,我們避免了這樣的捨棄。相反,我們使用雙線性插值來準確得到 2.93 畫素的內容。這很大程度上,讓我們避免了由 RoIPool 造成的錯位。


一旦這些掩碼生成,Mask R-CNN 簡單地將它們與來自 Faster R-CNN 的分類和邊界框組合,以產生如此驚人的精確分割:


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

Mask R-CNN 也能對影像中的目標進行分割和分類.


展望


在過去短短 3 年裡,我們看到研究界如何從 Krizhevsky 等人最初結果發展為 R-CNN,最後一路成為 Mask R-CNN 的強大結果。單獨來看,像 MASK R-CNN 這樣的結果似乎是無法達到的驚人飛躍。然而,通過這篇文章,我希望你們認識到,通過多年的辛勤工作和協作,這些進步實際上是直觀的且漸進的改進之路。R-CNN、Fast R-CNN、Faster R-CNN 和最終的 Mask R-CNN 提出的每個想法並不一定是跨越式發展,但是它們的總和卻帶來了非常顯著的效果,幫助我們向人類水平的視覺能力又前進了幾步。


特別令我興奮的是,R-CNN 和 Mask R-CNN 間隔只有三年!隨著持續的資金、關注和支援,計算機視覺在未來三年會有怎樣的發展?我們非常期待。【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程


原文連結:https://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程


人工智慧賽博物理作業系統

AI-CPS OS

人工智慧賽博物理作業系統新一代技術+商業作業系統“AI-CPS OS:雲端計算+大資料+物聯網+區塊鏈+人工智慧)分支用來的今天,企業領導者必須瞭解如何將“技術”全面滲入整個公司、產品等“商業”場景中,利用AI-CPS OS形成數字化+智慧化力量,實現行業的重新佈局、企業的重新構建和自我的煥然新生。


AI-CPS OS的真正價值並不來自構成技術或功能,而是要以一種傳遞獨特競爭優勢的方式將自動化+資訊化、智造+產品+服務資料+分析一體化,這種整合方式能夠釋放新的業務和運營模式。如果不能實現跨功能的更大規模融合,沒有顛覆現狀的意願,這些將不可能實現。


領導者無法依靠某種單一戰略方法來應對多維度的數字化變革。面對新一代技術+商業作業系統AI-CPS OS顛覆性的數字化+智慧化力量,領導者必須在行業、企業與個人這三個層面都保持領先地位:

  1. 重新行業佈局:你的世界觀要怎樣改變才算足夠?你必須對行業典範進行怎樣的反思?

  2. 重新構建企業:你的企業需要做出什麼樣的變化?你準備如何重新定義你的公司?

  3. 重新打造自己:你需要成為怎樣的人?要重塑自己並在數字化+智慧化時代保有領先地位,你必須如何去做?

AI-CPS OS是數字化智慧化創新平臺,設計思路是將大資料、物聯網、區塊鏈和人工智慧等無縫整合在雲端,可以幫助企業將創新成果融入自身業務體系,實現各個前沿技術在雲端的優勢協同。AI-CPS OS形成的字化+智慧化力量與行業、企業及個人三個層面的交叉,形成了領導力模式,使數字化融入到領導者所在企業與領導方式的核心位置:

  1. 精細種力量能夠使人在更加真實、細緻的層面觀察與感知現實世界和數字化世界正在發生的一切,進而理解和更加精細地進行產品個性化控制、微觀業務場景事件和結果控制。

  2. 智慧:模型隨著時間(資料)的變化而變化,整個系統就具備了智慧(自學習)的能力。

  3. 高效:企業需要建立實時或者準實時的資料採集傳輸、模型預測和響應決策能力,這樣智慧就從批量性、階段性的行為變成一個可以實時觸達的行為。

  4. 不確定性:數字化變更顛覆和改變了領導者曾經仰仗的思維方式、結構和實踐經驗,其結果就是形成了複合不確定性這種顛覆性力量。主要的不確定性蘊含於三個領域:技術、文化、制度。

  5. 邊界模糊:數字世界與現實世界的不斷融合成CPS不僅讓人們所知行業的核心產品、經濟學定理和可能性都產生了變化,還模糊了不同行業間的界限。這種效應正在向生態系統、企業、客戶、產品快速蔓延。

AI-CPS OS形成的數字化+智慧化力量通過三個方式激發經濟增長:

  1. 創造虛擬勞動力,承擔需要適應性和敏捷性的複雜任務,即“智慧自動化”,以區別於傳統的自動化解決方案;

  2. 對現有勞動力和實物資產進行有利的補充和提升,提高資本效率

  3. 人工智慧的普及,將推動多行業的相關創新,開闢嶄新的經濟增長空間


給決策制定者和商業領袖的建議:

  1. 超越自動化,開啟新創新模式:利用具有自主學習和自我控制能力的動態機器智慧,為企業創造新商機;

  2. 迎接新一代資訊科技,迎接人工智慧:無縫整合人類智慧與機器智慧,重新

    評估未來的知識和技能型別;

  3. 制定道德規範:切實為人工智慧生態系統制定道德準則,並在智慧機器的開

    發過程中確定更加明晰的標準和最佳實踐;

  4. 重視再分配效應:對人工智慧可能帶來的衝擊做好準備,制定戰略幫助面臨

    較高失業風險的人群;

  5. 開發數字化+智慧化企業所需新能力:員工團隊需要積極掌握判斷、溝通及想象力和創造力等人類所特有的重要能力。對於中國企業來說,創造兼具包容性和多樣性的文化也非常重要。


子曰:“君子和而不同,小人同而不和。”  《論語·子路》雲端計算、大資料、物聯網、區塊鏈和 人工智慧,像君子一般融合,一起體現科技就是生產力。


如果說上一次哥倫布地理大發現,擴充的是人類的物理空間。那麼這一次地理大發現,擴充的就是人們的數字空間。在數學空間,建立新的商業文明,從而發現新的創富模式,為人類社會帶來新的財富空間。雲端計算,大資料、物聯網和區塊鏈,是進入這個數字空間的船,而人工智慧就是那船上的帆,哥倫布之帆!


新一代技術+商業的人工智慧賽博物理作業系統AI-CPS OS作為新一輪產業變革的核心驅動力,將進一步釋放歷次科技革命和產業變革積蓄的巨大能量,並創造新的強大引擎。重構生產、分配、交換、消費等經濟活動各環節,形成從巨集觀到微觀各領域的智慧化新需求,催生新技術、新產品、新產業、新業態、新模式。引發經濟結構重大變革,深刻改變人類生產生活方式和思維模式,實現社會生產力的整體躍升。



產業智慧官  AI-CPS


用“人工智慧賽博物理作業系統新一代技術+商業作業系統“AI-CPS OS”:雲端計算+大資料+物聯網+區塊鏈+人工智慧)在場景中構建狀態感知-實時分析-自主決策-精準執行-學習提升的認知計算和機器智慧;實現產業轉型升級、DT驅動業務、價值創新創造的產業互聯生態鏈


【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

【深度學習】像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程

長按上方二維碼關注微信公眾號: AI-CPS,更多資訊回覆:


新技術“雲端計算”、“大資料”、“物聯網”、“區塊鏈”、“人工智慧新產業:智慧製造”、智慧金融”、“智慧零售”、“智慧駕駛”、智慧城市新模式:“財富空間“工業網際網路”、“資料科學家”、“賽博物理系統CPS”、“供應鏈金融”


官方網站:AI-CPS.NET


本文系“產業智慧官”(公眾號ID:AI-CPS)收集整理,轉載請註明出處!



版權宣告產業智慧官(公眾號ID:AI-CPS推薦的文章,除非確實無法確認,我們都會註明作者和來源。部分文章推送時未能與原作者取得聯絡。若涉及版權問題,煩請原作者聯絡我們,與您共同協商解決。聯絡、投稿郵箱:erp_vip@hotmail.com




相關文章