在計(jì)算機(jī)視覺領(lǐng)域,圖像分割指的是為圖像中的每個(gè)像素分配一個(gè)標(biāo)簽的任務(wù),它也可以被看作是dense prediction task,對(duì)圖像中每個(gè)像素進(jìn)行分類。和使用矩形候選框的目標(biāo)檢測不同,圖像分割需要精確到像素級(jí)位置,因此它在醫(yī)學(xué)分析、衛(wèi)星圖像物體檢測、虹膜識(shí)別和自動(dòng)駕駛汽車等任務(wù)中起著非常重要的作用。
隨著深度學(xué)習(xí)的不斷發(fā)展,近年來圖像分割技術(shù)也在速度和準(zhǔn)確率上迎來了一次次突破?,F(xiàn)在,我們能在幾分之一秒內(nèi)完成分割,同時(shí)保證極高的準(zhǔn)確性。在這篇文章中,我們將介紹一些用于圖像分割的主要技術(shù)及其背后的簡單思路。我們將從最基礎(chǔ)的語義分割(semantic segmentation)開始,慢慢進(jìn)階到更復(fù)雜的實(shí)例分割(instance segmentation)。
目標(biāo)檢測、語義分割和實(shí)例分割
語義分割
語義圖像分割是為圖像中的每個(gè)像素分配語義類別標(biāo)簽的任務(wù),它不分割對(duì)象實(shí)例?,F(xiàn)在,處理這類任務(wù)的主流方法是FCN及其衍生,所以我們先從FCN看起。
全卷積網(wǎng)絡(luò)(FCN)
FCN架構(gòu)
創(chuàng)建FCN的方法很簡單,我們只需把CNN里的所有全連接層替換成寬高1×1的卷積層,這時(shí)卷積層的filter數(shù)量等于全連接層的神經(jīng)元(輸出)數(shù)量,所有層都是卷積層,故稱全卷積網(wǎng)絡(luò)。之所以要這么做,是因?yàn)槊總€(gè)像素的空間位置對(duì)于分割來說都很重要,而卷積層能分類全連接層無法處理的單個(gè)像素。作為處理結(jié)果,神經(jīng)網(wǎng)絡(luò)較高層中的位置會(huì)對(duì)應(yīng)于它們路徑連接的圖像中的位置,即它們的感受野。
如上圖所示,F(xiàn)CN的架構(gòu)非常簡單,主要由編碼器CNN(以VGG為例)構(gòu)成,只不過其中和分類網(wǎng)絡(luò)對(duì)應(yīng)的最后三層被改成了(4096,1,1)(4096,1,1)(N+1,1,1)的卷積層(N表示類別數(shù)量)。編碼器后是一個(gè)解碼器網(wǎng)絡(luò),它只包含一個(gè)反向的卷積層(也稱為轉(zhuǎn)置卷積transposed convolution或反卷積deconvolution)。它的輸出與輸入圖像具有相同的空間維度,并具有N+1個(gè)通道,每個(gè)通道預(yù)測一個(gè)類別。
反向的卷積操作
仍以VGG為例,由于前面采樣部分過大,有時(shí)候會(huì)導(dǎo)致后面進(jìn)行反向卷積操作得到的結(jié)果分辨率較低,會(huì)出現(xiàn)細(xì)節(jié)丟失等問題。為此,F(xiàn)CN的解決方法是疊加第三、四、五層池化層的特征,以生成更精準(zhǔn)的邊界分割。如下圖所示:
需要注意的一點(diǎn)是,在進(jìn)行上采樣之前,所有池化特征都會(huì)先通過(N+1,1,1)這個(gè)卷積層。
FCN分割效果
U-NET
U-NET架構(gòu)
U-NET常被用于生物醫(yī)學(xué)圖像分割,它遵循了FCN的編碼器-解碼器結(jié)構(gòu),不使用任何全連接層。如上圖所示,常規(guī)情況下,U-NET的編碼器是一個(gè)包含10個(gè)卷積層的CNN,中間包含最大池化層(紅色箭頭)。它的解碼器會(huì)對(duì)feature map進(jìn)行多次上采樣和卷積,目的是為了提取更高效、更抽象的特征。得到heatmap后,U-NET最后再用1×1的卷積層做分類,也就是說解碼器一共有13層,整個(gè)架構(gòu)總共由23層可學(xué)習(xí)的卷積層組成。
為什么要做上采樣?答:池化層會(huì)丟失圖像信息和降低圖像分辨率且是不可逆的操作,對(duì)圖像分割任務(wù)有一些影響。上采樣可以補(bǔ)足一些圖片的信息,但是信息補(bǔ)充的肯定不完全,所以還需要與左邊的分辨率比較高的圖片相連接起來(直接復(fù)制過來再裁剪到與上采樣圖片一樣大小),這就相當(dāng)于在高分辨率和更抽象特征當(dāng)中做一個(gè)折衷,因?yàn)殡S著卷積次數(shù)增多,提取的特征也更加有效,更加抽象?!猨ianyuchen23
SEGNET
SegNet架構(gòu)
SegNet的全稱是“用于圖像分割的深度卷積編碼器-解碼器架構(gòu)”,事實(shí)上,大多數(shù)語義分割方法都遵循這種基本架構(gòu),它們的編碼器都是用VGG16,解碼器都仿照U-NET——多次上采樣后再卷積。但是,SegNet有自己獨(dú)到的特點(diǎn):
上采樣是不可學(xué)習(xí)的
解碼器使用和編碼器相同的卷積(filter大小和相應(yīng)層的通道數(shù)量)
SegNet中的上采樣是一種反向最大池化操作。為了補(bǔ)足圖像信息,U-NET會(huì)對(duì)編碼階段的特征做通道降維,再把它和特征反向卷積后得到上采樣進(jìn)行相加,這一過程需要學(xué)習(xí)。而SegNet采用的方法是記錄下編碼階段的最大池化index,比如在某層移動(dòng)2×2的最大池化窗口時(shí)最高值像素的位置,然后把這個(gè)index用于解碼階段的上采樣??瞻椎南袼刂涤?填充:
SegNet上采樣
在這個(gè)稀疏feature map進(jìn)行正常卷積后,我們就能得到密集feature map。因此相比較FCN,SegNet的內(nèi)存利用率更高,計(jì)算效率也更高。
需要注意的是,一般來說,解碼器每一層的輸入通道數(shù)和feature map大小都與其對(duì)應(yīng)的編碼器相同,但第一層不是。編碼器的第一層都3個(gè)輸入通道(RGB),但解碼器第一層有更多通道,這是為了給每個(gè)類別生成分割掩膜。
用SegNet進(jìn)行道路場景分割
實(shí)例分割
所謂實(shí)例分割,指的就是結(jié)合了語義分割和分類的任務(wù)。它在本質(zhì)上更復(fù)雜,因?yàn)闉榱藚^(qū)分同一類的不同實(shí)例,我們往往需要為每個(gè)獨(dú)立對(duì)象創(chuàng)建單獨(dú)的、縮小的掩膜,然后再把它的大小調(diào)整為輸入圖像中對(duì)象的大小。
下面是實(shí)例分割的一些常用方法。
DEEPMASK
DeepMask架構(gòu)
DeepMask是FAIR于2015年提出的一種實(shí)例分割方法,輸入一張圖片后,它能為子圖像塊(image patch)中的對(duì)象生成56×56的分割掩膜,并以掩膜為中心進(jìn)行分類。對(duì)于圖像的子圖像塊,它有兩個(gè)約束:
子圖像塊中必須包含一個(gè)大致居中的對(duì)象
這個(gè)對(duì)象必須被完整包含在子圖像塊中,且在給定的比例范圍內(nèi)
由于DeepMask一次只能為子圖像塊分割一個(gè)對(duì)象,當(dāng)它處理包含復(fù)雜、重復(fù)對(duì)象的圖像時(shí),它會(huì)在多個(gè)位置以多個(gè)比例密集應(yīng)用。鑒于以上兩個(gè)約束條件,這是可以理解的,也是必要的。
整個(gè)模型由VGG-A構(gòu)成,它保留了兩個(gè)全連接層,但刪去了最后一個(gè)最大池化層,共有8個(gè)卷積層和4個(gè)池化層。模型輸出的下采樣因子為16,共有2個(gè)輸出,一是子圖像塊對(duì)應(yīng)物體的一個(gè)掩膜,二是這個(gè)子圖像塊包含一個(gè)物體的得分。
DeepMask分割效果
Multi-task Network Cascades(MNC)
MNC架構(gòu),右上為簡化原理圖
MNC不直接進(jìn)行實(shí)例分割,它把這個(gè)任務(wù)分成了三個(gè)更小、更簡單的子任務(wù):
區(qū)分實(shí)例。這個(gè)子任務(wù)的目標(biāo)是為每個(gè)實(shí)例預(yù)測候選框和候選框是否包含對(duì)象的概率;
估計(jì)掩膜。這個(gè)子任務(wù)的目標(biāo)是預(yù)測對(duì)象的像素級(jí)掩膜;
對(duì)對(duì)象進(jìn)行分類。這個(gè)子任務(wù)的目標(biāo)是為每個(gè)掩膜級(jí)實(shí)例預(yù)測類別標(biāo)簽。
這三個(gè)子任務(wù)不是并行執(zhí)行的,它們要按照順序一個(gè)個(gè)完成,這也是MNC的全稱“多任務(wù)網(wǎng)絡(luò)級(jí)聯(lián)”的原因。模型用移除了所有全連接層的VGG-16處理輸入圖像,生成feature map,作為三個(gè)子任務(wù)的共用數(shù)據(jù)。
子任務(wù)1:預(yù)測實(shí)例候選框
首先,神經(jīng)網(wǎng)絡(luò)以窗口的形式提取對(duì)象實(shí)例,這些候選框不包含分類預(yù)測信息,但有一個(gè)包含/不包含對(duì)象的概率。這是個(gè)全卷積的子網(wǎng)絡(luò),結(jié)構(gòu)類似RPN。
子任務(wù)2:估計(jì)實(shí)例掩膜
基于子任務(wù)1返回的候選框預(yù)測,模型再用ROI pooling從共享卷積特征中提取該候選框的特征,之后是兩個(gè)全連接層(fc),第一個(gè)fc負(fù)責(zé)把維度降到256, 第二個(gè)fc負(fù)責(zé)回歸像素級(jí)的掩膜。掩膜的預(yù)定義分辨率是M×M,這和DeepMask中使用的預(yù)測方法有些類似,但不同的是MNC只從幾個(gè)候選框中回歸掩膜,計(jì)算成本大大降低。
子任務(wù)3:對(duì)實(shí)例進(jìn)行分類
現(xiàn)在模型有了子任務(wù)1給出的候選框預(yù)測,也有了子任務(wù)2用ROI pooling提取的feature map,之后就是基于掩膜和候選框預(yù)測實(shí)例類別。
這是兩條并行路徑。在基于掩膜的路徑中,ROI提取的feature map被子任務(wù)2預(yù)測的掩膜“覆蓋”,使模型更關(guān)注預(yù)測掩膜的前景特征,計(jì)算乘積后,將特征輸入兩路4096維的fc層。在基于候選框的路徑中,用ROI pooling提取的特征被直接傳遞到4096維的fc層(圖中未畫出),目的是為了解決特征大幅被掩模級(jí)通道“覆蓋”的情況(如目標(biāo)對(duì)象很大)。之后,基于掩膜和基于候選框的路徑被連接起來,緊接著是N+1類的Softmax分類器,其中N類是物體,1類是背景。
MNC分割效果
即便是這么復(fù)雜的架構(gòu),整個(gè)網(wǎng)絡(luò)也是可以端到端訓(xùn)練的。
INSTANCEFCN
InstanceFCN是FCN的改進(jìn)版,它不僅在語義分割任務(wù)上表現(xiàn)出色,在實(shí)例分割上也有不錯(cuò)的結(jié)果。之前我們提到過,F(xiàn)CN的每個(gè)輸出像素是一個(gè)類別的分類器,那么InstanceFCN的每個(gè)輸出像素就是實(shí)例相對(duì)位置的分類器。例如,下圖被分為9塊區(qū)域,在其中的第6個(gè)得分圖中,每個(gè)像素就是對(duì)象是否在實(shí)例右側(cè)的分類器。
試想一下,如果圖像中只有一個(gè)實(shí)例,分割過程會(huì)很簡單;如果有多個(gè)重疊實(shí)例,那么我們就得先區(qū)分實(shí)例,然后再進(jìn)行分割。相比FCN,InstanceFCN的最大改進(jìn)是引入相對(duì)位置,它在輸入圖像上生成k2實(shí)例敏感分?jǐn)?shù)圖,每個(gè)分?jǐn)?shù)圖對(duì)應(yīng)于特定的相對(duì)位置,這就實(shí)現(xiàn)了相同位置不同語義的預(yù)測。
為了從這些分?jǐn)?shù)圖上生成圖像實(shí)例,InstanceFCN在這組分?jǐn)?shù)圖上用了一個(gè)m×m的滑動(dòng)窗口。在這個(gè)滑動(dòng)窗中,每一個(gè)m/k×m/k的子窗口直接從相應(yīng)的分?jǐn)?shù)圖中同樣的子窗口復(fù)制那一部分?jǐn)?shù)值。之后這組子窗口按照相對(duì)位置拼起來就得到了m×m的結(jié)果。這一部分被稱為實(shí)例組合模塊(instance assembling module)。
模型的架構(gòu)包括在輸入圖像上用VGG-16做特征提取。在輸出的feature map頂部,有兩個(gè)全卷積分支:一個(gè)用來估計(jì)分割實(shí)例(如上所述),另一個(gè)用來對(duì)實(shí)例進(jìn)行評(píng)分。
InstanceFCN架構(gòu)
如上圖所示,對(duì)于第一個(gè)分支,模型先采用一個(gè)512維的1×1卷積層轉(zhuǎn)換特征,然后用3x3的卷積層生成一組k2實(shí)例敏感分?jǐn)?shù)圖。這個(gè)實(shí)例組合模塊負(fù)責(zé)在分辨率為m×m(m=21)的滑動(dòng)窗中預(yù)測分割掩膜。
對(duì)于第二個(gè)分支,模型先采用一個(gè)512維的3×3卷積層,后面跟隨一個(gè)1x1的卷積層。這個(gè)1x1的卷積層是逐像素的邏輯回歸,用于分類以像素為中心的m×m滑動(dòng)窗口中的對(duì)象是/不是實(shí)例。因此,這個(gè)分支的輸出是對(duì)象分?jǐn)?shù)圖,其中一個(gè)分?jǐn)?shù)對(duì)應(yīng)于生成一個(gè)實(shí)例的一個(gè)滑動(dòng)窗口,所以它對(duì)不同的對(duì)象類別會(huì)“視而不見”。
InstanceFCN分割效果
FCIS
正如InstanceFCN是對(duì)FCN的改進(jìn),完全卷積實(shí)例感知語義分割(FCIS)也是在InstanceFCN基礎(chǔ)上做出的進(jìn)一步優(yōu)化。上節(jié)我們說道,InstanceFCN預(yù)測分割掩膜的分辨率都是m×m,而且沒法將對(duì)象分類為不同類別。FCIS解決了這兩個(gè)問題,它既能預(yù)測不同分辨率的掩膜,也能預(yù)測不同的對(duì)象類別。
FCIS實(shí)例敏感分?jǐn)?shù)圖
給定ROI,首先用InstanceFCN的實(shí)例組合模塊生成上述分?jǐn)?shù)圖。對(duì)于ROI中的每個(gè)像素,有兩個(gè)任務(wù)(所以要生成兩個(gè)分?jǐn)?shù)圖):
檢測:它是否在某相對(duì)位置的對(duì)象檢測候選框內(nèi),是(detection+),否(detection-)
分割:它是否在對(duì)象實(shí)例的邊界內(nèi),是(segmentation+),否(segmentation-)
基于上述任務(wù),這時(shí)出現(xiàn)了三種情況:
內(nèi)部得分高,外部得分低:detection+,segmentation+(像素點(diǎn)位于ROI中的目標(biāo)部分)
內(nèi)部得分低,外部得分高:detection+,segmentation-(像素點(diǎn)位于ROI中的背景部分)
兩個(gè)得分都很低:detection-,segmentation-(像素點(diǎn)不在ROI中)
對(duì)于檢測,我們可以用取最大值把前兩種情況(detection+)和情況3(detection-)區(qū)分開。整個(gè)ROI的得分是求取最大值得到分?jǐn)?shù)圖的所有值的平均數(shù),之后再通過一個(gè)softmax分類器。對(duì)于分割,softmax可以區(qū)分情況1(segmentation+)和其他情況(segmentation-)。ROI的前景掩膜是每個(gè)類別每個(gè)像素分割分?jǐn)?shù)的合并。
FCIS架構(gòu)
FCIS分割效果
MASK R-CNN
MASK R-CNN是目標(biāo)檢測模型Faster R-CNN的進(jìn)階版,它在后者候選框提取的基礎(chǔ)上添加了一個(gè)并行的分支網(wǎng)絡(luò),用預(yù)測分割掩膜。這個(gè)分支網(wǎng)絡(luò)是個(gè)共享feature map的FCN,它為每個(gè)ROI提供Km2維的輸出,其中K對(duì)應(yīng)類別個(gè)數(shù),即輸出K個(gè)掩膜,m對(duì)應(yīng)池化分辨率。這樣的設(shè)計(jì)允許網(wǎng)絡(luò)為每個(gè)類別生成掩膜,避免了不同類實(shí)例之間因重疊產(chǎn)生混淆。此外,分類分支是直接在掩膜上分類,所以分割和分類是分離的。
Mask R-CNN架構(gòu)中用于預(yù)測掩膜的分支
關(guān)注輸入圖像的空間結(jié)構(gòu)是準(zhǔn)確預(yù)測掩膜的前提,而這種像素到像素的操作需要ROI特征的完全對(duì)齊。在目標(biāo)檢測任務(wù)中,一些模型會(huì)用RoIPool提取這些特征,但它們不總是嚴(yán)格對(duì)齊的,因?yàn)镽OI的維度不僅可以是積分,也可以是浮點(diǎn)數(shù)。RoIPool通過將它們四舍五入到最接近的整數(shù)來量化這些維度,不僅如此,量化的RoI還被進(jìn)一步細(xì)分為量化的空間區(qū)間,在該區(qū)間上執(zhí)行合并。雖然這些量化對(duì)分類問題沒什么影響,但如果把它們用于像素級(jí)對(duì)齊,分割掩膜預(yù)測會(huì)出現(xiàn)巨大偏差。
RoIAlign: 虛線網(wǎng)格表示feature map,實(shí)線表示RoI(有2×2個(gè)bin,每個(gè)bin中4個(gè)采樣點(diǎn))
考慮到實(shí)例分割要求像素級(jí)別的精準(zhǔn),MASK R-CNN引入了一種新的方法來提取特征,稱為RoIAlign。它背后的想法是很簡單:既然錯(cuò)位是由量化引起的,那就避免所有量化。RoIAlign不會(huì)對(duì)維度做任何約減,它引入了一個(gè)插值過程,先通過雙線性插值到14×14,再池化到7×7,很大程度上解決了由直接池化采樣造成的Misalignment對(duì)齊問題。需要注意的是,使用RoIAlign提取的RoI特征具有固定的空間維度,這點(diǎn)和RoIPool一樣。
小結(jié)
以上就是現(xiàn)在常用的語義分割、實(shí)例分割模型,它們基本上都是FCN的變體,把編碼器作為簡單的特征提取器,重點(diǎn)放在解碼器創(chuàng)新上。此外,一些研究人員也嘗試過用其他方法來解決實(shí)例分割問題,比如上面提到的MASK R-CNN就是改造目標(biāo)檢測模型的成果,總而言之,F(xiàn)CN還是解決這類任務(wù)的重要基石。
-
圖像
+關(guān)注
關(guān)注
2文章
1078瀏覽量
40375 -
計(jì)算機(jī)視覺
+關(guān)注
關(guān)注
8文章
1694瀏覽量
45901 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5463瀏覽量
120890
原文標(biāo)題:一文概覽用于圖像分割的CNN
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論