從Learning to Segment Every Thing說起


原文地址:https://arxiv.org/pdf/1711.10370.pdf

這是何愷明老師發表於CVPR2018的一篇優秀paper。

先簡單回顧一下語義分割領域之前的工作

那么什么是語義分割?

語義分割其實就是對圖片的每個像素都做分類。其中,較為重要的語義分割數據集有:VOC2012 以及 MSCOCO 。

比較流行經典的幾種方法

傳統機器學習方法:如像素級的決策樹分類,參考TextonForest以及Random Forest based classifiers。再有就是深度學習方法。

深度學習最初流行的分割方法是,打補丁式的分類方法 (patch classification) 。逐像素地抽取周圍像素對中心像素進行分類。由於當時的卷積網絡末端都使用全連接層 (full connected layers) ,所以只能使用這種逐像素的分割方法。

但是到了2014年,來自伯克利的Fully Convolutional Networks(FCN)卷積網絡去掉了末端的全連接層。隨后的語義分割模型基本上都采用了這種結構。除了全連接層,語義分割另一個重要的問題是池化層。池化層能進一步提取抽象特征增加感受域,但是丟棄了像素的位置信息。然而語義分割需要類別標簽和原圖像對齊,因此需要重新引入像素的位置信息。有兩種不同的架構可以解決此像素定位問題。

▪ 第一種是編碼-譯碼架構。編碼過程通過池化層逐漸減少位置信息、抽取抽象特征;譯碼過程逐漸恢復位置信息。一般譯碼與編碼間有直接的連接。該類架構中U-net 是最流行的。

▪ 第二種是膨脹卷積 (dilated convolutions) 【這個核心技術值得去閱讀學習】,拋棄了池化層。使用的卷積核如下圖所示:

既然都說到這里,那繼續來簡單說一些相關的文獻。按時間順序總結,大概總結9篇paper,看語義分割的結構是如何演變的。分別有FCN 、SegNet 、U-Net、Dilated Convolutions 、DeepLab (v1 & v2) 、RefineNet 、PSPNet 、Large Kernel Matters 、DeepLab v3 。

1)FCN 2014年

主要的貢獻:

▪ 為語義分割引入了 端到端 的全卷積網絡,並流行開來

▪ 重新利用 ImageNet 的預訓練網絡用於語義分割

▪ 使用 反卷積層 進行上采樣

▪ 引入跳躍連接來改善上采樣粗糙的像素定位

比較重要的發現是,分類網絡中的全連接層可以看作對輸入的全域卷積操作,這種轉換能使計算更為高效,並且能重新利用ImageNet的預訓練網絡。經過多層卷積及池化操作后,需要進行上采樣,FCN使用反卷積(可學習)取代簡單的線性插值算法進行上采樣。

那么什么是反卷積呢?

https://blog.csdn.net/itleaks/article/details/80336825 這篇博客及其附帶鏈接會詳細告訴你。

2)SegNet 2015年

編碼-譯碼架構

主要貢獻:將池化層結果應用到譯碼過程。引入了更多的編碼信息。使用的是pooling indices而不是直接復制特征,只是將編碼過程中 pool 的位置記下來,在 uppooling 階段使用該信息進行 pooling 。

3)U-Net 2015 

U-Net有更規整的網絡結構,通過將編碼器的每層結果拼接到譯碼器中得到更好的結果。

4)Dilated Convolutions 2015年

通過膨脹卷積操作聚合多尺度信息。

 

主要貢獻:

▪ 使用膨脹卷積

▪ 提出 ’context module‘ ,用來聚合多尺度信息

池化在分類網絡中能夠擴大感知域,同樣降低了分辨率,所以提出了膨脹卷積層。

5)DeepLab (v1 & v2) 2014 & 2016

谷歌——DeepLab v1

Semantic image segmentation with deep convolutional nets and fully connected CRFs

