圖像語義分割綜述
來自專欄圖像語義分割
更多語義分割文章,請看專欄:圖像語義分割
一、什麼是語義分割
語義分割是在像素級別上的分類,屬於同一類的像素都要被歸為一類,因此語義分割是從像素級別來理解圖像的。比如說如下的照片,屬於人的像素都要分成一類,屬於摩托車的像素也要分成一類,除此之外還有背景像素也被分為一類。注意語義分割不同於實例分割,舉例來說,如果一張照片中有多個人,對於語義分割來說,只要將所由人的像素都歸為一類,但是實例分割還要將不同人的像素歸為不同的類。也就是說實例分割比語義分割更進一步。
圖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進行改進的幾種架構,關於每種架構的詳細解讀請看專欄中其他文章。
- FCN
- SegNet
- Dilated Convolutions
- DeepLab (v1 & v2)
- RefineNet
- PSPNet
- Large Kernel Matters
- DeepLab v3
1.FCN
論文信息
Fully Convolutional Networks for Semantic Segmentation
Submitted on 14 Nov 2014Arxiv Link
主要貢獻
- 使端對端的卷積語義分割網路變得流行起來。
- 通過deconvolutional layers進行上採樣。
- 通過skip connection改善了上採樣的粗糙度。
概要
- 全卷積化(Fully Convolutional):用於解決逐像素(pixel-wise)的預測問題。通過將基礎網路(例如VGG)最後面幾個全連接層換成卷積層,可實現任意大小的圖像輸入,並且輸出圖像大小與輸入相對應;
- 反卷積(deconvolution) :上採樣操作,用於恢復圖片尺寸,方便後續進行逐像素預測;
- 跳躍結構(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 2015Arxiv 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 2015Arxiv Link
創新點
- 使用空洞卷積用來進行稠密預測(dense prediction)。
- 提出上下文模塊(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 2014Arxiv Linkv2 : DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFsSubmitted on 2 Jun 2016Arxiv Link
主要貢獻
- 使用atrous卷積,也就是後來的空洞卷積,擴大感受野,保持解析度。
- 提出了atrous spatial pyramid pooling (ASPP),整合多尺度信息。
- 使用全連接條件隨機場(fully connected CRF)進行後處理,改善分割結果。
簡要概述
- 空洞卷積可以在不增加參數的情況下增加感受野。
- 通過兩種方式來進行多尺度的處理:A.將原始圖像的多種尺度餵給網路進行訓練。B.通過平行的不同空洞率的空洞卷積層來獲得。
- 通過全連接條件隨機場來進行後處理,以改善分割結果。
Benchmarks (VOC2012)
5. RefineNet
論文信息
RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation
Submitted on 20 Nov 2016Arxiv Link
主要貢獻
- 精心設計了encoder-decoder架構中的decoder部分,使得性能提升。
- 整個網路的設計都遵循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 2016Arxiv Link
主要貢獻
- 使用pyramid pooling整合context。
- 使用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
參考
這篇文章主要是參考以下兩篇文章的一個總結,加入了一些自己的理解,想看原文的直接打開:
- A 2017 Guide to Semantic Segmentation with Deep Learning
- A Review on Deep Learning Techniques Applied to Semantic Segmentation
推薦閱讀:
TAG:深度學習DeepLearning | 機器學習 | 計算機視覺 |