06.13 圖像語義分割的工作原理和CNN架構變遷

選自jeremyjordan.me

機器之心編譯

參與:李詩萌、劉曉坤

圖像分割是根據圖像內容對指定區域進行標記的計算機視覺任務,簡言之就是「這張圖片裡有什麼,其在圖片中的位置是什麼?」本文聚焦於語義分割任務,即在分割圖中將同一類別的不同實例視為同一對象。作者將沿著該領域的研究脈絡,說明如何用卷積神經網絡處理語義圖像分割的任務。

更具體地講,語義圖像分割的目標在於標記圖片中每一個像素,並將每一個像素與其表示的類別對應起來。因為會預測圖像中的每一個像素,所以一般將這樣的任務稱為密集預測。

圖像語義分割的工作原理和CNN架構變遷

語義分割的例子,目標是預測圖像中每一個像素的類別標籤。(圖源:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/#devkit)

當我們有越來越多要用機器執行的任務時,為這些機器配備必需的感知器是很重要的。

圖像語義分割的工作原理和CNN架構變遷

自動駕駛中實時語義分割道路場景。(圖源:https://m.youtube.com/watch?v=ATlcEDSPWXY)

還有一點要注意的是我們不會分割同一類別的實例,只需要關注每一個像素的類別。換句話講,如果在輸入圖像中有兩個目標屬於同一類,分割映射不會將其分為單獨的兩個目標。

相對地,實例分割模型是另一種不同的模型,該模型可以區分同一類的不同目標。

任務表徵

簡單地說,我們的目標是要用 RGB 圖(高 x 寬 x3)或灰度圖(高 x 寬 x1)為輸入,並輸出一個分割圖,在分割圖中每個像素都包括一個用整數表示的類別標籤(高 x 寬 x1)。

圖像語義分割的工作原理和CNN架構變遷

注意:為了視覺上的理解簡單起見,我標記的是分辨率比較低的預測圖。事實上,分割標籤的分辨率是和原始輸入圖的分辨率相對應的。

與我們處理標準分類值的方法相似,我們通過獨熱編碼類別標籤的方法創建目標——本質上講是要為每一個可能的類創建一個輸出通道。

圖像語義分割的工作原理和CNN架構變遷

然後我們可以利用每一個像素位深向量的 argmax 函數將預測值分解為分割映射(如上圖所示)。

也可以通過將目標重疊在輸入圖像上來對目標進行觀察。

圖像語義分割的工作原理和CNN架構變遷

建立網絡架構

針對這項任務簡單地構建神經網絡架構的方法是簡單地堆疊大量卷積層(用 same 填充保留維度)後輸出最終的分割映射。通過特徵圖的接連轉換,直接從輸入圖像學到了相對應的分割映射;然而,在整個網絡中要保留完整分辨率的計算成本是很高的。

圖像語義分割的工作原理和CNN架構變遷

圖源:http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf

回顧深度卷積網絡,前期的卷積層更傾向於學習低級概念,而後期的卷積層則會產生更高級(且專一)的特徵圖。為了保持表達性,一般而言,當我們到達更深層的網絡時,需要增加特徵圖(通道)的數量。

對圖像分類任務而言,這不一定會造成什麼問題,因為對這個任務而言,我們只需要關注圖像裡面有什麼(而不是目標類別對象的位置)。因此,我們可以通過池化或逐步卷積(即壓縮空間分辨率)定期對特徵圖進行下采樣以緩和計算壓力。

常用的圖像分割模型的方法遵循編碼器/解碼器結構,在這個結構中,我們對輸入的空間分辨率下采樣,產生分辨率更低的特徵圖,通過學習這些特徵圖可以更高效地分辨類別,還可以將這些特徵表徵上採樣至完整分辨率的分割圖。

圖像語義分割的工作原理和CNN架構變遷

圖源:http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf

上採樣方法

我們可以用很多不一樣的方法對特徵圖的分辨率上採樣。池化操作通過彙總局部區域的單個值(平均池化或最大池化)下采樣分辨率,「上池化」操作通過將單個值分配給更高的分辨率對分辨率進行上採樣。

圖像語義分割的工作原理和CNN架構變遷

圖源:http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf

迄今為止,轉置卷積(transpose convolutions)是最常用的方法,因為轉置卷積允許我們開發學習過的上採樣。

圖像語義分割的工作原理和CNN架構變遷

圖源:http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf

與轉置卷積相反,經典的卷積運算會將卷積核權重與當前值進行點積,併為相應輸出位置產生單個值。轉置卷積會先從低分辨率的特徵映射中得到單個值,再用該值與卷積核中所有權重相乘,然後將這些加權值映射到輸出特徵圖中。

圖像語義分割的工作原理和CNN架構變遷

通過轉置運算進行上採樣的 1D 的例子(圖源:http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf)

對在輸出特徵映射圖中產生重疊(如下圖所示是步長為 2 的 3x3 卷積核)的卷積核尺寸而言,重疊值是簡單的疊加。不幸的是,這會在輸出中產生棋盤效應(棋盤狀偽影),所以最好保證卷積核不會產生重疊。

圖像語義分割的工作原理和CNN架構變遷

輸入是藍色格子,輸出是綠色格子。(圖源:https://github.com/vdumoulin/conv_arithmetic)

全卷積網絡

Long 等人在 2014 年末介紹了使用「全卷積」網絡對圖像分割的任務進行端到端、像素到像素的訓練方法 (https://arxiv.org/abs/1411.4038)。這篇論文的作者提出將現有的、經過充分研究的圖像分類網絡(如 AlexNet)作為網絡的編碼模塊,用轉置卷積層作為解碼模塊,將粗略的特徵圖上採樣至全分辨率的分割圖。

圖像語義分割的工作原理和CNN架構變遷

圖源:https://arxiv.org/abs/1411.4038

如下圖所示,完整的網絡是根據像素層面的交叉熵損失訓練的。

圖像語義分割的工作原理和CNN架構變遷

圖源:https://arxiv.org/abs/1411.4038

但因為編碼模塊將輸入的分辨率降低了 32 倍,所以解碼模塊難以產生精細的分割圖(如下圖所示)。

圖像語義分割的工作原理和CNN架構變遷

文章作者是這樣說明這一問題的:

語義分割面臨的主要是語義和位置之間的緊張關係:全局信息解決語義問題,而局部信息解決位置問題……將精細層和粗略層結合,使模型做出不違背全局結構的局部預測。

添加跳過連接

作者通過緩慢地對編碼表徵進行上採樣以解決這個問題,在前期層中加入「跳過連接」,並彙總這兩個特徵圖。

圖像語義分割的工作原理和CNN架構變遷

圖源:https://arxiv.org/abs/1411.4038(有修改)

這些來自網絡較前期層的跳過連接(在下采樣操作之前)應該提供必要的細節,以準確重建分割圖邊界的形狀。事實上,我們的確可以用添加的這些跳過連接恢復更精細的細節。

圖像語義分割的工作原理和CNN架構變遷

Ronneberger 等人通過擴展網絡解碼模塊的容量改進「全卷積」結構 (https://arxiv.org/abs/1505.04597)。更具體地講,他們提出了「由捕獲內容的收縮路徑和(對稱的)精確定位的擴張路徑組成」的 U-Net 架構。這個更簡單的架構已經很常用了,而且適用於大量分割問題。

圖像語義分割的工作原理和CNN架構變遷

圖源:https://arxiv.org/abs/1411.4038

注意:由於使用了 valid 填充,原始架構會導致分辨率下降。但也有人選擇使用 same 填充,這些填充值是從邊界處圖像映射中獲取的。

Long 等人(FCN 論文)認為數據的擴增不會導致模型性能的明顯提升,Ronneberger 等人(U-Net 論文)相信對模型學習而言數據擴增是關鍵概念。看來,數據擴增的有用程度也許與問題領域有關。

高級的 U-Net 變體

標準的 U-Net 模型由架構中每個「塊」的一系列卷積運算組成。一般的卷積網絡架構存在大量更高級的「塊」,這些「塊」可以替換堆棧卷積層。

Drozdzal 等人替換了基本的堆疊卷積塊以支持殘差塊(https://arxiv.org/abs/1608.04117)。這種殘差塊在標準 U-Net 結構中存在的長程跳過連接(在編碼模塊和解碼模塊相對應的特徵圖之間)中引入了短程跳過連接。他們認為短程跳過連接在訓練時可以更快地收斂,而且可以訓練更深層的網絡。

Jegou 等人對此進行了擴展,在遵循 U-Net 結構的情況下,提出使用密集塊(https://arxiv.org/abs/1611.09326)。他們認為「DenseNets 的特徵使它們非常適合語義分割,因為它們可以自然地產生跳過連接和多級監督。」這些密集塊很有用,因為它們在前面的層傳遞低級特徵,直接與更高層的更高級特徵並行,從而實現高效的特徵重用。

圖像語義分割的工作原理和CNN架構變遷

圖源:https://arxiv.org/abs/1611.09326(有修改)

該架構的一個非常重要的方面是上採樣路徑在密集塊的輸入和輸出之間沒有跳過連接。作者還指出,因為「上採樣路徑增加了特徵圖空間分辨率,特徵數量的線性增長對內存要求過高。」因此,只有密集塊的輸出在解碼器模塊中傳遞。

圖像語義分割的工作原理和CNN架構變遷

FC-DenseNet103 模型在 CamVid 數據集上得到了最好的結果(2017 年 10 月)

擴張卷積(空洞卷積)

對特徵映射進行下采樣的一個好處是在給定常量卷積核尺寸的情況下擴展了感受野(對於輸入)。由於大尺寸卷積核的參數效率較低(3.1 節所討論),所以這種方法比增加捲積核尺寸更加合理。然而,這種擴展的代價是降低了空間分辨率。

擴張卷積提供了另一種在保留完整空間維度的同時還能獲得廣泛視野的方法。如下圖所示,擴張卷積根據指定的擴張率(dilation rate)用值將空間間隔開。

圖像語義分割的工作原理和CNN架構變遷

圖源:https://github.com/vdumoulin/conv_arithmetic

還有一些架構將最後幾個池化層替換為具有連續增大擴張率的擴張卷積,這樣可以在防止空間細節的丟失的同時保持相同的感受野。然而,要用擴張卷積完全替換池化層,計算成本還是很高。

損失加權方案

由於密集預測的本質,我們在衡量損失加權時有很大的靈活性。

Long 等人(FCN 論文)提出對於每個輸出通道的加權損失都是為了抵消數據集中的類別不平衡。

與此同時,Ronneberger 等人(U-Net 論文)提出了一種針對每個像素的損失加權的方案,這種方案使得在分割對象的邊界處有更高的權重。這個損失加權方案幫助他們的 U-Net 模型在生物醫學圖像中分割出細胞,從而可以在分割圖中輕易地識別單個細胞。

圖像語義分割的工作原理和CNN架構變遷

請注意分割圖是如何在細胞周圍產生清晰的邊界的。(圖源:https://arxiv.org/abs/1505.04597)


分享到:


相關文章: