模型架構
與大多數編碼器—解碼器架構設計不同的是,deeplab 提供了一種與眾不同的語義分割方法。deeplab 提出了一種用於控制訊號抽取和學習多尺度語境特徵的架構。
deeplab 把在 imagnet 上預訓練得到的
resnet 作為它的主要特徵提取網路
。但是,它
為多尺度的
特徵學習新增了
乙個新的
殘差塊。
最後乙個
resnet 塊
使用了空洞卷積
(atrous convolution),而不是常規的卷積。此外,這個殘差塊內的每個卷積都使用了不同的擴張率來捕捉多尺度的語境資訊。
另外,這個殘差塊的頂部
使用了空洞空間金字塔池化 (aspp
,atrous spatial pyramid pooling)。aspp 使用了不同擴張率的卷積來對任意尺度的區域進行分類。
為了理解 deeplab 的架構,我們需要著重注意這三個部分。(i)resnet 架構,(ii) 空洞卷積,(iii)
空洞空間金字塔池化(aspp)。接下來我們將逐一介紹這幾個部分。
resnets
resnet 是乙個非常流行的深度卷積神經網路架構,它贏得了 ilsvrc 2015 分類任務挑戰賽的冠軍。它的主要貢獻之一就是提供了簡化深度學習模型訓練的框架。
在 resnet 的原始形式中,它含有 4 個計算模組。每個模組包含不同數量的殘差單元
。這些單元以特別的形式執行一系列的卷積運算。同樣,每個模組都夾雜了最大池化操作來減少空間維度。
原始**提出了兩種殘差單元:
基線塊和瓶頸塊
。基線塊
包含兩個 3x3 的卷積,卷積中使用了 bn(批歸一化)和 relu 啟用函式。
神經網路訓練之資料歸一化處理。在機器學習中領域中的資料分析之前,通常需要將資料標準化,利用標準化後得資料進行資料分析。不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進行資料標準化處理,以解決資料指標之間的可比性。原始資料經過資料標準化處理後,各指標處於同一數量級,適合進行綜合對比評價。
歸一化用一句話說就是:把資料經過處理後使之限定在一定的範圍內。比如通常限制在區間[0, 1]或者[-1, 1]
殘差模組。左:基線塊;右:瓶頸塊。
第二個是瓶頸塊
,它包括三個堆疊的部分,用一系列的 1x1、3x3 和 1x1 的卷積代替了之前的設計。兩個 1x1 的卷積操作被用來減少和恢復維度。這使得中間的 3x3 的卷積可以在乙個密度相對較低的特徵向量上進行操作。此外,每個卷積之後、每個非線性 relu 之前都應用了 bn。
為了有助於澄清這個問題,我們將這一組操作定義為乙個輸入為 x 的函式 f——f(x)。
在 f(x) 中的非線性變換之後,這個單元將 f(x) 的結果和原始輸入 x 相結合。這種結合是通過對兩個函式求和得到的。原始輸入 x 和非線性函式 f(x) 合併帶來了一些優勢。它使得前面的層可以訪問後面層的梯度訊號。換句話說,跳過 f(x) 上的操作允許前面的層訪問更強的梯度訊號。這種型別的連線已經被證明有助於更深網路的訓練。
當我們增加模型容量時,非瓶頸單元也表明有助於準確率的提高。然而,瓶頸殘差單元具有一些實際優勢。首先,它們在幾乎相同數量的引數下可執行更多的計算。第二,它們與非瓶頸單元的計算複雜度相似。
在實際中,瓶頸單元更適合於訓練更深的模型,因為它們需要的訓練時間和計算資源更少。
在我們的實現中,我們將使用完全預啟用殘差單元(full pre-activation residual unit),與標準瓶頸單元的唯一區別在於 bn 和 relu 啟用函式的放置順序。對於完全預啟用,bn 和 relu(按此順序)出現在卷積之前。
不同的 resnet 構建模組塊體系架構。最左邊:原始 resnet 模組;最右邊:改進的完全預啟用版本。
注意,這些設計之間的唯一區別是卷積堆疊中 bn 和 relu 的順序。
空洞卷積
空洞卷積(或者擴張卷積)是具有乙個因子的常規卷積,這個因子使得我們能夠擴充套件濾波器的視野。
以 3×3 卷積濾波器為例。當擴張因子等於 1 時,它的行為類似於標準卷積。但是,如果將擴張因子設定為 2,則它具有擴大卷積核的效果。
理論上,它是這樣工作的:首先,根據擴張率對卷積濾波器進行擴張。然後,它用零填充空白空間,建立稀疏的類似濾波器。最後,使用擴張的濾波器進行常規卷積。
不同擴張率的空洞卷積
因此,大小為 3x3、擴張率為 2 的卷積將使其能夠覆蓋 5x5 的區域。然而,因為它的作用就像乙個稀疏的過濾器,只有原始的 3 x3 單元將執行計算並生成結果。
以類似的方式,擴張因子為 3 的常規 3×3 的卷積能夠得到對應的 7×7 區域的訊號。
這種效果允許我們控制計算特徵響應的解析度。此外,空洞卷積在不增加引數數量或計算量的情況下增加了更大範圍的語境資訊。
deeplab 還表明,必須根據特徵圖的大小來調整擴張率。他們研究了在小特徵圖上使用大擴張率的結果。
給小特徵圖設定更大的擴張率的***。對於 14×14 的輸入影象,使用擴張率為 15 的 3×3 卷積,其結果和常規的 1×1 卷積類似。
當擴張率非常接近特徵圖的尺寸時,乙個常規的 3×3 的空洞濾波器的效果與標準的 1×1 卷積是一樣的。
換句話說,
空洞卷積的效率依賴於對擴張率的選擇
。由於這一原因,理解神經網路中的輸出步長(output stride)的概念是很重要的。
輸出步長反映輸入影象大小與輸出特徵圖大小的比率,它定義了輸入向量在通過網路時經受的訊號抽象程度。
輸出步長為 16,影象大小為 224x224x3 時,輸出特徵向量比輸入影象的維度小 16 倍,變成了 14x14。
此外,deeplab 還討論了不同輸出步長對分割模型的影響。deeplab 認為過強的訊號抽象不利於密集**任務。總之,具有較小輸出步長 (較弱訊號抽象) 的模型傾向於輸出更精細的分割結果。然而,使用較小的輸出步長訓練模型需要更多的訓練時間。
deeplab 還展示了兩種輸出步長(8 和 16)設定下的結果。和預期的一樣,步長等於 8 能夠產生稍微好一些的結果。在這裡,出於實際原因,我們選擇了 16 為輸出步長。
此外,由於空洞卷積塊沒有實現降取樣,所以 aspp 也執行在相同的特徵響應大小上。因此,它允許使用相對較大的擴張率從多尺度的語境中學習特徵。
新型空洞殘差塊包含三個殘差單元。三個單元都總共擁有三個 3×3 的卷積塊。在多重網格(multigrid)方法的啟發下,deeplab 為每個卷積設定了不同的擴張率。總之,多重網格為三個卷積中的每個卷積定義了不同的擴張率。
在實際中:
對於 block 4,當輸出步長是 16,多重網格為(1,2,4)的時候,這三個卷積的擴張率分別是(2,4,8)。
空洞空間金字塔池化
空洞空間金字塔池化(aspp)的思想是提供具有多尺度資訊的模型
。為了做到這一點,
aspp
新增了一系列具有不同擴張率的
空洞卷積
。這些擴張率是被設計用來捕捉大範圍語境的。此外,為了增加全域性的語境資訊,aspp 還通過全域性平均池化(gap)結合了影象級別的特徵。
這個版本的 aspp 包含 4 個並行的操作。它們分別是乙個 1×1 的卷積以及三個 3×3 的卷積(擴張率分別是(6,12,18))。正如我們前面所提及的,現在,特徵圖的標稱步長(nominal stride)是 16.
在原始實現的基礎上,我們使用 513 x513 的裁剪尺寸進行訓練和測試。因此,使用 16 的輸出步長意味著 aspp 接收大小為 32 x32 的特徵向量。
此外,為了新增更多全域性語境資訊,aspp 結合了影象級別的特徵。首先,它將 gap 應用於從最後乙個空洞塊輸出的特徵上。其次,所得特徵被輸入到具有 256 個濾波器的 1x 1 卷積中。最後,將結果進行雙線性上取樣到正確的維度大小。
參考:
語義分割deeplabv3原理與流程梳理
deeplabv3是一種語義分割網路,語義分割旨在對給定的每乙個畫素點進行類別 在這裡我們來梳理一下deeplabv3網路的大致流程僅供參考,參考的演算法實現位址為 演算法使用的資料集是分割常用的cityscapes,在對資料集進行適當的預處理後,輸入網路的是batchx3x256x256的和bat...
專案 語義分割DeepLabv3 樹莓派4B部署
1 樹莓派4b及冷卻配件 2 tf卡64gb及讀卡器 1 ubuntu 18.04.4 preinstalled server arm64 raspi3.img 2 minitool partition wizard 分割槽工具 格式化為fat32 3 balenaetcher 映象燒錄工具 1 首...
語義分割之deeplab v1
首先我們簡單考慮一下什麼是語義分割?語義分割是從粗推理到精推理的自然步驟。原點可以定位在分類,分類包括對整個輸入進行 下一步是本地化 檢測,它不僅提供類,還提供關於這些類的空間位置的附加資訊。最後,語義分割通過對每個畫素進行密集的 推斷標籤來實現細粒度的推理,從而使每個畫素都被標記為其封閉物件區域的...