重磅乾貨,第一時間送達
本文轉自:計算機視覺聯盟
本文內容概述王博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講