AI 語義分割 SegNet

SegNet

Demo: http://mi.eng.cam.ac.uk/projects/segnet/
Last Edited: May 09, 2019 5:18 PM
Tags: FCN,SegNet
論文地址: https://arxiv.org/pdf/1511.00561.pdf

前言

可以看看官網的演示效果:SegNet
或者是直接看看這個演示效果:https://youtu.be/CxanE_W46ts
在這裏插入圖片描述


  SegNet的主要動機是場景理解的應用(語義分割),主要動機是爲了設計一個Memory and Computational Time均高效的網絡結構用於道路和室內場景理解。

  設計的最初目的就是爲了從解決語義分割後邊界精確定位的問題。

  定量的評估表明,SegNet在和其他架構的比較上,時間和內存的使用都比較高效。

模型對比分析

Pascal VOC 12的偏向性

  1. 數據集中大部分圖都有一兩個由高度多樣的背景包圍的前景。
  2. 隱含地導致其偏向於含有檢測技術的算法。

不同分割論文解碼方法總結

  1. Decoupled,用大量弱標籤數據進行分類網絡的訓練,使得分割網絡性能得到改善。
  2. DeepLab,使用分類網絡的特徵圖和獨立的CRF後處理技術來執行分割。
  3. DeconvNet、Edge Boxes,使用區域proposals,通過額外的推理輔助來增強分割網絡的性能。

  因此,上面這些算法,它們與場景理解的不同之處在於,他們的目的是利用對象的共同出現( co-occurrences of objects—CRF)以及其他空間上下文(other spatial-context—proposal)來執行可靠的分割。

提出原因

  多尺度的深層架構也被廣泛採用。它們有兩種風格,(1)使用幾個尺度的輸入圖像和相應的深度特徵提取網絡;(2)組合來自單個深層結構的不同層的特徵圖(ParseNet)。

  通常的想法是提取多尺度特徵來提供局部和全局的空間信息(zoom-out),再利用淺層編碼層的特徵圖以保留更高頻率的細節,從而獲得更細緻的類別邊界。其中一些架構由於參數太多而難以訓練。因此,多階段訓練往往也需要數據增強。由於特徵是從多個卷積路徑提取的,導致推理過程也是複雜度比較高的。還有的團隊在多尺度網絡後附加CRF,並共同訓練。然而,這個步驟在測試時不是前饋的,需要優化才能確定MAP標籤。

介紹

網絡結構

在這裏插入圖片描述
  我們可以看到是一個對稱網絡,由中間綠色Pooling層與紅色Upsampling層作爲分割,左邊是卷積提取高維特徵,並通過Pooling使圖片變小,SegNet作者稱該過程爲Encoder,右邊是反捲積(在這裏反捲積與卷積沒有區別)與Upsampling,通過反捲積使得圖像分類後特徵得以重現,Upsampling使圖像變大,SegNet作者稱該過程爲Decoder,最後通過Softmax,輸出不同分類的最大值。

  SegNet高效的原因是因爲僅僅保留了MaxPooling的結果,並沒有保留卷積後的產物,因此非常節省內存。

對比VGG-16

  1. 編碼網絡和VGG-16的卷積層相同。
  2. 移除了全連接層。
  3. 解碼器使用從相應的編碼器接受的Max-Pooling Indices來進行輸入特徵圖的非線性Upsampling。

使用max-pooling indices的原因

  Max-Pooling可以實現在輸入圖像上進行小的空間位移時保持平移不變性。然而,連續的下采樣導致了在輸出的特徵圖上,每一個像素都重疊着着大量的輸入圖像中的空間信息。對於圖像分類任務,多層最大池化Max-Pooling和下采樣由於平移不變性可以獲得較好的魯棒性,但導致了特徵圖大小和空間信息的損失。圖像分割任務中邊界劃分至關重要,而這麼多有損邊界細節的圖像表示方法顯然不利於分割。因此,在進行下采樣之前,在編碼器特徵映射中獲取和存儲邊界信息是十分重要的。如果推理過程中的內存不受約束,則所有編碼器特徵映射(在下采樣後)都可以存儲。在實際應用中,情況通常不是這樣,因此我們提出了一種更有效的方法來存儲這些信息——只存儲最大池化索引,即存儲每個池化窗口中最大特徵值的位置,用於每個編碼器特徵映射。

  基於VGG16的對稱網絡結構,網絡把全卷積層去掉了,這樣就可實現end-to-end的訓練,節省計算時間。論文中提到如果把encoder卷積層的信息加入到decoder中會提高準確率,但是運算消耗增加,因此作者並沒有這麼做,採用了一種Unpooling的方法,如下圖:

SegNet和FCN decoder方式對比

  • 沒有增加參數:稀疏,且不需要參與訓練
  • 降低內存:decoder不用存儲encoder中的輸出結果
  • 提升了邊界的描繪能力
  • 該網絡結構可以擴展到任意的encoder-decoder網絡結構

在這裏插入圖片描述
  對比SegNet和FCN實現Decoder的過程。SegNet保留Pooling時的位置信息,Upsampling時直接將數據放在原先的位置,而FCN採用Transposed Convolutions+雙線性插值,每一個像素都是運算後的結果。

在這裏插入圖片描述
  可以看出網絡大小相比FCN是要小很多,但是時間上由於加了很多去卷積層,所以並不快。

解碼網絡中複用max-pooling indices的好處

  1. 改善了邊界劃分。
  2. 減少了端到端訓練的參數量。
  3. 僅需要少量的修改就可以合併到任何編碼-解碼形式的架構。

Decode實驗對比

在這裏插入圖片描述

變量 說明
SegNet-Basic 1. 4個Encode,4個Decode;
2. upsample上採樣採用下采樣downsample的indices;
3. encode/decode上,每一個conv之後接一個BN操作;
4. 對於decoder網絡,conv中沒有采用ReLU非線性激活函數和biases偏置;
5. 採用7x7卷積核,則VGG layer4的感受野爲106x106;
6. decoder卷積的filter個數與對一個的encoder卷積filter個數相同。
SegNet-SingleChannelDecoder 1. decoder卷積核個數爲1。
FCN-Basic-NoDimReduction 1. 最終的維度和對應的encoder相對應。
  • 採用雙線性插值進行上採樣,固定參數【不參與學習】
  • 採用max-pooling indices進行上採樣【不參與學習】
  • 採用雙線性插值進行上採樣,參數參與學習
    • 雙線性插值進行初始化
  • 結論:FCN-Basic-NoDimReduction效果最好。

總結

  該論文提出了一種encoder-decoder的分割方法,相比較FCN,該方法採用了max-pooling indices進行上採樣,有效的降低了upsample中的內存使用問題。

附錄

SegNet論文筆記

論文筆記 | SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation - kangdk 視其所以,觀其所由,察其所安。 - CSDN博客

深度學習之語義分割-SegNet - whz1861的博客 - CSDN博客

Semantic Segmentation–SegNet:A Deep Convolutional Encoder-Decoder Architecture…論文解讀 - DFan的NoteBook - CSDN博客

卷積神經網絡CNN(4)-- SegNet - Fate_fjh的博客 - CSDN博客

Semantic Segmentation–SegNet:A Deep Convolutional Encoder-Decoder Architecture…論文解讀 - DFan的NoteBook - CSDN博客

中文翻譯

【論文翻譯】SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation - IT閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章