從全卷積網路到大型卷積核:深度學習的語義分割全指南

路雪發表於2017-07-14

語義分割一直是計算機視覺中十分重要的領域,隨著深度學習的流行,語義分割任務也得到了大量的進步。本文首先闡釋何為語義分割,然後再從論文出發概述多種解決方案。本文由淺層模型到深度模型,簡要介紹了語義分割各種技術,雖然本文並沒有深入講解語義分割的具體實現,但本文簡要地概述了每一篇重要論文的精要和亮點,希望能給讀者一些指南。

什麼是語義分割?

.

語義分割指畫素級地識別影像,即標註出影像中每個畫素所屬的物件類別。如下圖:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

左:輸入影像,右:該影像的語義分割

除了識別車和騎車的人,我們還需要描繪出每個物體的邊界。因此,與影像分類不同,語義分割需要根據模型進行密集的畫素級分類。

VOC2012 和 MSCOCO 是語義分割領域最重要的資料集。

有哪些不同的解決方案?

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

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

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

除了全連線層,使用卷積神經網路進行語義分割存在的另一個大問題是池化層。池化層不僅擴大感受野、聚合語境從而造成了位置資訊的丟失。但是,語義分割要求類別圖完全貼合,因此需要保留位置資訊。本文將介紹兩種不同結構來解決該問題。

 第一個是編碼器-解碼器結構。編碼器逐漸減少池化層的空間維度,解碼器逐步修復物體的細節和空間維度。編碼器和解碼器之間通常存在快捷連線,因此能幫助解碼器更好地修復目標的細節。U-Net 是這種方法中最常用的結構。

U-Net architecture

U-Net:一種編碼器-解碼器結構

 第二種方法使用空洞/帶孔卷積(dilated/atrous convolutions)結構,來去除池化層。

Dilated/atrous convolutions

Dilated/atrous 卷積,rate=1 是典型的卷積結構

條件隨機場(CRF)預處理通常用於改善分割效果。CRF 是一種基於底層影像畫素強度進行「平滑」分割的圖模型。它的工作原理是灰度相近的畫素易被標註為同一類別。CRF 可令分值提高 1-2%。

CRF

CRF 示意圖。(b)一元分類器作為 CRF 的分割輸入。(c、d、e)是 CRF 的變體,其中(e)是廣泛使用的一種 CRF

下面,我將總結幾篇論文,介紹分割結構從 FCN 以來的發展變化。所有這些架構都使用 VOC2012 評估伺服器進行基準測試。

論文概述

下列論文按照時間順序進行介紹:

1. FCN

2. SegNet

3. Dilated Convolutions

4. DeepLab (v1 & v2)

5. RefineNet

6. PSPNet

7. Large Kernel Matters

8. DeepLab v3

我列出了每篇論文的主要貢獻,並稍加解釋。同時我還展示了這些論文在 VOC2012 測試資料集上的基準測試分數(IOU 均值)。

