CNNs 在圖像分割中應用簡史: 從R-CNN到Mask R-CNN


版權:本文版權歸作者和博客園共有 
轉載:歡迎轉載,但未經作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責任
 
本文僅是本人學習A Brief History of CNNs in Image Segmentation: From R-CNN to Mask R-CNN后對原文的翻譯,如有錯誤之處,歡迎指出
 
近些年來,盡管用CNNs做圖像分類任務的結果很驚艷,但是,圖像分類在復雜度和多樣性方面都比真實的人類視覺理解簡單得多。
分類任務中用的一個圖像實例。注意到圖像是框(framed)好的而且只有一個物體。
在分類中,一般一張圖像只需關注一個物體,任務就是說出這個圖像是什么。但環顧我們的世界,我們要執行的是一個更復雜的任務。
現實生活中的場景往往由大量不同的、重疊的對象、背景、和行為(actions)組成,我們不僅要對不同的物體分類還要識別出他們的邊界、差異和相互間的關系。
圖像分割,目標是對圖像的不同目標分類,識別出他們的邊界,圖來自Mask R-CNN論文
 
本文目標
分析目標檢測和分割中用到的主要技巧后包含的intuition,看看他們是怎么從一個方法進化到另一個的。我們會提到R-CNN (Regional CNN),CNNs在這個問題的原始應用,和他的后代Fast R-CNN,Faster R-CNN. 最后分析一下Mask R-CNN,是Facebook研究院最新出的一篇論文,把目標檢測技巧擴展到提供像素級分割。引用了四篇論文:
 
2014: R-CNN - CNNs在目標檢測的早期應用
 

目標檢測算法,如R-CNN輸入一張圖像,確定圖像中主要物體的位置和類別。

 目標檢測是從一幅圖像中找出不同的物體並且對物體分類的任務。受多倫多大學Hinton實驗室研究的啟發,UC伯克利的Jitendra Malik教授領導的一個小團隊發現,可以類似圖像分類任務,用 Krizhevsky et. al’s(AlexNet網絡)在目標檢測PASCAL VOC Challenge上做,第一次將CNNs用在了PASCAL VOC上,與簡單的類似hog特征的方法相比,極大地提升了目標檢測的性能。下面花點時間理解一下他們的架構Regions With CNNs (R-CNN) works。
 
Understanding R-CNN
 R-CNN的目標是輸入一張圖像,正確地判斷主要目標在圖像的什么位置(用bounding box表示)
  • Inputs: Image 輸入是圖像
  • Outputs: Bounding boxes + labels for each object in the image.輸出是,對於圖像中的每個物體給出 Bounding boxes+標簽
 那么怎么找到 bounding boxes在哪呢?R-CNN按照我們的直覺這樣做--在圖像中給出很多boxes,判斷每一個box是否真的對應一個物體。

 選擇性搜索Selective Search利用多尺度的窗口搜索有紋理、顏色和強度的相鄰像素。 圖片來源: https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf

 
R-CNN用Selective Search方法創建這些邊界框 bounding boxes,或者候選區域region proposals。在high level上,Selective Search通過不同尺寸的窗觀察圖像,對每個尺寸,利用紋理、顏色和強度組合起來的鄰近像素一起識別物體。
 一旦創建了一些候選區域region proposals,R-CNN就把區域變成標准的方形尺寸,輸入到修改過了的AlexNet 中,見上圖。在CNN的最后一層,R-CNN加了一個支持向量機SVM來簡單地判斷是否是物體,若是,判斷是個什么物體,見上圖的第四步。
 
改進邊界框Bounding Boxes
 
現在框中有物體了,能夠減小框,適應物體的真實尺寸嗎?可以通過R-CNN的最后一步來實現,就是在候選區域region proposal上用一個簡單的線性回歸,生成更小tighter 的bounding box坐標得到最終的結果,下面是回歸模型的輸入和輸出:
  • Inputs: sub-regions of the image corresponding to objects.圖像對應物體的子區域
  • Outputs: New bounding box coordinates for the object in the sub-region.在子區域中物體的新的邊界框坐標
