姓名:閆偉? 學號:15020150038
轉(zhuǎn)載自:https://zhuanlan.zhihu.com/p/48106193
【嵌牛導讀】:在計算機視覺領域旦签,圖像分割指的是為圖像中的每個像素分配一個標簽的任務垃帅,它也可以被看作是dense prediction task,對圖像中每個像素進行分類讥珍。和使用矩形候選框的目標檢測不同徙融,圖像分割需要精確到像素級位置,因此它在醫(yī)學分析哭靖、衛(wèi)星圖像物體檢測具垫、虹膜識別和自動駕駛汽車等任務中起著非常重要的作用。
【嵌牛鼻子】:圖像分割 CNN 語義分割
【嵌牛提問】:如何利用CNN對圖像進行分割?
【嵌牛正文】:
隨著深度學習的不斷發(fā)展试幽,近年來圖像分割技術也在速度和準確率上迎來了一次次突破◇莶希現(xiàn)在,我們能在幾分之一秒內(nèi)完成分割铺坞,同時保證極高的準確性起宽。在這篇文章中,我們將介紹一些用于圖像分割的主要技術及其背后的簡單思路济榨。我們將從最基礎的語義分割(semantic segmentation)開始坯沪,慢慢進階到更復雜的實例分割(instance segmentation)。
目標檢測擒滑、語義分割和實例分割
語義分割
語義圖像分割是為圖像中的每個像素分配語義類別標簽的任務腐晾,它不分割對象實例。現(xiàn)在丐一,處理這類任務的主流方法是FCN及其衍生藻糖,所以我們先從FCN看起。
FCN架構
創(chuàng)建FCN的方法很簡單钝诚,我們只需把CNN里的所有全連接層替換成寬高1×1的卷積層颖御,這時卷積層的filter數(shù)量等于全連接層的神經(jīng)元(輸出)數(shù)量,所有層都是卷積層凝颇,故稱全卷積網(wǎng)絡潘拱。之所以要這么做,是因為每個像素的空間位置對于分割來說都很重要拧略,而卷積層能分類全連接層無法處理的單個像素芦岂。作為處理結(jié)果,神經(jīng)網(wǎng)絡較高層中的位置會對應于它們路徑連接的圖像中的位置垫蛆,即它們的感受野禽最。
如上圖所示腺怯,F(xiàn)CN的架構非常簡單,主要由編碼器CNN(以VGG為例)構成川无,只不過其中和分類網(wǎng)絡對應的最后三層被改成了(4096,1,1)(4096,1,1)(N+1,1,1)的卷積層(N表示類別數(shù)量)呛占。編碼器后是一個解碼器網(wǎng)絡,它只包含一個反向的卷積層(也稱為轉(zhuǎn)置卷積transposed convolution或反卷積deconvolution)懦趋。它的輸出與輸入圖像具有相同的空間維度晾虑,并具有N+1個通道,每個通道預測一個類別仅叫。
反向的卷積操作
仍以VGG為例帜篇,由于前面采樣部分過大,有時候會導致后面進行反向卷積操作得到的結(jié)果分辨率較低诫咱,會出現(xiàn)細節(jié)丟失等問題笙隙。為此,F(xiàn)CN的解決方法是疊加第三坎缭、四竟痰、五層池化層的特征,以生成更精準的邊界分割掏呼。如下圖所示:
需要注意的一點是凯亮,在進行上采樣之前,所有池化特征都會先通過(N+1,1,1)這個卷積層哄尔。
FCN分割效果
U-NET架構
U-NET常被用于生物醫(yī)學圖像分割,它遵循了FCN的編碼器-解碼器結(jié)構柠并,不使用任何全連接層岭接。如上圖所示,常規(guī)情況下臼予,U-NET的編碼器是一個包含10個卷積層的CNN鸣戴,中間包含最大池化層(紅色箭頭)。它的解碼器會對feature map進行多次上采樣和卷積粘拾,目的是為了提取更高效窄锅、更抽象的特征。得到heatmap后缰雇,U-NET最后再用1×1的卷積層做分類入偷,也就是說解碼器一共有13層,整個架構總共由23層可學習的卷積層組成械哟。
為什么要做上采樣疏之?
答:池化層會丟失圖像信息和降低圖像分辨率且是不可逆的操作,對圖像分割任務有一些影響暇咆。上采樣可以補足一些圖片的信息锋爪,但是信息補充的肯定不完全丙曙,所以還需要與左邊的分辨率比較高的圖片相連接起來(直接復制過來再裁剪到與上采樣圖片一樣大小)其骄,這就相當于在高分辨率和更抽象特征當中做一個折衷亏镰,因為隨著卷積次數(shù)增多,提取的特征也更加有效拯爽,更加抽象索抓。——jianyuchen23
SegNet架構
SegNet的全稱是“用于圖像分割的深度卷積編碼器-解碼器架構”某抓,事實上纸兔,大多數(shù)語義分割方法都遵循這種基本架構,它們的編碼器都是用VGG16否副,解碼器都仿照U-NET——多次上采樣后再卷積汉矿。但是,SegNet有自己獨到的特點:
上采樣是不可學習的
解碼器使用和編碼器相同的卷積(filter大小和相應層的通道數(shù)量)
SegNet中的上采樣是一種反向最大池化操作备禀。為了補足圖像信息洲拇,U-NET會對編碼階段的特征做通道降維,再把它和特征反向卷積后得到上采樣進行相加曲尸,這一過程需要學習赋续。而SegNet采用的方法是記錄下編碼階段的最大池化index,比如在某層移動2×2的最大池化窗口時最高值像素的位置另患,然后把這個index用于解碼階段的上采樣纽乱。空白的值用0填充:
SegNet上采樣
在這個稀疏feature map進行正常卷積后昆箕,我們就能得到密集feature map鸦列。因此相比較FCN,SegNet的內(nèi)存利用率更高鹏倘,計算效率也更高薯嗤。
需要注意的是,一般來說纤泵,解碼器每一層的輸入通道數(shù)和feature map大小都與其對應的編碼器相同骆姐,但第一層不是。編碼器的第一層都3個輸入通道(RGB)捏题,但解碼器第一層有更多通道玻褪,這是為了給每個類別生成分割掩膜。
用SegNet進行道路場景分割
實例分割
所謂實例分割涉馅,指的就是結(jié)合了語義分割和分類的任務归园。它在本質(zhì)上更復雜,因為為了區(qū)分同一類的不同實例稚矿,我們往往需要為每個獨立對象創(chuàng)建單獨的庸诱、縮小的掩膜捻浦,然后再把它的大小調(diào)整為輸入圖像中對象的大小。
下面是實例分割的一些常用方法桥爽。
DeepMask架構
DeepMask是FAIR于2015年提出的一種實例分割方法朱灿,輸入一張圖片后,它能為子圖像塊(image patch)中的對象生成56×56的分割掩膜钠四,并以掩膜為中心進行分類盗扒。對于圖像的子圖像塊,它有兩個約束:
子圖像塊中必須包含一個大致居中的對象
這個對象必須被完整包含在子圖像塊中缀去,且在給定的比例范圍內(nèi)
由于DeepMask一次只能為子圖像塊分割一個對象侣灶,當它處理包含復雜、重復對象的圖像時缕碎,它會在多個位置以多個比例密集應用褥影。鑒于以上兩個約束條件,這是可以理解的咏雌,也是必要的凡怎。
整個模型由VGG-A構成,它保留了兩個全連接層赊抖,但刪去了最后一個最大池化層统倒,共有8個卷積層和4個池化層。模型輸出的下采樣因子為16氛雪,共有2個輸出房匆,一是子圖像塊對應物體的一個掩膜,二是這個子圖像塊包含一個物體的得分报亩。
DeepMask分割效果
Multi-task Network Cascades(MNC)
MNC架構坛缕,右上為簡化原理圖
MNC不直接進行實例分割,它把這個任務分成了三個更小捆昏、更簡單的子任務:
區(qū)分實例。這個子任務的目標是為每個實例預測候選框和候選框是否包含對象的概率毙沾;
估計掩膜骗卜。這個子任務的目標是預測對象的像素級掩膜;
對對象進行分類左胞。這個子任務的目標是為每個掩膜級實例預測類別標簽寇仓。
這三個子任務不是并行執(zhí)行的,它們要按照順序一個個完成烤宙,這也是MNC的全稱“多任務網(wǎng)絡級聯(lián)”的原因遍烦。模型用移除了所有全連接層的VGG-16處理輸入圖像,生成feature map躺枕,作為三個子任務的共用數(shù)據(jù)服猪。
子任務1:預測實例候選框
首先供填,神經(jīng)網(wǎng)絡以窗口的形式提取對象實例,這些候選框不包含分類預測信息罢猪,但有一個包含/不包含對象的概率近她。這是個全卷積的子網(wǎng)絡,結(jié)構類似RPN膳帕。
子任務2:估計實例掩膜
基于子任務1返回的候選框預測粘捎,模型再用ROI pooling從共享卷積特征中提取該候選框的特征,之后是兩個全連接層(fc)危彩,第一個fc負責把維度降到256攒磨, 第二個fc負責回歸像素級的掩膜。掩膜的預定義分辨率是M×M汤徽,這和DeepMask中使用的預測方法有些類似娩缰,但不同的是MNC只從幾個候選框中回歸掩膜,計算成本大大降低泻骤。
子任務3:對實例進行分類
現(xiàn)在模型有了子任務1給出的候選框預測瓜富,也有了子任務2用ROI pooling提取的feature map,之后就是基于掩膜和候選框預測實例類別怕磨。
這是兩條并行路徑始花。在基于掩膜的路徑中,ROI提取的feature map被子任務2預測的掩膜“覆蓋”趋惨,使模型更關注預測掩膜的前景特征鸟顺,計算乘積后,將特征輸入兩路4096維的fc層器虾。在基于候選框的路徑中讯嫂,用ROI pooling提取的特征被直接傳遞到4096維的fc層(圖中未畫出),目的是為了解決特征大幅被掩模級通道“覆蓋”的情況(如目標對象很大)兆沙。之后欧芽,基于掩膜和基于候選框的路徑被連接起來,緊接著是N+1類的Softmax分類器葛圃,其中N類是物體千扔,1類是背景。
MNC分割效果
即便是這么復雜的架構库正,整個網(wǎng)絡也是可以端到端訓練的曲楚。
InstanceFCN是FCN的改進版,它不僅在語義分割任務上表現(xiàn)出色褥符,在實例分割上也有不錯的結(jié)果龙誊。之前我們提到過,F(xiàn)CN的每個輸出像素是一個類別的分類器喷楣,那么InstanceFCN的每個輸出像素就是實例相對位置的分類器趟大。例如鹤树,下圖被分為9塊區(qū)域,在其中的第6個得分圖中护昧,每個像素就是對象是否在實例右側(cè)的分類器魂迄。
試想一下,如果圖像中只有一個實例惋耙,分割過程會很簡單捣炬;如果有多個重疊實例,那么我們就得先區(qū)分實例绽榛,然后再進行分割湿酸。相比FCN,InstanceFCN的最大改進是引入相對位置灭美,它在輸入圖像上生成k2實例敏感分數(shù)圖推溃,每個分數(shù)圖對應于特定的相對位置,這就實現(xiàn)了相同位置不同語義的預測届腐。
為了從這些分數(shù)圖上生成圖像實例铁坎,InstanceFCN在這組分數(shù)圖上用了一個m×m的滑動窗口。在這個滑動窗中犁苏,每一個m/k×m/k的子窗口直接從相應的分數(shù)圖中同樣的子窗口復制那一部分數(shù)值硬萍。之后這組子窗口按照相對位置拼起來就得到了m×m的結(jié)果。這一部分被稱為實例組合模塊(instance assembling module)围详。
模型的架構包括在輸入圖像上用VGG-16做特征提取朴乖。在輸出的feature map頂部,有兩個全卷積分支:一個用來估計分割實例(如上所述)助赞,另一個用來對實例進行評分买羞。
InstanceFCN架構
如上圖所示,對于第一個分支雹食,模型先采用一個512維的1×1卷積層轉(zhuǎn)換特征畜普,然后用3x3的卷積層生成一組k2實例敏感分數(shù)圖。這個實例組合模塊負責在分辨率為m×m(m=21)的滑動窗中預測分割掩膜群叶。
對于第二個分支漠嵌,模型先采用一個512維的3×3卷積層,后面跟隨一個1x1的卷積層盖呼。這個1x1的卷積層是逐像素的邏輯回歸,用于分類以像素為中心的m×m滑動窗口中的對象是/不是實例化撕。因此几晤,這個分支的輸出是對象分數(shù)圖,其中一個分數(shù)對應于生成一個實例的一個滑動窗口植阴,所以它對不同的對象類別會“視而不見”蟹瘾。
InstanceFCN分割效果
正如InstanceFCN是對FCN的改進圾浅,完全卷積實例感知語義分割(FCIS)也是在InstanceFCN基礎上做出的進一步優(yōu)化。上節(jié)我們說道憾朴,InstanceFCN預測分割掩膜的分辨率都是m×m狸捕,而且沒法將對象分類為不同類別。FCIS解決了這兩個問題众雷,它既能預測不同分辨率的掩膜灸拍,也能預測不同的對象類別。
FCIS實例敏感分數(shù)圖
給定ROI砾省,首先用InstanceFCN的實例組合模塊生成上述分數(shù)圖鸡岗。對于ROI中的每個像素,有兩個任務(所以要生成兩個分數(shù)圖):
檢測:它是否在某相對位置的對象檢測候選框內(nèi)编兄,是(detection+)轩性,否(detection-)
分割:它是否在對象實例的邊界內(nèi),是(segmentation+)狠鸳,否(segmentation-)
基于上述任務揣苏,這時出現(xiàn)了三種情況:
內(nèi)部得分高,外部得分低:detection+件舵,segmentation+(像素點位于ROI中的目標部分)
內(nèi)部得分低卸察,外部得分高:detection+,segmentation-(像素點位于ROI中的背景部分)
兩個得分都很低:detection-芦圾,segmentation-(像素點不在ROI中)
對于檢測蛾派,我們可以用取最大值把前兩種情況(detection+)和情況3(detection-)區(qū)分開。整個ROI的得分是求取最大值得到分數(shù)圖的所有值的平均數(shù)个少,之后再通過一個softmax分類器洪乍。對于分割,softmax可以區(qū)分情況1(segmentation+)和其他情況(segmentation-)夜焦。ROI的前景掩膜是每個類別每個像素分割分數(shù)的合并壳澳。
FCIS架構
FCIS分割效果
MASK R-CNN是目標檢測模型Faster R-CNN的進階版,它在后者候選框提取的基礎上添加了一個并行的分支網(wǎng)絡茫经,用預測分割掩膜巷波。這個分支網(wǎng)絡是個共享feature map的FCN,它為每個ROI提供Km2 維的輸出卸伞,其中K對應類別個數(shù)抹镊,即輸出K個掩膜,m對應池化分辨率荤傲。這樣的設計允許網(wǎng)絡為每個類別生成掩膜垮耳,避免了不同類實例之間因重疊產(chǎn)生混淆。此外,分類分支是直接在掩膜上分類终佛,所以分割和分類是分離的俊嗽。
Mask R-CNN架構中用于預測掩膜的分支
關注輸入圖像的空間結(jié)構是準確預測掩膜的前提,而這種像素到像素的操作需要ROI特征的完全對齊铃彰。在目標檢測任務中绍豁,一些模型會用RoIPool提取這些特征,但它們不總是嚴格對齊的牙捉,因為ROI的維度不僅可以是積分竹揍,也可以是浮點數(shù)。RoIPool通過將它們四舍五入到最接近的整數(shù)來量化這些維度鹃共,不僅如此鬼佣,量化的RoI還被進一步細分為量化的空間區(qū)間,在該區(qū)間上執(zhí)行合并霜浴。雖然這些量化對分類問題沒什么影響晶衷,但如果把它們用于像素級對齊,分割掩膜預測會出現(xiàn)巨大偏差阴孟。
RoIAlign: 虛線網(wǎng)格表示feature map晌纫,實線表示RoI(有2×2個bin,每個bin中4個采樣點)
考慮到實例分割要求像素級別的精準永丝,MASK R-CNN引入了一種新的方法來提取特征锹漱,稱為RoIAlign。它背后的想法是很簡單:既然錯位是由量化引起的慕嚷,那就避免所有量化哥牍。RoIAlign不會對維度做任何約減,它引入了一個插值過程喝检,先通過雙線性插值到14×14嗅辣,再池化到7×7,很大程度上解決了由直接池化采樣造成的Misalignment對齊問題挠说。需要注意的是澡谭,使用RoIAlign提取的RoI特征具有固定的空間維度,這點和RoIPool一樣损俭。
小結(jié)
以上就是現(xiàn)在常用的語義分割蛙奖、實例分割模型,它們基本上都是FCN的變體杆兵,把編碼器作為簡單的特征提取器雁仲,重點放在解碼器創(chuàng)新上。此外琐脏,一些研究人員也嘗試過用其他方法來解決實例分割問題攒砖,比如上面提到的MASK R-CNN就是改造目標檢測模型的成果,總而言之,F(xiàn)CN還是解決這類任務的重要基石祭衩。
譯者的話:以上只是簡短的關鍵提煉,如果讀者希望了解這些模型的具體細節(jié)阅签,可以參考文末推薦的幾篇中文論文解讀掐暮,點擊閱讀原文獲取超鏈接。
參考文獻
[1] J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015. (paper)
[2] O. Ronneberger, P. Fischer, and T. Brox, “U-net: Convolutional networks for biomedical image segmentation,” in MICCAI, pp. 234–241, Springer, 2015. (paper)
[3] Badrinarayanan, V., Kendall, A., & Cipolla, R. (2017). SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation. IEEE Transactions on Pattern Analysis and Machine Intelligence, 39, 2481-2495. (paper)
[4] P. O. Pinheiro, R. Collobert, and P. Dollar. Learning to segment object candidates. In NIPS, 2015. (paper)
[5] Dai, J., He, K., Sun, J. Instance-aware semantic segmentation via multi-task network cascades. In CVPR., 2016. (paper)
[6] J. Dai, K. He, Y. Li, S. Ren, and J. Sun. Instance-sensitive fully convolutional networks. In ECCV, 2016. (paper)
[7] Y. Li, H. Qi, J. Dai, X. Ji, and Y. Wei. Fully convolutional instance-aware semantic segmentation. In CVPR, 2017. (paper)
[8] K He, G Gkioxari, P Dollár, R Girshick. Mask R-CNN. In ICCV, 2017. (paper)
編譯參考
[1] jianyuchen23——U-Net論文詳解
[2] DelphiFan’s Blog——語義分割論文-SegNet
[3] Elaine_Bao——物體檢測與分割系列 DeepMask
[4] AHU-WangXiao——Instance-aware Semantic Segmentation via Multi-task Network Cascades
[5] Tina’s Blog——InstanceFCN:Instance-sensitive Fully Convolutional Networks
[6] 技術挖掘者——Mask R-CNN詳解