1.AGCN模型结构
模型利用
S
L
I
C
(
S
i
m
p
l
e
L
i
n
e
a
r
I
t
e
r
a
t
i
v
e
C
l
u
s
t
e
r
i
n
g
)
SLIC(Simple\ Linear\ Iterative \ Clustering)
SLIC(Simple Linear Iterative Clustering)算法对整幅图像进行无监督聚类,得到大量的图像块,称为超像素。接着利用CNN对每个超像素进行特征提取作为每个节点的特征,利用超像素之间的邻接关系作为节点的邻接矩阵,利用像素投票的方式得到每个节点分类标签。利用注意力矩阵调整邻接矩阵,引导图卷积层关注关键节点,完成图像分割任务。
2.基于超像素投票
利用SLIC算法将原始图像划分为超像素后,需要给每块超像素一个自己的标签,但是在超像素ground-truth中对应有多种标签,所以作者提出以超像素对应区域的ground-truth中标签频率最高的那一类作为超像素的标签:
y
i
=
a
r
g
m
a
x
r
=
{
1
,
.
.
.
,
K
}
∑
m
=
1
M
s
i
g
n
(
l
m
=
r
)
(10)
y_i=argmax_{r=\{1,...,K\}}\sum_{m=1}^{M}sign(l_m=r)\tag{10}
yi=argmaxr={1,...,K}m=1∑Msign(lm=r)(10)
其中, M M M表示超像素中像素点数目。 l m l_m lm表示第m个像素的标签值, s i g n ( ∗ ) sign(*) sign(∗)为符号将函数。当 l m = = r l_m==r lm==r时值为1,否则值为0。通过对 K K K类像素进行统计得到超像素的标签。
3.注意力图卷积
利用卷积神经网络对超像素特征提取后,得到图结构数据。由于得到的节点特征是通过卷积层得到的,所以作者去掉了GAT模型中开始的全连接层:
e
i
j
=
a
→
T
(
x
→
i
∣
∣
x
→
j
)
(11)
e_{ij}=\overrightarrow a^{T}(\overrightarrow x_i||\overrightarrow x_j)\tag{11}
eij=aT(xi∣∣xj)(11)
其中,
a
→
T
\overrightarrow a^{T}
aT为注意力相关的训练参数。
注意力权重表达为:
α
i
j
=
s
o
f
t
m
a
x
j
(
e
i
j
)
=
e
x
p
(
L
e
a
k
y
R
e
L
U
(
a
→
T
(
x
→
i
∣
∣
x
→
j
)
)
)
∑
j
∈
N
i
e
x
p
(
L
e
a
k
y
R
e
L
U
(
a
→
T
(
x
→
i
∣
∣
x
→
j
)
)
(12)
\alpha_{ij}=softmax_j(e_{ij})=\frac{exp(LeakyReLU(\overrightarrow a^{T}(\overrightarrow x_i||\overrightarrow x_j)))}{\sum_{j\in N_i}exp(LeakyReLU(\overrightarrow a^{T}(\overrightarrow x_i||\overrightarrow x_j))}\tag{12}
αij=softmaxj(eij)=∑j∈Niexp(LeakyReLU(aT(xi∣∣xj))exp(LeakyReLU(aT(xi∣∣xj)))(12)
在得到注意力权重矩阵
α
\alpha
α后,需要将其进行图结构化的处理,对于第
i
i
i行而言,如果节点
j
j
j不在节点
i
i
i的邻域中,则
α
i
j
=
0
\alpha_{ij}=0
αij=0,并且
α
i
i
=
1
\alpha_{ii}=1
αii=1.
由于图卷积存在信息聚合的过程,会将周围的节点信息汇聚于中心节点,导致各个节点逐渐同化,这也是为什么图卷积无法像传统卷积一样实现深层卷积。
由于图注意力中存在计算节点特征的距离的操作,如果在图卷积之后进行注意力矩阵的计算,会由于图卷积聚合信息的能力,导致节点逐层同化,而使得网络性能下降。所以作者将注意力权重矩阵在进行图卷积之前计算好,并且利用权重矩阵来调整图卷积的邻接矩阵。
A
^
=
D
~
−
1
/
2
A
~
D
~
−
1
/
2
⨀
α
(13)
\hat A=\tilde D^{-1/2}\tilde A \tilde D^{-1/2} \bigodot \alpha\tag{13}
A^=D~−1/2A~D~−1/2⨀α(13)
其中,
A
~
=
A
+
I
,
D
~
=
∑
j
A
~
i
j
\tilde A = A+I, \tilde D=\sum_{j}{\tilde A_{ij}}
A~=A+I,D~=∑jA~ij,
⨀
\bigodot
⨀表示矩阵的逐点相乘。
在构造好邻接矩阵
A
^
\hat A
A^后,就可以直接进行图卷积操作:
Z
l
+
1
=
σ
(
A
^
Z
l
Θ
l
)
(14)
Z^{l+1}=\sigma(\hat AZ^l\Theta ^l)\tag{14}
Zl+1=σ(A^ZlΘl)(14)
其中,
Θ
l
\Theta^l
Θl为图卷积层的训练参数。经过两层这样的图卷积后就可以得到关于节点的分类i结果了,利用多分类的交叉熵损失计算损失进行随机梯度下降更新训练参数:
L
=
−
∑
i
∈
y
∑
f
=
1
F
y
i
(
f
)
l
n
z
→
i
(
f
)
(16)
L=-\sum_{i\in y}\sum_{f=1}^{F}y_i(f)ln\overrightarrow z_i(f)\tag{16}
L=−i∈y∑f=1∑Fyi(f)lnzi(f)(16)
其中, i i i表示第 i i i个节点, y y y表示ground-truth的集合, F F F表示分类数目。
AGCN伪代码如下所示: