圖像語義分割綜述

圖像語義分割綜述

來自專欄圖像語義分割

更多語義分割文章,請看專欄:圖像語義分割

一、什麼是語義分割

語義分割是在像素級別上的分類,屬於同一類的像素都要被歸為一類,因此語義分割是從像素級別來理解圖像的。比如說如下的照片,屬於人的像素都要分成一類,屬於摩托車的像素也要分成一類,除此之外還有背景像素也被分為一類。注意語義分割不同於實例分割,舉例來說,如果一張照片中有多個人,對於語義分割來說,只要將所由人的像素都歸為一類,但是實例分割還要將不同人的像素歸為不同的類。也就是說實例分割比語義分割更進一步。

圖1(a). 原圖

圖1(b). 分割結果

二、語義分割的思路

I.傳統方法

在深度學習方法流行之前,TextonForest和基於隨機森林分類器等語義分割方法是用得比較多的方法。不過在深度卷積網路流行之後,深度學習方法比傳統方法提升了很多,所以這裡就不詳細講傳統方法了。

II.深度學習方法

深度學習方法在語義分割上得到了巨大成功,深度學習方法解決語義分割問題可以概括為幾種思路。下面進行詳細介紹。

1.Patch classification

最初的深度學習方法應用於圖像分割就是Patch classification。Patch classification方法,顧名思義,圖像是切成塊餵給深度模型的,然後對像素進行分類。使用圖像塊的主要原因是因為全連接層需要固定大小的圖像。

2.全卷積方法

2014年,全卷積網路(FCN)橫空出世,FCN將網路全連接層用卷積取代,因此使任意圖像大小的輸入都變成可能,而且速度比Patch classification方法快很多。

儘管移除了全連接層,但是CNN模型用於語義分割還存在一個問題,就是下採樣操作(比如,pooling)。pooling操作可以擴大感受野因而能夠很好地整合上下文信息(context中文稱為語境或者上下文,通俗的理解就是綜合了更多的信息來進行決策),對high-level的任務(比如分類),這是很有效的。但同時,由於pooling下採樣操作,使得解析度降低,因此削弱了位置信息,而語義分割中需要score map和原圖對齊,因此需要豐富的位置信息。

3.encoder-decoder架構

encoder-decoder是基於FCN的架構。encoder由於pooling逐漸減少空間維度,而decoder逐漸恢復空間維度和細節信息。通常從encoder到decoder還有shortcut connetction(捷徑連接,也就是跨層連接)。其中U-net就是這種架構很流行的一種,如下圖:

4.空洞卷積

dilated/atrous (空洞卷積)架構,這種結構代替了pooling,一方面它可以保持空間解析度,另外一方面它由於可以擴大感受野因而可以很好地整合上下文信息。如下圖:

5.條件隨機場

除了以上思路,還有一種對分割結果進行後處理的方法,那就是條件隨機場(Conditional Random Fields (CRFs))後處理用來改善分割效果。DeepLab系列文章基本都採用這種後處理方法,可以較好地改善分割結果,如下圖:

三、深度學習語義分割方法

方法總覽

現在的深度學習語義分割模型基本上都是基於FCN發展而來的,它是開山鼻祖,一張圖概括FCN的延伸方法:

各方法的詳細信息

各方法簡要介紹

下面簡單總結一些從FCN進行改進的幾種架構,關於每種架構的詳細解讀請看專欄中其他文章。

  1. FCN
  2. SegNet
  3. Dilated Convolutions
  4. DeepLab (v1 & v2)
  5. RefineNet
  6. PSPNet
  7. Large Kernel Matters
  8. DeepLab v3

1.FCN

論文信息

Fully Convolutional Networks for Semantic Segmentation

Submitted on 14 Nov 2014

Arxiv Link

主要貢獻

  1. 使端對端的卷積語義分割網路變得流行起來。
  2. 通過deconvolutional layers進行上採樣。
  3. 通過skip connection改善了上採樣的粗糙度。

概要

  1. 全卷積化(Fully Convolutional):用於解決逐像素(pixel-wise)的預測問題。通過將基礎網路(例如VGG)最後面幾個全連接層換成卷積層,可實現任意大小的圖像輸入,並且輸出圖像大小與輸入相對應;
  2. 反卷積(deconvolution) :上採樣操作,用於恢復圖片尺寸,方便後續進行逐像素預測;
  3. 跳躍結構(skip architecture):用於融合高低層特徵信息。通過跨層連接的結構,結合了網路淺層的細(fine-grain)粒度信息信息以及深層的粗糙(coarse)信息,以實現精準的分割任務。

Benchmarks (VOC2012)

評論:

FCN是基於深度學習的語義分割的開山之作,儘管現在很多方法都超越了FCN,但它的思想仍然有很重要的意義。

2. Segnet

論文信息

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

Submitted on 2 Nov 2015

Arxiv Link

主要貢獻

  • 使用Maxpooling indices來增強位置信息。

簡要概述

