1. 程式人生 > >語義分割簡介(一)

語義分割簡介(一)


轉載自why_here


https://blog.csdn.net/u013580397/article/details/78508392



翻譯自qure.ai

  1. 什麼是語義分割

對圖片的每個畫素都做分類。

較為重要的語義分割資料集有:VOC2012 以及 MSCOCO

  • 有哪幾種方法

  • 傳統機器學習方法:如畫素級的決策樹分類,參考TextonForest 以及 Random Forest based classifiers 。再有就是深度學習方法。更確切地說,是卷積神經網路。

    深度學習最初流行的分割方法是,打補丁式的分類方法 ( patch classification ) 。逐畫素地抽取周圍畫素對中心畫素進行分類。由於當時的卷積網路末端都使用全連線層 ( full connected layers ) ,所以只能使用這種逐畫素的分割方法。

    2014年,來自伯克利的 Fully Convolutional Networks(FCN) 卷積網路,去掉了末端的全連線層。隨後的語義分割模型基本上都採用了這種結構。除了全連線層,語義分割另一個重要的問題是池化層。池化層能進一步提取抽象特徵增加感受域,但是丟棄了畫素的位置資訊。但是語義分割需要類別標籤和原影象對齊,因此需要從新引入畫素的位置資訊。有兩種不同的架構可以解決此畫素定位問題。

    第一種是編碼-譯碼架構。編碼過程通過池化層逐漸減少位置資訊、抽取抽象特徵;譯碼過程逐漸恢復位置資訊。一般譯碼與編碼間有直接的連線。該類架構中U-net 是最流行的。

    第二種架構是膨脹卷積 ( dilated convolutions ) ,拋棄了池化層。使用的卷積核如下圖。

    dilated

    條件隨機場的後處理 經常用來提高分割的精確度。後處理利用影象的光感強度(可理解為亮度),將周圍強度相近的畫素分為同一類。能提高 1-2 個百分點。

  • 文章彙總

  • 按時間順序總結八篇paper,看語義分割的結構是如何演變的。分別有FCNSegNetDilated ConvolutionsDeepLab (v1 & v2)RefineNetPSPNetLarge Kernel MattersDeepLab v3

    FCN 2014年

    主要的貢獻:

    • 為語義分割引入了 端到端卷積網路,並流行開來
    • 重新利用 ImageNet 的預訓練網路用於語義分割
    • 使用 反捲積層 進行上取樣
    • 引入跳躍連線來改善上取樣粗糙的畫素定位

    說明:

    比較重要的發現是,分類網路中的全連線層可以看作對輸入的全域卷積操作,這種轉換能使計算更為高效,並且能重新利用 ImageNet 的預訓練網路。經過多層卷積及池化操作後,需要進行上取樣,FCN 使用反捲積(可學習)取代簡單的線性插值演算法進行上取樣。

    fcn

    SegNet 2015年

    編碼-譯碼架構

    主要貢獻:

    • 將池化層結果應用到譯碼過程。引入了更多的編碼資訊。使用的是pooling indices而不是直接複製特徵,只是將編碼過程中 pool 的位置記下來,在 uppooling 是使用該資訊進行 pooling 。


    poolindex

    segnet

    U-Net 2015
    U-Net 有更規整的網路結構,通過將編碼器的每層結果拼接到譯碼器中得到更好的結果。

    unet

    Dilated Convolutions 2015年

    通過膨脹卷積操作聚合多尺度的資訊

    主要貢獻:

    • 使用膨脹卷積
    • 提出 ’context module‘ ,用來聚合多尺度的資訊

    說明:

    池化在分類網路中能夠擴大感知域,同樣降低了解析度。所以作者提出了膨脹卷積層。

    dilated conv

    dilated
    (a) 原始的 3×33×3卷積,1-dilated,感受野為 3×33×3;

    (b) 在(a)的基礎上進行 3×33×3卷積,2-dilated,感受野為 7×77×7;

    (c) 在(b)的基礎上進行 3×33×3卷積,4-dilated,感受野為 15×1515×15;

    由於padding和卷積的stride=1,卷積前後feature map大小可以保持不變,但每個元素的感受野指數增大。Link

    膨脹卷積在 DeepLab 中也被稱為暗黑卷積 (atrous convolution) 。此卷積能夠極大的擴大感知域同時不減小空間維度。本模型移去了VGG網的最後兩層池化層,並且其後續的卷積層都採用膨脹卷積。

    作者還訓練了一個模組,輸入卷積結果,級聯了不同膨脹係數的膨脹卷積層的,輸出和輸入有一樣的尺寸,因此此模組能夠提取不同規模特徵中的資訊,得到更精確的分割結果。

    最後預測結果圖是原圖的八分之一大小,文章使用插值得到最後的分割結果。

    DeepLab (v1 & v2) 2014 & 2016

    主要貢獻:

    • 使用膨脹卷積
    • 提出了暗黑空間金字塔池化 (ASPP),融合了不同尺度的資訊。
    • 使用全連線的條件隨機場

    說明:

    基本網路和 dilated convolutions 一致。最後的結構化預測 (精細分割) 採用全連線的 CDF。提出了ASPP,但結果不如 FC-CDF 。

    Pipline

    ASPP

    RefineNet 2016年

    主要貢獻:

    • 精心設計的譯碼模組
    • 所有模組遵循殘餘連線設計

    說明:

    膨脹卷積有幾個缺點,如計算量大、需要大量記憶體。這篇文章採用編碼-譯碼架構。編碼部分是 ResNet-101 模組。譯碼採用 RefineNet 模組,該模組融合了編碼模組的高解析度特徵和前一個 RefineNet 模組的抽象特徵。

    每個 RefineNet 模組接收多個不同解析度特徵,並融合。看圖。

    Architecture

    RefineNet Block

    PSPNet 2016年

    Pyramid Scene Parsing Network 金字塔場景解析網路

    主要貢獻:

  • 提出了金字塔池化模組來聚合圖片資訊

  • 使用附加的損失函式

  • 說明:

    金字塔池化模組通過應用大核心池化層來提高感知域。使用膨脹卷積來修改 ResNet 網,並增加了金字塔池化模組。金字塔池化模組對 ResNet 輸出的特徵進行不同規模的池化操作,並作上取樣後,拼接起來,最後得到結果。

    本文提出的網路結構簡單來說就是將DeepLab(不完全一樣)aspp之前的feature map pooling了四種尺度之後 將5種feature map concat到一起經過卷積最後進行prediction的過程。

    附加的損失函式:看不懂

    Architecture

    Large Kernel Matters 2017

    主要貢獻:

  • 提出了使用大卷積核的編碼-譯碼架構

  • 說明:

    理論上更深的 ResNet 能有很大的感知域,但研究表明實際上提取的資訊來自很小的範圍,因此使用大核來擴大感知域。但是核越大,計算量越大,因此將 k x k 的卷積近似轉換為 1 x k + k x 1 和 k x 1 + 1 x k 卷積的和。本文稱為 GCN。

    本文的架構是:使用 ResNet 作為編譯器,而 GCN 和反捲積作為譯碼器。還使用了名為 Boundary Refinement 的殘餘模組。

    Architecture

    DeepLab v3 2017

    主要貢獻:

  • 改進 ASPP

  • 序列部署 ASPP 的模組

  • 說明:

    和 DeepLab v2 一樣,將膨脹卷積應用於 ResNet 中。改進的 ASPP 指的是將不同膨脹率的膨脹卷積結果拼接起來。並使用了 BN 。

    於 Dilated convolutions (2015) 不一樣的是,v3 直接對中間的特徵圖進行膨脹卷積,而不是在最後做。

    Improved ASPP

    採集多尺度資訊的方法
    multi-scale

    對比

    模型 分數 (VOC2012)
    FCN 67.2
    SegNet 59.9
    Dilated Convolutions 75.3
    DeepLab (v1 & v2) 79.7
    RefineNet 84.2
    PSPNet 85.4
    Large Kernel Matters 83.6
    DeepLab v3 85.7
    題)

    翻譯自qure.ai