Segmentation-Aware Convolutional Networks Using Local Attention Masks 笔记

论文地址:https://arxiv.org/abs/1708.04607

Segmentation-Aware CNN

典型应用:

  • dense regression labelling (semantic segmentation)
  • dense regression (optical flow)

整体流程

  1. 为每个pixel计算出一个embedding vector
  2. 产生mask
  3. 将mask和convolution 结合

embedding

与之前的方法大同小异

用来这样的loss 函数:

pairwise_loss

总loss是对每个像素选择附近的点来计算loss然后求和:
$$
L = \sum_{i \in N} \sum_{j \in N_i}l_{ij}
$$

用SGD来训练fully convolutional CNN。

Segmentation-aware bilateral filtering

用这个式子可以把embedding转化为两个像素点属于同一个物体的概率:
$$
m_{i, j} = \exp(-\lambda||e_i - e_j||)
$$
本质上还是相当于一个距离反相关的量。

这样的话可以通过定义不同的$e$,其实就是用不同的距离算法,可以应用到滤波上。

对于输入$x_i$, 可以计算出$$y_i = \frac{\sum_k x_{i-k} m_{i, i_k}}{\sum_k m_{i, i-k}}$$

很明显是一个卷积滤波的式子。

如果取$e_j = 0$, 那么显然就是均值滤波,

取$e_j = i$, 就是高斯滤波

取$e_j = (i, p_i)$, $p_i$是i处的Color Vector, 这样就把距离和颜色都考虑进去了,产生的效果就是双边滤波。

Segmentation-aware Convolution

在segmentation-aware滤波的基础上,可以增加一个可学习的卷积层$t$,
$$
y_i = \frac{\sum_k x_{i-k} m_{i, i_k} t_k}{\sum_k m_{i, i-k}}
$$
这样的话,就把非线性的mask与convolutional filter结合起来了。

把之前求mask的m的式子中的$\lambda$设置为0的话,就取消了mask的影响,式子就变成了经典的CNN。

Network Architecture

segware_CNN

前面的部分是一个embedding network,就像DeepLab, VGG16这类网络的变种。 这个网络就用pairwise distance来训练,训练之后会得到一个embedding的map。再此基础上可以计算mask,后面可以与任何一个CNN来组合使用,如此的结果就是上面说的segmentation-aware CNN。 感觉就是利用了类似与双边滤波那样的思想。