FCN語義分割算法原理與實戰
本文若有舛誤,尚祈諸君不吝斧正,感激不盡。
前提概要:所使用的材料來源
對應視頻材料:FCN語義分割
雖然可能比較簡單但是奠定了使用卷積神經網絡做語義分割任務的基礎。
語義分割:輸入圖片,經過網絡模型,輸出原始圖片對應像素的類別。
FCN語義分割算法原理
主流常見的計算機視覺任務
- 圖像分類
- 目標檢測
- 語義分割
- 實例分割
- and so on
FCN模型如何進行語義分割
語義分割任務:輸出的是矩陣與輸入圖像大小一致,輸出后的每個像素有對應類別的概率,映射原圖中對應位置的類別。
FCN模型輸出結果解析
假設標注20個類別,則最終輸出結果是21個類別,因為還有一個背景類別。
輸入HxW -->net --> HxWxC 注意:C(通道數)=分類個數+背景
轉置卷積先導
轉置卷積的計算過程
輸入特征 * 卷積核 = 輸出特征
FCN網絡版本解析
采取了很多跳轉連接方法
全卷積網絡為什么可以接收任意大小的輸入?
FCN網絡的損失函數
損失函數是像素級的分類交叉熵(Pixel-wise Softmax + Cross-Entropy Loss)
語義分割算法模型的評價指標(import!)
常用的包含以下四個:
-
Pixel Accuracy 像素準確率
- 所有被正確分類的像素所占的比例
- 特點:直觀簡單,但對于類分布極度不均衡的數據(如背景占比很大)會有“準確率虛高”的問題
-
Mean Accuracy 平均類別準確率
- 每個類別的像素準確率的平均值
- 特點:可以平衡類間分布不均的問題,但是對于小類極為敏感
-
Mean IoU 平均交并比
- 每個類別的交并比(IoU)的平均值 (語義分割中最常用的評價指標之一!)
- 特點:對每一類都很公平,能反映模型在小類上的表現
- Frequency Weighted IoU 頻率加權交并比
- 考慮類別在數據中出現頻率的IoU加權平均
- 特點:類似Mean IU,但考慮了每類像素的數量,更貼近數據真實分布。避免了某些稀有類對平均結果的影響
像素準確率和平均類別準確率的案例:
平均交并比案例:
FCN語義分割網絡結構講解
背景:標準的 FCN 論文(Fully Convolutional Networks for Semantic Segmentation, 2015)本身是基于 VGG 構建的,并沒有顯式使用 bottleneck 結構,但后續很多工作(比如 DeepLab 系列、FCN-ResNet 等)將 FCN 與 ResNet 等網絡結合。所有FCN有一些不同結構的版本。
右側的圖片為整體的流程圖,最后輸出的大小是480 x 480 x 21,其中的21(通道數)表示21個類別。
Bottleneck:
結構圖中的Bottleneck構建了四個基本的層,這四個層就是resnet的主干網絡。
核心代碼:
![]()
膨脹卷積:
亦稱為空洞卷積,可以增加卷積核的感受野,同時不增加計算量。核心思想是通過插入空洞卷積擴展卷積核的有效感受野,使其捕獲更大范圍的上下文信息。
注意:代碼中的dilation默認為1則表示普通卷積,大于1的情況下表示膨脹卷積。
原版的Resnet中沒有使用膨脹卷積。
FCNHead:
頭部層對應代碼