FCN

  • 使用全卷積網路進行語義分割(Fully Convolutional Networks for Semantic Segmentation)
  • 2014 年 11 月 14 日提交
  • arXiv 連結(https://arxiv.org/abs/1411.4038)

主要貢獻:

  • 推廣端到端卷積網路在語義分割領域的應用
  • 修改 Imagenet 預訓練網路並應用於語義分割領域
  • 使用解卷積層進行上取樣
  • 使用跳躍連線,改善上取樣的粒度程度

相關解釋:

本論文的關鍵點是分類網路中的全連線層可視為使用卷積核覆蓋整個輸入區域的卷積操作。這相當於根據重疊的輸入影像塊評估原始分類網路,但由於計算過程由影像塊的重疊部分共同分擔,這種方法比之前更加高效。儘管該結論並非獨一無二,但它顯著提高了 VOC2012 資料集上模型的最佳效果。

FCN architecture

全連線層作為卷積操作

將全連線層在 VGG 等 Imagenet 預訓練網路中進行卷積操作後,由於 CNN 中的池化操作,特徵圖仍舊需要上取樣。解卷積層不使用簡單的雙線性插值,而是學習所進行的插值。解卷積層又被稱為上卷積(upconvolution)、完全卷積、轉置卷積或微步卷積(fractionally-strided convolution)。

但是,由於池化過程造成資訊丟失,上取樣(即使帶有解卷積層)生成的分割圖較為粗糙。因此我們可以從高解析度的特徵圖中引入跳躍連線(shortcut/skip connection)來改善上取樣的粗糙程度。

VOC2012 基準測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

個人評價:

這是一項重要的貢獻,但是當前的技術水平又有了很大發展。

SegNet

SegNet:用於影像分割的一種深度卷積編碼器-解碼器架構(SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation)

2015 年 11 月 2 日提交

Arxiv 連結(https://arxiv.org/abs/1511.00561)

主要貢獻:

將最大池化索引(Maxpooling indices)轉移到解碼器,從而改善分割解析度。

相關解釋:

在 FCN 網路中,儘管使用瞭解卷積層和一些跳躍連線,但輸出的分割圖仍然比較粗糙。因此,更多的跳躍連線被引入 FCN 網路。但是,SegNet 沒有複製 FCN 中的編碼器特徵,而是複製了最大池化索引。這使得 SegNet 比 FCN 更節省記憶體。

從全卷積網路到大型卷積核:深度學習的語義分割全指南

Segnet 結構

VOC2012 基準測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

個人評價:

  • FCN 和 SegNet 都是最早出現的編碼器-解碼器結構。
  • SegNet 的基準測試分數不夠好,不宜繼續使用。

空洞卷積(Dilated Convolutions)

  • 使用空洞卷積進行多尺度背景聚合(Multi-Scale Context Aggregation by Dilated Convolutions)
  • 2015 年 11 月 23 日提交
  • Arxiv 連結(https://arxiv.org/abs/1511.07122)

主要貢獻:

使用空洞卷積,一種可進行稠密預測的卷積層。

提出「背景模組」(context module),該模組可使用空洞卷積進行多尺度背景聚合。

相關解釋:

池化使感受野增大,因此對分類網路有所幫助。但池化會造成解析度下降,不是語義分割的最佳方法。因此,論文作者使用空洞卷積層(dilated convolution layer),其工作原理如圖:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

空洞/帶孔卷積

空洞卷積層(DeepLab 將其稱為帶孔卷積)可使感受野呈指數級增長,而空間維度不至於下降。

從預訓練好的分類網路(此處指 VGG)中移除最後兩個池化層,之後的卷積層都使用空洞卷積。尤其是,pool-3 和 pool-4 之間的卷積是空洞卷積 2,pool-4 後面的卷積是空洞卷積 4。使用這個模組(論文中稱為前端模組 frontend module)之後,無需增加引數即可實現稠密預測。另一個模組(論文中稱為背景模組 context module)將使用前端模組的輸出作為輸入進行單獨訓練。該模組是多個不同擴張程度的空洞卷積級聯而成,因此該模組可聚合多尺度背景,並改善前端模組獲取的預測結果。

VOC2012 基準測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

個人評價:

預測分割圖的大小是影像大小的 1/8。幾乎所有的方法都存在這個現象,通常使用插值的方法獲取最終分割圖。

DeepLab (v1 & v2)

  • v1: 使用深度卷積網路和全連線 CRF 進行影像語義分割(Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs)
  • 2014 年 12 月 22 日提交
  • Arxiv 連結(https://arxiv.org/abs/1412.7062)
  • v2 : DeepLab: 使用深度卷積網路、帶孔卷積和全連線 CRF 進行影像語義分割(DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs)
  • 2016 年 6 月 2 日提交
  • Arxiv 連結(https://arxiv.org/abs/1606.00915)

主要貢獻:

  • 使用帶孔/空洞卷積。
  • 提出金字塔型的空洞池化(ASPP)
  • 使用全連線 CRF

相關解釋:

帶孔/空洞卷積在不增加引數的情況下增大感受野。如上文中空洞卷積論文中所述,分割網路得到改進。

將原始影像的多個重新縮放版本傳遞到 CNN 網路的並行分支(影像金字塔)中,或者使用取樣率不同的多個並行空洞卷積層(ASPP),實現多尺度處理。

結構化預測可通過全連線 CRF 實現。CRF 的訓練/微調需作為後處理的步驟單獨進行。

從全卷積網路到大型卷積核:深度學習的語義分割全指南

DeepLab2 流程圖

VOC2012 基準測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

RefineNet

  • RefineNet:使用多路徑精煉網路進行高解析度語義分割(RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation)
  • 2016 年 11 月 20 日提交
  • Arxiv 連結(https://arxiv.org/abs/1611.06612)

主要貢獻:

  • 具備精心設計解碼器模組的編碼器-解碼器架構
  • 所有元件遵循殘差連線設計

相關解釋:

使用空洞/帶孔卷積的方法也有弊端。由於空洞卷積需要大量高解析度特徵圖,因此其計算成本高昂,且佔用大量記憶體。這妨礙了高解析度預測的計算。例如,DeepLab 的預測結果大小是原始輸入影像的 1/8。

因此,這篇論文提出使用編碼器-解碼器結構。編碼器是 ResNet-101 模組,解碼器是 RefineNet 模組,該模組融合了編碼器中的高解析度特徵和先前 RefineNet 模組中的低解析度特徵。

從全卷積網路到大型卷積核:深度學習的語義分割全指南

RefineNet 架構

 每一個 RefineNet 模組都有兩個元件,一個元件通過對低解析度特徵進行上取樣來融合多解析度特徵,另一個元件基於步幅為 1、5 x 5 大小的重複池化層來獲取背景資訊。這些元件遵循單位對映的思想,採用殘差連線設計。


從全卷積網路到大型卷積核:深度學習的語義分割全指南

RefineNet 模組


VOC2012 基準測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

PSPNet

  • 金字塔型場景解析網路
  • 2016 年 12 月 4 日提交
  • Arxiv 連結(https://arxiv.org/abs/1612.01105)

主要貢獻:

  • 提出金字塔池化模組幫助實現背景聚合。
  • 使用輔助損失(auxiliary loss)。

相關解釋:

全域性場景分類為分割的類別分佈提供線索,因此很重要。金字塔池化模組(Pyramid pooling module)通過應用較大核池化層的獲取這些資訊。如上文中空洞卷積論文中所述,PSPNet 也使用空洞卷積改善 ResNet,並新增一個金字塔池化模組。該模組將 ResNet 的特徵圖與並行池化層的上取樣輸出結果連線起來,其中卷積核核覆蓋了影像的全部、一半和小塊區域。

在 ResNet 的第四階段之後(即輸入到金字塔池化模組),在主分支損失之外又增加了附加損失。這個想法在其他研究中也被稱為中間監督(intermediate supervision)。


從全卷積網路到大型卷積核:深度學習的語義分割全指南

PSPNet 架構


VOC2012 基準測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

Large Kernel Matters

  • 大型核的問題——通過全域性卷積網路改善語義分割(Large Kernel Matters -- Improve Semantic Segmentation by Global Convolutional Network)
  • 2017 年 3 月 8 日提交
  •  Arxiv 連結(https://arxiv.org/abs/1703.02719)

主要貢獻:

提出使用帶有大型卷積核的編碼器-解碼器結構


相關解釋:


語義分割不僅需要分割,同時還需要對分割目標進行分類。由於分割結構中無法使用全連線層,因此帶有大核函式的卷積可以替代全連線層得到應用。

使用大型核的另一個原因是,儘管 ResNet 等更深層的網路擁有較大的感受野,但相關研究顯示這樣的網路更易收集較小範圍(即有效感受野)內的資訊。大型核的計算成本高昂,且擁有大量引數。因此,k x k 卷積可近似成 1 x k + k x 1、k x 1 和 1 x k。這篇論文中將該模組稱為全域性卷積網路(GCN)。

再來看結構,ResNet(沒有空洞卷積)構成該結構的編碼器部分,而 GCN 和反摺積構成了解碼器部分。該結構還採用了一個叫做邊界細化(BR)的簡單殘差塊。


從全卷積網路到大型卷積核:深度學習的語義分割全指南

GCN 結構


VOC2012 測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

DeepLab v3

  • 重新思考使用空洞卷積進行影像語義分割(Rethinking Atrous Convolution for Semantic Image Segmentation)
  • 2017 年 6 月 17 日提交
  • Arxiv 連結(https://arxiv.org/abs/1706.05587)

主要貢獻:

  • 改進了金字塔型的空洞池化(ASPP)
  • 模型級聯了多個空洞卷積

相關解釋:

與 DeepLabv2 和空洞卷積論文一樣,該研究也使用空洞/擴張卷積來改進 ResNet 模型。改進後的 ASPP 包括影像層級特徵連線、一個 1x1 的卷積和三個 3x3 的不同比率空洞卷積。每一個並行卷積層之後使用批量歸一化操作。

級聯模型是一個 ResNet 模組,但其中的卷積層是不同比率的空洞卷積。該模型與空洞卷積論文中的背景模組相似,但是它直接應用於中間特徵圖,而不是可信度地圖(信念圖是通道數與類別數相同的最終 CNN 特徵圖)。

該論文分別評估了這兩個已提出的模型。兩個模型在 驗證集上的效能相似,帶有 ASPP 的模型效能稍好,且未使用 CRF。這兩個模型優於 DeepLabv2 中最優的模型。論文作者還提到效能的改進來自於批量歸一化操作和更好的多尺度背景編碼方式。

從全卷積網路到大型卷積核:深度學習的語義分割全指南

DeepLabv3 ASPP

VOC2012 測試分數:

從全卷積網路到大型卷積核:深度學習的語義分割全指南

原文地址:http://blog.qure.ai/notes/semantic-segmentation-deep-learning-review

相關文章