1. 程式人生 > >CNN影象分割簡史:從R-CNN到Mask R-CNN(譯)

CNN影象分割簡史:從R-CNN到Mask R-CNN(譯)

另外還有一類基於FCN(Fully Convolutional Network)的語義分割方法,大家可以參考十分鐘看懂影象語義分割技術 | 雷鋒網,瞭解此類方法。

Athelas中可以看到,卷積神經網路(Convolutional Neural Networks,CNNs)應用非常廣泛,不僅僅是用於解決分類問題。這篇博文主要介紹如何利用CNNs進行影象例項分割。

                       

圖1 在ImageNet挑戰中,CNNs當前已經達到優於人類的水平,上圖中Y軸表示ImageNet的錯誤率。

雖然分類結果非常驚人,但影象分類任務相對於人類視覺理解任務的複雜性和多樣性來說是非常簡單的。

                                                     

圖2 分類任務中的影象示例,一般影象構圖完整且只包含一個物體

影象分類任務中的一張影象一般只關注一個目標,從而預測影象是什麼(如圖2所示)。但是我們在觀察周圍世界時要完成非常複雜的事情。

圖3 現實生活中的場景一般包含各種各樣相互重疊的不同目標、背景和動作

現實世界中的複雜場景一般存在相互重疊的目標和不同背景,我們在觀察時不僅能夠分辨不同的目標,而且可以識別不同目標的邊界、差異以及他們之間的(空間)關係。

                                   

