0.动机
多标签图像识别的两个重要问题:
(1)如何有效获取目标标签之间的相关性?
(2)如何利用这些标签相关性提升分类表现?
作者使用图(graph)来对标签之间的相互依赖关系进行建模,来灵活地获取标签空间中的拓扑结构:
(1)由于从词嵌入向量到分类器的映射参数在所有类别中是共享的,所以学习到的分类器能够在词嵌入空间中(语义相关的概念在词嵌入空间中彼此临近)保留较弱的语义结构。与此同时,对于可以对标签依赖性进行隐式建模的分类器函数,所有分类器的梯度都会对它产生影响。
(2)基于标签的共现模式,设计了一个全新的标签相关系数矩阵,可显式地用 GCN建模标签相关性,让节点的特征在更新时也能从相关联的节点(标签)聚集信息。
1.ML-GCN框架
ML-GCN模型利用CNN对整幅图像进行卷积操作,经过全局最大池化,得到图像层次的特征;同时以每个类别的词向量作为节点特征,以类别的相关系数矩阵作为邻接矩阵,送入GCN网络,得到基于图的分类器(标签之间具有依赖关系的分类器);将CNN得到的图像层次特征送入分类器,最后得到图像的多标签。
2.CNN卷积
输入图像为
I
I
I,CNN卷积层的训练参数为
θ
c
n
n
\theta_{cnn}
θcnn,提取图像特征公式化为:
x
=
f
G
M
P
(
f
c
n
n
(
I
,
θ
c
n
n
)
)
(1)
x=f_{GMP}(f_{cnn}(I,\theta_{cnn}))\tag{1}
x=fGMP(fcnn(I,θcnn))(1)
其中, f c n n ( ∗ ) f_{cnn}(*) fcnn(∗)表示卷积网络模拟的函数, f G M P ( ∗ ) f_{GMP}(*) fGMP(∗)表示全局最大池化函数。 x ∈ R D x\in R^{D} x∈RD为图像特征。
3.相关系数矩阵
论文中的相关系数矩阵就是图卷积中需要的邻接矩阵,但是在多标签图像分类任务中并没有提供该矩阵,需要自己设计。论文中以条件概率的形式定义该矩阵。
将训练集的的标签进行统计,得到矩阵
M
∈
R
C
×
C
M\in R^{C\times C}
M∈RC×C,
C
C
C表示分类种数,其中
M
i
j
M_{ij}
Mij表示训练集图片同时出现
i
,
j
i,j
i,j类的图片张数。所以
M
i
j
=
M
j
i
M_{ij}=M_{ji}
Mij=Mji。得到条件概率矩阵
P
P
P为:
P
i
=
M
i
/
N
i
(2)
P_{i}=M_i/N_i\tag2
Pi=Mi/Ni(2)
其中,
N
i
N_i
Ni表示训练集中标签
i
i
i出现的次数。由于
N
i
≠
N
j
N_i\not= N_j
Ni=Nj,使得矩阵不再为实对称矩阵,也就对应着有向图,这个有向图可以理解为条件概率
P
(
i
∣
j
)
≠
P
(
j
∣
i
)
P(i|j)\not= P(j|i)
P(i∣j)=P(j∣i)。如下图所示:
在使用
P
P
P矩阵时,由于存在标签数据的错误以及训练验证分布不同,可能产生过拟合现象,所以作者利用阈值
τ
\tau
τ将矩阵
P
P
P二值化:
A
i
j
=
{
0
P
i
j
<
τ
1
P
i
j
≥
τ
(3)
A_{ij}= \begin{cases} 0&P_{ij}<\tau \\ 1&P_{ij}\geq \tau \\ \end{cases}\tag{3}
Aij={01Pij<τPij≥τ(3)
但是二值化将导致图卷积网络过于光滑(over-smooth),可以理解为:在图卷积操作中,会将一个节点和它邻居的特征向量混合起来,从而在有限步之后所有节点的表示都会收敛到一个相同的值的现象,这同时也会导致梯度消失。这种现象将导致节点特征都近似,无法进行分类。
所以作者将二值化后的矩阵
A
A
A再次变换:
A
i
j
′
=
{
p
/
∑
j
=
1
,
j
≠
i
C
A
i
j
i
≠
j
1
−
p
i
=
j
(4)
A^{'}_{ij}= \begin{cases} p/\sum_{j=1,j\not=i}^{C}A_{ij}&i\not=j\\ 1-p&i=j \end{cases}\tag{4}
Aij′={p/∑j=1,j=iCAij1−pi=ji=j(4)
当 p p p趋近于1时,自身节点的特征将分配低权重,自身节点将不被考虑。当 p p p趋近于0时,邻域节点的信息将被忽略。
4. GCN卷积
图卷积层可以表示为:
H
l
+
1
=
h
(
A
′
^
H
l
W
l
)
(5)
H^{l+1}=h(\hat{A^{'}}H^lW^l)\tag5
Hl+1=h(A′^HlWl)(5)
其中,
A
′
~
=
A
′
+
I
N
,
D
~
i
i
=
∑
j
A
~
i
j
,
A
′
^
=
D
~
−
1
2
A
′
~
D
~
−
1
2
\tilde {A^{'}} = A^{'}+I_{N},\tilde D_{ii}=\sum_{j}\tilde A_{ij},\hat{A^{'}}=\tilde D^{-\frac{1}{2}}\tilde {A^{'}}\tilde D^{-\frac{1}{2}}
A′~=A′+IN,D~ii=∑jA~ij,A′^=D~−21A′~D~−21.
实验中使用了两层图卷积层:
W
=
h
(
A
′
^
(
h
(
A
′
^
H
0
W
0
)
)
W
1
)
(6)
W=h(\hat{A^{'}}(h(\hat{A^{'}}H^0W^0))W^1)\tag6
W=h(A′^(h(A′^H0W0))W1)(6)
其中
W
∈
R
C
×
D
W\in R^{C\times D}
W∈RC×D为GCN部分训练的输出的标签分类器,
h
h
h表示激活函数。
最后,要想得到对多标签的预测结果,只需要将图像特征输入该分类器即可:
y
^
=
W
x
(7)
\hat y=Wx\tag7
y^=Wx(7)
损失函数可以使用传统的多标签分类损失:
L
=
∑
c
=
1
C
y
c
l
o
g
(
σ
(
y
^
c
)
)
+
(
1
−
y
c
)
l
o
g
(
1
−
σ
(
y
^
c
)
)
(8)
L=\sum_{c=1}^C{y^clog(\sigma(\hat y^c))+(1-y^c)log(1-\sigma(\hat y^c))}\tag8
L=c=1∑Cyclog(σ(y^c))+(1−yc)log(1−σ(y^c))(8)
其中, σ ( ∗ ) \sigma(*) σ(∗)表示sigmoid激活函数。