深蓝学院-GNN课程笔记09-计算机视觉中的图神经网络
这个系列是深蓝学院图深度学习理论与实践的同步课程笔记。课程内容涉及图深度学习的基础理论与应用,本节主要介绍图神经网络在计算机视觉中的应用。
除了自然语言处理之外,图结构数据同样广泛存在于计算机视觉(computer vision, CV)领域的各种任务中。因此我们可以使用图神经网络来提升其它方法的性能。
视觉问答
视觉问答(visual question answering, VQA)的目标是利用给定的图像来回答问题。在现有的框架中VQA一般需要使用CNN来学习图像的整体表示,然后与问题相结合来完成分类。显然除了图像的整体信息,图像中物体之间的关系对于正确回答问题也十分重要。为了更好地捕捉图像中不同物体之间的语义和空间信息,我们可以使用GNN来对它们进行建模,进而提升VQA任务的正确率。
使用GNN对VQA进行建模前我们首先需要利用CNN来获得图像中物体的向量表示,同时利用RNN来获得问题的向量表示。然后将这些向量表示拼接起来,并通过一个MLP来融合物体和问题的信息。为了使用这些信息我们还需要将它们转换成一张图,最后通过图滤波获得全图的向量表示并完成分类问题。
显然图的结构对于整个VQA问题有重要的影响。为了构造出图的结构我们可以把图像中每个物体看做图上的一个节点,节点向量为物体框中卷积映射的平均值。接下来我们把每一对节点相互连接,得到一个全连接图,每条边的强度取决于物体图像特征的相似度以及不同物体之间的相对空间位置关系。
基于骨架的动作识别
动作识别的目的是从视频中识别人体的动作。显然人体骨架具有天然的图结构,因此我们可以利用骨架信息来构造GNN。
需要注意的是我们不仅需要在空间上构造骨架,还需要在时间上把骨架的同一节点连接起来。这样构造出的图结构就融合了空间和时间上的信息,从而可以更好地完成识别任务。
图像分类
图像分类(image classification)是计算机视觉中的基本任务,对于给定的图像我们希望模型可以识别出它正确的类别。图像识别的基本方法是使用CNN来提取图像特征,然后通过线性分类器和Softmax函数计算图像属于正确类别的概率,最后选择概率最大的类别作为图像的类别。
零样本分类
在训练数据充分的情况下使用CNN训练的分类器一般都可以取得不错的性能,但在某些情况下直接使用CNN则会出现一些问题。比如说如果某个类别根本不存在训练数据,那么无论如何设计和训练CNN都不可能对这个类别进行分类,这样的问题称为零样本分类问题。
我们可以使用GNN来帮助解决零样本分类的问题。尽管没有这些类别的训练数据,但我们可以基于语义描述来构造零样本类别和其他类别之间的图,并利用这个图来训练零样本类别的分类器。具体来说,我们首先需要获得不同类别的语义嵌入并结合知识图谱来构造出描述不同类别之间关系的图,这样就可以利用GNN来获得所有类别的分类器(分类系数矩阵)。对于有充足样本的类,我们可以把CNN最后的系数矩阵作为GNN训练时的ground truth,这样就可以通过监督学习的方法来训练GNN,从而获得零样本类别的分类器。
少样本分类
少样本分类问题与零样本分类非常相似,此时对于某些类别训练数据中只有非常少的\(k\)张图片,如果直接使用CNN来进行训练的话在这些类别上的分类性能一般都会很差。因此我们需要使用GNN来提升这些类别上的分类性能。
我们可以使用零样本分类中的策略来训练GNN。不过此时我们可以直接训练分类器而不是使用语义嵌入:首先对于每个类别可以都采样出\(k\)个样本训练一个弱分类器,然后结合知识图谱来设计训练GNN模型。对于有充足样本的类,我们使用CNN中的最后一层作为ground truth来进行监督学习,这样训练出的分类器作为所有类别最后使用的分类器。
多标签分类
多标签分类是图像分类的一个常见问题。在很多情况下我们很难使用单一的类别标签来描述整张图片,因此需要为它赋予多个类别。而现实中的图片中图像上的不同物体之间往往会存在相互依赖的关系,这样我们就可以利用GNN来提升多标签分类的性能。
在多标签分类中首先需要使用CNN来获取图像的全局信息,而对于不同类别之间的相互关系则可以使用GNN来进行建模。这样我们就得到了图像特征以及不同类别之间关系的节点嵌入,然后将它们进行内积来计算不同类别上的得分,最后在每个类别上单独使用sigmoid函数来计算分类概率。
点云学习
除了二维图像外,GNN也可以提升点云数据上各种任务的性能。对于点云这种类型的数据,我们可以利用KNN来构造数据点之间的关系图,然后使用图滤波来更新每个点的表示向量。不断重复这样的过程就可以得到整个点云上的特征。