Fast-SCNN:多分支結構共享低級特徵的語義分割網絡


介紹一篇 BMVC 2019 語義分割論文 Fast-SCNN:Fast Semantic Segmentation Network,谷歌學術顯示該文已有62次引用。git


論文https://arxiv.org/pdf/1902.04502.pdf

代碼:https://github.com/Tramac/Fast-SCNN-pytorch (PyTorch實現,星標200+,非官方)github



0
緒論
自動駕駛和移動機器人的興起,對實時語義分割算法的需求愈來愈強烈。在自動駕駛或者移動機器人的應用場景下,對語義分割算法通常有着額外的需求:
  • 算法要有實時性,最好實時性很是高,由於語義分割僅僅是整個視覺感知系統中預處理的一部分,語義分割的結果每每做爲後續感知或融合模塊的輸入;
  • 算法要佔用比較低的內存,以容許部署在低成本的嵌入式設備中。
通常來說,基於卷積神經網絡作語義分割一般使用encoder-decoder結構,好比下面2篇文章:
  • Fully convolutional networks for semantic segmentation.
  • SegNet: A Deep Convolutional Encoder-Decoder Architecture for Im8 age Segmentation.
在此基礎上,不少實時性的語義分割算法還會使用多分枝網絡結構,好比下面3篇文章:
  • Contextnet: Exploring context and detail for semantic segmentation in real-time.
  • Bisenet: Bilateral segmentation network for real-time semantic segmentation.
  • Guided Upsampling Network for Real-Time Semantic Segmentation.
在2分支的網絡結構中,較深的分支輸入低分辨率圖片,目的是爲了在保證較少計算開銷的前提下有效地提取全局上下文特徵;較淺的網絡分支輸入高分辨率圖像,目的是提取空間細節信息。兩個分支的計算結果融合,造成最終的語義分割結果。


1
動機
在2分支結構的網絡中,2個分支基本保持着相對獨立的計算流程。 「深網絡+低分辨率輸入」和「淺網絡+高分辨率輸入」的組合可以較好地控制計算開銷,以保證算法的實時性。 以下圖所示:
2個分支的淺層部分,實際上都是在提取淺層特徵,若能將2個分支的淺層部分合並在一塊兒,則能夠進一步減小計算量。基於此,做者提出了「learning to downsample」模塊,2個分支共用該模塊提取淺層特徵。並以learning to downsample模塊和2個分支爲基礎,構建實時性語義分割網絡Fast-SCNN。以下圖所示:

2
Fast-SCNN

2.1 整體結構

Fast-SCNN的整體結構以下圖所示:
從上圖能夠看出,2個分支共享learning to downsample模塊,以進一步減小計算量。整個網絡由learning to downsample模塊、全局特徵提取器、特徵融合模塊和分類器4部分組成,下面分別介紹。

2.2 Learning to Downsample模塊

該模塊包括3個卷積層,第一個卷積層爲普通的卷積層,後面兩個卷積層使用深度可分離卷積以提升計算效率。
每一個卷積層的步長都是2,所以該模塊輸出特徵的長(或寬)爲輸入圖像的1/8。每一個卷積層的卷積核尺寸爲3x3,每一個卷積層後面都有BN層和ReLU激活函數。

2.3 全局特徵提取器

Fast-SCNN使用全局特徵提取器來提取全局特徵,此處的全局特徵提取器相似於傳統2分支結構中的深度分支。傳統的2分支結構中深度分支的輸入是低分辨率的輸入圖像,而Fast-SCNN中全局特徵提取器的輸入爲learning to downsample模塊的輸出feature map。能夠這麼理解:Fast-SCNN中的learning to downsample模塊代替了傳統2分支結構中深度分支的前幾個卷積層。
使用MobileNet-v2中提出的bottleneck residual block構建全局特徵提取器,bottleneck residual block中的深度可分離卷積有利於減小全局特徵提取器的參數量和計算量。
全局特徵提取器還包含pyramid pooling模塊(PPM),用於提取不一樣尺度的上下文特徵。關於PPM的相關內容可參考論文《Pyramid Scene Parsing Network》。

