筆記 | 深入理解深度學習語義分割

重磅乾貨,第一時間送達

本文轉自:計算機視覺聯盟

本文內容概述王博Kings最近的語義分割學習筆記總結

AI博士筆記系列推薦

引言:最近自動駕駛專案需要學習一些語義分割的內容,所以看了看論文和影片做了一個簡單的總結。筆記思路是:機器學習——>>深度學習——>>語義分割

目錄:

機器學習回顧

深度學習回顧

語義分割簡介

語義分割代表演算法

一、回顧機器學習

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

二、深度學習回顧

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

啟用函式

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

這些卷積是語義分割的一個核心內容!

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

三、語義分割簡介

什麼是語義分割?

ü語義分割(semantic segmentation):按照“語義”給影象上目標類別的每一個點打一個標籤,使得不同種類的東西在影象上區分開,可以理解為畫素級別的分類任務。

筆記 | 深入理解深度學習語義分割

語義分割有哪些評價指標?

ü1。畫素精度(pixel accuracy ):每一類畫素正確分類的個數/ 每一類畫素的實際個數。

ü2。均畫素精度(mean pixel accuracy ):每一類畫素的精度的平均值。

ü3。平均交併比(Mean Intersection over Union):求出每一類的IOU取平均值。IOU指的是兩塊區域相交的部分/兩個部分的並集,如figure2中 綠色部分/總面積。

ü4。權頻交併比(Frequency Weight Intersectionover Union):每一類出現的頻率作為權重

筆記 | 深入理解深度學習語義分割

四、語義分割代表演算法

全卷積網路 FullyConvolutional Networks

2015年《Fully Convolutional Networks for SemanticSegmentation》

通常CNN網路在卷積層之後會接上若干個全連線層, 將卷積層產生的特徵圖(feature map)對映成一個固定長度的特徵向量。

輸入AlexNet, 得到一個長為1000的輸出向量, 表示輸入影象屬於每一類的機率, 其中在“tabby cat”這一類統計機率最高。

與經典的CNN在卷積層之後使用全連線層得到固定長度的特徵向量進行分類(全聯接層+softmax輸出)不同,FCN可以接受任意尺寸的輸入影象,採用反捲積層對最後一個卷積層的feature map進行上取樣, 使它恢復到輸入影象相同的尺寸,從而可以對每個畫素都產生了一個預測, 同時保留了原始輸入影象中的空間資訊, 最後在上取樣的特徵圖上進行逐畫素分類。

筆記 | 深入理解深度學習語義分割

簡單的來說,FCN與CNN的區域在把於CNN最後的全連線層換成卷積層,輸出的是一張已經Label好的圖片。

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

有沒有缺點?

是得到的結果還是不夠精細。進行8倍上取樣雖然比32倍的效果好了很多,但是上取樣的結果還是比較模糊和平滑,對影象中的細節不敏感。

是對各個畫素進行分類,沒有充分考慮畫素與畫素之間的關係。忽略了在通常的基於畫素分類的分割方法中使用的空間規整(spatialregularization)步驟,缺乏空間一致性。

對於任何的分類神經網路我們都可以用卷積層替換FC層,只是換了一種資訊的分散式表示。如果我們直接把Heatmap上取樣,就得到FCN-32s。

三種模型FCN-32S,FCN-16S, FCN-8S

筆記 | 深入理解深度學習語義分割

主要貢獻:

ü不含全連線層(fc)的全卷積(fully conv)網路。可適應任意尺寸輸入。

ü增大資料尺寸的反捲積(deconv)層。能夠輸出精細的結果。

ü結合不同深度層結果的跳級(skip)結構。同時確保魯棒性和精確性。

缺點:

Ø得到的結果還是不夠精細。進行8倍上取樣雖然比32倍的效果好了很多,但是上取樣的結果還是比較模糊和平滑,對影象中的細節不敏感。

Ø是對各個畫素進行分類,沒有充分考慮畫素與畫素之間的關係。忽略了在通常的基於畫素分類的分割方法中使用的空間規整(spatial regularization)步驟,缺乏空間一致性。

SegNet

2015年《SegNet: A DeepConvolutionalEncoder-Decoder Architecture for Image Segmentation》

筆記 | 深入理解深度學習語義分割

最大池化:反捲積

筆記 | 深入理解深度學習語義分割

與FCN對比,SegNet的差別就在於上取樣反捲積