總體來說,R-CNN就是幾個步驟:
  • 生成一組候選邊界框
  • 將帶有候選邊界框的圖像輸入到預訓練好的AlexNet中,最后用SVM判斷圖像中物體在哪個框中
  • 如果物體被分類了(這個框確實包含物體),就把框輸入到線性模型中,輸出這個框更窄tighter的坐標。

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

 
Ross Girshick wrote both R-CNN and Fast R-CNN. He continues to push the boundaries of Computer Vision at Facebook Research.
 
 R-CNN很慢,有幾個很簡單的原因:
  • 每張圖像的每個候選區域都要輸入到CNN(AlexNet)中(每張圖像大約2000次)
  • 需要分別訓練三個不同的模型-生成圖像特征的CNN,預測類別的分類器(SVM)和用於縮小邊界框的回歸模型。
 在2015年,Ross Girshick,R-CNN的第一作者解決了這兩個問題,得到了Fast R-CNN。我們看看它的主要思想(insights)。
 
Fast R-CNN Insight 1: RoI (Region of Interest) Pooling感興趣區域池化
 
 作者意識到對每張圖像總是有許多候選區域會重疊,會導致重復地做相同的CNN計算(約2000次)。他的insight很簡單-為什么不每張圖像做一次CNN計算,然后找到一個方法,在2000候選區域上共享計算結果呢?
 

這就是Fast R-CNN做的一個技巧--RoIPool (Region of Interest Pooling)感興趣區域池化。在上圖中,每個區域的CNN特征是通過從CNN的特征圖中選擇對應的區域得到的,然后,每個區域的特征再經過池化(通常最大池化)這樣相比於之前的每張圖像需要進入CNN2000次,用這個方法后每張圖像就只經過CNN一次。

 Fast R-CNN Insight 2: Combine All Models into One Network
 

Fast R-CNN的第二個insight就是在一個單獨模型中,聯合訓練CNN、分類器和邊界框回歸器,R-CNN需要有不同的模型提取圖像特征(CNN)、分類(SVM)和縮小邊界框(回歸器)。

 Fast R-CNN在CNN最后用soft-max層代替SVM分類器輸出一個分類結果,還增加了一個線性回歸,和softmax層並行,用來輸出邊界框坐標。用這種方法所有的輸出需要從單獨的網絡得到。下面是這個模型的輸入和輸出:
  • Inputs: Images with region proposals.帶有候選區域的圖像
  • Outputs: Object classifications of each region along with tighter bounding boxes.每個區域的物體分類和更窄的邊界框
 

2016: Faster R-CNN - 加速候選區域

 Fast R-CNN中仍然有個瓶頸--候選區域部分。檢測目標未知的第一步是生成一些可能的邊界框或者感興趣區域用於測試,在Fast R-CNN中,這些候選是用Selective Search來做的,這個過程相當慢,是整個過程的瓶頸。
 

 

 Jian Sun, a principal researcher at Microsoft Research, led the team behind Faster R-CNN. Source: https://blogs.microsoft.com/next/2015/12/10/microsoft-researchers-win-imagenet-computer-vision-challenge/#sm.00017fqnl1bz6fqf11amuo0d9ttdp
 
在2015年年中,微軟的一個團隊發現了一種生成候選區域的方法--Faster R-CNN,整個過程幾乎沒有cost。
 R-CNN的想法就是候選區域取決於圖像的特征,這在通過CNN的過程中已經計算過了(分類的第一步),那么為什么要單獨運行 selective search 算法,重新用那些相同的CNN結果來得到候選區域呢?這就是Faster R-CNN的實現。

 
 In Faster R-CNN, a single CNN is used for region proposals, and classifications. Source: https://arxiv.org/abs/1506.01497.
 
 從上圖中可以看出一個單獨的CNN用於得到候選區域和分類,以這種方式,只需訓練一個CNN,無需額外的成本就可以得到候選形狀。(作者是觀察到:用基於區域的檢測器的卷積特征圖,如Fast R-CNN,也可以用於生成候選區域) 模型的輸入和輸出為:
  • Inputs: Images (Notice how region proposals are not needed).圖像,不需要候選區域
  • Outputs: Classifications and bounding box coordinates of objects in the images.圖像中物體的分類和邊界框坐標。
