當前位置:
首頁 > 知識 > 使用卷積神經網路做語義分割

使用卷積神經網路做語義分割

本文為 AI 研習社編譯的技術博客,原標題 :

Semantic Segmentation using CNN』s

翻譯 | shunshun 校對 | Lamaric 整理 | 志豪

https://medium.com/@aiclubiiitb/semantic-segmentation-using-cnns-357fbcfa1bc

我們將在一系列博客文章中討論使用CNN的語義分割。在這篇博文中,我們將討論FCN,DeConvolution Network,SegNet結構。

在深入研究如何使用 CNN 進行語義分割的細節之前,讓我們理解「語義分割」的概念。


語義分割

「分割」是圖像分成幾個「連貫」部分,但沒有任何嘗試理解這些部分代表什麼。最著名的作品之一(但絕對不是第一部)是Shi and Malik 「Normalized Cuts and Image Segmentation」 PAMI 2000。

另一方面,「語義分割」試圖將圖像劃分為語義上有意義的部分,並將每個部分分類為預定類之一。你還可以通過對每個像素(而不是整個圖像/片段)進行分類來實現相同的目標。在這種情況下,你正在進行按像素分類,這會導致相同的最終結果,但路徑略有不同。

所以,我想你可以說「語義分割」,「場景標記」和「逐像素分類」基本上都試圖達到同樣的目標:從語義上理解圖像中每個像素的作用。你可以採用多條路徑來達到目標,這些路徑會導致術語中的細微差別。

以下是最近在語義分割領域的工作,該結構稱為Mask-RCNN。它試圖同時完成3個視覺任務:目標分類,目標檢測和分割。

圖像來自 https://arxiv.org/abs/1703.06870


如何使用CNN進行語義分割

在語義分割中,我們為每個像素標記一個類。像素通過卷積編碼。從這些編碼中,可以找到特定於該類的局部特徵。

通過這些編碼,我們構建了一個結合了這些類特定特徵的解碼器網路。我們嘗試根據一組固定的預定類重建圖像。最終的分類標籤是圖像的掩碼,對應於每個類。

掩碼看起來像這樣:

這些掩碼是圖像的真值標籤。掩碼由屬於特定類的所有像素組成。第一組圖像包含馬的掩碼。第二組由狗類組成。如果存在帶有狗和馬的圖像,則將有兩個掩模作為分割網路的輸出。一個二進位掩碼用於狗類輸出,另一個用於馬類。對於維度為h*w的圖像,用於k類的識別任務的輸出掩碼將是h*w*k陣列。每個尺寸為h*w的K個掩碼。

典型的分割網路結構

典型的分割網路結構由編碼器-解碼器網路組成。編碼器通過卷積產生更高級別的特徵,解碼器使用類掩碼解釋這些更高級別的特徵。編碼是通過使用預訓練網路的常規編碼機制,解碼器權重是在訓練分割網路期間學習。

編碼器通過池化層逐漸減小空間維度,解碼器逐漸恢復對象細節和空間維度。

重要的是要理解卷積網路中的語義分割是如何發生的。作為一個概念,語義分割試圖找出圖像的有意義部分。人們可以談論屬於一個類的像素如何與另一個類的像素相關聯。考慮CNN的第一層編碼。卷積的基本操作將圖像編碼為更高級別的表示,其中將圖像表示為諸如邊緣或梯度之類的部分的組合。例如邊緣等這些特徵不是唯一的,但實際上帶有它們的鄰域的上下文。在上採樣和解碼時,這些特徵在類關聯方面被解碼,在反向傳播期間由每像素映射引導。


FCN(全卷積網路)

用深度學習進行分割任務的首批嘗試之一是FCN,全卷積網路。顧名思義,網路的體系結構僅包含卷積層,而不包含FC層。

FCN結構:https://arxiv.org/abs/1411.4038

FCN使用AlexNet作為編碼器,編碼器上採樣32倍作為解碼器。在訓練期間,僅訓練解碼器權重,因為編碼器是預訓練的AlexNet。

