天池語義分割task03

2021-10-21 01:25:44 字數 3886 閱讀 4975

1、fcn 原理及網路結構

fcn 首先將一幅 rgb 影象輸入到卷積神經網路後,經過多次卷積以及池化過程得到一系列的特徵 圖,然後利用反卷積層對最後乙個卷積層得到的特徵圖進行上取樣,使得上取樣後特徵圖與原影象的大小一樣,從而實現對特徵圖上的每個畫素值進行**的同時保留其在原影象中的空間位置資訊,最後對上採 樣特徵圖進行逐畫素分類,逐個畫素計算softmax 分類損失。

主要特點:• 不含全連線層(fc)的全卷積(fully conv)網路。從而可適應任意尺寸輸入。

• 引入增大資料尺寸的反卷積(deconv)層。能夠輸出精細的結果。

• 結合不同深度層結果的跳級(skip)結構。同時確保魯棒性和精確性。

建築語義分割中:輸入為512*512 *3(可為任意尺寸影象)彩色影象;輸出與輸入尺寸相同,深度為 一層(二分類)

2、反卷積(deconvolutional)

unsamplingd 的操作可以看成是反卷積(deconvolutional), 卷積運算的引數和 cnn 的引數一樣是

在訓練 fcn 模型的過程中通過 bp 演算法學習得到。

普通的池化會縮小的尺寸,比如 vgg16 經過 5 次池化後被縮小了 32 倍。為了得到和原圖

等大小的分割圖,我們需要上取樣、反卷積。

反卷積和卷積類似,都是相乘相加的運算。只不過後者是多對一,前者是一對多。而反卷積的前向和

反向傳播,只用顛倒卷積的前後向傳播即可。如下圖所示:

3、跳躍結構

經過全卷積後的結果進行反卷積,基本上就能實現語義分割了,但是得到的結果通常是比較粗糙的。

對原影象進行卷積 conv1、pool1 後原影象縮小為 1/2;之後對影象進行第二次 conv2、pool2 後影象縮小為 1/4;接著繼續對影象進行第三次卷積操作 conv3、pool3 縮小為原影象的 1/8,此時保留 pool3 的 featuremap;接著繼續對影象進行第四次卷積操作 conv4、pool4,縮小為原影象的 1/16,保留 pool4 的 featuremap;最後對影象進行第五次卷積操作 conv5、pool5,縮小為原影象的 1/32,然後把原來 cnn 操作中全連線變成卷積操作 conv6、conv7,影象的 featuremap 數量改變但是影象大小依然為原圖的 1/32,此時影象不再叫 featuremap 而是叫 heatmap。現在我們有 1/32 尺寸的 heatmap,1/16 尺寸的 featuremap 和 1/8 尺寸的 featuremap,1/32 尺寸的 heatmap 進行 upsampling 操作之後,因為這樣的操作還原的僅僅是 conv5 中的卷積核中的特徵,限於精度問題不能夠很好地還原影象當中的特徵。因此在這裡向前迭代,把 conv4 中的卷積核對上一次 upsampling 之後的圖進行反卷積補充細節(相當於乙個插值過程),最後把 conv3 中的卷積核對剛才upsampling 之後的影象進行再次反卷積補充細節,最後就完成了整個影象的還原。

具體來說,就是將不同池化層的結果進行上取樣,然後結合這些結果來優化輸出,分為 fcn-32s,fcn-16s,fcn-8s 三種,第一行對應 fcn-32s,第二行對應 fcn-16s,第三行對應 fcn-8s。具體結構如下:

圖中,image 是原影象,conv1,conv2…,conv5 為卷積操作,pool1,pool2,…pool5 為 pool 操作(pool 就是使得變為原圖的 1/2),注意 con6-7 是最後的卷積層,最右邊一列是 upsample 後的 end to end 結果。必須說明的是圖中 nx 是指對應的特徵圖上取樣 n 倍(即變大 n 倍),並不是指有 n 個特徵圖,如32x upsampled 中的 32x 是影象只變大 32 倍,不是有 32 個上取樣影象,又如 2x conv7 是指 conv7的特徵圖變大 2 倍。

(1)fcn-32s 過程

