1、介紹
語義分割通常有兩個問題:類內不一致性(同一物體分成兩類)和類間不確定性(不同物體分成同一類)。本文從宏觀角度,認為語義分割不是標記像素而是標記一個整體,提出了兩個結構解決這兩個問題,平滑網絡和邊界網絡(Smooth Network and Border Network)。平滑網絡用的是通道注意力塊(Channel Attention Block),來解決類內不一致性。邊界網絡集成了語義邊界損失。
2、相關工作
Encoder-Decoder:主要考慮如何恢復由於池化造成的空間信息損失,如 SegNet,U-net,Global Convolutional Network,LRR,Refinenet。這些方法只是把相鄰步驟的特征總和起來,沒有考慮多樣表現性
Global Context(全局上下文信息):全局平均池化有很大的效果,如 ParseNet,PSPNet,Deeplabv3
Attention Module(注意力模塊):注意力關注不同尺度信息,如 SENet
Semantic Boundary Detection(語義邊界檢測):許多方法直接連接不同層的特征提取邊界,我們用了自下而上的結構來優化每一步的特征
3、網絡結構
平滑網絡:用了 global pool 以及通道注意力模塊和精細化殘差塊
邊界網絡:用傳統的 canny 邊緣檢測算法獲得邊界,損失函數用的 focal loss,為了平衡正負樣本,同時減少簡單樣本的損失,使網絡更易於訓練
整體網絡:用 deep supervision 對每一層的結果進行上采樣計算損失,除了全局池化層,平滑網絡用 softmax,邊界網絡用 focal loss,最后兩個加起來用一個平衡參數 L=L(s)+a*L(b)
4、訓練
優化器:SGD
batch size:32
動量:0.9
權重衰減:0.0001
學習率:4e-3
學習率衰減:(1-iter/maxiter)^0.9
損失函數比例a:0.1(驗證集上效果最好)
數據擴增:減去均值,隨機水平翻轉,隨機縮放
5、看完其實並不太懂具體的實現,只能是知道一個大概的結構,具體的實現結構可以參考github:https://github.com/YuhuiMa/DFN-tensorflow
Border Network主要用於計算 loss 更新權重,