使用卷積神經網路做語義分割
本文為 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
※利用搖滾樂隊學習TensorFlow,Word2Vec模型和TSNE演算法
※6次Kaggle 計算機視覺類比賽賽後感
TAG:AI研習社 |