DeepLab是結合了深度卷積神經網絡(DCNNs)和概率圖模型(DenseCRFs)的方法。在實驗中發現DCNNs做語義分割時精准度不夠的問題,根本原因是DCNNs的高級特征的平移不變性(即高層次特征映射)。DeepLab解決這一問題的方法是通過將DCNNs層的響應和完全連接的條件隨機場(CRF)結合。同時模型創新性的將Hole(即空洞卷積)算法應用到DCNNs模型上,在現代GPU上運行速度達到了8FPS。

相比於傳統的視覺算法(SIFT或HOG),DCNN以其end-to-end(端到端)方式獲得了很好的效果。這樣的成功部分可以歸功於DCNN對圖像轉換的平移不變性,這根本是源於重復的池化和下采樣組合層。平移不變性增強了對數據分層抽象的能力,但同時可能會阻礙低級視覺任務,例如姿態估計、語義分割等,在這些任務中我們傾向於精確的定位而不是抽象的空間關系。

DCNN在圖像標記任務中存在兩個技術障礙:

  • 信號下采樣;

  • 空間不敏感。

第一個問題涉及到:在DCNN中重復最大池化和下采樣帶來的分辨率下降問題,分辨率的下降會丟失細節。DeepLab是采用的atrous(帶孔)算法擴展感受野,獲取更多的上下文信息。

第二個問題涉及到:分類器獲取以對象中心的決策是需要空間變換的不變性,這天然的限制了DCNN的定位精度,DeepLab采用完全連接的條件隨機場(DenseCRF)提高模型捕獲細節的能力。

主要貢獻:

  • 速度:帶atrous算法的DCNN可以保持8FPS的速度,全連接CRF平均推斷需要0.5s;

  • 准確:在PASCAL語義分割挑戰中獲得了第二的成績;

  • 簡單:DeepLab是由兩個非常成熟的模塊(DCNN和CRFs)級聯而成。

相關工作:

DeepLab系統應用在語義分割任務上,目的是做逐像素分類的,這與使用兩階段的DCNN方法形成鮮明對比(指R-CNN等系列的目標檢測工作),R-CNN系列的做法是原先圖片上獲取候選區域,再送到DCNN中獲取分割建議,重新排列取結果。雖然這種方法明確地嘗試處理前段分割算法的本質,但在仍沒有明確的利用DCNN的預測圖。

我們的系統與其他先進模型的主要區別在於DenseCRFs和DCNN的結合。是將每個像素視為CRF節點,利用遠程依賴關系,並使用CRF推理直接優化DCNN的損失函數。Koltun(2011)的工作表明完全連接的CRF在語義分割下非常有效。

也有其他組采取非常相似的方向,將DCNN和密集的CRF結合起來,我們已經更新提出了DeepLab系統(指的是DeepLabV2)。

密集分類下的卷積神經網絡

這里先描述一下DCNN如何設計,調整VGG16模型,轉為一個可以有效提取特征的語義分割系統。具體來說,先將VGG16的FC層轉為卷積層,模型變為全卷積的方式,在圖像的原始分辨率上產生非常稀疏的計算檢測分數(步幅32,步幅=輸入尺寸/輸出特征尺寸步幅),為了以更密集(步幅8)的計算得分,我們在最后的兩個最大池化層不下采樣(padding到原大小),再通過2或4的采樣率的空洞卷積對特征圖做采樣擴大感受野,縮小步幅。

空洞卷積的使用

簡單介紹下空洞卷積在卷積神經網絡的使用(在DeepLabv3中有更詳細的討論)。在1-D的情況下,我們擴大輸入核元素之間的步長,如下圖Inputstride:

如果不是很直觀,看下面的在二維圖像上應用空洞卷積:

 

藍色部分是輸入:7×77×7的圖像;

青色部分是輸出:3×33×3的圖像;

空洞卷積核:3×33×3 采樣率(擴展率)為2 無padding。

這種帶孔的采樣又稱atrous算法,可以稀疏的采樣底層特征映射,該方法具有通常性,並且可以使用任何采樣率計算密集的特征映射。在VGG16中使用不同采樣率的空洞卷積,可以讓模型再密集的計算時,明確控制網絡的感受野。保證DCNN的預測圖可靠的預測圖像中物體的位置。

