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 更新权重,