《Multi-Label Image Recognition with Graph Convolutional Networks》论文理解

0.动机

多标签图像识别的两个重要问题:
(1)如何有效获取目标标签之间的相关性?
(2)如何利用这些标签相关性提升分类表现?
作者使用图(graph)来对标签之间的相互依赖关系进行建模,来灵活地获取标签空间中的拓扑结构:
(1)由于从词嵌入向量到分类器的映射参数在所有类别中是共享的,所以学习到的分类器能够在词嵌入空间中(语义相关的概念在词嵌入空间中彼此临近)保留较弱的语义结构。与此同时,对于可以对标签依赖性进行隐式建模的分类器函数,所有分类器的梯度都会对它产生影响。
(2)基于标签的共现模式,设计了一个全新的标签相关系数矩阵,可显式地用 GCN建模标签相关性,让节点的特征在更新时也能从相关联的节点(标签)聚集信息。

1.ML-GCN框架

ML-GCN模型利用CNN对整幅图像进行卷积操作,经过全局最大池化,得到图像层次的特征;同时以每个类别的词向量作为节点特征,以类别的相关系数矩阵作为邻接矩阵,送入GCN网络,得到基于图的分类器(标签之间具有依赖关系的分类器);将CNN得到的图像层次特征送入分类器,最后得到图像的多标签。
《Multi-Label Image Recognition with Graph Convolutional Networks》论文理解_第1张图片

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} xRD为图像特征。

3.相关系数矩阵

论文中的相关系数矩阵就是图卷积中需要的邻接矩阵,但是在多标签图像分类任务中并没有提供该矩阵,需要自己设计。论文中以条件概率的形式定义该矩阵。
将训练集的的标签进行统计,得到矩阵 M ∈ R C × C M\in R^{C\times C} MRC×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(ij)=P(ji)。如下图所示:
《Multi-Label Image Recognition with Graph Convolutional Networks》论文理解_第2张图片
在使用 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=iCAij1pi=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} WRC×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=1Cyclog(σ(y^c))+(1yc)log(1σ(y^c))(8)

其中, σ ( ∗ ) \sigma(*) σ()表示sigmoid激活函数。

你可能感兴趣的:(《Multi-Label Image Recognition with Graph Convolutional Networks》论文理解)