點上方藍字計算機視覺聯盟獲取更多乾貨
作者:王博Kings、Sophia
本文內容概述王博Kings最近的語義分割學習筆記總結引言:最近自動駕駛項目需要學習一些語義分割的內容,所以看了看論文和視頻做了一個簡單的總結。筆記思路是:機器學習-->>深度學習-->>語義分割目錄:
機器學習回顧
深度學習回顧
語義分割簡介
語義分割代表算法
一、回顧機器學習
二、深度學習回顧
激活函數
這些卷積是語義分割的一個核心內容!
三、語義分割簡介
什麼是語義分割?
ü語義分割(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
還有一個Transformer學習筆記總結:
筆記 | 深入理解Transformer
這是我的私人微信,還有少量坑位,可與相關學者研究人員交流學習 目前開設有人工智慧、機器學習、計算機視覺、自動駕駛(含SLAM)、Python、求職面經、綜合交流群掃描添加CV聯盟微信拉你進群,備註:CV聯盟點個在看支持一下吧