比較語義分割的幾種結構:FCN,UNET,SegNet,PSPNet和Deeplab

簡介

語義分割:給圖像的每一個像素點標註類別。一般認爲這個類別與鄰近像素類別有關,同時也和這個像素點歸屬的總體類別有關。利用圖像分類的網絡結構,能夠利用不一樣層次的特徵向量來知足斷定需求。現有算法的主要區別是如何提升這些向量的分辨率,以及如何組合這些向量。python

幾種結構

  • 全卷積網絡FCN:上採樣提升分割精度,不一樣特徵向量相加。[3]
  • UNET:拼接特徵向量;編碼-解碼結構;採用彈性形變的方式,進行數據增廣;用邊界加權的損失函數分離接觸的細胞。[4]
  • SegNet:記錄池化的位置,反池化時恢復。[3]
  • PSPNet:多尺度池化特徵向量,上採樣後拼接[3]
  • Deeplab:池化跨度爲1,而後接帶孔卷積。
  • ICNet:多分辨圖像輸入,綜合不一樣網絡生成結果。

實驗設計

測試平臺

  • 採用[1]的代碼,去掉one_hot,把損失函數改爲交叉熵。
  • 在驗證過程引入pixel accuray和mIOU,代碼見[2]
  • 用顏色代碼替換標籤的類別代碼,這樣visdom能夠顯示多類別標籤

數據集

  • [1]自帶數據集Bag,二分類,圖像800800,代碼中轉換到160160。
    • 這個數據集很容易收斂,能夠忽略優化器的影響,用來估計網絡結構的性能上限。
  • CamVid,代碼見[2],從視頻中截取的,圖像很類似。圖像尺寸960*720。
  • PASCAL VOC 2007/2012,代碼參照[3],圖像差異大。

測試計劃

  • 在github上收集能成功運行的模型
  • 在同等條件下比較技術細節:vgg16爲基礎結構
    • 比較單層特徵向量進行轉置卷積、上採樣或者反池化後的效果
    • 比較特徵向量的拼接和線性組合
    • 比較多尺度輸入的網絡組合

實驗結果

超參數:epochs=50,lr=0.001,optim=SGD,momentum=0.7u
數據集:Bag,resize(160,160),batch_size=4
注意vgg16正確的層號,每層最後一個是池化。git

feats = list(models.vgg16(pretrained=True).features.children())
self.feat1 = nn.Sequential(*feats[0:5])
self.feat2 = nn.Sequential(*feats[5:10])
self.feat3 = nn.Sequential(*feats[10:17])
self.feat4 = nn.Sequential(*feats[17:24])
self.feat5 = nn.Sequential(*feats[24:31])

單層特徵向量

1*1卷積+標籤收縮(到對應層尺寸)github

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 90 1.1
4 8 86 93 1.0
3 6 80 90 1.0

1*1卷積+上採樣(2倍)+標籤收縮算法

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 72 85 1.1
4->3 6 80 90 1.0
3->2 5 78 88 1.0

1*1卷積+轉置卷積(2倍)+標籤收縮網絡

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 79 89 1.1
4->3 6 84 92 1.0
3->2 5 80 90 1.0

反池化(2倍)+1*1卷積+標籤收縮dom

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 84 92 1.1
4->3 7 87 94 1.1
3->2 5 84 91 1.0

池化(stride=1)+2*2卷積(stride=1,padding=1)+標籤收縮ide

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 84 92 1.1
4->3 7 89 95 1.0
3->2 7 80 90 1.1

多層特徵向量組合

  • 理論上,求和是拼接+1*1卷積的一個特例。

上採樣(逐層,直到原始尺寸)+1*1卷積+求和(FCN)函數

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 91 1.2
5+4 8 88 94 1.2
5+4+3 9 88 94 1.2

上採樣(逐層,直到原始尺寸)+1*1卷積+拼接(UNET')性能

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 91 1.2
5+4 9 87 93 1.2
5+4+3 9 89 94 1.1

上採樣(直接達到原始尺寸)+1*1卷積+拼接(PSPNET')測試

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 84 92 1.2
5+4 9 87 93 1.2
5+4+3 8 88 94 1.2

反池化(逐層)+1*1卷積+上採樣(SegNet')

網絡層 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 91 1.1
5->4 8 88 94 1.1
5->4->3 9 89 95 1.1

附加實驗

epochs=100,lr=3e-3

網絡 單epoch時間(s) mIOU(%) pixel-acc(%) GPU(G)
PSPNET(反池化) 8 91 96 1.1
PSPNET(池化,stride=1) 9 91 96 1.2

引用

  1. https://github.com/bat67/pytorch-FCN-easiest-demo
  2. https://github.com/pochih/FCN-pytorch
  3. https://github.com/bodokaiser/piwise
  4. https://github.com/jaxony/unet-pytorch/

參考文獻

  • Long J , Shelhamer E , Darrell T . Fully Convolutional Networks for Semantic Segmentation[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2014, 39(4):640-651.
  • Ronneberger O, Fischer P, Brox T. U-Net: Convolutional Networks for Biomedical Image Segmentation[C]// International Conference on Medical Image Computing & Computer-assisted Intervention. 2015.
  • Zhao H , Shi J , Qi X , et al. Pyramid Scene Parsing Network[J]. 2016.
  • Chen L C , Papandreou G , Schroff F , et al. Rethinking Atrous Convolution for Semantic Image Segmentation[J]. 2017.
  • Zhao H, Qi X, Shen X, et al. ICNet for Real-Time Semantic Segmentation on High-Resolution Images[J]. 2017.
相關文章
相關標籤/搜索