[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读

国际惯例:

论文地址icon-default.png?t=N2N8https://arxiv.org/pdf/2206.00272.pdfgit地址icon-default.png?t=N2N8https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/vig_pytorch        相较于之前将GNN和CNN结合的图像处理算法,ViG创新的将GNN直接用在了特征提取上。不再需要借用CNN提取的特征来构造图结构,这一点和ViT有异曲同工之妙。关于ViT可以参见:

[自注意力神经网络]Transfomer架构icon-default.png?t=N2N8https://blog.csdn.net/weixin_37878740/article/details/129343613?spm=1001.2014.3001.5501        中的第三节ViT部分,很巧合的是两者连思路都很相似。

一、概述

        ViG由两个模块组成

                ①Grapher模块:采用图卷积实现图信息的聚合和更新

                ②FFN模块:采用两个全连接层实现节点特征的变换

        对于图像任务而言,CNN仅能通过空间位置对像素点/patch进行排序,而在Transformer中,网格结构转换为了序列结构,这种方法显然不够灵活;而在GNN中,节点可以随意连接,并不受到于局部空间结构的约束。

[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读_第1张图片

        以图结构来表述图像有以下好处:

                ①图是一种广义的数据结构,网格结构和序列结构均可被视为一种特殊的图,故图具有更好的泛化能力。

                ②图像中的物体不一定是规则的矩形,图用来建模拥有更好的表达能力

                ③对象可以视为部分的组合(图结构能更好的表述这种联系)

        但是用图来构建图结构也势必存在一些问题,其中最显著的就是巨大的数据量,如果将每个像素点视为一个节点,将会为图结构带来海量的节点和连接。在论文中,图像会被分成若干个patch,这些patch将被用于后续的图结构构建。

二、网络结构

[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读_第2张图片

        1.图像的图结构

                ① 将一张H\times W\times 3的图像划分为N个patch;

                ②将每个patch转换为特征向量x_i\in R^D,组合后得到特征向量矩阵X=[x_1,x_2,...x_N]

这些特征向量可以被视为一组无序节点,记作V=\{v_1,v_2,...v_N\}

                ③对于每个节点v_i,找到其K个最近的邻居,这些邻居的集合记作N(v_i),并为整个集合中的邻居节点v_j添加由v_jv_ie_{ji}

                ④最终,由节点集V和边集\varepsilon可以得到图结构G=(V,\varepsilon )

        2.图卷积

                用以聚合来自邻居节点的特征来实现节点间信息的交换,对象为上面的图G=(V,\varepsilon )

                ①信息汇聚

                        {G}'=F(G,\omega )=Update(Aggregate(G,W_{agg}),W_{update}),式中的W_{agg}W_{update}均为可学习的权重。

                将这个操作细化到节点级,可以表述为:

                        {x_i}'=h(x_i,g(x_i,N(x_i),W_{agg}),W_{update}),式中N(x_i)为节点x_i的邻居节点集,

                        函数g( )则是最大卷积g(.)={x_i}''=[x_i,max(\{x_j-x_i|j\in N(x_i)\})]

                        函数h( )则表述为:        h(.)={x_i}'={x_i}''W_{update}

                又由于这个过程中偏置是省略的,故整个公式也能写作:{X}'=GraphConv(X)

                ②多头更新机制

                        将聚合特征{x_i}''分成h个head(head^1,head^2...head^h)然后用不同的权重更新这些head;所有head均进行更新,并将最后得到的值连接在一起。多头更新允许模型在多个表示子空间更新信息,有利于特征的多样性。

                        {x_i}'=[head^1W^1_{update},head^2W^2_{update},...,head^hW^h_{update}]

        3.ViG模块

                多个图卷积层的GCN会出现过渡平滑的现象从而导致视觉性能(由多样性下降导致)下降,为了缓和这个问题,ViG中引入了更多的特征变换非线性激活

                对于这种添加了非线性激活的GCN,本文称之为Grapher模块。对于输入X\in R^{N \times D},Grapher模块可以表述为:Y=\sigma(GraphConv(XW_{in}))W_{out}+X,式中激活函数\sigma一般采用ReLu或者GReLu,且偏置一般被省略。

        4.FFN网络(前馈网络)

                FFN网络为一个多层感知机,由两个全连层接构成。可以记作:

                        Z=\sigma(YW_1)W_2+Y,式中W_1,W_2为两个全连接层的权重,Z\in R^{N\times D},偏置项通常省略。在ViG网络中,每个全连接层和图卷积层都会在后面跟一个批量归一化

三、网络参数配置

        ViG具有两种架构,各向同性结构(isotropic architecture)(类似于ViT)和金字塔结构(pyramid architecture)(类似于ResNet)。

        1.各向同性结构

                整个网络拥有相同的大小和性状,本文构建了3中模型大小不同的网络,分别是ViG-TiViG-SViG-B。节点数量N=196,邻居节点数k从9到18个不等(用于扩大感受野),head数h设为4,性能和尺寸如下:

[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读_第3张图片

         2.金字塔结构

                金字塔结构可以随着层数的叠加来获取更多多尺度特征,本文设计了四种金字塔结构的ViG,详见下表

[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读_第4张图片

                 表中,D表特征尺寸,E表FFN中隐藏维数之比,K表GCN的感受野,HxW表图像大小

                位置编码:为了给每个节点添加位置信息,通过下面的式子向节点特征中添加编码向量:x_i\leftarrow x_i+e_i,节点 i 和节点 j 之间的相对距离e_i^Te_j会被添加到构造图的特征距离中(参照ViT)。

四、可视化

        可以在图中清晰的看到,在浅层中,邻居节点倾向于基于低级和局部特征(诸如颜色和纹理)来选择。在深层,中心节点的邻居更语义,属于同一类别。

[图神经网络]视觉图神经网络ViG(Vision GNN)--论文阅读_第5张图片

 

你可能感兴趣的:(神经网络,学习笔记,神经网络,深度学习,pytorch)