圖像語義分割綜述(semantic segmentation) 上篇

本文對圖像語義分割近年來的主要發展做一個綜述性的介紹。

翻譯了以下兩篇博文,並進行了整合。

https://www.jeremyjordan.me/semantic-segmentation/ 

http://blog.qure.ai/notes/semantic-segmentation-deep-learning-review

  1. 語義分割的定義

語義分割是計算機視覺中十分重要的領域,它是指像素級地識別圖像,即標註出圖像中每個像素所屬的對象類別。下圖爲語義分割的一個實例,其目標是預測出圖像中每一個像素的類標籤。

Screen-Shot-2018-05-17-at-7.42.16-PM

這裏需要和實例分割區分開來。它沒有分離同一類的實例;我們關心的只是每個像素的類別,如果輸入對象中有兩個相同類別的對象,則 分割本身不將他們區分爲單獨的對象。

常見的應用包括:

  • 自動駕駛汽車:我們需要爲汽車增加必要的感知,以瞭解他們所處的環境,以便自動駕駛的汽車可以安全行駛;下圖爲自動駕駛過程中實時分割道路場景;

deeplabcityscape

  • 醫學圖像診斷:機器可以增強放射醫生進行的分析,大大減少了運行診斷測試所需的時間;下圖是胸部X光片的分割,心臟(紅色),肺部(綠色以及鎖骨(藍色);

è¸é¨Xåç

簡單來說,分割的目標一般是將一張RGB圖像(height*width*3)或是灰度圖(height*width*1)作爲輸入,輸出的是分割圖,其中每一個像素包含了其類別的標籤(height*width*1). 爲了清晰起見,使用了低分辨率的預測圖,但實際上分割圖的分辨率應與原始輸入的分辨率相匹配。

input to label

其中,與處理標準分類值的方式類似,我們使用one-hot編碼對類標籤進行處理,實質上是爲每個可能的類創建相應的輸出通道。

one-hot 編碼可查看https://www.cnblogs.com/daguankele/p/6595470.html, 包括意義及方法。

ä¸ç­

最後,可以通過argmax將每個深度方向像素矢量摺疊成分割圖,我們可以通過將它覆蓋在原圖上,它會照亮圖像中存在特定類的區域,以便觀測(mask)。

overlay

2. 方法綜述

在深度學習應用到計算機視覺領域之前,人們使用 TextonForest 和 隨機森林分類器進行語義分割。卷積神經網絡(CNN)不僅對圖像識別有所幫助,也對語義分割領域的發展起到巨大的促進作用。

語義分割任務最初流行的深度學習方法是圖像塊分類(patch classification),即利用像素周圍的圖像塊對每一個像素進行獨立的分類。使用圖像塊分類的主要原因是分類網絡通常是全連接層(full   connected   layer),且要求固定尺寸的圖像。

2014 年,加州大學伯克利分校的 Long等人提出全卷積網絡(FCN),這使得卷積神經網絡無需全連接層即可進行密集的像素預測,CNN 從而得到普及。使用這種方法可生成任意大小的圖像分割圖,且該方法比圖像塊分類法要快上許多。之後,語義分割領域幾乎所有先進方法都採用了該模型。

除了全連接層,使用卷積神經網絡進行語義分割存在的另一個大問題是池化層。池化層雖然擴大了感受野、聚合語境,但因此造成了位置信息的丟失。但是,語義分割要求類別圖完全貼合,因此需要保留位置信息。 有兩種不同結構來解決該問題。  第一個是編碼器--解碼器結構。編碼器逐漸減少池化層的空間維度,解碼器逐步修復物體的細節和空間維度。編碼器和解碼器之間通常存在快捷連接,因此能幫助解碼器更好地修復目標的細節。U-Net是這種方法中最常用的結構。     第二種方法使用空洞/帶孔卷積(dilated/atrous   convolutions)結構,來去除池化層。

  • encoder-decoder 結構的提出

針對語義分割任務構建神經網絡架構的最簡單的方法是簡單地堆疊多個卷積層(使用same填充以保留需要的維度)並輸出最終的分割圖。這通過特徵映射的連續變換直接學習從輸入圖像到其對應分割的映射。但在整個網絡中保持全分辨率的計算成本非常高。

æªå±ï¼2018å¹´5æ19æ¥ï¼å¨-12.32.20-PM

對於深度卷積網絡,淺層主要學習低級的信息,隨着網絡越深,學習到更高級的特徵映射。爲了保持表達能力,我們通常需要增加特徵圖的數量(通道數),從而可以得到更深的網絡。對於圖像分類來說,由於我們只關注圖像“是什麼”(而不是位置在哪),因而我們可以通過階段性對特徵圖降採樣(downsampling)或者帶步長的卷積(例如,壓縮空間分辨率)。然而對於圖像分割,我們希望我們的模型產生全分辨率語義預測。

圖像分割領域現在較爲流行的是編碼器/解碼器結構,其中我們對輸入的空間分辨率進行下采樣,生成分辨率較低的特徵映射,它能高效地進行分類。隨後,上採樣可以將特徵還原爲全分辨率分割圖。

Screen-Shot-2018-05-16-at-10.33.29-PM

  • 上採樣的方法

我們有許多方法可以對特徵圖進行上採樣。池化操作通過對將小區域的值取成單一值(例如平均或最大池化)進行下采樣,同樣的,上池化操作就是將單一值分配到更高的分辨率進行上採樣。

Screen-Shot-2018-05-19-at-12.54.50-PM

其中,轉置卷積是迄今爲止最流行的方法,因爲它允許我們使用可學習的上採樣。

æªå±ï¼2018å¹´5æ19æ¥ - å¨ -  51å¹´3æ12æ¥ï¼PM

典型的卷積運算將採用濾波器視圖中當前值的點積併爲相應的輸出位置產生單個值,而轉置卷積基本上相反。對於轉置卷積,我們從低分辨率特徵圖中獲取單個值,並將濾波器中的所有權重乘以該值,將這些加權值投影到輸出要素圖中。

æªå±ï¼2018å¹´5æ21æ¥ - å¨ -  29å¹´1æ11æ¥ï¼PM

對於某些大小的濾波器會在輸出特徵映射中產生重疊(例如,具有步幅2的3x3濾波器 - 如下面的示例所示),若將重疊值簡單地加在一起,這往往會在輸出中產生棋盤格子狀的僞影(artifact)。

這並不是我們需要的,因此最好確保您的濾鏡大小不會產生重疊。

padding_strides_transposed

 

下一章將會繼續介紹主流的幾種模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章