區域是怎么生成的
 Faster R-CNN在CNN得到的特征頂部增加了一個全卷積網絡--候選區域網絡Region Proposal Network。
 

 The Region Proposal Network slides a window over the features of the CNN. At each window location, the network outputs a score and a bounding box per anchor (hence 4k box coordinates where k is the number of anchors). Source: https://arxiv.org/abs/1506.01497.

 區域候選網絡在CNN特征圖上滑動窗口,在每個窗口,輸出k個可能的邊界框,還有一個衡量框的可能性的得分。

We know that the bounding boxes for people tend to be rectangular and vertical. We can use this intuition to guide our Region Proposal networks through creating an anchor of such dimensions. Image Source: http://vlm1.uta.edu/~athitsos/courses/cse6367_spring2011/assignments/assignment1/bbox0062.jpg.

 直觀地,我們知道圖像中的物體應該符合某個常見的長寬比和尺寸,例如,我們想要一些和人的形狀相似的矩形框,同樣,我們不想看到非常瘦的框。按這種方式,我們創建了K個常見的長寬比稱為anchor boxes,對於每個anchor box,我們輸出一個邊界框和並對每個位置打分。這個候選區域網絡的輸入和輸出為:
  • Inputs: CNN Feature Map. CNN特征圖
  • Outputs: A bounding box per anchor. A score representing how likely the image in that bounding box will be an object. 每個anchor一個邊界框,打分代表邊界框內是物體的可能性
 之后把可能是物體的邊界框輸出到Fast R-CNN中得到分類和窄的邊界框。

2017: Mask R-CNN - 將Faster R-CNN拓展到像素級分割

The goal of image instance segmentation is to identify, at a pixel level, what the different objets in a scene are. Source: https://arxiv.org/abs/1703.06870.

 我們能否用這種技術定位出每個物體的精確像素而不只是邊界框?這個問題就是圖像分割。
 

Kaiming He, a researcher at Facebook AI, is lead author of Mask R-CNN and also a coauthor of Faster R-CNN.

 和Fast R-CNN, Faster R-CNN很像, Mask R-CNN’s 潛在的直覺是直接的。
 

 

 In Mask R-CNN, a Fully Convolutional Network (FCN) is added on top of the CNN features of Faster R-CNN to generate a mask (segmentation output). Notice how this is in parallel to the classification and bounding box regression network of Faster R-CNN. Source: https://arxiv.org/abs/1703.06870.
 
 Mask R-CNN在Faster R-CNN中添加一個分支,用於輸出二值mask,表示給定像素是否是一個物體的一部分,上圖中白色部分是分支,是一個在CNN特征圖頂部的全卷積網絡,下面是輸入和輸出:
  • Inputs: CNN Feature Map. CNN特征圖
  • Outputs: Matrix with 1s on all locations where the pixel belongs to the object and 0s elsewhere (this is known as a binary mask).二值矩陣,當該像素屬於物體時mask值為1,否則為0
還需做個調整RoiAlign 。
RoiAlign - Realigning RoIPool to be More Accurate 調整RoIPool 
 

Instead of RoIPool, the image gets passed through RoIAlign so that the regions of the feature map selected by RoIPool correspond more precisely to the regions of the original image. This is needed because pixel level segmentation requires more fine-grained alignment than bounding boxes. Source: https://arxiv.org/abs/1703.06870.

 不修改原始 Faster R-CNN架構,作者發現用RoIPool選擇的特征圖和原圖的區域沒有完全對齊,因為圖像分割任務要求像素級,不像邊界框,這樣自然會導致不准確。作者機智地用RoIAlign方法調整RoIPool使對齊更准確。
 

How do we accurately map a region of interest from the original image onto the feature map?

在RoIPool中我們大概選擇兩個像素,得到了有些不對齊的結果,然而在RoIAlign中我們避免用這樣的舍入,用雙線性插值得到准確的2.93。這樣就可以避免RoIPool產生的不對齊。

當得到了這些masks后,Mask R-CNN用Faster R-CNN生成的分類和邊界框將他們結合起來,生成精確地分割。

Mask R-CNN is able to segment as well as classify the objects in an image. Source: https://arxiv.org/abs/1703.06870.


免責聲明!

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



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