U-Net

2015年《U-Net:Convolutional Networks for Biomedical ImageSegmentation》

網路的左側(紅色虛線)是由卷積和Max Pooling構成的一系列降取樣操作,論文中將這一部分叫做壓縮路徑(contracting path)。壓縮路徑由4個block組成,每個block使用了3個有效卷積和1個Max Pooling降取樣,每次降取樣之後Feature Map的個數乘2,因此有了圖中所示的Feature Map尺寸變化。最終得到了尺寸為  的Feature Map。

網路的右側部分(綠色虛線)在論文中叫做擴充套件路徑(expansive path)。同樣由4個block組成,每個block開始之前透過反捲積將Feature Map的尺寸乘2,同時將其個數減半(最後一層略有不同),然後和左側對稱的壓縮路徑的Feature Map合併,由於左側壓縮路徑和右側擴充套件路徑的Feature Map的尺寸不一樣,U-Net是透過將壓縮路徑的Feature Map裁剪到和擴充套件路徑相同尺寸的Feature Map進行歸一化的(即圖1中左側虛線部分)。擴充套件路徑的卷積操作依舊使用的是有效卷積操作,最終得到的Feature Map的尺寸是  。由於該任務是一個二分類任務,所以網路有兩個輸出Feature Map。

U-Net沒有利用池化位置索引資訊,而是將編碼階段的整個特徵圖傳輸到相應的解碼器(以犧牲更多記憶體為代價),並將其連線,再進行上取樣(透過反捲積),從而得到解碼器特徵圖。

DeepLabV1

2015年《Semantic image segmentation withdeep convolutional nets and fully connected CRFs》

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

感受野變大

筆記 | 深入理解深度學習語義分割

DeepLabV2

2015年《DeepLab-v2: Semantic ImageSegmentation 》

筆記 | 深入理解深度學習語義分割

ASPP,空洞卷積池化金字塔;VGG改為ResNet

DeepLabv2是採用全連線的CRF來增強模型捕捉細節的能力。

筆記 | 深入理解深度學習語義分割

DeepLabv2在最後幾個最大池化層中去除了下采樣的層,取而代之的是使用空洞卷積

DeepLabV3

2017年《Rethinking Atrous Convolution for Semantic ImageSegmentation》

筆記 | 深入理解深度學習語義分割

筆記 | 深入理解深度學習語義分割

DeepLabV3+

2018年《Encoder-Decoder with Atrous Separable Convolution for SemanticImage Segmentation》

使用了兩種型別的神經網路,使用空間金字塔模組和encoder-decoder結構做語義分割。

ü空間金字塔:透過在不同解析度上以池化操作捕獲豐富的上下文資訊

üencoder-decoder架構:逐漸的獲得清晰的物體邊界

筆記 | 深入理解深度學習語義分割

Encoder

Encoder就是原來的DeepLabv3,注意點有2點:

輸入尺寸與輸出尺寸比(outputstride = 16),最後一個stage的膨脹率rate為2

AtrousSpatial Pyramid Pooling module(ASPP)有四個不同的rate,額外一個全域性平均池化

Decoder

明顯看到先把encoder的結果上取樣4倍,然後與resnet中下采樣前的Conv2特徵concat一起,再進行3x3的卷積,最後上取樣4倍得到最終結果

需要注意點:

融合低層次資訊前,先進行1x1的卷積,目的是降通道(例如有512個通道,而encoder結果只有256個通道)

筆記 | 深入理解深度學習語義分割

紅色部分為修改

(1)更多層:重複8次改為16次(基於MSRA目標檢測的工作)。

(2)將原來簡單的pool層改成了stride為2的deepwishseperable convolution。

(3)額外的RELU層和歸一化操作新增在每個 3×3 depthwise convolution之後(原來只在1*1卷積之後)

DeepLabv1:https://arxiv。org/pdf/1412。7062v3。pdf

DeepLabv2:https://arxiv。org/pdf/1606。00915。pdf

DeepLabv3:https://arxiv。org/pdf/1706。05587。pdf

DeepLabv3+:https://arxiv。org/pdf/1802。02611。pdf

程式碼:https://github。com/tensorflow/models/tree/master/research/deeplab

下載1:OpenCV-Contrib擴充套件模組中文版教程

下載2:Python視覺實戰專案52講

下載3:OpenCV實戰專案20講