訓練時將預訓練的VGG16的權重做fine-tune,損失函數取是輸出的特征圖與ground truth下采樣8倍做交叉熵和;測試時取輸出圖雙線性上采樣8倍得到結果。但DCNN的預測物體的位置是粗略的,沒有確切的輪廓。在卷積網絡中,因為有多個最大池化層和下采樣的重復組合層使得模型的具有平移不變性,我們在其輸出的high-level的基礎上做定位是比較難的。這需要做分類精度和定位精度之間是有一個自然的折中。

解決這個問題的工作,主要分為兩個方向:

第一種是利用卷積網絡中多個層次的信息;

第二種是采樣超像素表示,實質上是將定位任務交給低級的分割方法。

DeepLab是結合了DCNNs的識別能力和全連接的CRF的細粒度定位精度,尋求一個結合的方法,結果證明能夠產生准確的語義分割結果。

CRF在語義分割上的應用

傳統上,CRF已被用於平滑噪聲分割圖。通常,這些模型包含耦合相鄰節點的能量項,有利於相同標簽分配空間近端像素。定性的說,這些短程的CRF主要功能是清除在手工特征基礎上建立的弱分類器的虛假預測。

與這些弱分類器相比,現代的DCNN體系產生質量不同的預測圖,通常是比較平滑且均勻的分類結果(即以前是弱分類器預測的結果,不是很靠譜,現在DCNN的預測結果靠譜多了)。在這種情況下,使用短程的CRF可能是不利的,因為我們的目標是恢復詳細的局部結構,而不是進一步平滑。而有工作證明可用全連接的CRF來提升分割精度。

 

對於每個像素位置ii具有隱變量xi(這里隱變量就是像素的真實類別標簽,如果預測結果有21類,則(i∈1,2,..,21),還有對應的觀測值yi(即像素點對應的顏色值)。以像素為節點,像素與像素間的關系作為邊,構成了一個條件隨機場(CRF)。通過觀測變量yi來推測像素位置i對應的類別標簽xi。條件隨機場示意圖如下:

多尺度預測

論文還探討了使用多尺度預測提高邊界定位效果。具體的,在輸入圖像和前四個最大池化層的輸出上附加了兩層的MLP(第一層是128個3×33×3卷積,第二層是128個1×11×1卷積),最終輸出的特征映射送到模型的最后一層輔助預測,合起來模型最后的softmax層輸入特征多了5×128=6405×128=640個通道,實驗表示多尺度有助於提升預測結果,但是效果不如CRF明顯。

Experiment

測試細節:

項目

設置

數據集

PASCAL VOC 2012 segmentation benchmark

DCNN模型

權重采用預訓練的VGG16

DCNN損失函數

交叉熵

訓練器

SGD,batch=20

學習率

初始為0.001,最后的分類層是0.01。每2000次迭代乘0.1

權重

0.9的動量, 0.0005的衰減

DeepLab由DCNN和CRF組成,訓練策略是分段訓練,即DCNN的輸出是CRF的一元勢函數,在訓練CRF時是固定的。在對DCNN做了fine-tune后,對CRF做交叉驗證。具體參數請參考論文。

CRF和多尺度的表現

在驗證集上的表現:

可以看到帶CRF和多尺度的(MSc)的DeepLab模型效果明顯上升了。

多尺度的視覺表現:

第一行是普通輸出,第二行是帶多尺度的輸出,可以看出多尺度輸出細節部分要好點

離散卷積的表現

在使用離散卷積的過程中,可控制離散卷積的采樣率來擴展特征感受野的范圍,不同配置的參數如下:

同樣的實驗結果: 

帶FOV的即不同離散卷積的配置.可以看到大的離散卷積效果會好一點。

與其他模型相比

與其他先進模型相比,DeepLab捕獲到了更細節的邊界。

DeepLab創造性的結合了DCNN和CRF產生一種新的語義分割模型,模型有准確的預測結果同時計算效率高。在PASCAL VOC 2012上展現了先進的水平。DeepLab是卷積神經網絡和概率圖模型的交集,后續可考慮將CNN和CRF結合到一起做end-to-end訓練。

附:Deeplab v2 安裝及調試全過程

感謝“計算機視覺戰隊”分享總結,很好的一個微信公眾號,推薦關注。

6)RefineNet 2016年

 

RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation

 

主要貢獻:

▪ 精心設計的譯碼模塊

▪ 所有模塊遵循殘余連接設計

膨脹卷積有幾個缺點,如計算量大、需要大量內存。這篇文章采用編碼-譯碼架構。編碼部分是ResNet-101模塊。譯碼采用RefineNet模塊,該模塊融合了編碼模塊的高分辨率特征和前一個RefineNet模塊的抽象特征。每個RefineNet模塊接收多個不同分辨率特征,並融合。

7)PSPNet 2016年

Pyramid Scene Parsing Network 金字塔場景解析網絡

主要貢獻:

▪ 提出了金字塔池化模塊來聚合圖片信息

▪ 使用附加的損失函數

金字塔池化模塊通過應用大核心池化層來提高感知域。使用膨脹卷積來修改ResNet網,並增加了金字塔池化模塊。金字塔池化模塊對ResNet輸出的特征進行不同規模的池化操作,並作上采樣后,拼接起來,最后得到結果。

本文提出的網絡結構簡單來說就是將DeepLab(不完全一樣)aspp之前的feature map pooling了四種尺度之后將5種feature map concat到一起經過卷積最后進行prediction的過程。 

8)Large Kernel Matters 2017

主要貢獻:

▪ 提出了使用大卷積核的編碼-譯碼架構

理論上更深的ResNet能有很大的感知域,但研究表明實際上提取的信息來自很小的范圍,因此使用大核來擴大感知域。但是核越大,計算量越大,因此將k x k的卷積近似轉換為1 x k + k x 1和k x 1 + 1 x k卷積的和,稱為GCN。

本文的架構是:使用ResNet作為編譯器,而GCN和反卷積作為譯碼器。還使用了名為Boundary Refinement的殘余模塊。

9)DeepLab v3 2017

主要貢獻:

▪ 改進 ASPP

▪ 串行部署 ASPP 的模塊

