從R-CNN到Fast R-CNN,Faster R-CNN,Mask R-CNN

R-CNN 到 Mask R-CNN : CNN在圖像分離中的簡史

簡介

  我們經常使用卷機神經網絡來進行圖片分離(注意,不僅僅是圖片分類哦),在本文中,我們將會了解如何使用卷機神經網絡來做圖片實例分離。

從2012年Alex Krizhevsky,Geoff Hinton,和Ilya Sutskever 贏得ImageNet大獎開始,卷機神經網絡變成爲圖片分類的黃金標準。事實上,從那時開始,卷機神經網絡的識別圖像分類的能力已經超過了人類,表現出無限的魅力。

image_net

CNN在圖片分類領域已經超越了人類(圖一)

雖然這些結果非常令人敬佩,但是,圖片分類與人類視覺的理解能力的複雜程度以及多樣方面相比表現得太過簡單了

image_net
圖片分類中的樣例圖片,想想咱們能用一個框正好把這隻小狗框住嗎(圖二)

在圖片分類的任務中,將要進行分類的圖片一般都是圖片中的焦點,或者可以說是圖片中非常突出的物體,而且圖片上往往僅有一個物體,但是想想,我們生活的世界是一個到處都是充滿各種物體的世界,要在這樣的世界中實現物體分類就沒那麼簡單了。
image_net

充滿各種各樣,豐富多彩物體的現實世界(圖三)

我們所看到的現實世界中,有很多物體是重疊的,並且有不同的背景,我們的任務不僅要把這些物體進行分類,而且還要識別他們的邊界,不同點以及物體之間的相關性。
image_net

我們的目標,分類不同的物體,標定物體的邊界(圖四)

卷機神經網絡能幫我們實現這樣的功能嗎?也就是說,給出一張複雜的圖片,對不同的物體進行分類,標定物體的邊界,卷機神經網絡能完成這樣的功能嗎,該結論已經被Ross Girshick和他的團隊證實——絕對可以

本文目標

  通過這篇文章,我們將會加深使用在物體偵測和分離背後相關技術理論的理解,也會明白這些技術是如何從一種具體實現演進到下一個更先進的技術。總而言之,本文覆蓋了R-CNN(Regional CNN),解決上述問題的一種很原始的技術,緊接着講解他的後續先進的演變 Fast R-CNN和Faster R-CNN,最終給大家講解Mask R-CNN—-一篇由Facebook研究團隊最近提出的基於像素級別的對象偵測和物體分離技術,以下是本文涉及到的論文。
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 - An Early Application of CNNs to Object Detection

image_net
R-CNN 對象偵測算法,拍攝一張照片,然後識別其中的主要物體並且將其分離出來(圖五)

受到多倫多大學Hinton’s(很牛的一個實驗室) 實驗室的啓發,由Jitendra Malik教授領導的一個小團隊提出一個不可避免的疑問:

