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

黃小天發表於2017-04-24

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN現在,卷積神經網路在 ImageNet 的表現已超越人類。圖中 y 軸代表 ImageNet 錯誤率。

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN分類挑戰賽使用的影象例項。注意影象的構圖以及物件的唯一性。

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN現實中的情景通常由許多不同的互相重疊的目標、背景以及行為構成。

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

用於影象分割的卷積神經網路:從R-CNN到Mark 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 用於目標檢測

用於影象分割的卷積神經網路:從R-CNN到Mark 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 做了我們也可以直觀做到的——在影象中假設了一系列邊界,看它們是否可以真的對應一個目標。

用於影象分割的卷積神經網路:從R-CNN到Mark 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)閱讀更多資訊。在高階別中,選擇性搜尋(如上圖所示)通過不同尺寸的視窗檢視影象,並且對於不同尺寸,其嘗試通過紋理、顏色或強度將相鄰畫素歸類,以識別物體。

用於影象分割的卷積神經網路:從R-CNN到Mark 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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNNRoss 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 個提案中共享計算的方法?

用於影象分割的卷積神經網路:從R-CNN到Mark 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:將所有模型併入一個網路

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNNFast 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,通過使用選擇性搜尋建立這些提案,這是一個相當緩慢的過程,被認為是整個流程的瓶頸。

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN微軟研究院首席研究員孫劍領導了 Faster R-CNN 團隊。

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

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN在 Faster R-CNN,單個 CNN 用於區域提案和分類。

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

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

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

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

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

如何生成區域

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN區域提案網路在 CNN 的特徵上滑動一個視窗。在每個視窗位置,網路在每個錨點輸出一個分值和一個邊界框(因此,4k 個框座標,其中 k 是錨點的數量)。

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN我們知道,用於人的邊框往往是水平和垂直的。我們可以使用這種直覺,通過建立這樣維度的錨點來指導區域提案網路。

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

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

  • 輸入:CNN 特徵圖。

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

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

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN影象例項分割的目的是在畫素級場景中識別不同目標。

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

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

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNNFacebook AI 的研究員 Kaiming He 是 Mask R-CNN 的主要作者,也是 Faster R-CNN 的聯合作者。

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

用於影象分割的卷積神經網路:從R-CNN到Mark 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 以使其更準確

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNN影象通過 RoIAlign 而不是 RoIPool 傳遞,使由 RoIPool 選擇的特徵圖區域更精確地對應原始影象的區域。這是必要的,因為畫素級分割需要比邊界框更細粒度的對齊。

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

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

用於影象分割的卷積神經網路:從R-CNN到Mark 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 的分類和邊界框組合,以產生如此驚人的精確分割:

用於影象分割的卷積神經網路:從R-CNN到Mark R-CNNMask 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 間隔只有三年!隨著持續的資金、關注和支援,計算機視覺在未來三年會有怎樣的發展?我們非常期待。


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

相關文章