語義分割之deeplab v1

2022-06-30 22:45:09 字數 3921 閱讀 3148

首先我們簡單考慮一下什麼是語義分割

語義分割是從粗推理到精推理的自然步驟。原點可以定位在分類,分類包括對整個輸入進行**。下一步是本地化/檢測,它不僅提供類,還提供關於這些類的空間位置的附加資訊。最後,語義分割通過對每個畫素進行密集的**、推斷標籤來實現細粒度的推理,從而使每個畫素都被標記為其封閉物件區域的類別。

其實簡單來說,語義分割就是畫素級別的影象分類。我們以下邊一幅圖為例:左側是原圖,右側是經過影象分割之後的,結果圖中我們可以看到,經過分割後,不同類別的物體,例如行人飛機、房子等被分別標記成不同的顏色。

deeplabv1是谷歌14年提出的語義分割演算法,它解決語義分割分割問題的基本思想就將卷積神經網路(dcnns)和概率圖模型(densecrfs)進行結合。簡單來說,deeplab是結合了深度卷積神經網路(dcnns)和概率圖模型(densecrfs)的方法。具體結合方式是這樣的:將每個畫素視為crf節點,利用遠端依賴關係,並使用crf推理直接優化dcnn的損失函式。

在語義分割任務中,dcnn存在兩個問題:

最大池化和下取樣操作壓縮了影象解析度。一般語義分割來說通過將網路的全連線層改為卷積層,獲取得分圖(或稱為概率圖、熱圖),然後對其上取樣、反卷積等操作還原與輸入影象同樣大小。如果壓縮太厲害,還原後解析度就會比較低,因此我們希望獲得更為稠密(dense)的得分圖;

對空間變換的不變性限制了模型的精度,網路丟失了很多細節,獲得的概率圖會比較模糊,我們希望獲得更多的細節。

在該文章中,提出使用空洞演算法和全連線crf分別解決這兩個問題。下邊我們具體展開來說。首先是dcnn的設計,dcnn是由vgg16網路變換過來的,具體變換過程是這樣的:

首先我們知道在vgg16中,卷積層的卷積核大小統一為 3*3,步長為 1,最大池化層的池化視窗為 2 * 2 ,步長為2 。在變換的時候,首先現將先將vgg16的fc層轉為卷積層,這樣就變成了的全卷積神經網路。

第二步將pool4和pool5的步長由2改為1, 這樣在原本fc7的位置,vgg網路總的步長由原來的32變為8。 (展開來說:一般來說,池化層的步長為2,池化後輸出大小變為輸入大小的一半。原vgg16模型有5次池化,縮小 2^5=32 倍,修改後的vgg16有3次補步長為2的池化,縮小 2^3=8 倍,兩次步長為1的池化,輸出大小基本不變,所以說vgg網路總的步長由原來的32變為8。)

在經過前兩步之後,由於取樣率的減少,使得得分圖(score map)會變得稀疏,為了得到更加稠密(步幅8)的得分圖,我們在最後的兩個最大池化層不進行下取樣(padding到原大小),而是通過2或4的取樣率的空洞卷積對特徵圖做取樣,擴大感受野,縮小步幅。

空洞卷積具體過程是怎樣的那?

首先我們看上邊這個圖,這個是作者**中給定圖,是在一維條件下,空洞卷積的作用過程,其中卷積核大小是3,輸入步長是2,輸出步長是1。可能在一維條件下,不太直觀。因此我找到了乙個二維圖的空洞卷積過程如下圖所示:

其中藍色部分是輸入:7×7的影象;青色部分是輸出:3×3的影象;空洞卷積核:3×3取樣率(擴充套件率)為2 。我們非常直觀的看到上邊,每9個輸入對應乙個輸出。從而實現得分圖的稠密化。

前邊我們通過對vgg16進行變換形成了dcnn,但在實際使用過程中仍然有兩個問題:

在使用vgg-16網路的情況下,如果網路應用卷積,其感受野是224×224(零填充)和404×404。 作者認為這種感受野大小太大,無法保證良好的定位精度。

將網路轉換為完全卷積的網路之後,第乙個全連線層具有4,096個大小的7×7空間大小的濾波器,這十分消耗計算資源。

