資源 | 從全連接層到大型卷積核:深度學習語義分割全指南

2021-02-13 機器之心

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

什麼是語義分割?

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

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

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

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

有哪些不同的解決方案?

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

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

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

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

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

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

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

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

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

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

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

論文概述

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

FCN

SegNet

Dilated Convolutions

DeepLab (v1 & v2)

RefineNet

PSPNet

Large Kernel Matters

DeepLab v3

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

FCN


主要貢獻:

相關解釋:

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

全連接層作為卷積操作

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

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

VOC2012 基準測試分數:


個人評價:

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

SegNet

主要貢獻:

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

相關解釋:

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


Segnet 結構

VOC2012 基準測試分數:


個人評價:

空洞卷積(Dilated Convolutions)

主要貢獻:

相關解釋:

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


空洞/帶孔卷積

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

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

VOC2012 基準測試分數:


個人評價:

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

DeepLab (v1 & v2)

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

主要貢獻:

具備精心設計解碼器模塊的編碼器-解碼器架構

所有組件遵循殘差連接設計

相關解釋:

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

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


RefineNet 架構

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


RefineNet 模塊

VOC2012 基準測試分數:


PSPNet

主要貢獻:

提出金字塔池化模塊幫助實現背景聚合。

使用輔助損失(auxiliary loss)。

相關解釋:

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

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


PSPNet 架構

VOC2012 基準測試分數:


Large Kernel Matters

主要貢獻:

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

相關解釋:

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

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

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


GCN 結構

VOC2012 測試分數:


DeepLab v3

主要貢獻:

改進了金字塔型的空洞池化(ASPP)

模型級聯了多個空洞卷積

相關解釋:

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

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

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

DeepLabv3 ASPP

VOC2012 測試分數:

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

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權

✄---

加入機器之心(全職記者/實習生):hr@jiqizhixin.com

投稿或尋求報導:editor@jiqizhixin.com

廣告&商務合作:bd@jiqizhixin.com


點擊閱讀原文,查看機器之心官網↓↓↓

