分類問題是為整個圖像分配一個標籤,而語義分割則是將從屬於同一類的對象看成一個整體,為圖像中的每一個像素點分配一個標籤。本文對一些經典語義分割方法和基於深度學習的語義分割方法進行了討論,此外還討論了常見的選擇和應用損失函數的方法。
選自Medium,作者:Bharath Raj,機器之心編譯,參與:Geek AI、張倩。
經典方法
在深度學習時代到來之前,大量的圖像處理技術被用來將圖像分割成一些感興趣的區域(ROI)。下面列出了一些常用的方法。
這是最簡單的語義分割形式,它包括將一個區硬編碼的規則或某個區域必須滿足的特定的標籤屬性賦予這個區域。可以根據像素的屬性(如灰度值)來構建這樣的規則。「分裂-合併」演算法就是一種用到了灰度分割技術的方法。該演算法遞歸地將圖像劃分成若干子區域,直到可以為劃分出的子區域分配一個標籤,然後通過合併將相鄰的帶有相同標籤的子區域融合起來。
條件隨機場
可以通過考慮像素之間的先驗關係來避免這些問題,如果目標是連續的,那麼相鄰的鄰像素往往具有相同的標籤。使用條件隨機場(CRF)對這樣的關係進行建模。
所有像素的一元成本和成對成本之和被稱為 CRF 的能量(或成本/損失)。通過最小化能量,可以得到一個好的分割輸出結果。
深度學習方法
深度學習極大地簡化了進行語義分割的工作流程,並且得到了非常好的分割結果。在本節中,我們將討論用於訓練這些深度學習方法的流行的模型架構和損失函數。
儘管這個基礎的架構很有效,但是它也有一些缺點。其中一個缺點就是由於轉置卷積(或稱反捲積)操作的輸出不均勻重疊而導致棋盤狀偽影的存在。
另一個缺點是,由於編碼過程中損失了一部分信息,導致邊界的解析度很低。
U-Net 是對簡單的 FCN 模型架構的一種升級方案。它具有從卷積塊的輸出到相應的同一級的轉置卷積塊的輸入之間的跳躍連接。
這種跳躍連接讓梯度可以更好地流動,並提供了來自多個尺度的圖像大小的信息。來自更大尺度(較上層)的信息可以幫助模型更好地分類。來自更小尺度(較底層)的信息可以幫助模型更好地進行分割。
這種方法的缺點是,由於幾個機器學習框架中的連接操作的性質,它的內存效率不是很高(需要大型 GPU 才能運行)。
Atrous 卷積(膨脹卷積)是一種可以在不增加大量參數的情況下,結合多尺度的特徵的高效的方法。通過調節膨脹率(dilated rate),同一個卷積核的權值可以在空間中拓展地更遠。這使其能夠學習更多的全局上下文。
DeepLabv3 網路的論文使用了不同膨脹率的Atrous 卷積捕獲來自多個尺度的信息,從而避免了顯著的圖像尺寸損失。他們通過級聯的方式(如上圖所示)和以並行的 Atrous 空間金字塔池化的方式(如下圖所示)對 Atrous 卷積進行了實驗。
CNN-CRF 的混合方法
某些方法將 CRF 包含在了神經網路中,正如「CRF-as-RNN」(https://www.robots.ox.ac.uk/~szheng/papers/CRFasRNN.pdf)一文中所描述的,其中密集 CRF被建模為一個循環神經網路。這種端到端的訓練如上圖所示。
通過交叉熵實現的像素級 softmax用於語義分割的標籤尺寸與原始圖像相同。標籤可以用one-hot編碼的形式表示,如下圖所示。
由於標籤以方便的one-hot編碼的形式存在,它可以直接被用作計算交叉熵的參考標準(目標)。然而,在應用交叉熵之前,必須對預測的輸出在像素級上應用 softmax,因為每個像素可能屬於我們的任何一種目標類。
讓我們用一個直觀的例子來探究一下為什麼這很重要。假設我們有一個 10000 像素的圖像,像素只有兩個類:背景類(one-hot編碼形式下表示為 0)和目標類(one-hot編碼形式下表示為 1)。假設圖像的 97% 是背景,3% 是目標。現在,假設我們的模型以 80% 的置信度確定某像素是背景,但只有 30% 的置信度確定某像素是目標類。
Dice 損失是另一種流行的損失函數,用於類極度不平衡的語義分割問題。Dice 損失在《V-Net: Fully Convolutional Neural Networks for Volumetric Medical Image Segmentation 》一文中被提出,它被用於計算預測出的類和真實類之間的重疊。Dice 係數(D)如下所示:
我們的目標是最大化預測類和真實參考標準之間的重疊部分(即最大化 Dice 係數)。因此,我們通常將(1-D)最小化來實現相同的目標(由於大多數機器學習程序庫只提供最小化損失函數的操作)。
雖然 Dice 損失對類不平衡的樣本很有效,但計算其導數的公式(如上所示)在分母中有平方項。當這些值很小時,我們就可以得到很大的梯度,導致訓練不穩定。
應用場景
語義分割技術被用於了各種各樣的真實生活場景下的應用。下面是語義分割的一些重要的用例。
自動駕駛汽車的限制之一是:語義分割模型必須是實時運行的。解決上述問題的一個方法是將 GPU 與車輛進行本地集成。為了提高上述解決方案的性能,可以使用更輕量級(參數更少)的神經網路,或實現適用於邊緣計算的技術。
我們還可以將一些不那麼關鍵的操作自動化處理,比如根據語義分割後的 3D 掃描影像估計器官的體積。
時尚產業
語義分割在時尚產業中被用來從圖像中提取出服裝對象,為零售商店提供類似的建議。更先進的演算法可以在圖像中「重新設計」特定的衣服。
衛星(或航拍)圖像處理
結語
深度學習技術極大地提升並簡化了語義分割演算法,為語義分割在現實生活中更廣泛的應用鋪平了道路。由於研究社區不斷努力地提高這些演算法的準確性和實時性能,本文中列舉出的概念可能並不詳盡。話雖如此,本文介紹了這些演算法的一些流行的變體和他們在現實生活中的一些應用。
原文鏈接:https://medium.com/beyondminds/a-simple-guide-to-semantic-segmentation-effcf83e7e54?sk=3d1a5a32a19d611fbd81028cfd4f23fd
推薦閱讀: