The More You Know Using Knowledge Graphs for Image Classification

ryluo 2020-06-14 01:29:22
论文笔记 > 知识图谱 > 计算机视觉

知识图谱在图像分类中的应用

简单介绍

目前机器识别图像与人识别图像一个很大的区别就是,人可以通过很少的图像的例子结合已有的知识(比如从课本中学到的知识)推理出新图像属于哪一类(对于图像分类任务来说),而机器要想获得比较好的识别效果必须通过大量的标注数据学习图像的特征。人识别图像时对图像的推理一般是利用图像中的各个物体之间的关系,通过现有的知识在自己的认知中去搭建一个新东西得出推理结果。该论文是使用图技术来学习知识图谱进行视觉推理的一个例子。

论文的主要贡献:


相关技术

Gated Graph Sequence Neural Networks(GGNN-ICLR2016)

首先回顾一下GRU模块的内部结构(如下图所示), 主要是由两个门(重置门和更新们)以及一个中间隐藏状态组成。这里将GRU的图放在这里是为了方便后面的对比。

参考学习资料:人人都能看懂的GRU

GGNN模型

GGNN模型借鉴了循环神经网络中的GRU模块来进行更新,具体的更新公式及示意图如下所示:

$x_v^T$: 节点的初始化标注,等价于初始化的隐含状态

$h_v^{(1)}$: 节点的隐含状态, 在这里等价于GRU循环神经网络中的隐藏状态$h^t$(如上图所示)

$a_v^{(t)}$: 图中节点被激活的信息, 在这里与GRU循环神经网络中每个时间步的输入$x^t$(如上图中GRU结构图)是等价的

$z_v^t,r_v^t$: 分别表示更新门和重置门。这两个门的更新过程于GRU的更新过程是一样的。

$W^z,W^r,U^z,U^r,W,U$: 是可学习的权重矩阵,也是模型的参数


GGNN模型的核心思想及注意点:

通过上面的模型更新方式以及图示知道了GGNN模型本质上就是一个GRU模型,但是与GRU不同的地方是输入不同。对于GRU模型是处理序列的问题,所以输入是不同时刻的序列片段或者序列中的元素,但是对于GGNN模型来说,它处理的是图数据, 对于图数据用的比较多的也就是邻接矩阵和各种拉普拉斯矩阵,它不是一个序列, 所以和处理序列模型的GRU是不同的. 在这里将每个时间步的$a_v^T$作为不同时间步的输入, 而不同时间步的$a_v^T$通过临界矩阵$A$更新之后也是在不断变化的.

当然GGNN模型也可以进行序列化的操作,详细的内容可以看原文。

既然GGNN模型与循环神经网络这么类似,那么GGNN模型的参数更新方式自然是和循环神经网络是一样的使用backpropagation through time (BPTT).


GGNN模型的任务是什么?

既然这里说到了GGNN模型,并且介绍了模型的更新方式那最后就顺便了解一下GGNN模型要做的事情是什么,是如何做的.

与正常的图模型类似,主要做的事情分为两个级别,分别是节点级别和图级别,通过如下的方式进行输出:

Node:

Graph:

其中$\sigma(i(h_v^{(T)},x_v))$类似于一个soft注意力机制,它决定了哪些节点与当前图级别的任务相关,$i,j$是两个神经网络,将拼接起来的$h_v^{(T)}$和 $x_v$输出为一个实数向量。

Graph Search Neural Network (GSNN)

再说GSNN之前先说一下使用前面说过的GGNN模型来学习知识图谱进而进行图像分类的问题,既然是基于知识图谱的那么肯定需要进行概念的提取,对于图像来说概念是非常的丰富的,这里的概念可以理解成图像中的物体。也就是说这个知识图谱的节点可能会比较多,构建成图数据之后图数据的相关矩阵维度就会比较大。现在假如知识图谱的邻接矩阵为$N$,根据前面GGNN可以知道在每次的前向传播过程中计算量是$N^2$,假如反向传播的时间步是$T$,则在梯度反向传播时的计算量就是$N^T$,这里用字母表示可能还感觉不到计算量到底有多大,我们假如$N=2000,T=10$,那么反向传播的计算复杂度是$2000^{10}$ ,这个数字就非常的大了,所以直接使用GGNN对知识图谱这种规模比较大的图数据中是不合适的,所以作者是同GSNN来学习知识图谱。