2.4 特徵融合模塊

特徵融合模塊用於融合2個分支的輸出特徵,Fast-SCNN使用了相對比較簡單的結構完成特徵融合,以最大限度地提升計算效率。
特徵融合模塊的結構以下表所示:
爲了使得2個分支的輸出特徵尺寸一致,須要對深度分支的特徵作上採樣操做,即上表中的「Upsample x X」操做。兩個分支的最後都有1個卷積核尺寸爲1x1的卷積操做用於調整通道數,將兩個卷積操做的輸出特徵相加,以後使用激活函數進行非線性變換。

2.5 分類器

分類器模塊中包含2個深度可分離卷積和1個卷積核尺寸爲1x1的卷積以提升網絡性能。
在分類器模塊中還包含1個softmax操做。在網絡訓練時,softmax操做用於計算損失。在推理時,使用argmax操做代替softmax以提升推理速度。

2.6 網絡結構總結

下表爲這4部分的網絡結構參數:
上表中第3列~第6列表示網絡結構的參數,其中t表示bottleneck residual block的expansion factor,具體含義在論文《MobileNetV2: Inverted Residuals and Linear Bottlenecks》中有講解,簡單來講,就是bottleneck residual block內部feature map的通道數與bottleneck residual block輸入端feature map通道數的比值; c表示該計算模塊輸出的feature map通道數; n表示該模塊重複的次數; s表示卷積的步長,若計算模塊重複了不少次,s所表示的步長只適用於第一次使用該模塊時。


3
一些實現細節
  • 使用交叉熵損失函數進行訓練,在learning to downsample模塊和全局特徵提取器後面分別添加了權重爲0.4的輔助損失函數用於訓練。web

  • 在softmax的前一個卷積層中使用了dropout。算法

  • 使用ReLU激活函數,而沒有使用MobileNet中的ReLU6激活函數,實驗證實訓練Fast-SCNN時使用ReLU收斂更快、性能更好。微信

  • 訓練時迭代屢次性能仍有提升,在Cityscapes數據集上訓練了1000個epochs。網絡


4
實驗結果
使用Cityscapes數據集訓練Fast-SCNN,在Cityscapes測試集上測試,,結果以下表所示:
從表中能夠看出,Fast-SCNN的性能好於大多數算法,比BiSeNet和GUN略差,可是Fast-SCNN的參數量只是BiSeNet的1/5。
調整Fast-SCNN的輸入圖片分辨率,測量算法的運行時間,獲得下表:
從表中能夠看出,在同等GPU架構和輸入圖片分辨率下,Fast-SCNN的運行速度要遠遠快於BiSeNet和GUN。上表中的「Our prob」表示在Fast-SCNN推理時使用了softmax函數獲得最終的類別,「Our cls」表示在推理時使用了計算量更小的argmax操做獲得最終類別,能夠看出使用argmax代替softmax,速度有很大的提高。
須要特別指出的是,Fast-SCNN網絡結構支持多種輸入圖片分辨率,所以改變輸入圖片分辨率並不須要改變網絡結構。


5
總結
  • 指出在多分枝結構的語義分割網絡中,2個分支共用淺層網絡可以進一步精簡網絡結構,達到提升運算速度的目的。架構

  • 設計出了learning to downsample模塊,2個分支共用該模塊提取低級特徵。app

  • 以learning to downsample模塊、bottleneck residual block爲基礎,構建了Fast-SCNN用於語義分割任務,經過實驗證實了Fast-SCNN的高性能與高實時性。編輯器

僅用於學習交流!

ENDide



備註:分割

圖像分割交流羣

語義分割、實例分割、全景分割、摳圖等技術,若已爲CV君其餘帳號好友請直接私信。


我愛計算機視覺

微信號 : aicvml

QQ羣:805388940

微博/知乎:@我愛計算機視覺

投稿:amos@52cv.net

網站:www.52cv.net

在看,讓更多人看到  

本文分享自微信公衆號 - 我愛計算機視覺(aicvml)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索