(譯)從全卷積網路到大型卷積核:深度學習的語義分割全指南
機器之心:By路雪 2017年7月14日
什麼是語義分割?
語義分割指畫素級地識別影象,即標註出影象中每個畫素所屬的物件類別。如下圖:
左:輸入影象,右:該影象的語義分割
除了識別車和騎車的人,我們還需要描繪出每個物體的邊界。因此,與影象分類不同,語義分割需要根據模型進行密集的畫素級分類。
VOC2012和MSCOCO是語義分割領域最重要的資料集。
有哪些不同的解決方案?
在深度學習應用到計算機視覺領域之前,人們使用TextonForest和隨機森林分類器進行語義分割。卷積神經網路(CNN)不僅對影象識別有所幫助,也對語義分割領域的發展起到巨大的促進作用。
語義分割任務最初流行的深度學習方法是影象塊分類(patchclassification),即利用畫素周圍的影象塊對每一個畫素進行獨立的分類。使用影象塊分類的主要原因是分類網路通常是全連線層(fullconnectedlayer),且要求固定尺寸的影象。
2014年,加州大學伯克利分校的Long等人提出全卷積網路(FCN),這使得卷積神經網路無需全連線層即可進行密集的畫素預測,CNN從而得到普及。使用這種方法可生成任意大小的影象分割圖,且該方法比影象塊分類法要快上許多。之後,語義分割領域幾乎所有先進方法都採用了該模型。
除了全連線層,使用卷積神經網路進行語義分割存在的另一個大問題是池化層。池化層不僅擴大感受野、聚合語境從而造成了位置資訊的丟失。但是,語義分割要求類別圖完全貼合,因此需要保留位置資訊。本文將介紹兩種不同結構來解決該問題。
第一個是編碼器-解碼器結構。編碼器逐漸減少池化層的空間維度,解碼器逐步修復物體的細節和空間維度。編碼器和解碼器之間通常存在快捷連線,因此能幫助解碼器更好地修復目標的細節。U-Net是這種方法中最常用的結構。
U-Net:一種編碼器-解碼器結構
第二種方法使用空洞/帶孔卷積(dilated/atrousconvolutions)結構,來去除池化層。
Dilated/atrous卷積,rate=1是典型的卷積結構
條件隨機場(CRF)預處理通常用於改善分割效果。CRF是一種基於底層影象畫素強度進行「平滑」分割的圖模型。它的工作原理是灰度相近的畫素易被標註為同一類別。CRF可令分值提高1-2%。
CRF示意圖。(b)一元分類器作為CRF的分割輸入。(c、d、e)是CRF的變體,其中(e)是廣泛使用的一種CRF
下面,我將總結幾篇論文,介紹分割結構從FCN以來的發展變化。所有這些架構都使用VOC2012評估伺服器進行基準測試。
論文概述
下列論文按照時間順序進行介紹:
1.FCN
2.SegNet
3.DilatedConvolutions
4.DeepLab(v1&v2)
5.RefineNet
6.PSPNet
7.LargeKernelMatters
8.DeepLabv3
我列出了每篇論文的主要貢獻,並稍加解釋。同時我還展示了這些論文在VOC2012測試資料集上的基準測試分數(IOU均值)。
FCN
使用全卷積網路進行語義分割(FullyConvolutionalNetworksforSemanticSegmentation)
2014年11月14日提交
arXiv連結(https://arxiv.org/abs/1411.4038)
主要貢獻:
推廣端到端卷積網路在語義分割領域的應用
修改Imagenet預訓練網路並應用於語義分割領域
使用解卷積層進行上取樣
使用跳躍連線,改善上取樣的粒度程度
相關解釋:
本論文的關鍵點是分類網路中的全連線層可視為使用卷積核覆蓋整個輸入區域的卷積操作。這相當於根據重疊的輸入影象塊評估原始分類網路,但由於計算過程由影象塊的重疊部分共同分擔,這種方法比之前更加高效。儘管該結論並非獨一無二,但它顯著提高了VOC2012資料集上模型的最佳效果。
全連線層作為卷積操作
將全連線層在VGG等Imagenet預訓練網路中進行卷積操作後,由於CNN中的池化操作,特徵圖仍舊需要上取樣。解卷積層不使用簡單的雙線性插值,而是學習所進行的插值。解卷積層又被稱為上卷積(upconvolution)、完全卷積、轉置卷積或微步卷積(fractionally-stridedconvolution)。
但是,由於池化過程造成資訊丟失,上取樣(即使帶有解卷積層)生成的分割圖較為粗糙。因此我們可以從高解析度的特徵圖中引入跳躍連線(shortcut/skipconnection)來改善上取樣的粗糙程度。
VOC2012基準測試分數:
個人評價:
這是一項重要的貢獻,但是當前的技術水平又有了很大發展。
SegNet
SegNet:用於影象分割的一種深度卷積編碼器-解碼器架構(SegNet:ADeepConvolutionalEncoder-DecoderArchitectureforImageSegmentation)
2015年11月2日提交
Arxiv連結(https://arxiv.org/abs/1511.00561)
主要貢獻:
將最大池化索引(Maxpoolingindices)轉移到解碼器,從而改善分割解析度。
相關解釋:
在FCN網路中,儘管使用瞭解卷積層和一些跳躍連線,但輸出的分割圖仍然比較粗糙。因此,更多的跳躍連線被引入FCN網路。但是,SegNet沒有複製FCN中的編碼器特徵,而是複製了最大池化索引。這使得SegNet比FCN更節省記憶體。
Segnet結構
個人評價:
FCN和SegNet都是最早出現的編碼器-解碼器結構。
SegNet的基準測試分數不夠好,不宜繼續使用。
空洞卷積(DilatedConvolutions)
使用空洞卷積進行多尺度背景聚合(Multi-ScaleContextAggregationbyDilatedConvolutions)
2015年11月23日提交
Arxiv連結(https://arxiv.org/abs/1511.07122)
主要貢獻:
使用空洞卷積,一種可進行稠密預測的卷積層。
提出「背景模組」(contextmodule),該模組可使用空洞卷積進行多尺度背景聚合。
相關解釋:
池化使感受野增大,因此對分類網路有所幫助。但池化會造成解析度下降,不是語義分割的最佳方法。因此,論文作者使用空洞卷積層(dilatedconvolutionlayer),其工作原理如圖:
空洞/帶孔卷積
空洞卷積層(DeepLab將其稱為帶孔卷積)可使感受野呈指數級增長,而空間維度不至於下降。
從預訓練好的分類網路(此處指VGG)中移除最後兩個池化層,之後的卷積層都使用空洞卷積。尤其是,pool-3和pool-4之間的卷積是空洞卷積2,pool-4後面的卷積是空洞卷積4。使用這個模組(論文中稱為前端模組 frontendmodule)之後,無需增加引數即可實現稠密預測。另一個模組(論文中稱為背景模組 contextmodule)將使用前端模組的輸出作為輸入進行單獨訓練。該模組是多個不同擴張程度的空洞卷積級聯而成,因此該模組可聚合多尺度背景,並改善前端模組獲取的預測結果。
個人評價:
預測分割圖的大小是影象大小的1/8。幾乎所有的方法都存在這個現象,通常使用插值的方法獲取最終分割圖。
DeepLab(v1&v2)
v1:使用深度卷積網路和全連線CRF進行影象語義分割(SemanticImageSegmentationwithDeepConvolutionalNetsandFullyConnectedCRFs)
2014年12月22日提交
Arxiv連結(https://arxiv.org/abs/1412.7062)
v2 :DeepLab:使用深度卷積網路、帶孔卷積和全連線CRF進行影象語義分割(DeepLab:SemanticImageSegmentationwithDeepConvolutionalNets,AtrousConvolution,andFullyConnectedCRFs)
2016年6月2日提交
Arxiv連結(https://arxiv.org/abs/1606.00915)
主要貢獻:
使用帶孔/空洞卷積。
提出金字塔型的空洞池化(ASPP)
使用全連線CRF
相關解釋:
帶孔/空洞卷積在不增加引數的情況下增大感受野。如上文中空洞卷積論文中所述,分割網路得到改進。
將原始影象的多個重新縮放版本傳遞到CNN網路的並行分支(影象金字塔)中,或者使用取樣率不同的多個並行空洞卷積層(ASPP),實現多尺度處理。
結構化預測可通過全連線CRF實現。CRF的訓練/微調需作為後處理的步驟單獨進行。
DeepLab2 流程圖
RefineNet
RefineNet:使用多路徑精煉網路進行高解析度語義分割(RefineNet:Multi-PathRefinementNetworksforHigh-ResolutionSemanticSegmentation)
2016年11月20日提交
Arxiv連結(https://arxiv.org/abs/1611.06612)
主要貢獻:
具備精心設計解碼器模組的編碼器-解碼器架構
所有元件遵循殘差連線設計
相關解釋:
使用空洞/帶孔卷積的方法也有弊端。由於空洞卷積需要大量高解析度特徵圖,因此其計算成本高昂,且佔用大量記憶體。這妨礙了高解析度預測的計算。例如,DeepLab的預測結果大小是原始輸入影象的1/8。
因此,這篇論文提出使用編碼器-解碼器結構。編碼器是ResNet-101模組,解碼器是RefineNet模組,該模組融合了編碼器中的高解析度特徵和先前RefineNet模組中的低解析度特徵。
RefineNet架構
每一個RefineNet模組都有兩個元件,一個元件通過對低解析度特徵進行上取樣來融合多解析度特徵,另一個元件基於步幅為1、5x5大小的重複池化層來獲取背景資訊。這些元件遵循單位對映的思想,採用殘差連線設計。
RefineNet模組
PSPNet
金字塔型場景解析網路
2016年12月4日提交
Arxiv連結(https://arxiv.org/abs/1612.01105)
主要貢獻:
提出金字塔池化模組幫助實現背景聚合。
使用輔助損失(auxiliaryloss)。
相關解釋:
全域性場景分類為分割的類別分佈提供線索,因此很重要。金字塔池化模組(Pyramidpoolingmodule)通過應用較大核池化層的獲取這些資訊。如上文中空洞卷積論文中所述,PSPNet也使用空洞卷積改善ResNet,並新增一個金字塔池化模組。該模組將ResNet的特徵圖與並行池化層的上取樣輸出結果連線起來,其中卷積核核覆蓋了影象的全部、一半和小塊區域。
在ResNet的第四階段之後(即輸入到金字塔池化模組),在主分支損失之外又增加了附加損失。這個想法在其他研究中也被稱為中間監督(intermediatesupervision)。
PSPNet架構
LargeKernelMatters
大型核的問題——通過全域性卷積網路改善語義分割(LargeKernelMatters--ImproveSemanticSegmentationbyGlobalConvolutionalNetwork)
2017年3月8日提交
Arxiv連結(https://arxiv.org/abs/1703.02719)
主要貢獻:
提出使用帶有大型卷積核的編碼器-解碼器結構
相關解釋:
語義分割不僅需要分割,同時還需要對分割目標進行分類。由於分割結構中無法使用全連線層,因此帶有大核函式的卷積可以替代全連線層得到應用。
使用大型核的另一個原因是,儘管ResNet等更深層的網路擁有較大的感受野,但相關研究顯示這樣的網路更易收集較小範圍(即有效感受野)內的資訊。大型核的計算成本高昂,且擁有大量引數。因此,kxk卷積可近似成1xk+kx1、kx1和1xk。這篇論文中將該模組稱為全域性卷積網路(GCN)。
再來看結構,ResNet(沒有空洞卷積)構成該結構的編碼器部分,而GCN和反捲積構成了解碼器部分。該結構還採用了一個叫做邊界細化(BR)的簡單殘差塊。
GCN結構
VOC2012測試分數:
DeepLabv3
重新思考使用空洞卷積進行影象語義分割(RethinkingAtrousConvolutionforSemanticImageSegmentation)
2017年6月17日提交
Arxiv連結(https://arxiv.org/abs/1706.05587)
主要貢獻:
改進了金字塔型的空洞池化(ASPP)
模型級聯了多個空洞卷積
相關解釋:
與DeepLabv2和空洞卷積論文一樣,該研究也使用空洞/擴張卷積來改進ResNet模型。改進後的ASPP包括影象層級特徵連線、一個1x1的卷積和三個3x3的不同比率空洞卷積。每一個並行卷積層之後使用批量歸一化操作。
級聯模型是一個ResNet模組,但其中的卷積層是不同比率的空洞卷積。該模型與空洞卷積論文中的背景模組相似,但是它直接應用於中間特徵圖,而不是可信度地圖(信念圖是通道數與類別數相同的最終CNN特徵圖)。
該論文分別評估了這兩個已提出的模型。兩個模型在驗證集上的效能相似,帶有ASPP的模型效能稍好,且未使用CRF。這兩個模型優於DeepLabv2中最優的模型。論文作者還提到效能的改進來自於批量歸一化操作和更好的多尺度背景編碼方式。
DeepLabv3ASPP