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

2021-02-20 計算機視覺聯盟

點上方藍字計算機視覺聯盟獲取更多乾貨

作者:王博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聯盟

點個在看支持一下吧

相關焦點

  • 【NLP】博士筆記 | 深入理解深度學習語義分割
    作者:王博Kings、Sophia本文內容概述王博Kings最近的語義分割學習筆記總結引言
  • 基於深度學習的語義分割綜述
    近年來,由於深度學習模型在視覺應用中的成功,已有大量的工作致力於利用深度學習模型開發圖像分割方法。本文全面回顧了撰寫本文時的文獻,涵蓋了語義和實例級分割的大量開創性工作,包括完全卷積像素標記網絡、編碼器-解碼器架構、多尺度和基於金字塔的方法、遞歸網絡,視覺attention模型,以及生成對抗模型。
  • 語義分割的經典學習方法和深度學習方法綜述
    語義分割和實例分割之間的比較本文將探討一些使用經典和基於深度學習的方法來執行語義分割的方法。此外,還將討論常用的損失函數的選擇和應用。經典方法在深度學習時代到來之前,大量的圖像處理技術被用來將圖像分割成感興趣的區域。下面列出了一些常用的方法。灰度分割最簡單的語義分段形式涉及分配區域必須滿足的硬編碼規則或屬性,以便為其分配特定標籤。規則可以根據像素的屬性(例如灰度級強度)來構建。使用此技術的一種方法是拆分(Split)和合併(Merge)算法。
  • 基於深度學習的語義分割技術講解
    由於所有的像素都要考慮到,因此語義圖像分割任務也被視為是稠密預測的一種。在此,要區別一下實例分割(具體可參考著名的MaskRCNN模型),實例分割常常與目標檢測系統相互結合,用於檢測和分割場景中同一對象的多個實例。基於深度學習的語義分割方法:用卷積神經網絡分類(全卷積網絡),與普通網絡不同的是,分類層是卷積層,普通網絡為全連接層。
  • Pytorch深度學習實戰教程(一):語義分割基礎與環境搭建
    二、語義分割語義分割(semantic segmentation) : 就是按照「語義」給圖像上目標類別中的每一點打一個標籤,使得不同種類的東西在圖像上被區分開來。可以理解成像素級別的分類任務,直白點,就是對每個像素點進行分類。簡而言之,我們的目標是給定一幅RGB彩色圖像(高x寬x3)或一幅灰度圖像(高x寬x1),輸出一個分割圖譜,其中包括每個像素的類別標註(高x寬x1)。
  • 從全卷積網絡到大型卷積核:深度學習的語義分割全指南
    By路雪 2017年7月14日  語義分割一直是計算機視覺中十分重要的領域,隨著深度學習的流行,語義分割任務也得到了大量的進步。本文首先闡釋何為語義分割,然後再從論文出發概述多種解決方案。本文由淺層模型到深度模型,簡要介紹了語義分割各種技術,雖然本文並沒有深入講解語義分割的具體實現,但本文簡要地概述了每一篇重要論文的精要和亮點,希望能給讀者一些指南。  什麼是語義分割?  語義分割指像素級地識別圖像,即標註出圖像中每個像素所屬的對象類別。
  • 圖像語義分割
    圖像語義分割是計算機視覺中十分重要的領域。上圖為語義分割的一個實例,其目標是預測出圖像中每一個像素的類標籤。圖像語義分割是圖像處理和計算機視覺技術中關於圖像理解的重要的一環。語義分割對圖像中的每一個像素點進行分類,確定每個點的類別(如屬於背景、邊緣或身體等)需要和實例分割區分開來。語義分割沒有分離同一類的實例;它關心的只是每個像素的類別,如果輸入對象中有兩個相同類別的對象,則分割本身不會將它們區分為單獨的對象。
  • Deeplab語義分割的發展
    「經典圖像分割方法—基於深度學習的語義分割—Deeplab及其變形」在計算機視覺中,簡單的圖像分割是將數字圖像分為多個段(像素集)的過程。圖像分割是一個長期存在的計算機視覺問題。但是,語義分割是在像素級別「理解」圖像的圖像分割技術。換句話說,語義分割是將每個像素分析和分類為多個類別(標籤)。
  • 語義分割概念及應用介紹
    近年來,以深度學習為中心的機器學習技術引起了人們的關注。比如自動駕駛汽車已經逐漸成為可能,但在整個深度學習過程,需要算法識別和學習作為原始數據提供的圖像,在這一過程中,應用到了語義分割技術。下面讓我們來看看語義分割的需求是如何演變的。早期,計算機視覺的初始應用需求只是識別基本元素,例如邊緣(線和曲線)或漸變。
  • 入門 | 一文了解什麼是語義分割及常用的語義分割方法有哪些
    圖像理解的關鍵在於將一個整體場景分解成幾個單獨的實體,這也有助於我們推理目標的不同行為。當然,目標檢測方法可以幫助我們繪製某些確定實體的邊框,但人類對場景的理解能以像素級的精細程度對每一個實體進行檢測並標記精確的邊界。我們已經開始發展自動駕駛汽車和智慧機器人,這些都需要深入理解周圍環境,因此精確分割實體變得越來越重要。什麼是語義分割?
  • 入門| 一文了解什麼是語義分割及常用的語義分割方法有哪些
    圖像理解的關鍵在於將一個整體場景分解成幾個單獨的實體,這也有助於我們推理目標的不同行為。當然,目標檢測方法可以幫助我們繪製某些確定實體的邊框,但人類對場景的理解能以像素級的精細程度對每一個實體進行檢測並標記精確的邊界。我們已經開始發展自動駕駛汽車和智慧機器人,這些都需要深入理解周圍環境,因此精確分割實體變得越來越重要。
  • 資源 | 從全連接層到大型卷積核:深度學習語義分割全指南
    語義分割一直是計算機視覺中十分重要的領域,隨著深度學習的流行,語義分割任務也得到了大量的進步。
  • 2019 語義分割指南
    of a Deep Convolutional Network for Semantic Image Segmentation (用於語義分割的弱監督和半監督的深度神經網絡)Fully Convolutional Networks for Semantic Segmentation (用於語義分割的全卷積神經網絡)
  • 一文讀懂語義分割與實例分割
    圖像分割技術是目前預測圖像領域最熱門的一項技術,原因在於上述許多計算機視覺任務都需要對圖像進行智能分割,以充分理解圖像中的內容,使各個圖像部分之間的分析更加容易。本文會著重介紹語義分割和實例分割的應用以及原理。
  • 深度學習中的圖像分割:方法和應用
    ,包括傳統方法和深度學習方法,以及應用場景。基於人工智慧和深度學習方法的現代計算機視覺技術在過去10年裡取得了顯著進展。如今,它被用於圖像分類、人臉識別、圖像中物體的識別、視頻分析和分類以及機器人和自動駕駛車輛的圖像處理等應用上。許多計算機視覺任務需要對圖像進行智能分割,以理解圖像中的內容,並使每個部分的分析更加容易。
  • 圖像語義分割入門:FCN/U-Net網絡解析
    語義分割即是對圖像中每一個像素點進行分類,確定每個點的類別(如屬於背景、人或車等),從而進行區域劃分。目前,語義分割已經被廣泛應用於自動駕駛、無人機落點判定等場景中。與分類不同的是,語義分割需要判斷圖像每個像素點的類別,進行精確分割。圖像語義分割是像素級別的!
  • 語義分割中的深度學習方法全解:從FCN、SegNet到各版本DeepLab
    量子位今天推薦的這篇文章,回顧了深度學習在圖像語義分割中的發展歷程。發布這篇文章的Qure.ai,是一家用深度學習來讀取醫學影像的公司,他們在官方博客上梳理了語義分割中的深度學習方法。他們希望通過這份介紹,能讓大家了解這個已經在自然圖像處理比較成熟、但是在醫學圖像中仍需發展的新興技術。
  • 基於深度學習方法的圖像分割
    語義分割在普通分割的基礎上,分類出每一塊區域的語義(即這塊區域是什麼物體)。 如把畫面中的所有物體都指出它們各自的類別。實例分割在語義分割的基礎上,給每個物體編號。 如這個是該畫面中的狗A,那個是畫面中的狗B。論文推薦圖像的語義分割(Semantic Segmentation)是計算機視覺中非常重要的任務。它的目標是為圖像中的每個像素分類。
  • 語義分割入門的總結
    這使得 CRFs 成為語義分割的理想候選者. 這裡介紹下 CRFs 在語義分割中的應用.圖像中的每個像素都是與有限的可能狀態集相關. 在語義分割中,target 類別標籤就是可能狀態集. 將一個狀態(或,label u) 分配給的單個像素 x 的成本(cost) 被稱為一元成本(unary cost).
  • 語義分割領域開山之作:Google提出用神經網絡搜索實現語義分割
    在過去的一年中,元學習(meta-learning)在大規模圖像分類問題上,性能已經實現超越人類手工設計的神經網架構。基於 NAS 的圖像分類遷移到高解析度的圖像處理(語義分割、目標識別、實例分割)有很大的挑戰:(1)神經網絡的搜索空間和基本運算單元有本質不同。(2)架構搜索必須固有地在高解析度圖像上運行,因此不能實現從低解析度圖像訓練模型遷移到高解析度圖像。