1. 程式人生 > >語義分割中的深度學習方法全解:從FCN、SegNet到各代DeepLab

語義分割中的深度學習方法全解:從FCN、SegNet到各代DeepLab

語義分割是什麼?

語義分割方法在處理影象時,具體到畫素級別,也就是說,該方法會將影象中每個畫素分配到某個物件類別。下面是一個具體案例。

左邊為輸入影象,右邊為經過語義分割後的輸出影象。

該模型不僅要識別出摩托車和駕駛者,還要標出每個物件的邊界。因此,與分類目的不同,相關模型要具有畫素級的密集預測能力。

目前用於語義分割研究的兩個最重要資料集是VOC2012MSCOCO

VOC2012:

MSCOCO:

有哪些方法?

在深度學習應用到計算機視覺領域之前,研究人員一般使用紋理基元森林(TextonForest)或是隨機森林(Random Forest)方法來構建用於語義分割的分類器。

卷積神經網路(CNN)不僅能很好地實現影象分類,而且在分割問題中也取得了很大的進展。

最初,影象塊分類是常用的深度學習方法,即利用每個畫素周圍的影象塊分別將各畫素分成對應的類別。其中,使用影象塊的主要原因是分類網路通常具有全連線層,其輸入需為固定大小的影象塊。

2014年,加州大學伯克利分校的Long等人提出的完全卷積網路(Fully Convolutional Networks),推廣了原有的CNN結構,在不帶有全連線層的情況下能進行密集預測。

這種結構的提出使得分割圖譜可以生成任意大小的影象,且與影象塊分類方法相比,也提高了處理速度。在後來,幾乎所有關於語義分割的最新研究都採用了這種結構。

除了全連線層結構,在分割問題中很難使用CNN網路的另一個問題是存在池化層。池化層不僅能增大上層卷積核的感受野,而且能聚合背景同時丟棄部分位置資訊。然而,語義分割方法需對類別圖譜進行精確調整,因此需保留池化層中所捨棄的位置資訊。

研究者提出了兩個不同形式的結構來解決這個問題。

第一種方法是編碼器-解碼器(encoder-decoder)結構。其中,編碼器使用池化層逐漸縮減輸入資料的空間維度,而解碼器通過反捲積層等網路層逐步恢復目標的細節和相應的空間維度。從編碼器到解碼器之間,通常存在直接的資訊連線,來幫助解碼器更好地恢復目標細節。在這種方法中,一種典型結構為U-Net網路。

一種典型的編碼器-解碼器結構U-Net

第二種方法使用了稱作空洞卷積的結構,且去除了池化層結構。

空洞卷積,當比率為1時,即為經典的卷積結構。

條件隨機場(Conditional Random Field,CRF)方法通常在後期處理中用於改進分割效果。

CRF方法是一種基於底層影象畫素強度進行“平滑”分割的圖模型,在執行時會將畫素強度相似的點標記為同一類別。加入條件隨機場方法可以提高1~2%的最終評分值。

發展中的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日提交到arvix

主要貢獻:

  • 將端到端的卷積網路推廣到語義分割中;
  • 重新將預訓練好的Imagenet網路用於分割問題中;
  • 使用反捲積層進行上取樣;
  • 提出了跳躍連線來改善上取樣的粗糙程度。

具體解釋:

本文的關鍵在於:分類網路中的全連線層可以看作是使用卷積核遍歷整個輸入區域的卷積操作。

這相當於在重疊的輸入影象塊上評估原始的分類網路,但是與先前相比計算效率更高,因為在影象塊重疊區域,共享計算結果。

儘管這種方法並不是這篇文章中所特有的,還有一篇關於overfeat的文章也使用了這種思想,但是確實顯著提高了在VOC2012資料集上的實際效果。

用卷積運算實現的全連線層結構

在將VGG等預訓練網路模型的全連線層卷積化之後,由於CNN網路中的池化操作,得到的特徵圖譜仍需進行上取樣。

