论文:Learning Pixel-level Semantic Affinity with Image-level Supervision for Weakly Supervised Semantic Segmentation
论文下载:[https://openaccess.thecvf.com/content_cvpr_2018/papers/Ahn_Learning_Pixel-Level_Semantic_CVPR_2018_paper.pdf](https://openaccess.thecvf.com/content_cvpr_2018/papers/Ahn_Learning_Pixel-Level_Semantic_CVPR_2018_paper.pdf)
源码地址:[https://github.com/jiwoon-ahn/psa](https://github.com/jiwoon-ahn/psa)
Abstract
像素级语义分割标签的不足是语义分割的主要障碍之一。本篇论文作者提出了一种框架,该框架根据图像的图像级类别标签生成像素级语义分割结果。众所周知,使用图像级标签的弱监督语义分割模型的特点是只能分割出物体最值得注意的部分而非分割出整个物体(例如:猫的头,具体原因见我上一篇博客有写,这里不再赘述:论文阅读:Weakly-Supervised Semantic Segmentation via Sub-Category Exploration)。论文中作者的解决方案是将这种局部的响应传播到附近语义相似的区域。为此,作者提出了一种深度神经网络模型(作者称之为AffinityNet)用来预测图像中一对相邻坐标之间的语义相似性。然后利用上述网络预测的语义相似性结果,通过随机游走策略实现语义传播过程。更重要的是,用于训练语义相似网络(AffinityNet)的监督信号是由最初的只高亮了最值得注意的部分的分割标签(说人话就是CAM)提供的,虽然用CAM直接作为分割标签训练语义分割模型远远不够,但是只是通过其来计算部分区域的语义相似性便绰绰有余。因此,整个框架中需要的标签就只有图像级的类别标签,而不需要额外的数据或标注信息。
Method
framework
如上图所示为作者所使用的方法,其具体流程如下:
- 训练分类网络提取CAM作为训练AffinityNet的监督信号。
- 利用CAM提取语义相似信息来训练AffinityNet。
- 利用训练的AffinityNet提取语义相似信息并利用Random Walk(RW)算法优化CAM从而生成用于语义分割的pseudo label。
- 利用第3步生成的pseudo label训练全监督的语义分割模型。
在推理阶段则只需要训练好的全监督语义分割模型就可以根据输入图片直接生成其最终的mask了。
Details
Computing CAMs
提取CAM的方法就是利用的传统的根据最后一个卷积层的feature map以及GAP后面的全连接层的权重计算每一类的CAM,将提取出来的经过最大值归一化的CAM用
M
c
M_c
Mc来表示。需要注意的是:在提取CAM的过程中,如果图片的image lavel label中没有某类别,那我们就直接把那个类别的CAM置为0。另外,背景的mask通过如下的公式计算:
M
b
g
(
x
,
y
)
=
{
1
−
max
c
∈
C
M
c
(
x
,
y
)
}
α
M_{bg}(x, y) = \{1 - \max_{c \in C}{M_c(x, y)} \}^\alpha
Mbg(x,y)={1−c∈CmaxMc(x,y)}α
其中C表示数据集中所有类别的集合,
α
>
1
\alpha > 1
α>1是一个超参数,用来调节背景的分数占比。
Learning AffinityNet
如上图所示为AffinityNet的网络结构,为了节省计算量,AffinityNet被设计为用于生成feature map
f
a
f
f
f^{aff}
faff的卷积神经网络,其中语义相似性(semantic affinity)被定义为feature map中两个特征向量之间的
L
1
d
i
s
t
a
n
c
e
L_1 distance
L1distance。生成语义相似性的具体公式为:
W
(
i
j
)
=
e
x
p
{
−
∥
f
a
f
f
(
x
i
,
y
i
)
−
f
a
f
f
(
x
j
,
y
j
)
∥
1
}
,
W_{(ij)} = exp\{ - \left \| f^{aff}(x_i, y_i) - f^{aff}(x_j, y_j) \right \|_1 \} ,
W(ij)=exp{−∥∥faff(xi,yi)−faff(xj,yj)∥∥1},
其中
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi)表示feature map
f
a
f
f
f^{aff}
faff中第i个feature的坐标。
Generating Semantic Affinity Labels
-
为了获得CAM对前景更自信的区域,作者首先通过减小 α \alpha α来增强背景区域,然后对CAM使用dCRF(稠密的条件随机场)来优化CAM,然后从其中选取出前景的mask。
-
与步骤一相反,减小 α \alpha α的值来减弱背景区域的影响,从而得到CAM更自信的背景区域,提取背景的mask。
-
剩下的区域我们认为是中性的,CAM不能足够确信其是前景也不能确信其是背景,故我们在训练AffinityNet的时候就单纯地忽略这些区域。
-
利用上面得到的mask提取语义相似信息,对于两个坐标 ( x i , y i ) (x_i, y_i) (xi,yi)和 ( x j , y j ) (x_j, y_j) (xj,yj):
- 如果连个坐标都不是中性区域坐标: 如果二者是同一类别则将给其label赋为1,否则给其赋为0。
- 如果有一个中性区域坐标则我们在训练的时候直接忽略这些区域。
Affinity Training
在训练AffinityNet的过程中只考虑足够相近的两个坐标的语义相似性。主要原因有一下两点:1.缺乏上下文信息的情况下,用CNN预测两个相距很远的坐标的语义相似性是很的。2. 这样可以节省计算量。我们将用于训练AffinityNet的坐标集合记为
P
\mathcal P
P,其定义如下:
m
a
t
h
c
a
l
P
=
{
(
i
,
j
)
∣
d
(
(
x
i
,
y
i
)
,
(
x
j
,
y
j
)
)
<
γ
,
∀
i
≠
j
}
mathcal P = \{(i, j) | d((x_i, y_i), (x_j, y_j)) < \gamma, \forall i \ne j \}
mathcalP={(i,j)∣d((xi,yi),(xj,yj))<γ,∀i=j}
其中
d
(
⋅
,
⋅
)
d(·,·)
d(⋅,⋅)表示连个坐标之间的欧氏距离。
然而,只是限制采样坐标之间的欧式距离还不够,作者还注意到其中正样本和负样本的数量严重的不平衡,因为负样本只是在物体的边界才能得到,故label中正样本的数量远大于负样本的数量。同样的,在正样本中,背景的区域又会远大于前景的区域(因为在大部分照片中都是这样),接下来,计算loss的时候会将这几个子集分开计算(这些公式好麻烦呀,不自己敲了,直接贴图)。
Revising CAMs Using AffinityNet
由于本人对random walk算法并不熟悉,故这部分不再细讲,只说一下大概的思路。得到训练好的AffinityNet之后,我们先用其生成一个feature map,然后根据feature map提取语义相似性,制作成为概率转移矩阵,从而用于Random Walk。以下是原文:
Learning a Semantic Segmentation Network
Revised CAMs -> upsample -> dCRF -> argmax -> pseudo label
实验部分我就不写了,感兴趣的小伙伴建议去看一下原论文。