深度學(xué)習(xí)的語義分割:從全卷積網(wǎng)絡(luò)到大型卷積核
什么是語義分割?
語義分割指像素級地識別圖像,即標(biāo)注出圖像中每個像素所屬的對象類別。如下圖:
左:輸入圖像,右:該圖像的語義分割
除了識別車和騎車的人,我們還需要描繪出每個物體的邊界。因此,與圖像分類不同,語義分割需要根據(jù)模型進行密集的像素級分類。
VOC2012和MSCOCO是語義分割領(lǐng)域最重要的數(shù)據(jù)集。
有哪些不同的解決方案?
在深度學(xué)習(xí)應(yīng)用到計算機視覺領(lǐng)域之前,人們使用TextonForest和隨機森林分類器進行語義分割。卷積神經(jīng)網(wǎng)絡(luò)(CNN)不僅對圖像識別有所幫助,也對語義分割領(lǐng)域的發(fā)展起到巨大的促進作用。
語義分割任務(wù)最初流行的深度學(xué)習(xí)方法是圖像塊分類(patchclassification),即利用像素周圍的圖像塊對每一個像素進行獨立的分類。使用圖像塊分類的主要原因是分類網(wǎng)絡(luò)通常是全連接層(fullconnectedlayer),且要求固定尺寸的圖像。
2014年,加州大學(xué)伯克利分校的Long等人提出全卷積網(wǎng)絡(luò)(FCN),這使得卷積神經(jīng)網(wǎng)絡(luò)無需全連接層即可進行密集的像素預(yù)測,CNN從而得到普及。使用這種方法可生成任意大小的圖像分割圖,且該方法比圖像塊分類法要快上許多。之后,語義分割領(lǐng)域幾乎所有先進方法都采用了該模型。
除了全連接層,使用卷積神經(jīng)網(wǎng)絡(luò)進行語義分割存在的另一個大問題是池化層。池化層不僅擴大感受野、聚合語境從而造成了位置信息的丟失。但是,語義分割要求類別圖完全貼合,因此需要保留位置信息。本文將介紹兩種不同結(jié)構(gòu)來解決該問題。
第一個是編碼器-解碼器結(jié)構(gòu)。編碼器逐漸減少池化層的空間維度,解碼器逐步修復(fù)物體的細(xì)節(jié)和空間維度。編碼器和解碼器之間通常存在快捷連接,因此能幫助解碼器更好地修復(fù)目標(biāo)的細(xì)節(jié)。U-Net是這種方法中最常用的結(jié)構(gòu)。
U-Net:一種編碼器-解碼器結(jié)構(gòu)
第二種方法使用空洞/帶孔卷積(dilated/atrousconvolutions)結(jié)構(gòu),來去除池化層。
Dilated/atrous卷積,rate=1是典型的卷積結(jié)構(gòu)
條件隨機場(CRF)預(yù)處理通常用于改善分割效果。CRF是一種基于底層圖像像素強度進行「平滑」分割的圖模型。它的工作原理是灰度相近的像素易被標(biāo)注為同一類別。CRF可令分值提高1-2%。
CRF示意圖。(b)一元分類器作為CRF的分割輸入。(c、d、e)是CRF的變體,其中(e)是廣泛使用的一種CRF
下面,我將總結(jié)幾篇論文,介紹分割結(jié)構(gòu)從FCN以來的發(fā)展變化。所有這些架構(gòu)都使用VOC2012評估服務(wù)器進行基準(zhǔn)測試。
論文概述
下列論文按照時間順序進行介紹:
1.FCN
2.SegNet
3.DilatedConvolutions
4.DeepLab(v1&v2)
5.RefineNet
6.PSPNet
7.LargeKernelMatters
8.DeepLabv3
我列出了每篇論文的主要貢獻,并稍加解釋。同時我還展示了這些論文在VOC2012測試數(shù)據(jù)集上的基準(zhǔn)測試分?jǐn)?shù)(IOU均值)。
FCN
使用全卷積網(wǎng)絡(luò)進行語義分割(FullyConvolutionalNetworksforSemanticSegmentation)
2014年11月14日提交
arXiv鏈接(https://arxiv.org/abs/1411.4038)
主要貢獻:
推廣端到端卷積網(wǎng)絡(luò)在語義分割領(lǐng)域的應(yīng)用
修改Imagenet預(yù)訓(xùn)練網(wǎng)絡(luò)并應(yīng)用于語義分割領(lǐng)域
使用解卷積層進行上采樣
使用跳躍連接,改善上采樣的粒度程度
相關(guān)解釋:
本論文的關(guān)鍵點是分類網(wǎng)絡(luò)中的全連接層可視為使用卷積核覆蓋整個輸入?yún)^(qū)域的卷積操作。這相當(dāng)于根據(jù)重疊的輸入圖像塊評估原始分類網(wǎng)絡(luò),但由于計算過程由圖像塊的重疊部分共同分擔(dān),這種方法比之前更加高效。盡管該結(jié)論并非獨一無二,但它顯著提高了VOC2012數(shù)據(jù)集上模型的最佳效果。
全連接層作為卷積操作
將全連接層在VGG等Imagenet預(yù)訓(xùn)練網(wǎng)絡(luò)中進行卷積操作后,由于CNN中的池化操作,特征圖仍舊需要上采樣。解卷積層不使用簡單的雙線性插值,而是學(xué)習(xí)所進行的插值。解卷積層又被稱為上卷積(upconvolution)、完全卷積、轉(zhuǎn)置卷積或微步卷積(fractionally-stridedconvolution)。
但是,由于池化過程造成信息丟失,上采樣(即使帶有解卷積層)生成的分割圖較為粗糙。因此我們可以從高分辨率的特征圖中引入跳躍連接(shortcut/skipconnection)來改善上采樣的粗糙程度。
VOC2012基準(zhǔn)測試分?jǐn)?shù):
個人評價:
這是一項重要的貢獻,但是當(dāng)前的技術(shù)水平又有了很大發(fā)展。
SegNet
SegNet:用于圖像分割的一種深度卷積編碼器-解碼器架構(gòu)(SegNet:ADeepConvolutionalEncoder-DecoderArchitectureforImageSegmentation)
2015年11月2日提交
Arxiv鏈接(https://arxiv.org/abs/1511.00561)
主要貢獻:
將最大池化索引(Maxpoolingindices)轉(zhuǎn)移到解碼器,從而改善分割分辨率。
相關(guān)解釋:
在FCN網(wǎng)絡(luò)中,盡管使用了解卷積層和一些跳躍連接,但輸出的分割圖仍然比較粗糙。因此,更多的跳躍連接被引入FCN網(wǎng)絡(luò)。但是,SegNet沒有復(fù)制FCN中的編碼器特征,而是復(fù)制了最大池化索引。這使得SegNet比FCN更節(jié)省內(nèi)存。
Segnet結(jié)構(gòu)
個人評價:
FCN和SegNet都是最早出現(xiàn)的編碼器-解碼器結(jié)構(gòu)。
SegNet的基準(zhǔn)測試分?jǐn)?shù)不夠好,不宜繼續(xù)使用。
空洞卷積(DilatedConvolutions)
使用空洞卷積進行多尺度背景聚合(Multi-ScaleContextAggregationbyDilatedConvolutions)
2015年11月23日提交
Arxiv鏈接(https://arxiv.org/abs/1511.07122)
主要貢獻:
使用空洞卷積,一種可進行稠密預(yù)測的卷積層。
提出「背景模塊」(contextmodule),該模塊可使用空洞卷積進行多尺度背景聚合。
相關(guān)解釋:
池化使感受野增大,因此對分類網(wǎng)絡(luò)有所幫助。但池化會造成分辨率下降,不是語義分割的最佳方法。因此,論文作者使用空洞卷積層(dilatedconvolutionlayer),其工作原理如圖:
空洞/帶孔卷積
空洞卷積層(DeepLab將其稱為帶孔卷積)可使感受野呈指數(shù)級增長,而空間維度不至于下降。
從預(yù)訓(xùn)練好的分類網(wǎng)絡(luò)(此處指VGG)中移除最后兩個池化層,之后的卷積層都使用空洞卷積。尤其是,pool-3和pool-4之間的卷積是空洞卷積2,pool-4后面的卷積是空洞卷積4。使用這個模塊(論文中稱為前端模塊 frontendmodule)之后,無需增加參數(shù)即可實現(xiàn)稠密預(yù)測。另一個模塊(論文中稱為背景模塊 contextmodule)將使用前端模塊的輸出作為輸入進行單獨訓(xùn)練。該模塊是多個不同擴張程度的空洞卷積級聯(lián)而成,因此該模塊可聚合多尺度背景,并改善前端模塊獲取的預(yù)測結(jié)果。
個人評價:
預(yù)測分割圖的大小是圖像大小的1/8。幾乎所有的方法都存在這個現(xiàn)象,通常使用插值的方法獲取最終分割圖。
DeepLab(v1&v2)
v1:使用深度卷積網(wǎng)絡(luò)和全連接CRF進行圖像語義分割(SemanticImageSegmentationwithDeepConvolutionalNetsandFullyConnectedCRFs)
2014年12月22日提交
Arxiv鏈接(https://arxiv.org/abs/1412.7062)
v2 :DeepLab:使用深度卷積網(wǎng)絡(luò)、帶孔卷積和全連接CRF進行圖像語義分割(DeepLab:SemanticImageSegmentationwithDeepConvolutionalNets,AtrousConvolution,andFullyConnectedCRFs)
2016年6月2日提交
Arxiv鏈接(https://arxiv.org/abs/1606.00915)
主要貢獻:
使用帶孔/空洞卷積。
提出金字塔型的空洞池化(ASPP)
使用全連接CRF
相關(guān)解釋:
帶孔/空洞卷積在不增加參數(shù)的情況下增大感受野。如上文中空洞卷積論文中所述,分割網(wǎng)絡(luò)得到改進。
將原始圖像的多個重新縮放版本傳遞到CNN網(wǎng)絡(luò)的并行分支(圖像金字塔)中,或者使用采樣率不同的多個并行空洞卷積層(ASPP),實現(xiàn)多尺度處理。
結(jié)構(gòu)化預(yù)測可通過全連接CRF實現(xiàn)。CRF的訓(xùn)練/微調(diào)需作為后處理的步驟單獨進行。
DeepLab2 流程圖
RefineNet
RefineNet:使用多路徑精煉網(wǎng)絡(luò)進行高分辨率語義分割(RefineNet:Multi-PathRefinementNetworksforHigh-ResolutionSemanticSegmentation)
2016年11月20日提交
Arxiv鏈接(https://arxiv.org/abs/1611.06612)
主要貢獻:
具備精心設(shè)計解碼器模塊的編碼器-解碼器架構(gòu)
所有組件遵循殘差連接設(shè)計
相關(guān)解釋:
使用空洞/帶孔卷積的方法也有弊端。由于空洞卷積需要大量高分辨率特征圖,因此其計算成本高昂,且占用大量內(nèi)存。這妨礙了高分辨率預(yù)測的計算。例如,DeepLab的預(yù)測結(jié)果大小是原始輸入圖像的1/8。
因此,這篇論文提出使用編碼器-解碼器結(jié)構(gòu)。編碼器是ResNet-101模塊,解碼器是RefineNet模塊,該模塊融合了編碼器中的高分辨率特征和先前RefineNet模塊中的低分辨率特征。
RefineNet架構(gòu)
每一個RefineNet模塊都有兩個組件,一個組件通過對低分辨率特征進行上采樣來融合多分辨率特征,另一個組件基于步幅為1、5x5大小的重復(fù)池化層來獲取背景信息。這些組件遵循單位映射的思想,采用殘差連接設(shè)計。
RefineNet模塊
PSPNet
金字塔型場景解析網(wǎng)絡(luò)
2016年12月4日提交
Arxiv鏈接(