圖4 影象分割任務的目標是對影象中的不同物體進行分類,並識別其邊界。(源於:[1703.06870] Mask R-CNN

CNNs是否可以幫助我們完成如此複雜的任務?也就是說,給定一張複雜的影象,我們是否可以利用CNNs識別影象中的不同目標以及他們的邊界呢?Ross Girshick和他的同事近幾年的研究表明,答案是當然可以!

本文目標

本博文涵蓋目標檢測和分割中所用主要技術背後的知識,以及這些技術的演化過程,特別是R-CNN(Regional CNN)(CNNs最初應用於檢測和分割問題的方法)及其派生Fast R-CNN和Faster R-CNN,最後我們會講述Facebook Research最新提出的Mask R-CNN,對這類目標檢測問題擴充套件到畫素級影象分割。本博文中引用的論文如下:

2014: R-CNN - An Early Application of CNNs to Object Detection

                                         

                                          圖5 目標檢測演算法(如R-CNN)識別影象中主要物體的位置和類別

受Toronto大學Hinton實驗室研究成果的啟發,UC Berkeley大學Jitendra Malik教授的團隊提出當今看來不可避免的問題:

Krizhevsky等的研究成果如何才能擴充套件到目標檢測?

目標檢測任務從影象中找到不同的物體並對其進行分類(如圖5所示)。Ross Girshick (a name we’ll see again)、Jeff Donahue和Trevor Darrel團隊發現目標檢測問題可以藉助於Krizhevsky的成果並在PASCAL VOC資料集(ImageNet挑戰中的目標檢測資料集)中進行測試,文中提到:

這篇論文首次表明了在PASCAL VOC資料集上的目標檢測任務中,CNNs能夠獲得比傳統特徵(如HOG特徵等)好很多的效能。

接下來我們一起理解一下Regions CNNs(R-CNN)工作的架構。

理解R-CNN

R-CNN的目標是從影象中正確識別出主要的物體(採用bounding box進行標註):

  • 輸入:影象
  • 輸出:影象中每個物體的Bounding Box+標籤

如何找出這些bounding box呢?R-CNN採用我們直覺上認為的方式:給出一堆影象可能的box,然後判斷這些box是否和物體相關

R-CNN採用Selective Search的方法給出region proposals。從高層理解,Selective Search通過不同尺寸的視窗在影象中進行滑動(如圖6所示),對於每個尺寸方法採用紋理、顏色或亮度對鄰近的畫素進行聚合,從而識別物體。

獲得region proposals集合之後,R-CNN將這些區域變換為標準的方形尺寸,並採用AlexNet的修改版本判斷其是否是有效region(如圖7所示)。

在CNN的最後一層,R-CNN增加了一個簡單的分類器Support Vector Machine(SVM),用於判斷區域是否是物體,以及物體的類別。

精化Bounding Box

現在已經找到Box中的物體,接下來是否可以tighten bounding box(進一步調整物體邊界,使其更貼近物體周圍),從而獲取物體的真實範圍呢?當然,這也是R-CNN的最後一步,R-CNN對region proposals進行簡單的線性迴歸,從而生成tighten之後的Bounding Box做為最終結果。迴歸模型的輸入和輸出如下:

  • 輸入:物體在影象中的sub-regions
  • 輸出:sub-resions中物體的新Bounding Box座標

總結一下,R-CNN的步驟如下:

  1. 生成regions proposals集合作為Bounding Box;
  2. 採用預訓練的AlexNet+SVM判斷Bouding Box對應影象的物體型別;
  3. 對已分類物體的Bounding Box進行線性迴歸,輸出Box對應的tighter bounding boxes。

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

R-CNN效果非常好,但是效率太低了,主要的原因:

  1. 對於每張影象的每個region proposal都需要進行前向的CNN(AlexNet)計算,大概每張影象需要2000次的前向CNN;
  2. 方法中的三個模型是分別訓練的——CNN提取影象特徵、分類器預測類別、迴歸模型tighten bounding box的邊界,這也導致流程不易訓練。

2015年,R-CNN的作者Ross Girshick解決了上述兩個問題,並提出了Fast R-CNN的演算法,接下來介紹一下Fast R-CNN。

RoI(Region of Interest)Pooling

Ross Girshick發現,每張影象的proposed regions總是樸素重疊的,從而導致重複的CNN前向計算(可能達到2000次)。他的想法非常簡單——為什麼不每張影象計算一次CNN,為2000個proposed regions找到一種計算共享的方法

圖8 在RoIPool方法中,採用一次CNN前向計算提取整幅影象的特徵圖,影象中每個region的特徵則從上述特徵圖中提取。(源於:Stanford’s CS231N slides by Fei Fei Li, Andrei Karpathy, and Justin Johnson)

Fast R-CNN採用RoIPool(Region of Interest Pooling)解決此問題。作為方法的核心,RoIPool分享整幅影象的CNN前向計算給不同的regions。如圖8所示,特別注意每個區域的CNN特徵如何從CNN的特徵影象中選擇對應區域特徵的。接下來對每個區域的特徵進行pool操作(一般採用max pooling)。這樣的話我們只需要一次原始影象的CNN前向計算,而非R-CNN中的2000次!

Combine All Models into One Network

Fast R-CNN第二個想法是將CNN、分類和邊界線性迴歸的訓練融合到一個單獨的網路中。不像R-CNN中的特徵提取(CNN)、分類(SVM)和邊界tighten(迴歸)分別採用三個不同的模型,Fast R-CNN採用一個單獨網路實現上述三個步驟。

圖9展示了具體融合的過程,Fast R-CNN採用softmax layer取代了SVM分類器作為CNN網路的類別輸出層,方法增加了一個平行於softmax layer的linear regression layer作為網路的邊界座標輸出層,這樣所有的輸出需要來自於同一個網路!整個模型的輸入和輸出如下:

  • 輸入:影象以及region proposals
  • 輸出:每個區域對應物體的類別以及物體的tighter bounding boxes

2016: Faster R-CNN - Speeding Up Region Proposal

經過上述的改進,Fast R-CNN仍然存在一個瓶頸——region proposer。目標檢測方法的第一步就是生成用於測試的潛在bouding box集合或者regions of interest,Fast R-CNN中採用的Selective Search速度非常慢,這也是限制整個演算法效率的主要瓶頸。

2015年中,微軟的研究團隊(Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun)提出一種Faster R-CNN的方法,使得region proposal非常高效。

Faster R-CNN的想法來源於region proposals的特徵計算依賴於影象的特徵(採用CNN一次性計算整幅影象的特徵),那麼為何不重用這些相同的CNN特徵進行region proposals,從而取代單獨的selective search演算法呢

                         

實際上,這就是Faster R-CNN方法的核心。圖10描述了單獨CNN完成region proposals和分類的過程。這樣只需要訓練一個CNN,region proposals的計算基本可以忽略。文中描述:

我們發現用於檢測區域的卷積特徵圖(類似於Fast R-CNN)同樣可以用來生成region proposals(因此使得region proposals變得毫不費力)。

模型的輸入和輸出如下:

  • 輸入:影象(不需要region proposals)
  • 輸出:影象中物體的類別及其對應的bounding box座標

How the Regions are Generated

接下來討論一下Faster R-CNN如何從CNN特徵圖中生成region proposals。Faster R-CNN在CNN特徵的上層增加了一個全卷積網路,即Region Proposal Network.

                    

圖11 Region Proposal Network在CNN的特徵圖上進行滑動視窗操作,對於每個視窗的位置,網路會對每個anchor(候選區域)輸出分數和bounding box(共4*k個box座標,k是anchor的個數)。(源於:Towards Real-Time Object Detection with Region Proposal Networks


Region Proposal Network在CNN特徵圖上進行滑動視窗操作,然後每個視窗,輸出k個潛在的bounding box和分數,k個boxes如何選擇和表達呢?

                                                              

圖12 一般行人的bouding box趨向於豎直長方形,據此我們可以構建這樣維度的anchor,從而Region Proposal Network的先驗知識。(源於:CSE 6367 - Assignments - Assignment 1

直覺上,我們會認為影象中的物體應該符合一定的大小和長寬比,比如行人的形狀更可能是長方形的box。類似地,我們一般也不會關注那些非常窄的boxes。據此,我們構建了k個這樣的common aspect ratios,並稱作anchor boxes。每個anchor box輸出bounding box和對應的位置影象的分數。

考慮這些anchor boxes,Region Proposal Network的輸入和輸出如下:

  • 輸入:CNN特徵圖
  • 輸出:每個anchor對應的bounding box以及分數(表示bounding box中對應影象部分是物體的可能性)

然後,將Region Proposal Network中輸出的目標可能bounding box輸入到Fast R-CNN,並生成類別和tightened bounding box。

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

                 

到這裡我們已經可以利用CNN特徵快速定點陣圖像中不同目標的bounding boxes了,那麼接下來是否可以繼續延伸一下,提取畫素級的目標例項而不是僅僅給出bounding boxes呢?這就是經典的影象分割問題,Kaiming He和他的團隊(包括Girshick)在Facebook AI實驗室中採用的架構,Mask R-CNN。

類似於Fast R-CNN和Faster R-CNN,Mask R-CNN的潛在創意來源也是很直接的,鑑於Faster R-CNN在目標檢測中的效果,我們是否可以將其擴充套件到畫素級的影象分割中呢?

                      

圖14 Mask R-CNN在Faster R-CNN的CNN特徵提取層的上層增加一個全卷積網路(Fully Convolutional Network,FCN)用於生成mask(分割輸出結果)。(源於:[1703.06870] Mask R-CNN

Maks R-CNN在Faster R-CNN的基礎上增加一個分支,用於輸出一個二值掩膜(Binary Mask),判斷給定畫素是否屬於物體。上述分支(圖14中的白色部分)就是一個置於CNN特徵圖上層的全卷積神經網路。模型的輸入和輸出如下:

  • 輸入:CNN特徵圖
  • 輸出:指示畫素是否屬於物體的二值矩陣

但是Mask R-CNN的作者做了少量調整使得整個網路輸出期望的結果。

RoiAlign - Realigning RoIPool to be More Accurate

                  

圖15 採用RoIAlign取代RoIPool對影象進行遍歷,從而使得RoIPool選擇區域的特徵圖與原始影象對應更加精確,主要原因是畫素級的分割比bounding box需要更加精確的對齊。(源於:[1703.06870] Mask R-CNN)

直接採用Faster R-CNN的架構執行Mask R-CNN可能導致RoIPool選擇區域的特徵圖與原始影象區域存在少量的偏離。由於影象分割需要畫素級的標記,因此這樣自然會導致精度下降。

Mask R-CNN採用RoIAlign的方法對RoIPool進行調整使其更精確對齊。

                                            圖16 如何將region of interest的原始影象和特徵圖精確對齊?

假設有一幅128*128大小的影象,對應的特徵圖大小為25*25,如果要將原始影象左上角15*15大小的畫素對映到特徵圖中(如圖16所示),如何從特徵圖中選擇畫素呢?顯然原始影象中每個畫素對應特徵圖中的25/128個畫素,要選擇原始影象中的15個畫素,需要選擇15*25/128=2.93個畫素。

在RoIPool中,我們會四捨五入選擇3個畫素,從而會導致微小的偏移。在RoIAlign中,我們要避免這樣的近似。取而代之的是採用bilinear interpolation獲取精確的對應值,即選擇畫素2.93,從而能夠避免RoIPool導致的偏移。

生成這些mask之後,Mask R-CNN結合Faster R-CNN中生成的分類和bounding box,生成精確的分割結果。

圖17 Mask R-CNN能夠分割影象並對影象中的物體進行分類。(源於:[1703.06870] Mask R-CNN

原始碼

如果你想自己試驗一下這些演算法,這裡是相關的原始碼庫:

Faster R-CNN

Mask R-CNN

推薦一些相關博文:

相關推薦

CNN影象分割簡史R-CNN到Mask R-CNN

另外還有一類基於FCN(Fully Convolutional Network)的語義分割方法,大家可以參考十分鐘看懂影象語義分割技術 | 雷鋒網,瞭解此類方法。 在Athelas中可以看到,卷積神經網路(Convolutional Neural Networks,

分割例如,將一個圖片53k以10k為單位單位的大小可隨著檔案的大小進行調整進行分割,並將分割資訊以鍵值對的形式儲存到.properties檔案中。最後還可以將分割的檔案能夠完整的合併在一起

將一個53k的圖片以10k為單位進行分割,最後再將分割的檔案合併到一起。 首先進行檔案的分割,這裡使用了兩種方法: (1)其中splitFile(file)方法只是簡單地將圖片進行了分割。 (2)splitFile_2(file)方法除了將檔案進行分割,還將一些配置資訊進行了儲存

SpringMVC乾貨系列零搭建SpringMVC+mybatisspringMVC原理解析及常用註解

SpringMVC框架介紹 SpringMVC就是通過DispatcherServlet將一堆元件串聯起來的Web框架。 Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。 Spring 框架提供了構建 We

SVM全系列原理到python實現SVM原理

前言 本文開始主要介紹一下SVM的分類原理以及SVM的數學匯出和SVM在Python上的實現。借鑑了許多文章,會在後面一一指出,如果有什麼不對的希望能指正。 一、 SVM簡介 首先看到SVM是在斯坦福的機器學習課程上,SVM是作為分類器在logisticregr

走近人臉檢測VJ到深度學習

http://mt.sohu.com/20160413/n444091833.shtml 作者:鄔書哲 中科院計算所智慧資訊處理重點實驗室VIPL課題組博士生 研究方向:目標檢測,尤其關注基於深度學習的目標檢測方法。   本文分上下兩篇,上篇主要介紹人臉檢測的基本流程,以及傳統的VJ人臉檢測器及

Ros平臺下零開始學習SLAM

ROS平臺下:從零開始學習SLAM(序) 前言   16年年底,我們實驗室迎來了一隻可愛的小傢伙,它有綠綠的面板,甚是俏皮可愛;它還有一個帥氣的名字:Irobotcreat2。   伴隨著導師一聲令下,一段神奇的Slam之旅至此拉開了序幕。   年後

SQL Server中事務日誌管理的步驟,第5級完全恢復模式管理日誌

維護計劃 recover 最小 替代 關心 每日 工作方式 檢查 耗時 SQL Server中事務日誌管理的步驟,第5級:完全恢復模式管理日誌 作者:Tony Davis,2012/01/27 系列 本文是進階系列的一部分:SQL Server中事務日誌管理的步驟 當事情進

影象分割的關鍵技術一站式caffe工程實踐連載5

知識引入 本次主要和大家分享的是影象分割中的關鍵技術,首先對任務分析,一般在正式開始影象任務之前,我們會對任務的整個的技術方案進行一個評估,評估之後我們會選擇比較簡單比較穩妥的方案,也就是精簡我們的任務。我們的任務是一個影象分割的任務,影象分割任務與影象分類任務不同,影象分

零開始學caffe利用GoogleNet實現影象識別

一、準備模型 在這裡,我們利用已經訓練好的Googlenet進行物體影象的識別,進入Googlenet的GitHub地址,進入models資料夾,選擇Googlenet 點選Googlenet的模型下載地址下載該模型到電腦中。 模型結構 在這裡,我們利用之前講

零開始學caffe在Windows下實現影象識別

本系列文章主要介紹了在win10系統下caffe的安裝編譯,運用CPU和GPU完成簡單的小專案,文章之間具有一定延續性。 step1:準備資料集 資料集是進行深度學習的第一步,在這裡我們從以下五個連結中下載所需要的資料集: animal flower plane hou

計算機視覺識別簡史 AlexNet、ResNet 到 Mask RCNN

最近,物體識別已經成為計算機視覺和 AI 最令人激動的領域之一。即時地識別出場景中所有的物體的能力似乎已經不再是祕密。隨著卷積神經網路架構的發展,以及大型訓練資料集和高階計算技術的支援,計算機現在可以在某些特定設定(例如人臉識別)的任務中超越人類的識別能力。 我感覺每

全卷積網路到大型卷積核深度學習的語義分割全指南

機器之心:By路雪 2017年7月14日  什麼是語義分割?   語義分割指畫素級地識別影象,即標註出影象中每個畫素所屬的物件類別。如下圖:      左:輸入影象,右:該影象的語義分割   除了識別車和騎車的人,我們還需要描繪出每個物體的邊界。因此,與影象分類

影象分割演算法基於梯度分水嶺的分割演算法

程式碼實現:import matplotlib.pyplot as plt from scipy import ndimage as ndi from skimage import morphology,color,data,filters import cv2 # ima

未來簡史智人到神人

《未來簡史:從智人到神人》是由尤瓦爾·赫拉利創作的科技理論類著作。該書主要講述了進入21世紀後,曾經長期威脅人類生存、發展的瘟疫、饑荒和戰爭已經被攻克,智人面臨著新的待辦議題:永生不老、幸福快樂和成為具有“神性”的人類。      

深入淺出聊Unity3D項目優化Draw Calls到GC 難度2 推薦5

分配 shade 觸發 比較 抉擇 share 關鍵字 兩個 聲明 原文出處: 慕容小匹夫的博客(@慕容小匹夫) 前言: 剛開始寫這篇文章的時候選了一個很土的題目。。。《Unity3D優化全解析》。因為這是一篇臨時起意才寫的文章,而且陳述的都是既有的事實,因而給自己“

《Java入門到放棄》入門篇Struts2的常用驗證方式

java struts action validate 數據驗證 前一回,我們講完了“直接在功能方法中寫驗證代碼”這種驗證方式,接下來,我們繼續搞定後續的三種方式。二、重寫validate方法(註意這個方法會驗證該類中所有的方法) 使用重寫驗證方法的好處就是,又可以少寫一句代碼了!!

R語言學習筆記十三時間序列

abs 以及 stat max 時間 aic air ror imp #生成時間序列對象 sales<-c(18,33,41,7,34,35,24,25,24,21,25,20,22,31,40,29,25,21,22,54,31,25,26,35) tsal

零開始學習熱更新搭建FTP服務器

啟動服務 ocs 手動 動態ip 手動添加 如果 信息 clas 路徑 --轉載了一部分來自http://blog.csdn.net/haibo19981/article/details/51890912 以下是在win7下的coocs2dx3.10 lua開發的 1.

輸入url到頁面URL與DNS

ava .cn 控制 tp服務器 兩種 網絡配置 占用 index 相對 瀏覽器引擎默認:webkit內核 一、輸入地址   當我們開始在瀏覽器中輸入網址的時候,現代瀏覽器就可以智能的匹配完整 url了,它會從歷史記錄,書簽等地方,找到已經輸入的字符串可能對應的 url,然

綜合指南通過Ubuntu 16.04上Source構建來安裝支持GPU的Caffe2

疑問 選項 靈活性 vid 克隆 .profile rop prope 特定 (譯)綜合指南:通過Ubuntu 16.04上從Source構建來安裝支持GPU的Caffe2 譯者註: 原文來自:https://tech.amikelive.com/node-706/comp