語義分割的簡單指南 A Simple Guide to Semantic Segmentation

語義分割是將標籤分配給圖像中的每一個像素的過程。這與分類造成鮮明對比,其中單個標籤被分配給整個圖片。語義分段將同一類的多個對象視爲單個實體。另外一方面,實例分段將同一類的多個對象視爲不一樣的單個對象(或實例)。一般,實例分割比語義分割更難。算法

語義和實例分割之間的比較。( 來源

本博客探討了使用經典和深度學習方法執行語義分割的一些方法。此外,還討論了流行的損失函數選擇和應用。api

經典方法

在深度學習時代開始以前,使用了大量的圖像處理技術將圖像分割成感興趣的區域。下面列出了一些經常使用的方法。網絡

灰度分割

最簡單的語義分段形式涉及分配區域必須知足的硬編碼規則或屬性,以便爲其分配特定標籤。規則能夠根據像素的屬性(例如灰度級強度)來構建。使用此技術的一種方法是拆分和合並算法。該算法遞歸地將圖像分割成子區域,直到能夠分配標籤,而後經過合併它們將相鄰的子區域與相同的標籤組合。架構

這種方法的問題是規則必須是硬編碼的。並且,僅使用灰度信息來表示諸如人類的複雜類別是極其困難的。所以,須要特徵提取和優化技術來正確地學習這種複雜類所需的表示。框架

條件隨機場

考慮經過訓練模型來分割圖像覺得每一個像素分配一個類。若是咱們的模型不完美,咱們可能會得到在本質上可能不可能的噪聲分割結果(例如與貓像素混合的狗像素,如圖所示)。ide

標籤狗的像素與標籤貓(圖像c)的像素混合。在圖像d中示出了更真實的分割。( 來源

這些能夠經過考慮像素之間的先驗關係來避免,例如物體是連續的,所以附近的像素傾向於具備相同的標記。爲了模擬這些關係,咱們使用條件隨機場(CRF)。函數

CRF是一類用於結構化預測的統計建模方法。與離散分類器不一樣,CRF能夠在進行預測以前考慮「鄰近上下文」,例如像素之間的關係。這使其成爲語義分割的理想候選者。本節探討了CRF在語義分割中的用法。性能

圖像中的每一個像素與一組有限的可能狀態相關聯。在咱們的例子中,目標標籤是可能的狀態集。將狀態(或標籤u)分配給單個像素的(x)成本稱爲一元成本。爲了模擬像素之間的關係,咱們還考慮將一對標籤分配給稱爲成對成本(u,v)的一對像素(x,y) 的成本。咱們能夠考慮做爲其直接鄰居的像素對(網格CRF),或者咱們能夠考慮圖像中的全部像素對(密集CRF)學習

密集與網格CRF。( 來源

全部像素的一元和成對成本之和被稱爲CRF的能量(或成本/損失)。能夠最小化該值以得到良好的分割輸出。優化

深度學習方法

深度學習極大地簡化了管道,以執行語義分割,併產生使人印象深入的質量結果。在本節中,咱們將討論用於訓練這些深度學習方法的流行模型體系結構和損失函數。

1.模型架構

用於語義分割的最簡單和最流行的架構之一是徹底卷積網絡(FCN)。在論文FCN for Semantic Segmentation中,做者使用FCN首先經過一系列卷積將輸入圖像下采樣到更小的尺寸(同時得到更多通道)。這組卷積一般稱爲編碼器。而後經過雙線性插值或一系列轉置 - 卷積對編碼輸出進行上採樣。這組轉置卷積一般稱爲解碼器

FCN中的下采樣和上採樣。( 來源

儘管這種基本架構有效,但它具備許多缺點。一個這樣的缺點是因爲轉置 - 卷積(或反捲積)操做的輸出的不均勻重疊而存在棋盤僞像。

棋盤文物的造成。( 來源

另外一個缺點是因爲編碼過程當中的信息丟失而在邊界處的分辨率較差。

提出了幾種解決方案來改善基本FCN模型的性能質量。如下是一些被證實有效的流行解決方案:

U-NET

U形網是一個升級到簡單FCN架構。它跳過了從卷積塊輸出到相同級別的轉置卷積塊的相應輸入的鏈接。

U-net。( 來源

此跳過鏈接容許漸變動好地流動並提供來自圖像大小的多個比例的信息。來自較大尺度(上層)的信息能夠幫助模型更好地分類。來自較小尺度(較深層)的信息能夠幫助模型段/更好地本地化。

Tiramisu 模型

提拉米蘇模式是相似U-Net的,除了它使用卷積緻密塊,並做爲作換位,迴旋的事實DenseNet紙。密集塊由若干層卷積組成,其中全部前面層的特徵圖用做全部後續層的輸入。由此產生的網絡具備極高的參數效率,能夠更好地訪問舊層的功能。

提拉米蘇網絡。( 來源

這種方法的缺點是,因爲多個ML框架中的鏈接操做的性質,它的內存效率不高(須要運行大型GPU)。

MultiScale方法

一些深度學習模型明確地引入了從多個尺度合併信息的方法。例如,金字塔場景分析網絡(PSPNet)使用四種不一樣的內核大小執行池化操做(最大或平均),並跨越CNN的輸出特徵映射,例如ResNet。而後,它使用雙線性插值對全部合併輸出和CNN輸出特徵圖的大小進行上採樣,並沿通道軸鏈接全部這些輸出。對該級聯輸出執行最終卷積以生成預測。

PSPNet。( 來源

Atrous(Dilated)Convolutions提供了一種有效的方法來組合多個尺度的特徵而不會大量增長參數的數量。經過調節膨脹率,相同的過濾器使其重量值在空間中展開得更遠。這使它可以學習更多全局背景。

級聯的Atrous Convolutions。( 來源

DeepLabv3本文采用Atrous卷積不一樣的擴張速率捕捉來自多尺度信息,而在圖像尺寸顯著損失。他們嘗試以級聯方式(如上所示)使用Atrous卷積,並以Atrous Spatial Pyramid Pooling(以下所示)的形式以並行方式。

平行的發情卷積。( 來源

混合CNN-CRF方法

一些方法使用CNN做爲特徵提取器,而後將這些特徵用做密集CRF的一元成本(潛在)輸入。因爲CRF可以模擬像素間關係,所以這種混合CNN-CRF方法提供了良好的結果。

使用CNN和CRF組合的方法。( 來源

某些方法將CRF併入神經網絡自己,如CRF-as-RNN中所示,其中密集CRF被建模爲遞歸神經網絡。這使得端到端訓練成爲可能,如上圖所示。

2.損失函數

與普通分類器不一樣,必須爲語義分段選擇不一樣的損失函數。如下是一些用於語義分割的經常使用損失函數:

具備交叉熵的像素級Softmax

用於語義分割的標籤具備與原始圖像相同的尺寸。標籤能夠用單熱編碼形式表示,以下所示:

用於語義分段的單熱格式。( 來源

因爲標籤是方便的單熱形式,所以能夠直接用做計算交叉熵的基礎事實(目標)。可是,在應用交叉熵以前,必須在預測輸出上逐像素地應用softmax,由於每一個像素能夠屬於咱們的任何目標類別。

焦點損失

RetinaNet論文中引入的Focal Loss 建議升級到標準的交叉熵損失,以便在極端不平衡的狀況下使用。

考慮標準交叉熵損失方程的圖,以下所示(藍色)。即便在咱們的模型對像素類(例如80%)很是有信心的狀況下,它也有一個有形的損失值(這裏,大約0.3)。另外一方面,gamma=2當模型對一個類有信心時,Focal Loss(紫色,with )不會對模型進行如此大的懲罰(即,對於80%的置信度,損失幾乎爲0)。

標準交叉熵(藍色)與焦點損失有不一樣的伽瑪值。( 來源

讓咱們經過一個直觀的例子來探討爲何這是重要的。假設咱們有一個10000像素的圖像,只有兩個類:背景類(單熱形式爲0)和目標類(單熱形式爲1)。讓咱們假設97%的圖像是背景,3%的圖像是目標。如今,假設咱們的模型80%肯定背景像素,但只有30%肯定目標類像素。

在使用交叉熵的同時,因爲背景像素引發的損失(97% of 10000) * 0.3等於等於2850 而且因爲目標像素引發的損失等於(3% of 10000) * 1.2等於360。顯然,因爲更自信的階級所形成的損失占主導地位,而且模型學習目標階層的動機很小。相比之下,因爲焦點損失,背景像素引發的損失等於(97% of 10000) * 00.這使得模型可以更好地學習目標類。

骰子損失

骰子丟失是另外一種流行的損失函數,用於具備極端類不平衡的語義分割問題。在V-Net論文中引入,Dice Loss用於計算預測類和地面實況類之間的重疊。骰子係數(D)表示以下:

骰子係數。( 來源

咱們的目標是最大化預測真實類和基礎真值類之間的重疊(即最大化骰子係數)。所以,咱們一般最小化(1-D) 以得到相同的目標,由於大多數ML庫僅提供最小化的選項。

骰子係數的導數。( 來源

儘管Dice Loss對於具備類不平衡的樣本效果很好,但計算其導數的公式(如上所示)在分母中具備平方項。當這些值很小時,咱們可能會獲得很大的梯度,致使訓練不穩定。

應用

語義分段用於各類現實生活中。如下是語義分段的一些重要用例。

自動駕駛

語義分割用於識別車道,車輛,人和其餘感興趣的對象。結果用於作出明智的決定以正確地引導車輛。

自動駕駛汽車的語義分割。( 來源

對自動駕駛汽車的一個限制是性能必須是實時的。上述問題的解決方案是將GPU與車輛一塊兒本地集成。爲了加強上述解決方案的性能,可使用更輕(低參數)的神經網絡,或者能夠實如今邊緣上擬合神經網絡的技術。

醫學圖像分割

語義分割用於識別醫學掃描中的顯着元素。識別腫瘤等異常特別有用。算法的準確性和低召回率對於這些應用來講很是重要。

醫學掃描的分割。( 來源

咱們還能夠自動執行不過重要的操做,例如從3D語義分段掃描估計器官的體積。

場景理解

語義分段一般構成更復雜任務的基礎,例如場景理解和視覺問答(VQA)。場景圖或標題一般是場景理解算法的輸出

場景理解行動。( 來源

時尚產業

語義分割在時裝業中用於從圖像中提取服裝項目以提供來自零售商店的相似建議。更高級的算法能夠「從新裝扮」圖像中的特定服裝項目。

語義分割用做基於文本輸入糾正人類的中間步驟。( 來源

衛星(或空中)圖像處理

語義分割用於從衛星圖像中識別陸地類型。典型的使用案例涉及分割水體以提供準確的地圖信息。其餘高級用例包括繪製道路,識別做物類型,識別免費停車位等。

衛星/航空圖像的語義分割。( 來源

結論

深度學習極大地加強和簡化了語義分割算法,併爲在現實生活中應用程序的更普遍採用鋪平了道路。本博客中列出的概念並不是詳盡無遺,由於研究團隊不斷努力提升這些算法的準確性和實時性。然而,這篇博客介紹了這些算法的一些流行變體及其實際應用。






相關文章
相關標籤/搜索