FCN的upconvolution層+shortcut connections產生的分割圖比較粗糙,因此SegNet增加了更多的shortcut connections。不過,SegNet並不是直接將encoder的特徵進行直接複製,而是對maxpooling中的indices進行複製,這使得SegNet的效率更高。

maxpooling 的indices複製原理如下:

Benchmarks (VOC2012)

評論

  • FCN和SegNet都是encoder-decoder架構。
  • SegNet的benchmark表現太差了,不建議用這個網路。

3. Dilated convolution

論文信息

Multi-Scale Context Aggregation by Dilated Convolutions

Submitted on 23 Nov 2015

Arxiv Link

創新點

  1. 使用空洞卷積用來進行稠密預測(dense prediction)。
  2. 提出上下文模塊(context module),使用空洞卷積(Dilated Convolutions)來進行多尺度信息的的整合。

簡要解釋

pooling操作可以增大感受野,對於圖像分類任務來說這有很大好處,但由於pooling操作降低了解析度,這對語義分割來說很不利。因此作者提出一種叫做dilated convolution的操作來解決這個問題。dilated卷積(在deeplab中稱為atrous卷積)。可以很好地提升感受野的同時可以保持空間解析度。

網路架構有兩種,一種是前端網路,另外一種是前端網路+上下文模塊,分別介紹如下:

  • 將VGG網路的最後兩個pooling層給拿掉了,之後的卷積層被dilated 卷積取代。並且在pool3和pool4之間空洞卷積的空洞率=2,pool4之後的空洞卷積的空洞率=4。作者將這種架構稱為前端(front-end)。
  • 除了前端網路之外,作者還設計了一種叫做上下文模塊(context module)的架構,加在前端網路之後。上下文木塊中級聯了多種不同空洞率的空洞卷積,使得多尺度的上下文信息可以得到整合,從而改善前端網路預測的效果。需要注意的是前端網路和上下文木塊是分開訓練的,因為作者在實驗中發現,如果是聯合在一起進行端對端的訓練並不能改善性能。

Benchmarks (VOC2012)

評論

需要特別注意的是,網路輸出的分割圖並不是和原始圖像大小一樣的,而是其1/8,需要對輸出的分割圖進行線性插值才能得到最終的分割結果。這種做法也是很多其他的方法都使用的。

4. DeepLab(v1,v2)

論文信息

v1: Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs

Submitted on 22 Dec 2014

Arxiv Link

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

Submitted on 2 Jun 2016

Arxiv Link

主要貢獻

  1. 使用atrous卷積,也就是後來的空洞卷積,擴大感受野,保持解析度。
  2. 提出了atrous spatial pyramid pooling (ASPP),整合多尺度信息。
  3. 使用全連接條件隨機場(fully connected CRF)進行後處理,改善分割結果。

簡要概述

  1. 空洞卷積可以在不增加參數的情況下增加感受野。
  2. 通過兩種方式來進行多尺度的處理:A.將原始圖像的多種尺度餵給網路進行訓練。B.通過平行的不同空洞率的空洞卷積層來獲得。
  3. 通過全連接條件隨機場來進行後處理,以改善分割結果。

Benchmarks (VOC2012)

5. RefineNet

論文信息

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

Submitted on 20 Nov 2016

Arxiv Link

主要貢獻

  1. 精心設計了encoder-decoder架構中的decoder部分,使得性能提升。
  2. 整個網路的設計都遵循residual connections,網路表達能力更強,梯度更容易反向傳播。

簡要概述

作者提出空洞卷積方法應用於語義分割也是有缺點的,包括:

  • 因為使用了大解析度的feature map,因此計算代價大,並且需要大量的內存。對於這個問題,DeepLab的做法是只預測原始輸入的1/8。

本文提出使用encoder-decoder架構。encoder部分是RESNET-101。decoder具有RefineNet blocks,它將此前的RefineNet blocks的低解析度特徵和encoder部分高解析度特徵進行concatenate/fuse。

Benchmarks (VOC2012)

6. PSPNet

論文信息

Pyramid Scene Parsing Network

Submitted on 4 Dec 2016

Arxiv Link

主要貢獻

  1. 使用pyramid pooling整合context。
  2. 使用auxiliary loss。

概要

骨架網路使用Resnet,並在此基礎上加上pyramid pooling module。該模塊用到了很多kernel大小不一的pooling 。將pooling的結果再上採樣,經過concatenate進行融合。

在RESNET的第四階段(即輸入到金字塔池模塊)之後,應用auxiliary loss。這種方法在別的地方也被稱為intermediate supervision。

Benchmarks (VOC2012)

以下兩篇論文還沒細看,看完了之後更新。

7. Large Kernel Matters

pass

8. deeplab v3

pass

參考

這篇文章主要是參考以下兩篇文章的一個總結,加入了一些自己的理解,想看原文的直接打開:

  1. A 2017 Guide to Semantic Segmentation with Deep Learning
  2. A Review on Deep Learning Techniques Applied to Semantic Segmentation

推薦閱讀:

TAG:深度學習DeepLearning | 機器學習 | 計算機視覺 |