反捲積層在進行上取樣時,不是使用簡單的雙線性插值,而是通過學習實現插值操作。此網路層也被稱為上卷積、完全卷積、轉置卷積或是分形卷積。

然而,由於在池化操作中丟失部分資訊,使得即使加上反捲積層的上取樣操作也會產生粗糙的分割圖。因此,本文還從高解析度特性圖譜中引入了跳躍連線方式。

個人評論:

本文的研究貢獻非常重要,但是最新的研究已經很大程度地改進了這個結果。

SegNet

論文:

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

於2015年11月2日提交到arvix

主要貢獻:

將最大池化指數轉移至解碼器中,改善了分割解析度。

具體解釋:

在FCN網路中,通過上卷積層和一些跳躍連線產生了粗糙的分割圖,為了提升效果而引入了更多的跳躍連線。

然而,FCN網路僅僅複製了編碼器特徵,而Segnet網路複製了最大池化指數。這使得在記憶體使用上,SegNet比FCN更為高效。

SegNet網路結構

個人評論:

FCN網路和SegNet網路都是最先出現的編碼器-解碼器結構,但是SegNet網路的基準分值還不能滿足可實際使用的需求。

空洞卷積

論文:

Multi-Scale Context Aggregation by Dilated Convolutions

於2015年11月23日提交到arvix

主要貢獻:

  • 使用了空洞卷積,這是一種可用於密集預測的卷積層;
  • 提出在多尺度聚集條件下使用空洞卷積的“背景模組”。

具體解釋:

池化操作增大了感受野,有助於實現分類網路。但是池化操作在分割過程中也降低了解析度。

因此,該論文所提出的空洞卷積層是如此工作的:

空洞卷積示意圖

空洞卷積層在不降低空間維度的前提下增大了相應的感受野指數。

在接下來將提到的DeepLab中,空洞卷積被稱為多孔卷積(atrous convolution)。

從預訓練好的分類網路中(這裡指的是VGG網路)移除最後兩個池化層,而用空洞卷積取代了隨後的卷積層。

特別的是,池化層3和池化層4之間的卷積操作為空洞卷積層2,池化層4之後的卷積操作為空洞卷積層4。

這篇文章所提出的背景模型(frontend module)可在不增加引數數量的情況下獲得密集預測結果。

這篇文章所提到的背景模組單獨訓練了前端模組的輸出,作為該模型的輸入。該模組是由不同擴張程度的空洞卷積層級聯而得到的,從而聚集多尺度背景模組並改善前端預測效果。

個人評論:

需要注意的是,該模型預測分割圖的大小是原影象大小的1/8。這是幾乎所有方法中都存在的問題,將通過內插方法得到最終分割圖。

DeepLab(v1和v2)

論文1:

Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs

於2014年12月22日提交到Arvix

論文2:

DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs

於2016年6月2日提交到Arxiv

主要貢獻:

  • 使用了空洞卷積;
  • 提出了在空間維度上實現金字塔型的空洞池化atrous spatial pyramid pooling(ASPP);
  • 使用了全連線條件隨機場。

具體解釋:

空洞卷積在不增加引數數量的情況下增大了感受野,按照上文提到的空洞卷積論文的做法,可以改善分割網路。

我們可以通過將原始影象的多個重新縮放版本傳遞到CNN網路的並行分支(即影象金字塔)中,或是可使用不同取樣率(ASPP)的多個並行空洞卷積層,這兩種方法均可實現多尺度處理。

我們也可通過全連線條件隨機場實現結構化預測,需將條件隨機場的訓練和微調單獨作為一個後期處理步驟。

DeepLab2網路的處理流程

RefineNet

論文:

RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation

於2016年11月20日提交到Arxiv

主要貢獻:

  • 帶有精心設計解碼器模組的編碼器-解碼器結構;
  • 所有元件遵循殘差連線的設計方式。

具體解釋:

使用空洞卷積的方法也存在一定的缺點,它的計算成本比較高,同時由於需處理大量高解析度特徵圖譜,會佔用大量記憶體,這個問題阻礙了高解析度預測的計算研究。

