Press "Enter" to skip to content

给图像特征提取开个“ViP”是什幺效果?字节&牛津提出视觉解析器,全面超越HaloNet!

作者丨小马

写在前面

 

人类视觉系统能够从场景中捕获part-whole(部分-整体)的信息。在part信息方面,人类视觉系统能够将场景中的人、动物、水果、蔬菜等高级语义信息从整张图片中区分出来。在whole信息方面,人类视觉系统能够对图片的全局信息进行建模,进而帮助part信息的理解。但以前的网络结构很少对part信息进行显式的建模,本文作者就提出了一个视觉解析器(Visual Parser,ViP),将视觉特征分为part级别和whole级别。通过显式建模part特征和whole特征,从而提升模型语义建模的能力。

 

作者在三大视觉任务(分类、检测、实例分割)上做了实验,在更少的计算量下,都取得了非常好的性能提升。

 

1. 论文和代码地址

Visual Parser: Representing Part-whole Hierarchies with Transformers

 

论文地址: https://arxiv.org/abs/2107.05790

 

代码地址:https://github.com/kevin-ssy/ViP (暂未开源)

 

2. Motivation

 

在心理学中,有工作证明了人类视觉能够将复杂的场景解析成部分不同的层次,比如从低级像素级别到高级的属性级别。但是目前的神经网络大多都是对全局的特征进行深层次的特征挖掘,因此不具备将特征分为不同层次的能力。但是这种part-whole(部分-整体)的层次结构使神经网络能够直接从图像中捕获属性表示,这可以有效地使得一个单一的网络结构挖掘出图像中不同级别的属性。

 

基于此,作者提出了一种非常简单的part-whole层次结构用于视觉的表示。该网络的结构能够提取两个级别的特征——part和whole。part特征包含了描述视觉输入的最基本的信息(在具体实现中,作者只设置了一部分可学习的向量来代表part的特征);whole特征包含了就是平常神经网络中的特征,用来表示全局信息。

 

因为part特征表示的是一个高级属性的信息,因此一个part特征向量往往对应whole特征中的多个向量( 如果把一只猫看做是part特征,整张图片看做是whole特征,那幺一只猫往往跟图片中的多个像素对应,所以part到whole的对应往往是“一对多”的关系 )。

 

基于上面part-whole的思想,作者提出了一个Visual Parser(ViP)结构,用于学习视觉特征多层次的part-whole表示,ViP的结构分为两个部分——Encoder和Decoder。Encoder主要用于从全局的信息中提取具有高级语义信息的part特征,Decoder用于将part特征重新融入回全局的特征。为了验证ViT的有效性,作者在分类、检测、分割任务上进行了实验,相比于CNN和Swin Transformer结构,本文提出的ViP都有不错的性能提升。

 

3. 方法

 

3.1. Overview

 

 

ViP的网络结构如上图所示。

 

ViP有两个输入,分别是完整的图片(也就是whole特征)和一系列可学习的参数(也就是part特征)。如果将第i层的part特征和whole特征表示为和,那幺第i层的输入其实就是上一层的part特征和whole特征。在本文中,part特征和whole特征做交互的过程,就是一个Attention的过程。

 

ViP分为Encoder和Decoder,Encoder是根据上一层的part特征和whole特征提取出具有高级语义信息的part特征,Encoder的过程结束后,可以认为part特征已经包含了描述视觉输入的最基本的信息。因此,在Decoder过程中,被编码好的part特征将被传输回whole特征中,这样特征图上的每个像素都可以与更大范围内的信息进行交互。

 

由于part特征中的信息其实是被高度压缩的,因此Decoder中part特征与whole特征之间的交互计算量是远小于直接在whole特征上进行全局交互的。

 

从这个过程中可以看出,虽然ViT的Motivation是能够提取多层次的信息,但是最后模型的输出结果其实还是全局的特征。因此,个人觉得,作者引入part特征,其实有一部分原因还是 为了解决Self-Attention的计算量和输入长度呈平方关系的问题 ,所以作者采用了global和local信息的一个交互,并且由于local信息(也就是文中的part特征)是具备高级的语义特征的,所以从交互范围上还是可以看成是global和global的交互。

 

3.2. Part Encoder

ViP的结构分为Encoder和Decoder两部分,首先我们来看Encoder的部分,结构如上图红框所示。

 

3.2.1. Attention

 

Encoder的负责根据上一层的whole和part特征来提取当前层的part特征。大致的流程和Encoder中的Self-Attention相似,可以表示层下面的公式:

这里的Attention和Transformer中的Self-Attention非常相似。不同的是这里的Q、K、V在用FC 进行embedding之前还进行了LayerNorm操作。和分别代表了进行了相对位置编码和绝对位置编码。

 