相關焦點

  • 從全卷積網絡到大型卷積核:深度學習的語義分割全指南
    本文由淺層模型到深度模型,簡要介紹了語義分割各種技術,雖然本文並沒有深入講解語義分割的具體實現,但本文簡要地概述了每一篇重要論文的精要和亮點,希望能給讀者一些指南。  什麼是語義分割?  語義分割指像素級地識別圖像,即標註出圖像中每個像素所屬的對象類別。
  • 10分鐘看懂全卷積神經網絡( FCN ):語義分割深度模型先驅
    我們簡單總結了圖像分割的幾個時期:2000年之前,數字圖像處理時我們採用方法基於幾類:閾值分割、區域分割、邊緣分割、紋理特徵、聚類等。2000年到2010年期間, 主要方法有四類:基於圖論、聚類、分類以及聚類和分類結合。2010年至今,神經網絡模型的崛起和深度學習的發展,主要涉及到幾種模型:
  • 重新發現語義分割,一文簡述全卷積網絡
    全卷積網絡自 2012 年出現以來,在圖像分類和圖像檢測領域取得了巨大成功。本文利用筆記本電腦構建了一個小型全卷積網絡,詳細介紹了全卷積網絡的思路、過程等等,值得一看語義分割是一種學習如何識別圖像中對象範圍的機器學習技術。語義分割賦予機器學習系統與人類相似的理解圖像內容的能力。
  • 2019 語義分割指南
    用於語義圖像分割的深度神經網絡弱和半監督學習(ICCV,2015)這篇文章提出了一種解決方法,用於面對深度卷積網絡中處理弱標記數據的難題、以及處理良好標記與未適當標記數據結合。本文應用了一個深度CNNs與全連接條件隨機場的組合。
  • 筆記 | 深入理解深度學習語義分割
    :最近自動駕駛項目需要學習一些語義分割的內容,所以看了看論文和視頻做了一個簡單的總結。筆記思路是:機器學習-->>深度學習-->>語義分割目錄:機器學習回顧深度學習回顧語義分割簡介語義分割代表算法一、回顧機器學習
  • 基於深度學習的語義分割綜述
    近年來,由於深度學習模型在視覺應用中的成功,已有大量的工作致力於利用深度學習模型開發圖像分割方法。本文全面回顧了撰寫本文時的文獻,涵蓋了語義和實例級分割的大量開創性工作,包括完全卷積像素標記網絡、編碼器-解碼器架構、多尺度和基於金字塔的方法、遞歸網絡,視覺attention模型,以及生成對抗模型。
  • 【NLP】博士筆記 | 深入理解深度學習語義分割
    :最近自動駕駛項目需要學習一些語義分割的內容,所以看了看論文和視頻做了一個簡單的總結。筆記思路是:機器學習-->>深度學習-->>語義分割目錄:機器學習回顧深度學習回顧語義分割簡介語義分割代表算法一、回顧機器學習
  • 基於深度學習的語義分割技術講解
    由於所有的像素都要考慮到,因此語義圖像分割任務也被視為是稠密預測的一種。在此,要區別一下實例分割(具體可參考著名的MaskRCNN模型),實例分割常常與目標檢測系統相互結合,用於檢測和分割場景中同一對象的多個實例。基於深度學習的語義分割方法:用卷積神經網絡分類(全卷積網絡),與普通網絡不同的是,分類層是卷積層,普通網絡為全連接層。
  • 全卷積網絡FCN進行圖像分割
    與經典的CNN在卷積層之後使用全連接層得到固定長度的特徵向量進行分類(全聯接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入圖像,採用反卷積層對最後一個卷積層的feature map進行上採樣, 使它恢復到輸入圖像相同的尺寸,從而可以對每個像素都產生了一個預測, 同時保留了原始輸入圖像中的空間信息, 最後在上採樣的特徵圖上進行逐像素分類。
  • 語義分割中的深度學習方法全解:從FCN、SegNet到各版本DeepLab
    量子位今天推薦的這篇文章,回顧了深度學習在圖像語義分割中的發展歷程。發布這篇文章的Qure.ai,是一家用深度學習來讀取醫學影像的公司,他們在官方博客上梳理了語義分割中的深度學習方法。他們希望通過這份介紹,能讓大家了解這個已經在自然圖像處理比較成熟、但是在醫學圖像中仍需發展的新興技術。
  • 語義分割最新指南2019版
    導讀:網上曾經流傳深度學習語義分割指南2017版(A 2017 Guide to Semantic Segmentation with Deep Learning http://blog.qure.ai/notes/semantic-segmentation-deep-learning-review),總結了當年各個具有代表性的語義分割算法與相關貢獻,對把握該領域研究進展脈絡起到了提綱挈領的作用
  • 語義分割的經典學習方法和深度學習方法綜述
    語義分割和實例分割之間的比較本文將探討一些使用經典和基於深度學習的方法來執行語義分割的方法。此外,還將討論常用的損失函數的選擇和應用。可以最小化該值以獲得良好的分割輸出。深度學習方法深度學習極大地簡化了執行語義分割的管道,並產生了令人印象深刻的質量結果。在本節中,我們將討論用於訓練這些深度學習方法的流行模型體系結構和損失函數。1.模型架構全卷積網絡(FCN)是用於語義分割的最簡單、最流行的架構之一。
  • 全連接層的作用是什麼?
    全連接層(fully connected layers,FC)在整個卷積神經網絡中起到「分類器」的作用。如果說卷積層、池化層和激活函數層等操作是將原始數據映射到隱層特徵空間的話,全連接層則起到將學到的「分布式特徵表示」映射到樣本標記空間的作用。
  • 圖像語義分割入門:FCN/U-Net網絡解析
    對於一般的分類CNN網絡,如VGG和Resnet,都會在網絡的最後加入一些全連接層,經過softmax後就可以獲得類別概率信息。但是這個概率信息是1維的,即只能標識整個圖片的類別,不能標識每個像素點的類別,所以這種全連接方法不適用於圖像分割。
  • 從0到1必看 | 基於深度學習方法的圖像分割
    語義分割是一個非常困難的問題,尤其是在深度學習之前。深度學習使得圖像分割的準確率提高了很多,下面我們就總結一下近年來最具有代表性的方法和論文。這篇論文是第一篇成功使用深度學習做圖像語義分割的論文。論文的主要貢獻有兩點:提出了全卷積網絡。將全連接網絡替換成了卷積網絡,使得網絡可以接受任意大小的圖片,並輸出和原圖一樣大小的分割圖。只有這樣,才能為每個像素做分類。使用了反卷積層(Deconvolution)。分類神經網絡的特徵圖一般只有原圖的幾分之一大小。
  • 基於深度學習方法的圖像分割
    如果能夠快速準去地做圖像分割,很多問題將會迎刃而解。因此,它的應用領域就包括但不限於:自動駕駛、圖像美化、三維重建等等。語義分割是一個非常困難的問題,尤其是在深度學習之前。深度學習使得圖像分割的準確率提高了很多,下面我們就總結一下近年來最具有代表性的方法和論文。
  • 語義分割PSPNet
    FCN與PSPNet語義分割的比較PSPNet模塊1.金字塔池化模塊有效獲得全局語境信息,一般有兩種方式:(1)全局平均池化(GAP global average pooling):通常用於圖像分類任務(2)金字塔池化(SPP):生成的不同級別的特徵圖最終被展平並拼接起來,然後輸入到全連接層中進行分類。
  • 深度 | 語義分割網絡DeepLab-v3的架構設計思想和TensorFlow實現
    GitHub 地址:https://github.com/sthalles/deeplab_v3語義分割常規的圖像分類深度卷積神經網絡擁有相似的結構。這些模型以圖像作為輸入,並輸出一個代表圖像類別的數值。通常,分類深度卷積神經網絡有 4 種主要運算。卷積、激活函數、池化以及全連接層。
  • 一文讀懂語義分割與實例分割
    而基於深度學習的圖像分割技術則是利用卷積神經網絡,來理解圖像中的每個像素所代表的真實世界物體,這在以前是難以想像的。基於深度學習的圖像分割技術主要分為兩類:語義分割及實例分割。語義分割和實例分割的區別又是什麼?
  • Deeplab語義分割的發展
    「經典圖像分割方法—基於深度學習的語義分割—Deeplab及其變形」在計算機視覺中,簡單的圖像分割是將數字圖像分為多個段(像素集)的過程。圖像分割是一個長期存在的計算機視覺問題。但是,語義分割是在像素級別「理解」圖像的圖像分割技術。換句話說,語義分割是將每個像素分析和分類為多個類別(標籤)。