實例分割算法之Mask RCNN

2021-02-23 小資的AI課堂

論文在此:https://arxiv.org/pdf/1703.06870.pdf

Mask RCNN是在Faster RCNN基礎上的改進算法。這裡之所以單獨成文是因為Mask RCNN不僅僅用於目標檢測,還用於實例分割。

目標檢測和實例分割的區別在於,實例分割不僅僅需要將目標識別,還需要將它的輪廓繪出。這意味著需要對每一個像素進行分類。

這麼說也不嚴謹,因為容易跟語義分割混淆。我們還是統一區別一下目標檢測,語義分割,實例分割這三者。

下圖從左往右分別是目標檢測,語義分割,實例分割。

目標分割是圈出圖中目標位置,並對目標分類; 語義分割是圈出目標準確輪廓,並對目標分類;實例分割是圈出目標輪廓,並對目標分類,且在同類別內部再次區分不同個體

好,開始講解Mask RCNN。

Mask RCNN預測流程

先看Mask RCNN的流程圖:

另一種表示:

Maks RCNN從Faster RCNN改進而來,主要的改進點是:

1)將ROI Pooling改進為ROI Align
2)設計出與圖像分類,位置回歸平行的第三個分支:基於FCN的mask層用於圖像分割

1)ROI Align

ROI Algin的引入是為了解決ROI Pooling精度上的缺陷
ROI Pooling在操作過程中,因為使用了量化,導致proposal框被「四捨五入」,與原框有了誤差:

誤差來自於兩個階段:

1) 當從feature map上去圈出原圖中的框映射過來的ROI時,因為不能保證原圖的框坐標正好可以整除縮小到當前feature map上,所以會有量化誤差(注意圖中黑線邊框):

2)接著,需要進行Max Pooling過程。在前文的章節講過,為了保持輸出結果的shape一致,可以通過高寬分別劃分來進行。

現在上圖為8*9,需要Max Pooling為3*3,很顯然寬可以劃分,高被劃分3段會出現浮點數。為了避免浮點數,需要將高量化為最近的6以便整除3,所以就是6*9:

這樣經過兩個誤差之後,ROI其實跟原圖所希望圈出的目標框有了不小的誤差。

為了避免這個誤差,ROI Align決定取消兩次量化過程,讓浮點數留下來。這樣的話,高被分為8/3的三段,寬是3的3段。一共9個區域,每個區域的大小為(8/3,3),如上上圖的紅線部分。

接下來,進行Max Pooling。此時發現9個區域中的每一個區域都有被「斬斷」的像素,我們不知道它的值,因此無法找出哪個才是Max的。怎麼辦?

此時ROI Align中提出的方法是採用雙線性插值來計算虛擬像素點的值,然後進行Max Pooling

如圖所示,將9個區域裡的每一個區域都等分成4份,並且取中心點值,該值由雙線性插值方法獲得。然後將這4個點進行Max Pooling,獲得代表該區域的值。

2)基於FCN的Mask層

FCN即Fully Convolutional Networks,特點是輸出FCN的數據和輸入FCN的數據的shape是一致。它是Mask RCNN的核心,因為這個特性意味著一張圖片在經過FCN之後能保留每一個像素的一對一映射。保留每一個像素的信息,這使得對圖像輪廓的分割成為可能:

在網絡結構上是這樣的:

1)將常規CNN網絡的最後3個全連接層換成了3個卷積層,這3個層的卷積核大小分別為(1,1,4096),(1,1,4096)和(1,1,21)。意味著每個ROI經過這3個層之後,數據變成了一個21維向量,或者說通道數為21的1*1矩陣。21維向量的每一個數值可以理解為21種類別中某一個的概率值。

2)將21個通道的數據通過反卷積轉換為與原圖shape一致的特徵圖,實現像素級的分類。

下圖給出了每個ROI和全圖的概率轉換(種類為1000種)

上面使用了一個關鍵的技術:反卷積。下面附帶理解一下——

附:反卷積

反卷積(Deconvolution)容易導致誤會,其實它不是卷積的逆過程,不如叫它「轉置卷積(Transposed Convolution)」更加合適。

卷積起到降維作用:

反卷積起到還原作用:

也可以使用padding進行反卷積:

這兩個卷積核之間的關係可以通過代數推導:

將矩陣扁平化成為向量X,它通過卷積之後得到向量Y,則有:

實際上C是下面的稀疏矩陣:

矩陣進行逆運算:

也就是說代表反卷積所用的卷積核。

以上。

參考

https://blog.csdn.net/gusui7202/article/details/84799535
https://buptldy.github.io/2016/10/29/2016-10-29-deconv/

相關焦點

  • Mask R-CNN
    Mask R-CNN是一種在有效檢測目標的同時輸出高質量的實例分割mask。是對faster r-cnn的擴展,與bbox識別並行的增加一個預測分割mask的分支。Mask R-CNN 可以應用到人體姿勢識別。並且在實例分割、目標檢測、人體關鍵點檢測三個任務都取得了現在最好的效果。效果圖
  • 算法| 超Mask RCNN速度4倍,僅在單個GPU訓練的實時實例分割算法
    引言 一開始,作者提出了一個疑問:創建實時實例分割算法需要什麼? 在過去的幾年中,在實例分割方向取得了很大進展,部分原因是借鑑了物體檢測領域相關的技術。比如像 mask RCNN 和 FCIS 這樣的實例分割方法,是直接建立在像Faster R-CNN 和 R-FCN 這樣的物體檢測方法之上。然而,這些方法主要關注圖像性能,而較少出現 SSD,YOLO 這類關注實時性的實例分割算法。因此,本文的工作主要是來填補這一空白。
  • 用於圖像分割的卷積神經網絡:從R-CNN到Mask R-CNN
    選自Athelas作者:Dhruv Parthasarathy機器之心編譯參與:王宇欣、hustcxy、黃小天卷積神經網絡(CNN)的作用遠不止分類那麼簡單!在本文中,我們將看到卷積神經網絡(CNN)如何在圖像實例分割任務中提升其結果。
  • 愷明大神 Mask R-CNN 超實用教程
    對象檢測器,如yolo、faster r-cnn和ssd,生成四組(x,y)坐標,表示圖像中對象的邊界框。從獲取對象的邊界框開始挺好的,但是邊界框本身並不能告訴我們(1)哪些像素屬於前景對象,(2)哪些像素屬於背景。是否可以為圖像中的每個對象生成一個MASK,從而允許我們從背景分割前景對象?
  • 愷明大神 Mask R-CNN 超實用教程
    對象檢測器,如yolo、faster r-cnn和ssd,生成四組(x,y)坐標,表示圖像中對象的邊界框。從獲取對象的邊界框開始挺好的,但是邊界框本身並不能告訴我們(1)哪些像素屬於前景對象,(2)哪些像素屬於背景。這就引出了一個問題:是否可以為圖像中的每個對象生成一個MASK,從而允許我們從背景分割前景對象?
  • CondInst:性能和速度均超越Mask RCNN的實例分割模型
    目前基於one-stage的物體檢測模型已經在速度和性能上超越two-stage模型,同樣地,大家也希望能找到one-stage的實例分割模型來替換Mask RCNN。分離檢測和分割:將檢測和分割分離成兩個部分這樣可以並行化,如YOLACT在檢測模型基礎上額外預測了一系列prototype masks,然後檢測部分每個instance會預測mask coeffs來組合masks來產生instance mask,BlendMask是對這一工作的進一步改進;不依賴檢測的實例分割:不依賴檢測框架直接進行實例分割,TensorMask
  • 【論文解讀】Facebook 何凱明 Mask R-CNN 狙擊目標實例分割
    分類只能做到識別這個圖片是人;目標檢測只能檢測到這個圖片裡有人,把人的地方框出來,對每一個人這個個體不一樣是沒有判斷的,統一認為是人;而圖像分割主要是將人和背景分割出來,而實例分割就是要把每個人清晰的分割出來。
  • 代替Mask R-CNN,BlendMask欲做實例預測任務的新基準?
    在今天要為大家介紹的工作中,作者通過有效地將實例級信息與具有較低級細粒度的語義信息結合起來,提升了掩碼預測精度。本文的主要貢獻是提出了一個Blender模塊,該模塊從自上而下和自下而上的實例分割方法中汲取了靈感。由於該方法簡單且有效,作者希望本文的BlendMask可以作為各種實例預測任務的基準。
  • 何愷明團隊:從特徵金字塔網絡、Mask R-CNN到學習分割一切
    Mask R-CNN用於目標實例分割。簡單來說,目標實例分割基本上就是對象檢測,但不是使用邊界框,它的任務是給出對象的精確分割圖!TL;DR :如果你已經了解Faster R-CNN,那麼Mask R-CNN就很好理解了,就是為分割增加另一個head(branch)。
  • 【源頭活水】Sparse R-CNN:簡化版fast rcnn
    fast rcnn算法,是faster rcnn算法的前身,由於其巨大計算量以及無法端到端訓練,故而提出區域提取網絡RPN加上fast rcnn的faster rcnn算法。但是你是否想過去掉RPN,僅僅在fast rcnn算法基礎上額外引入點新技術就可以實現更簡潔、更高精度的替代算法?本文借鑑了最新提出的detr算法核心思想,從而實現了上述想法。Sparse R-CNN極其簡單,不需要設置煩人的密集anchor,不需要RPN、不需要複雜後處理和nms,不需要小心的平衡RPN和fast rcnn訓練過程,也沒有難調的超參,和detr一樣完美。
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    Mask R-CNN 可以應用到人體姿勢識別,並且在實例分割、目標檢測、人體關鍵點檢測三個任務都取得了很好的效果。因此,百度深度學習框架 PaddlePaddle 開源了用於目標檢測的 RCNN 模型,從而可以快速構建強大的應用,滿足各種場景的應用,包括但不僅限於安防監控、醫學圖像識別、交通車輛檢測、信號燈識別、食品檢測等等。
  • Facebook 最新論文:Mask R-CNN實例分割通用框架,檢測,分割和特徵...
    近日, FAIR部門的研究人員在這一領域又有了新的突破——他們提出一種目標實例分割(object instance segmentation)框架Mask R-CNN,該框架較傳統方法操作更簡單、更靈活。研究人員把實驗成果《Mask R-CNN》發布在了arXiv上,並表示之後會開源相關代碼。以下為AI科技評論據論文內容進行的部分編譯。
  • 【從零開始學Mask RCNN】一,原理回顧&&項目文檔翻譯
    算法總覽Mask-RCNN是一個實例分割(Instance segmentation)框架,通過增加不同的分支可以完成目標分類,目標檢測,語義分割,實例分割,人體姿態估計等多種任務。訓練你自己的數據集閱讀這個例子作為開始:https://engineering.matterport.com/splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46?gi=468916310fd5 。
  • FCOS進化版PolaMask,實例分割新思路
    本文介紹的PolarMask正式借鑑FCOS的思路來進行實例分割,可以看作FCOS的進化版本,很有借鑑意義。FCOS回顧簡單來說,FCOS是直接預測到box上下左右四條邊的距離**(l,t,r,b)**進行box回歸的。考慮到box內不會全部都是物體本身,因此設置box的中心點外擴一定的範圍作為正樣本。
  • 何愷明團隊開源圖像分割新算法PointRend:性能顯著提升,算力僅需Mask R-CNN的2.6%
    從這個角度出發,作者提出了 PointRend(Point-based Rendering)神經網絡模塊:該模塊基於迭代細分算法,在自適應選擇的位置執行基於點的分割預測。PointRend 可以與現有的最新模型結合,靈活地應用於實例和語義分割任務。定性實驗表明,對於先前的方法過度平滑的區域,PointRend 可以輸出清晰的對象邊界。
  • FAIR最新視覺論文集錦:FPN,RetinaNet,Mask 和 Mask-X RCNN(含代碼...
    之後會講實例分割的創新。最後聊聊依靠弱半監督模型來擴展實例分割。   FPN   特徵金字塔網絡 (FPN) [1] 發表在 2017 年的 CVPR 上。如果你關注最近兩年計算機視覺的發展,就知道冥冥之中存在著那樣一些優秀的算法,而你要做的,就是等著大神們把它寫出來、訓練好、再公開源碼。
  • 一文看懂近年火到不行的CNN圖像識別:從R-CNN到Mask R-CNN
    本文主要介紹如何CNNs在圖像實例分割中起到的巨大作用。自從2012年Alex Krizhevsky,Geoff Hinton和Ilya Sutskever在ImageNet挑戰賽獲勝以來,CNNs已經成為圖像分類的黃金標準。此後CNN不斷優化,現在在ImageNet挑戰賽中的表現甚至超過了人類的水平。
  • 輕鬆掌握 MMDetection 中常用算法(二):Faster R-CNN|Mask R-CNN
    在 FPN 提出後,Kaiming He 等進一步對其進行任務擴展,提出了 Mask R-CNN,通過新增 mask 掩碼分支實現實例分割任務,其最大特點是任務擴展性強,通過新增不同分支就可以實現不同的擴展任務。例如可以將 mask 分支替換為關鍵點分支即可實現多人姿態估計。
  • 經典論文速讀-Mask R-CNN
    Mask R-CNN= Faster R-CNN + FCN1 引言實例分割需要同時獲得物體框檢測和每個框內物體(實例)的準確分割,框內物體語義分割只在固定類別上分類像素。另一方面,本文將mask預測和類別預測解耦,mask類別由RoI分類來完成,對比FCNs同時預測類別和mask,實例分割表現則很差。
  • (附代碼)| 從特徵金字塔網絡、Mask R-CNN到學習分割一切
    本文介紹FAIR何愷明、Tsung-Yi Lin等人的團隊在計算機視覺領域最新的一些創新,包括特徵金字塔網絡、RetinaNet、Mask R-CNN以及用於實例分割的弱半監督方法。Mask R-CNN用於目標實例分割。簡單來說,目標實例分割基本上就是對象檢測,但不是使用邊界框,它的任務是給出對象的精確分割圖!TL;DR : 如果你已經了解Faster R-CNN,那麼Mask R-CNN就很好理解了,就是為分割增加另一個head(branch)。