0、简介
- 论文题目:Multi-Label Image Recognition with Graph Convolutional Networks
- 下载链接:https://openaccess.thecvf.com/content_CVPR_2019/papers/Chen_Multi-Label_Image_Recognition_With_Graph_Convolutional_Networks_CVPR_2019_paper.pdf
- 会议:CVPR2019
1、motivation
本文的任务是图像的多标签分类。本文将数据集的label构图,使用GCN学习每个label对应的特征(文中用classifier表示),然后将学习到的特征用于多标签分类。
这篇论文的motivation其实就是将图像的多标签分类和GCN结合,这篇论文19年发表的,现在已经有150多的引用,所以应该是一篇比较早的将两者结合的论文。
2、model
本文的模型图如上所示
(1)Image representation learning
这一部分提取图像整体的特征,用的方法也很常规,ResNet提取图像的特征。经过池化后得到了图像的整体特征 x x x
(2)GCN based classifier learning
GCN部分中,作者将label的文字的embedding当做了节点的初始表示,然后构造图的邻接矩阵,使用GCN,经过多层的迭代,学习节点的表示 W W W(这里不得不吐槽一下作者的公式使用,图像的特征用 x x x,节点的特征用 W W W,可能是CV领域和NLP领域公式使用有差别吧)
将
w
w
w和
W
W
W点击就得到了每个标签的预测分数,用该预测分数和真实标签求loss。公式如下所示:
通过最小化loss,就可以优化参数,学习模型了。
(3)构建GCN的邻接矩阵
本文构建邻接矩阵的时候使用了 节点之间的条件概率。比如说,邻接矩阵 A A A中元素 P i j P_{ij} Pij的值就是 P ( L i ∣ L j ) P(L_{i}|L_{j}) P(Li∣Lj),表示数据集中label L j L_{j} Lj出现的条件下label L i L_{i} Li出现的概率。计算这个概率的时候,使用label L i L_{i} Li和label L j L_{j} Lj在数据集中同时出现的次数除以label L j L_{j} Lj出现的次数即可。这种方法构造的邻接矩阵是非对称矩阵。
但是,用上述方法构造邻接矩阵有两个缺点。第一,对于长尾的label,由于存在数量较少,计算得到的概率值会含有噪音。第二,训练集合测试集存在分布不一致的情况,使用训练集构造邻接矩阵,在测试集上测试的时候会影响效果。为了解决这两问题,本文将上一步得到的邻接矩阵转化为01矩阵,转化公式如下所示
选定一个阈值,当大于这个阈值,邻接矩阵的值就为1,小于这个阈值,邻接矩阵的值就为0。
将邻接矩阵转换为01矩阵后还存在一个问题,就是over-smoothing的问题。因为GCN本质上就是在不停的聚合邻居信息,当迭代次数增加,节点的特征会出现over-smoothing问题,每个节点的特征会趋于相同,就不能很好的区分不同的节点表示了。
本文提出re-weight的方法解决over-smoothing的问题,re-weight的公式如下所示:
为什么这样做就可以避免over-smoothing呢。使用01矩阵做邻接矩阵的时候,节点聚合邻居信息的时候,邻居节点对应的权重都是1。进行re-weight后,每个节点聚合邻居信息的时候,邻居节点对应的权重都不一样,这样就有效避免了over-smoothing的问题。
3、我的想法
这篇论文将GCN和图像的多标签分类结合在一起,并且研究了不同邻接矩阵对分类效果的影响。