GSNN

通过上面的分析我们知道了,不适用GGNN的原因是,每次在节点传播或者梯度反向传播的过程中都是对图中的所有数据进行的,是个节点数指数级别的计算复杂度,所以GSNN的核心思想就是,每次更新都选择部分节点,并且在更新的过程中会有选择添地加一些对当前输出有用的节点作为候选节点。也就是说我们只使用知识图谱中的一个子集来进行更新.

那么问题来了,如何选择更新的子集呢?主要分为如下两个步骤:

  1. 首先使用在CoCo数据集(总共80类)上预训练好的目标检测模型(faster rcnn),检测出图片中含有的概念,并与这些概念的邻居概念合并起来作为子集初始化图模型的输入,这个子集也被称为激活集(这是对第一层子图的初始化)
  2. 有了初始的概念集合即初始的子图之后, 先进行图传播,再对当前激活集中的所有节点计算重要度,选取重要度前top N个并且之前这些节点的邻居节点都没有被选过的节点作为下一次增加的节点,再通过前向传播,然后继续通过重要度函数,计算当前激活集中节点的重要性,依次这样下去. 这里计算重要度函数是通过一个神经网络进行计算的可以表示为:$i_v^{(t)}=g_i(h_v,x_v)$.下面是GSNN网络的传播及扩展节点加入的过程示意图:

Reorder and Zero-pad

从上面的图中我们可以发现,在经过$T$个周期的传播之后,所有的节点中只有部分节点被加入到激活集。现在需要做的事情是讲所有节点也可以认为是整个graph,转换成向量输入到分类网络中进行分类,这里的做法是使用Reorder and Zero-pad,具体的做法是对于激活集中的节点直接按照特征维度进行展开,然后所有节点进行拼接,对于节点中没有出现在激活集中的节点用0填充,最后形成了一个总的节点数x节点特征维度的一维向量,再将该一维向量输入到分类网络中进行分类。


实验及结果

实验数据:

Visual Genome(VG): 100000张自然图像,均来自于网络,每张图像的标签是(objects, attributes, relationships between objects), 平均每张图像上有21个object,所以相对ImageNet数据集来说更加复杂。并且这个数据集包含了Object-object以及Object-attributes的关系,正好用于GSNN模型。


知识图谱的构建:

WordNet: WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。WordNet是一个覆盖范围宽广的英语词汇语义网.名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。WordNet的描述对象包含compound(复合词)、phrasal verb(短语动词)、collocation(搭配词)、idiomatic phrase(成语)、word(单词),其中word是最基本的单位。Wordnet的词汇结构包括九大类:上下位关系(动词、名词)、蕴含关系(动词)、相似关系(名词)、成员部分关系(名词)、物质部分关系(名词)、部件部分关系(名词)、致使关系(动词)、相关动词关系(动词)、属性关系(形容词)。


直接使用VG数据集中Object-object以及Object-attributes的关系构建知识图谱是没有问题的,但是可能对于图像分类带来的问题是, 对于数据集合中的object或者Attribute可能对于图像的类别不相关,所以作者借助WordNet,添加了一些不是分类类别的语料,但是与分类类别直接相关的语料,也可以看作是一个子图,子节点.并将这些子节点之间的边的关系也引入了进来,最后使得分类性能比较好.


实验结果:

论文中的实验结果有许多,但是下面主要说一下如下这个实验结果。从下面的实验结果可以看出当训练样本比较少的情况下结果还不错,说明GSNN模型对于训练集中从未见过的样本进行很好的预测. 这也就是视觉推理的强大之处,可以利用现有的知识对未知的东西进行推理,从而获取新的信息. 这里现有的知识就是数据集中的Object-object以及Object-attributes的关系.