具体看Attention的输入,可以看出这里由part特征作为Q,whole特征作为K和V,通过part和whole特征的信息交互,提取具备更加高级属性信息的part特征

 

3.2.2 Reasoning across different parts

 

在根据上一层的part特征和whole特征获取当前层的特征之后,作者还加入了一个part-wise推理模块用来交互part特征之间的信息。实现的方法其实非常简单,就是对part特征LayerNorm之后,再进行一次全连接的操作。( 因为是NxN的矩阵,所以这一步做的是空间上的交互。 )

3.2.3. Activating the part representations

 

上面学习到的part特征可能并不是都有意义,因此在空间交互模块之后,作者又用了一个MLP模块来进行通道信息的交互,进一步做信息的筛选,如下面的公式所示:

3.3. Whole Decoder

Decoder的结构如上图绿框中所示,Decoder的结构可以分为两个模块:一个模块用于part和whole的全局信息交互(如蓝色框所示),另一个模块用于每个patch内局部信息的交互(如紫色框所示)。

 

3.3.1. Part-whole global interaction.

 

首先我们来看part特征和whole特征全局信息的交互,信息交互的结构还是采用了Transformer的Self-Attention结构。

 

首先,用whole特征x作为Q,part特征p作为K和V。因此每个whole特征都可以和part特征进行长距离的信息交互( 由于part特征又是高级语义信息的特征表示,所以这一步可以看做是一个全局的信息交互 )。在信息交互之后,作者又接上了一个MLP结构,可以表示成下面的公式:

3.3.2.  Patch-based local attention

 

上述的Encoder和Decoder结构完成了cross-level的全局信息交互。为了能够进行细粒度的特征提取,作者还在全局的特征上施加了局部注意力。

 

首先,将特征图分为大小为kxk的不重叠的patch,然后在利用Self-Attention在每个patch内进行局部的信息交互,可以表示成下面的公式:

其中是patch的数量,为相对位置编码的参数。

 

3.4.  Architecture Specification

根据上面对ViP结构的定义,作者对网络结构进行了实例化,提出了五种不同参数量和计算量的网络结构。

 

4.实验

 

4.1.  ImageNet分类

从上表可以看出,在ImageNet上 ,ViP结构的性能能够优于SOTA的CNN模型以及token-based的ViT模型。

相比于近期的SOTA模型——HaloNet,本文提出的模型ViP能够在速度和精度上都全面优于HaloNet。

 

4.2. 目标检测、实例分割

在RetinaNet框架中,在计算量更小的情况下,ViP模型的性能依旧可以明显优于ResNe(X)t。

在Cascade Mask RCNN下,ViP-Tiny能够和ResNeXt系列最大的模型性能相当。

 

4.3. Ablation studies

上表展示了不同part数量下,ViP-Ti模型的准确率和计算量。可以看出,part数量越大,Top-1的准确率也越高,但是当N>32时,准确率提升减慢。

从上表可以看出,对于像ViP-Ti和ViP-S这样的小型模型,通过part预特征预测可以使性能显着提升(+0.7%和+0.4%)。然而,当用在ViP-M模型上时,就会发生了过拟合问题,下降了0.6%。

 

4.4.  可视化

可以看出,每个part特征对应的whole特征往往是相同的高级语义信息,可视化结果表明,ViP构建了一个有意义的part-whole层次结构。

 

5. 总结

 

本文构建了一个ViP框架,将视觉特征编码成了part级别的特征和whole级别的特征,通过显式建模part特征来提高模型的语义理解能力,作者在CV三大任务上也做了实验,都取得了不错的效果。

 

从模型结构上看,这篇文章倒也不是特别新奇,整个结构和Transformer基本一样。但是,个人觉得,本文最大的亮点就是 提出了显式的建模part级别的特征 ,因为直接对整张图片进行Self-Attention是非常费计算量的,这样的计算可能存在一定的冗余,因为整张图片的信息可能存在冗余。所以如果能够对图片中的一些高级语义信息进行提取(part特征),然后用高级的语义信息和全局信息做信息交互,就可以大大的节省计算量,提高计算效率。

 

本文亮点总结

 

1. 作者提出了一种非常简单的part-whole层次结构用于视觉的表示。该网络的结构能够提取两个级别的特征——part和whole。part特征包含了描述视觉输入的最基本的信息;whole特征包含了就是平常神经网络中的特征,用来表示全局信息。

 

2. 在RetinaNet框架中,在计算量更小的情况下,ViP模型的性能依旧可以明显优于ResNe(X)t。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注