通用的物體偵測技術能到什麼程度([Krizhevsky 結論,後面還會提到)。

物體偵測是一個從一張圖片中找到不同物體並且將其進行分類的技術,該團隊(由Ross Girshick ,Jeff Donahue和Trevor Darrel組成)發現該問題可以使用PASCAL和VOC 挑戰賽的數據集(和ImageNet 類似)來進行測試,他們提到:

本文首次提到一個CNN網絡可以很明顯的提高物體偵測的性能和準確性,在PASCAL VOC數據集上,以簡化的HOG特徵作爲對比

我們來看看 R-CNN的基本架構以及其是如何工作的

Understanding R-CNN

R-CNN的目標是拍一張照片然後正確地將其中主要的物體識別出來(放置於圖片的一個矩形框中)

  • 輸入:圖片
  • 輸出:圖片矩形框+主要物體的標籤(Label)

我們如何弄清楚矩形框處在什麼位置呢,R-CNN的做法,在圖片上構建一系列矩形框,然後看矩形框之間的相似性和一致性,最後將其合併的一個物體中

image_net

選擇性搜索(selective search)通覽各種大小不一的矩形窗口,然後插在其臨近的矩形,分析其紋理,顏色,強度等信息,最終將其合併成一個更大的矩形框。(圖六)

R-CNN創建這些矩形框或者叫做(region proposal),使用一種叫做選擇性搜索(selective search)的技術,上圖已做說明。
image_net

  一旦這些矩形框(也叫region proposals)創建完成之後,R-CNN通過AlexNet(一種普通圖片物體識別的網絡) 神經網絡傳輸一張圖片來判斷其是否是一個有效的矩形區域,該網絡分類正確的話就證明該矩形框選對了。
  在最後一層CNN網絡,R-CNN使用SVM支持向量機簡化該輸出結果是不是一個物體對象的,如果是則是什麼物體。

改善矩形框(proposals)

現在既然找到了物體矩形框,我們能還能時矩形框更加緊緻使其剛好到達框住物體的大小嗎?答案當然是能了,這就是R-CNN的最後一個步驟,R-CNN執行一個基於矩形框的很簡單的線性迴歸來生成更加緊緻的矩形框座標,最終達到我們的目標,下面是迴歸模型的輸入和輸錯:
* 輸入: 能匹配出物體對象的子區域
* 輸出: 新的物體在子區域中的矩形座標

所以R-CNN的概括如下:
1. 生成一系列矩形候選框
2. 通過將數據輸入預先訓練好的AlexNet神經網絡,並最終通過SVM來判斷一個物體是否在矩形框中
3. R-CNN執行一個基於矩形框的很簡單的線性迴歸來生成更加緊緻的矩形框座標

2015: Fast R-CNN - Speeding up and Simplifying R-CNN

R-CNN 效果很好,但是相當的慢
1. 對於每一張圖片的每一個矩形框(proposals)都需要一個前向CNN網絡作爲支撐,也就是說每張圖片大約需要2000次前向傳輸
2. R-CNN訓練三種模式是單獨分開執行的,CNN 生成圖片特徵,分類器預測類別,迴歸模型使矩形框更加緊緻。這使得整條線特別難執行。

在2015年,Ross Girshick R-CNN 的第一作者,解決了這些問題,從R-CNN到Fast R-CNN的過度只需要很短的時間。

Fast R-CNN 觀點一:RoI(Region of Interest)Pooling

對於前向傳遞的CNN網絡,Girshick 認識到,對於每一張圖片,圖片上的大量矩形框總是重疊在一,致使我們在執行相同的一遍又一遍的CNN計算(~2000次),他的觀點非常簡單,爲什麼不一張圖片只執行一次CNN,然後找到一種方式來共享計算過程。
image_net

該圖就是Fast R-CNN使用的叫做RoIPool的技術(Region of Interest Pooling)。該技術的核心:對於一張圖片在其子區域中RoIPool共享一個前向傳遞的CNN,在上面的圖片中,注意如何從CNN的特徵映射中選擇相應的區域來獲取每個區域的CNN特徵。然後,每個對每個區域的特徵進行池化(通常使用max pooling),所以該過程對於一張原始圖片來說只需傳遞一次數據就能達到以上方法中兩千次的效果。

Fast R-CNN 觀點二:在一個網絡中結合所有模型

image_net

Fast R-CNN 結合CNN,分類器,和矩形框(bounding box)迴歸合爲一個,單一網絡。(圖七)

Fast R-CNN的第二個觀點是將CNN,分類器,和矩形框(bounding box)迴歸合爲一個單一的神經網絡。在前一個R-CNN中我們用不同的模型來提取圖片特徵(CNN),分類(SVM),緊緻Bounding Box(可以稱作迴歸器),故 Fast R-CNN 僅僅使用單一網絡就能實現這三個功能。

從上面圖片可以看出,Fast R-CNN 在CNN的頂層使用softmax迴歸來替換SVM分類器。還添加和softmax並行的線性迴歸來計算Bounding Box的座標,通過這種方式所有的輸出就都來自於單一網絡,以下是該模型的綜述:

  • 輸入:帶矩形框(proposals)的圖片
  • 輸出:每個區域的圖片分類以及緊緻的矩形框(Bounding Box)

2016: Faster R-CNN - Speeding Up Region Proposal

  就算圖片識別和分離取得如此成就,但Fast R-CNN仍然存在瓶頸—-矩形框生成器。正如我們所看到的,偵測對象位置最快速的一步是生成一些潛在的矩形候選框(Bounding Box 或者叫做RoI)。在Fast R-CNN網絡中,這些Box依然是使用Selective Search(選擇性搜索的方式生成),這是一個相當慢的過程。

image_net

孫建大神 MR Leader(圖八)

2015年中旬,由孫建,何凱明,Ross Girshick,任少卿組成的微軟研究團隊發現一種生成proposal的方法,對於Fast R-CNN而言幾乎不耗費任何計算成本。他們命名爲Faster R-CNN

Faster R-CNN的觀點是 Box(proposals)取決於圖片的特徵,該特徵已經在前向CNN計算的過程中(用於分類)進行完成,所以產生一種疑問,爲什麼不重複使用CNN的結果來生成Box( proposals) 而不是執行一個單獨的Selective Search(選擇性搜索)的算法。

image_net

在 Faster R-CNN 中,一個單一的CNN用於做region proposals(Box),分類(圖九)

確實,這就是該團的實現的最後理論,在上述圖片中,你能看到單一CNN用來實現region proposals(Box)和分類,通過這種方式,僅僅只需要一個CNN就能開始進行模型的訓練,從而不需要耗費任何別的代價就能得到proposals(Selective Search得到的結果)。他們提到:

我們觀察的是特徵映射的卷積過程,用於做基於region的偵測,就像Fast R-CNN,也能用來生成proposals。

以下是他們模型的基本輸入輸出:
* 輸入:圖片
* 輸出:物體對象分類和物體的矩形框

區域(Regions)如何生成呢:
讓我們來看看Faster R-CNN如何從CNN特徵中生成候選Box(Regions),Faster R-CNN在CNN特徵的頂層添加了一個全連接的卷機網絡,稱作:Region Proposal Network
image_net

Region Proposal Network 通過在CNN的特徵層滑動一個窗口,在每一個窗口層面,每一個錨點輸出一個分數(權重)和候選矩形框(4k 的矩形大小,k就是錨點的)。(圖十)

Region Proposal Network通過在CNN特徵映射層上傳輸一個滑動窗口,輸出k個潛在的box矩形框以及每一個矩形框所佔的權重。k個box代表又什麼呢?

image_net
我們都知道能框住這個人的一定是矩形,我們能使用這種理論通過創建這種維度矩形的錨點來引導生成我們的Region Proposal Network。(圖十一)

直覺上我們都知道,圖片上的物體都或多或少的能通過調整矩形的寬高比以將其剛好框住。例如,我們知道我們不會看到很多很薄很細的盒子,通過這種方式,我們創建k個這種常見的矩形(我稱之爲錨點矩形)。對於每一個錨點矩形,我們輸出一個矩形框和權重(在每一張圖片的每個位置)。

考慮到這種錨點矩形,我們來看看該網絡的輸入和輸出吧:

  • CNN 特徵映射
  • 每個錨點一個邊界框,以及矩形中的內容是一個物體的權重

2017: Mask R-CNN - Extending Faster R-CNN for Pixel Level Segmentation

image_net

圖片實例分離的目標是在一個場景中在像素級別上鑑別不同的物體(圖十二)

至今爲止,我們已經能使用CNN特徵以許多有趣的方式來有效地在一張圖片中定位不同的對象(以Box的方式)

我們還能繼續往下走嗎?精確的在像素級別上定位物體而不是僅僅以矩形框的方式(bounding box),該問題就是何凱明和他的團隊研究的問題,叫做 Mask R-CNN
與Fast R-CNN和Faster R-CNN相似,Mask R-CNN‘s 重視的理論是前向傳播,考慮到Faster R-CNN在物體鑑別的效果特別好,我們還能繼續實現基於像素級別的物體分離嗎?

image_net

Mask R-CNN 一個全連接的卷機神經網絡(FCN),添加在Faster R-CNN的CNN特徵網絡的頂層,用以生成物體的Mask(分離層的輸出)。注意這和分類以及bounding box迴歸網絡的生成是並行的。(圖十三)

Mask R-CNN 通過在Faster R-CNN網絡上添加個分支,該分支產生一個二分Mask,用來確定給出的像素是否是一個物體的一部分。該分支(在上訴圖片中用白色來體現),和之前一樣,就是一個基於CNN 特徵映射網絡頂層的全連接的卷機神經網絡。下面是他的輸入和輸出:

  • 輸入:CNN特徵映射
  • 輸出:一個矩陣 1 代表該像素屬於該物體,0 表示該像素不屬於該物體

但是Mask R-CNN的作者對之前的網絡做了一些微小的調整
RoiAlign - Realigning RoIPool to be More Accurate

image_net

當執行基於原始的沒有任何修正的Faster R-CNN架構時,Mask R-CNN的作者意識到通過由RoIPool選擇的特徵映射的區域和原始圖片區域相比有一點點的沒有對齊。由於圖像分離需要像素級別的的準確性,和bounding box不一樣(本身就帶有不準確性)

這些作者們通過明智的調整RoIPool的精度來解決該問題。
image_net

我們如何精確的從原始圖片的特徵映射中精確的映射一個區域(圖十四)

想想一下,我們有一個128x128以及一個正特映射25x25的圖片,讓我們假定左上角的15x15的像素和原始圖片的特徵是一致的,我們有多大的可能性從特徵映射中選擇這些這些像素。
我們知道每一個像素在原始圖片中和25/128像素是一致的,要從原始圖片中選擇15個像素,我們僅僅15*25/128 ~= 2.93個像素。

在RoI中,我們可能將該值降低了,選擇兩個像素造成了不對齊。然後,在RoIAlign,我們避免了四捨五入,使用了雙限行插值的方式獲得更高的精度2.93,在該精度下我們避免了由RoI造成的不對齊。

一旦這些Mask 生成,Mask R-CNN結合來源於Faster R-CNN的分類,邊界框,將能產生更加精確的物體分離。

下圖是使用Mask R-CNN 技術生成的圖片生成實例
image_net

原文地址

TensorFlow技術實現Mask R-CNN: https://github.com/CharlesShang/FastMaskRCNN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章