ICCV 2019 论文标题:Learning Semantic-Specific Graph Representation for Multi-Label Image Recognition 论文地址:https://arxiv.org/abs/1908.07325 代码地址:https://github.com/HCPLab-SYSU/SSGRL
简介
本文将GNN应用于Multi-Label Image Recognition任务,提出了一种Semantic-Specific Graph Representation Learning模型,简称SSGRL。SSGRL由两个核心模块组成:1.semantic decoupling module结合了词嵌入,利用category的语义计算attention map,为每个category生成其semantic-specific representation。2.semantic interaction module以category为node,以label co-occurrence的统计信息为邻接权重,构建graph。通过GNN的聚合更新提取node间的语义交互信息。在attention+GNN的作用下,SSGRL能充分提取图像的高级语义特征,因此在VOC2007&2012和COCO数据集上均达到目前最优的效果。
SSGRL Framework
SSGRL模型的结构并不复杂,且设计十分优美,图1是其整体的结构,图2是细节结构:
从图中我们可以看到,SSGRL首先在图像feature map的基础上,对每一个category生成了一个attention map,有点弱目标检测的意思。接着以category为node,构建graph。然后利用GNN处理graph,最后对每个node进行二分类,判断图像中是否存在该node所表示的category。下面详细介绍:
Semantic Decoupling
图中生成attention map的部分就是semantic decoupling module。这个模块的作用是为每一个category都生成其对应的attention map,然后用attention map对图像的feature map加权求和,得到这个category对应的feature。这里生成的attention是spatial的attention,相当于将图像的WHN维feature map看作WH个N维的特征向量,对这WH个特征向量加权求和。公式如下:
其中I是图像,是CNN生成的图像的feature map。
其中是某个category的词嵌入向量,
是该category的
的语义嵌入向量。
然后利用对
的每个位置
生成一个特征向量,去表达该category的semantic-aware region:
其中都是learnable的权重,
表示element-wise的相乘。d2是输出向量的维度。
最后生成attention map:
其中表示c category在wh位置处的attention。
利用得到的attention map对加权求和,就得到了该category对应的semantic-specific representation:
若数据集有C个category,则需要重复计算C个category的representation:,这些representation就是GNN node的初始feature。
Semantic Interaction
这个模块是构建graph,再利用GNN聚合category之间的语义关系。graph的node是所有的category,初始特征就是其semantic-specific representation:
graph的邻接矩阵比较特殊,也是本文中graph结构的创意所在。其邻接权重是两个category在数据集中同时出现的概率:,例如a0(C-1)表示在0号category出现的情况下,(C-1)同时出现的概率。需要注意的是,a0(C-1)与a(C-1)0是不同的。也就是说这个邻接矩阵不是对称矩阵。
有了node和edge,再用以下公式计算message:
其中表示在step t,对于node c的message。再注意一下,因为邻接矩阵不对称,因此上式有两项。[ , ]应该表示concat。(作者好像把
的下标标错了,应该是c’才合理)。
SSGRL利用GRU单元更新node特征:
最后经过T step (T=3)迭代,将与
concat起来,作为node的最终feature,用于得到二分类score:
这里的函数对于不同的category是不共享的,即每个category都有其自己的
。
和
在实验中都是全连接层,其中
有tanh激活,
没有激活函数。
以上就是SSGRL模型的全部结构,对于每一处特征向量的具体维度,作者在原文中有详细说明,也有开源代码可以查看。补充一下loss函数,就是很典型的sigmoid cross entropy。但需要注意的是,这种multi-label的问题一般会使用sigmoid cross entropy,而不是softmax cross entropy,要区分清楚。
Experiments
作者在常用的VOC2017&2012和COCO数据集上做了实验。重点看一下图4,是对文中attention的可视化。可以看到这个结合了词嵌入的attention模块有点目标检测的意思。
总结
本文SSGRL的两个模块semantic decoupling module和semantic interaction module都结构简单,易于理解,也不乏创新之处。其中结合词嵌入生成attention map和概率统计构建邻接矩阵个人认为是两个亮点,不得不服作者的脑洞。另外作者提供了开源代码,值得深入阅读一下!