国际惯例:
论文地址https://arxiv.org/pdf/2206.00272.pdfgit地址https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/vig_pytorch 相较于之前将GNN和CNN结合的图像处理算法,ViG创新的将GNN直接用在了特征提取上。不再需要借用CNN提取的特征来构造图结构,这一点和ViT有异曲同工之妙。关于ViT可以参见:
[自注意力神经网络]Transfomer架构https://blog.csdn.net/weixin_37878740/article/details/129343613?spm=1001.2014.3001.5501 中的第三节ViT部分,很巧合的是两者连思路都很相似。
ViG由两个模块组成
①Grapher模块:采用图卷积实现图信息的聚合和更新
②FFN模块:采用两个全连接层实现节点特征的变换
对于图像任务而言,CNN仅能通过空间位置对像素点/patch进行排序,而在Transformer中,网格结构转换为了序列结构,这种方法显然不够灵活;而在GNN中,节点可以随意连接,并不受到于局部空间结构的约束。
以图结构来表述图像有以下好处:
①图是一种广义的数据结构,网格结构和序列结构均可被视为一种特殊的图,故图具有更好的泛化能力。
②图像中的物体不一定是规则的矩形,图用来建模拥有更好的表达能力
③对象可以视为部分的组合(图结构能更好的表述这种联系)
但是用图来构建图结构也势必存在一些问题,其中最显著的就是巨大的数据量,如果将每个像素点视为一个节点,将会为图结构带来海量的节点和连接。在论文中,图像会被分成若干个patch,这些patch将被用于后续的图结构构建。
① 将一张的图像划分为N个patch;
②将每个patch转换为特征向量,组合后得到特征向量矩阵;
这些特征向量可以被视为一组无序节点,记作;
③对于每个节点,找到其K个最近的邻居,这些邻居的集合记作,并为整个集合中的邻居节点添加由到的边;
④最终,由节点集和边集可以得到图结构
用以聚合来自邻居节点的特征来实现节点间信息的交换,对象为上面的图。
,式中的和均为可学习的权重。
将这个操作细化到节点级,可以表述为:
,式中为节点的邻居节点集,
函数g( )则是最大卷积:
函数h( )则表述为:
又由于这个过程中偏置是省略的,故整个公式也能写作:
将聚合特征分成h个head()然后用不同的权重更新这些head;所有head均进行更新,并将最后得到的值连接在一起。多头更新允许模型在多个表示子空间更新信息,有利于特征的多样性。
多个图卷积层的GCN会出现过渡平滑的现象从而导致视觉性能(由多样性下降导致)下降,为了缓和这个问题,ViG中引入了更多的特征变换和非线性激活。
对于这种添加了非线性激活的GCN,本文称之为Grapher模块。对于输入,Grapher模块可以表述为:,式中激活函数一般采用ReLu或者GReLu,且偏置一般被省略。
FFN网络为一个多层感知机,由两个全连层接构成。可以记作:
,式中为两个全连接层的权重,,偏置项通常省略。在ViG网络中,每个全连接层和图卷积层都会在后面跟一个批量归一化。
ViG具有两种架构,各向同性结构(isotropic architecture)(类似于ViT)和金字塔结构(pyramid architecture)(类似于ResNet)。
整个网络拥有相同的大小和性状,本文构建了3中模型大小不同的网络,分别是ViG-Ti、ViG-S和ViG-B。节点数量N=196,邻居节点数k从9到18个不等(用于扩大感受野),head数h设为4,性能和尺寸如下:
金字塔结构可以随着层数的叠加来获取更多多尺度特征,本文设计了四种金字塔结构的ViG,详见下表
表中,D表特征尺寸,E表FFN中隐藏维数之比,K表GCN的感受野,HxW表图像大小
位置编码:为了给每个节点添加位置信息,通过下面的式子向节点特征中添加编码向量:,节点 i 和节点 j 之间的相对距离会被添加到构造图的特征距离中(参照ViT)。
可以在图中清晰的看到,在浅层中,邻居节点倾向于基于低级和局部特征(诸如颜色和纹理)来选择。在深层,中心节点的邻居更语义,属于同一类别。