因此作者想出通過卷積網路控制感受野的大小,具體來說將第乙個fc層空間抽樣到4×4空間大小,這樣之後能夠將網路的感受野減少到128×128(零填充)或308×308(卷積模式),並將第乙個fc層的計算時間縮短了3倍。

前邊在通過dcnn網路處理的過程中,不斷向下取樣,原來的位置資訊會隨著深度減少甚至消失。最後導致分類結果變得十分平滑,但最後我們想要的結果它的細節應該是突出的。從這個圖中我們可以看到經過dcnn處理之後,飛機的邊界變得十分模糊。然後經過crf處理之後飛機的分類邊界變得越來越清晰。crf在傳統影象處理上主要做平滑處理。這跟我此處的使用場景剛好相反,我們需要的是銳化,因此作者對傳統的crf進行改良,二元勢能函式使用的是高斯核,並且任意兩個畫素點都有此項,因此被稱為全連線crf。

此外為了獲得更好的邊界資訊,作者還增加了乙個多尺度**。具體來說就是在輸入與前四個max pooling後新增mlp,得到**結果。最終輸出的特徵對映送到模型的最後一層輔助**,合起來模型最後的softmax層輸入特徵多了640個通道。雖然,多尺度**處理效果不如全連線crf,但也有一定效果,並且作者最終兩個模型都用上了,即最終模型是結合了全連線crf與多尺度**。

item

set

資料集pascal voc 2012 segmentation benchmark

dcnn模型

權重採用預訓練的vgg16

熵交叉熵

訓練器sgd,batch=20

學習率初始為0.001,最後的分類層是0.01。每2000次迭代乘0.1

權重0.9的動量, 0.0005的衰減

為了驗證deeplab演算法的效果,作者設計了一系列的實驗驗證,上邊是實驗引數。值得注意的是模型訓練的方式是分段訓練就是說dcnn的輸出是crf的輸入。

上面這張圖是crf以及多尺度**在測試集上的表現,從圖中可以看到帶crf和多尺度的**的deeplab模型效果明顯上公升了。

上邊這張圖是多尺度的視覺效果圖。第一行的表示的是原始的輸出,第二行是經過多尺度**之後的輸出,可以明顯看出經過多尺度**之後輸出部分的細節要比原來要好一些。

上面這兩張圖這兩張圖是deeplab和其他模型相比的效果圖。從圖中我們可以看出,與其他先進模型相比,deeplab捕獲到了更具細節的邊界(第二行圖是**目標)。

最後作者得出結論deeplab創造性的結合了dcnn和crf產生一種新的語義分割模型,模型有準確**結果同時,計算效率也比較高。在pascal voc 2012上展現了先進的水平。雖然說deeplab語義分割的效果好像不錯,但是問題依然存在,問題主要有三個方面1.特徵解析度的降低、2.物體存在多尺度、3.dcnn 的平移不變性。關於這些問題的解決方案,我們可能需要在v2上邊尋找答案。

應導師要求,學習語義分割(已經換了兩個方向了,好苦逼呀

deeplab v2語義分割 caffe配置

我的硬體配置ubuntu16.04,gpu 1080ti,cuda8.0,cudnn5.0 caffe bin build release tools caffe.bin caffe bin build tools caffe exp voc12 這一句很重要,按照一般設定,許多都設定為exp 這樣...

語義分割deeplabv3原理與流程梳理

deeplabv3是一種語義分割網路,語義分割旨在對給定的每乙個畫素點進行類別 在這裡我們來梳理一下deeplabv3網路的大致流程僅供參考,參考的演算法實現位址為 演算法使用的資料集是分割常用的cityscapes,在對資料集進行適當的預處理後,輸入網路的是batchx3x256x256的和bat...

語義分割網路DeepLab v3的架構設計思想 中

模型架構 與大多數編碼器 解碼器架構設計不同的是,deeplab 提供了一種與眾不同的語義分割方法。deeplab 提出了一種用於控制訊號抽取和學習多尺度語境特徵的架構。deeplab 把在 imagnet 上預訓練得到的 resnet 作為它的主要特徵提取網路 但是,它 為多尺度的 特徵學習新增了...