只需要留意第一行,網路裡面有 5 個 pool,所以 conv7 的特徵圖是原始影象 1/32,可以發現最左邊image 的是 32x32(假設以倍數計),同時我們知道在 fcn 中的卷積是不會改變影象大小(或者只有少量畫素的減少,特徵圖大小基本不會小很多)。看到 pool1 是 16x16,pool2 是 8x8,pool3 是 4x4,pool4 是2x2,pool5 是 1x1,所以conv7 對應特徵圖大小為 1x1,然後再經過 32x upsampled prediction 變32x32。fcn 作者在這裡增加乙個卷積層,卷積後的大小為輸入影象的 32(2 5 ) 倍,我們簡單假設這個卷積核大小也為 32,這樣就是需要通過反饋訓練 32x32 個權重變數即可讓影象實現 end to end,完成了乙個 32s 的 upsample。fcn 作者稱做後卷積,他也提及可以稱為反卷積。事實上在原始碼中卷積核的大小為64,同時沒有偏置 bias。還有一點就是 fcn **中最後結果都是 21œ*,這裡的 21 是指 fcn 使用的資料集分類,總共有 21 類。

(2)fcn-16s 過程

現在我們把 1,2 兩行一起看,忽略 32x upsampled prediction,說明 fcn-16s 的 upsample 過程。fcn作者在 conv7 先進行乙個 2x conv7 操作,其實這裡也只是增加 1 個卷積層,這次卷積後特徵圖的大小為conv7 的 2 倍,可以從 pool5 與 2x conv7 中看出來。此時 2x conv7 與 pool4 的大小是一樣的,fcn 作者提出對 pool4 與 2xconv7 進行乙個 fuse 操作(事實上就是將 pool4 與 2x conv7 相加,另一篇部落格說是拼接,個人認為是拼接)。fuse 結果進行 16x upsampled prediction,與 fcn-32s 一樣,也是增加乙個卷積層,卷積後的大小為輸入影象的 16(2 4 ) 倍。我們知道 pool4 的大小是2x2,放大 16 倍,就是 32x32,這樣最後影象大小也變為原來的大小,至此完成了乙個 16s 的 upsample。現在我們可以知道,fcn 中的upsample 實際是通過增加卷積層,通過 bp 反饋的訓練方法訓練卷積層達到 end to end,這時卷積層的作用可以看作是 pool 的逆過程。

(3)fcn-8s 過程

這是我們看第 1 行與第 3 行,忽略 32x upsampled prediction。conv7 經過一次 4x upsample,即使用乙個卷積層,特徵圖輸出大小為 conv7 的 4 倍,所得 4x conv7 的大小為 4x4。然後 pool4 需要一次 2xupsample,變成 2x pool4,大小也為 4x4。再把 4x conv7,2x pool4 與 pool3 進行 fuse,得到求和後的特徵圖。最後增加乙個卷積層,使得輸出大小為 pool3 的 8 倍,也就是 8x upsampled prediction 的過程,得到乙個 end to end 的影象。實驗表明 fcn-8s 優於 fcn-16s,fcn-32s。我們可以發現,如果繼續仿照 fcn 作者的步驟,我們可以對 pool2,pool1 實現同樣的方法,可以有 fcn-4s,fcn-2s,最後得到 end to end 的輸出。這裡作者給出了明確的結論,超過 fcn-8s 之後,結果並不能繼續優化。結合上述的 fcn 的全卷積與 upsample,在 upsample 最後加上 softmax,就可以對不同類別的大小概率進行估計,實現 end to end。最後輸出的圖是乙個概率估計,對應畫素點的值越大,其畫素為該類的結果也越大。fcn 的核心貢獻在於提出使用卷積層通過學習讓實現 end to end 分類。事實上,fcn 有一些短處,例如使用了較淺層的特徵,因為 fuse 操作會加上較上層的 pool 特徵值,導致高維特徵不能很好得以使用,同時也因為使用較上層的 pool 特徵值,導致 fcn 對影象大小變化有所要求,如果測試集的影象遠大於或小於訓練集的影象,fcn 的效果就會變差。

天池語義分割task04

tp tn fp fn 在講解語義分割中常用的評價函式和損失函式之前,先補充一 tp 真正例 true positive tn 真反例 true negative fp 假正例 false positive fn 假反例 false negative 的知識。在分類問題中,我們經常看到上述的表述方式...

天池語義分割task05

乙個成熟合格的深度學習訓練流程至少具備以下功能 在訓練集上進行訓練,並在驗證集上進行驗證 模型可以儲存最優的權重,並讀取權重 記錄下訓練集和驗證集的精度,便於調參。一 學習目標 理解驗證集的作用,並使用訓練集和驗證集完成訓練 學會使用 pytorch 環境下的模型讀取和載入,並了解調參流程 二 構造...

爬蟲task03心得

通過這一階段的學習,我知道了爬蟲中針對ip被封的解決方案,主要有三種小套路 1,修改請求頭,模擬瀏覽器 而不是 去直接訪問 去訪問 2,採用 ip並輪換 3,設定訪問時間間隔 下面是獲取ip位址的案例 from bs4 import beautifulsoup import requests imp...