這裡的主要概念是轉置卷積(或稱反卷積),全卷積層和跳連接。較低的卷積層可能有助於捕獲輸入圖像中更細粒度的細節。

我們來詳細討論 Transpose 卷積。


轉置卷積

轉置卷積通常也稱為向後卷積或分數卷積。在正常卷積中,例如3*3的內核乘以3*3像素值,求和得到一個值。這裡一個像素乘以3*3權重並投影到3*3輸出維度。類似地,每個像素與內核相乘並投影到輸出空間。如果輸出對像素重疊,則結果總結如下圖所示。

FCN採用了同樣的方法。轉置卷積層,上採樣因子為32。

這種上採樣是導致細節丟失的操作。因此,作者提出了一種通過使用跳連接來進行更好預測的方法。

FCN,FCN-16和FCN-8的變體在特徵提取期間使用maxpool層的輸出,通過將它們與conv7的合適的上採樣融合。融合是簡單的加法連接。

隨著我們編碼更多空間信息,FCN-8,FCN-16的預測變得更好。上下文由跳過連接提供。

圖片來自https://arxiv.org/abs/1411.4038


損失函數

使用的損失函數是交叉熵損失

以下是1-D交叉熵損失。

但 Image 是2-D或3-D 矩陣。如何使用交叉熵損失?

這就是捕獲。為簡單起見,我們將圖像作為二維數組。

y(實際)和?(預測)矩陣是2-D,因此損失將在總和中具有h*w項。


反卷積網路

很快,研究人員開始嘗試分割網路。 2015年,Noh等人想出了將解碼提升到新水平的反卷積網路。

該體系結構如下所示:

圖像來自https://arxiv.org/abs/1505.04366

編碼器是使用VGG權重初始化的VGG網路,而解碼器遵循與VGG網路相同的網路架構,但是從頭開始學習。

因此,上採樣學習了 13 層( unpooling + conv )層。(+ FC層)

在這裡,新概念是我們解耦上採樣和卷積。我們使用unpooling來增加感受野大小,而我們在unpooling後使用卷積層。

因此,Unpooling以下列方式工作:

圖像來自https://arxiv.org/abs/1505.04366

如果我們在從4*4輸入進行卷積後得到2*2的池化圖,我們使用Unpooling過濾器將其投影到4*4輸出上。在這樣做的同時,他們利用開關變數捕獲最高激活發生的位置,以指導解碼,關於在卷積過程中學習邊緣,梯度或任何高級特徵。這有助於很好地保留邊緣/邊界信息。與此相關的額外成本是每個池層中的切換變數。基本上,2*2窗口的2bit信息。

Deconvolution Network發佈於ICCV 2015。


SEGNET

下一個有名的結構是SegNet。

圖像來自https://arxiv.org/abs/1511.00561

圖像來自https://arxiv.org/abs/1511.00561

他們的比較是以FCN為基準。這裡的主要改進是刪除FC層。然而,除了將計算成本降低了一些之外,這似乎運作良好。

從SegNet論文中檢索到的不同架構的結果示例如下:

圖像來自https://arxiv.org/abs/1511.00561

在下一篇文章中,我們將介紹DeepLab ResNet v2,UNet,它是用於醫學圖像的標準結構。


參考文獻

FCN:https://arxiv.org/abs/1411.4038

DeConvolution Network:https://arxiv.org/abs/1505.04366

SegNet:https://arxiv.org/abs/1511.00561

本文作者:

Chandana Kotta:https://www.linkedin.com/in/chandana-k-b43871a7/

想要繼續查看該篇文章更多代碼、鏈接和參考文獻?

戳鏈接:

http://www.gair.link/page/TextTranslation/1079


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

利用搖滾樂隊學習TensorFlow,Word2Vec模型和TSNE演算法
6次Kaggle 計算機視覺類比賽賽後感

TAG:AI研習社 |