和DeepLab v2一樣,將膨脹卷積應用於ResNet中。改進的ASPP(https://blog.csdn.net/u011974639/article/details/80844304)指的是將不同膨脹率的膨脹卷積結果拼接起來,並使用了BN 。與Dilated convolutions (2015) 不一樣的是,v3直接對中間的特征圖進行膨脹卷積,而不是在最后做。

小總結:

 

現在把之前較為典型的簡單介紹了一遍,現在,next,終於要說今天這個分割技術了。

1、概述

大多數目標實例分割的方法都要求所有的訓練樣本帶有segmentation masks。這種要求就使得注釋新類別的開銷很大,並且將實例分段模型限制為∼100注釋良好的類。

本次技術目的是提出一種新的部分監督的訓練模式,該模式具有一種新的權重傳遞函數,結合一種新的權重傳遞函數,可以在一大組類別上進行訓練實例分割模型,所有這些類別都有框注釋,但只有一小部分有mask注釋。這些設計允許我們訓練MASK R-CNN,使用VisualGenome數據集的框注釋和COCO數據集中80個類的mask注釋來檢測和分割3000種視覺概念。

最終,在COCO數據集的對照研究中評估了提出的方法。這項工作是邁向對視覺世界有廣泛理解的實例分割模型的第一步。

2、學習分割everything

讓C是一組目標類別,希望為其訓練一個instance segmentation模型。大多數現有方法假設C中的所有訓練樣本都帶有instance mask。

於是,本次放寬了這一要求,而是假設C=A∪B,其中來自A中類別的樣本有mask,而B中的只有邊界框。由於B類的樣本是弱標記的w.r.t.目標任務(instance segmentation),將強標簽和弱標簽組合的訓練作為一個部分監督的學習問題。注意到可以很容易地將instance mask轉換為邊界框,假設邊界框注釋也適用於A中的類。 

給出了一個包含邊界框檢測組件和mask預測組件的MASK R-CNN instance segmentation模型,提出了MaskX R-CNN方法,該方法將特定類別的信息從模型的邊界框檢測器轉移到其instance mask預測器。

▪ 權重傳遞來Mask預測

本方法是建立在Mask R-CNN,因為它是一個簡單的instance segmentation模型,也取得了最先進的結果。簡單地說,MASK R-CNN可以被看作是一個更快的R-CNN邊界框檢測模型,它有一個附加的mask分支,即一個小的全卷積網絡(FCN)。 

在推理時,將mask分支應用於每個檢測到的對象,以預測instance-level的前景分割mask。在訓練過程中,mask分支與Faster R-CNN中的標准邊界框head並行訓練。在Mask R-CNN中,邊界框分支中的最后一層和mask分支中的最后一層都包含特定類別的參數,這些參數分別用於對每個類別執行邊界框分類和instance mask預測。與獨立學習類別特定的包圍框參數和mask參數不同,我們建議使用一個通用的、與類別無關的權重傳遞函數來預測一個類別的mask參數,該函數可以作為整個模型的一部分進行聯合訓練。

具體如下如所示:

▪ Training

在訓練期間,假設對於A和B兩組類,instance mask注釋僅適用於A中的類,而不適用於B中的類,而A和B中的所有類都有可用的邊界框注釋。如上圖所示,我們使用A∪B中所有類的標准框檢測損失來訓練邊界框head,但只訓練mask head和權重傳遞函數T(·),在A類中使用mask loss,考慮到這些損失,我們探索了兩種不同的訓練過程:分階段訓練和端到端訓練。

分階段訓練

由於Mask R-CNN可以被看作是用mask head增強Faster R-CNN,一種可能的訓練策略是將訓練過程分為檢測訓練(第一階段)和分割訓練(第二階段)。

在第一階段,只使用A∪B中類的邊界框注釋來訓練一個Faster R-cnn,然后在第二階段訓練附加的mask head,同時保持卷積特征和邊界框head的固定。這樣,每個c類的類特定檢測權重wc可以被看作是在訓練第二階段時不需要更新的固定類emdet層疊向量。 

該方法具有很好的實用價值,使我們可以對邊界框檢測模型進行一次訓練,然后對權重傳遞函數的設計方案進行快速評估。它也有缺點,這是我們接下來要討論的。

端到端聯合訓練

結果表明,對於MASK R-CNN來說,多任務訓練比單獨訓練更能提高訓練效果。上述分階段訓練機制將檢測訓練和分割訓練分開,可能導致性能低下。 

因此,我們也希望以一種端到端的方式,聯合訓練邊界框head和mask head。原則上,可以直接使用A∪B中類的box損失和A中類的mask loss來進行反向傳播訓練,但是,這可能導致A組和B組之間的類特定檢測權重Wc的差異,因為只有c∈A的Wc會通過權重傳遞函數T(·)從mask loss得到梯度。 

我們希望Wc在A和B之間是均勻的,這樣在A上訓練的預測Wc=T(Wc;θ)可以更好地推廣到B。

效果圖

Mask predictions from the class-agnostic baseline (top row) vs. our MaskX R-CNN approach (bottom row).Green boxes are classes in set A while the red boxes are classes in set B. The left 2 columns are A = {voc} and the right 2 columns are A = {non-voc}.

Example mask predictions from our MaskX R-CNN on 3000 classes in Visual Genome. The green boxes are the 80 classes that overlap with COCO (set A with mask training data) while the red boxes are the remaining 2920 classes not in COCO (set B without mask training data). It can be seen that our model generates reasonable mask predictions on many classes in set B. See §5 for details.

很有趣吧O(∩_∩)O~,當然,這並不是針對弱監督的。。。


免責聲明!

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



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