DeepLab得到的預測結果只有原始輸入的1/8大小。

所以,這篇論文提出了相應的編碼器-解碼器結構,其中編碼器是ResNet-101模組,解碼器為能融合編碼器高解析度特徵和先前RefineNet模組低解析度特徵的RefineNet模組。

RefineNet網路結構

每個RefineNet模組包含一個能通過對較低解析度特徵進行上取樣來融合多解析度特徵的元件,以及一個能基於步幅為1及5×5大小的重複池化層來獲取背景資訊的元件。

這些元件遵循恆等對映的思想,採用了殘差連線的設計方式。

RefineNet模組

PSPNet

論文:

Pyramid Scene Parsing Network

於2016年12月4日提交到Arxiv

主要貢獻:

  • 提出了金字塔池化模組來聚合背景資訊;
  • 使用了附加損失(auxiliary loss)。

具體解釋:

全域性場景分類很重要,由於它提供了分割類別分佈的線索。金字塔池化模組使用大核心池化層來捕獲這些資訊。

和上文提到的空洞卷積論文一樣,PSPNet也用空洞卷積來改善Resnet結構,並添加了一個金字塔池化模組。該模組將ResNet的特徵圖譜連線到並行池化層的上取樣輸出,其中核心分別覆蓋了影象的整個區域、半各區域和小塊區域。

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

PSPNet網路結構

大核心

論文:

Large Kernel Matters — Improve Semantic Segmentation by Global Convolutional Network

於2017年3月8日提交到Arxiv

主要貢獻:

提出了一種帶有大維度卷積核的編碼器-解碼器結構。

具體解釋:

這項研究通過全域性卷積網路來提高語義分割的效果。

語義分割不僅需要影象分割,而且需要對分割目標進行分類。在分割結構中不能使用全連線層,這項研究發現可以使用大維度核心來替代。

採用大核心結構的另一個原因是,儘管ResNet等多種深層網路具有很大的感受野,有相關研究發現網路傾向於在一個小得多的區域來獲取資訊,並提出了有效感受野的概念。

大核心結構計算成本高,且具有很多結構引數。因此,k×k卷積可近似成1×k+k×1和k×1+1×k的兩種分佈組合。這個模組稱為全域性卷積網路(Global Convolutional Network, GCN)。

接下來談結構,ResNet(不帶空洞卷積)組成了整個結構的編碼器部分,同時GCN網路和反捲積層組成了解碼器部分。該結構還使用了一種稱作邊界細化(Boundary Refinement,BR)的簡單殘差模組。

GCN網路結構

DeepLab v3

論文:

Rethinking Atrous Convolution for Semantic Image Segmentation

於2017年6月17日提交到Arxiv

主要貢獻:

  • 改進了空間維度上的金字塔空洞池化方法(ASPP);
  • 該模組級聯了多個空洞卷積結構。

具體解釋:

與在DeepLab v2網路、空洞卷積中一樣,這項研究也用空洞卷積/多空卷積來改善ResNet模型。

這篇論文還提出了三種改善ASPP的方法,涉及了畫素級特徵的連線、加入1×1的卷積層和三個不同比率下3×3的空洞卷積,還在每個並行卷積層之後加入了批量歸一化操作。

級聯模組實際上是一個殘差網路模組,但其中的空洞卷積層是以不同比率構建的。這個模組與空洞卷積論文中提到的背景模組相似,但直接應用到中間特徵圖譜中,而不是置信圖譜。置信圖譜是指其通道數與類別數相同的CNN網路頂層特徵圖譜。

該論文獨立評估了這兩個所提出的模型,嘗試結合將兩者結合起來並沒有提高實際效能。兩者在驗證集上的實際效能相近,帶有ASPP結構的模型表現略好一些,且沒有加入CRF結構。

這兩種模型的效能優於DeepLabv2模型的最優值,文章中還提到效能的提高是由於加入了批量歸一化層和使用了更優的方法來編碼多尺度背景。

DeepLabv3 ASPP結構

原文地址: