还在用ViT的16x16 Patch分割方法吗?中科院自动化所提出Deformable Patch-based方法,涨点显著!

2021-09-03 11:07:18 浏览数 (2)

0

写在前面

目前,Transformer在计算机视觉方面取得了巨大的成功,但是如何在图像中更加有效的分割patch仍然是一个问题。现有的方法通常是将图片分成多个固定大小的patch,然后进行embedding,但这可能会破坏图像中的语义。

为了解决这个问题,作者提出了一个可变形的分patch(DePatch)模块,它以数据驱动的方式将图像自适应地分割成具有不同位置和大小的patch,而不是使用预定义的固定patch分割方式。通过这个方法,就可以避免原来方法对语义信息的破坏,很好地保留patch中的语义信息。

DePatch模块可以作为一个即插即用的模块,嵌入到不同的Transformer结构中,以实现端到端训练。作者将DePatch模块嵌入到Pyramid Vision Transformer (PVT)中,得到一个新的Transformer结构,Deformable Patch-based Transformer (DPT) 。

最后作者在分类和检测任务上进行了实验,结果表明,DPT在ImageNet分类上的准确率为81.9%;在MSCOCO数据集上,使用RetinaNet进行目标检测的准确率为43.7% box mAP,使用MaskR-CNN的准确率为44.3%。

1

论文和代码地址

DPT: Deformable Patch-based Transformer for Visual Recognition

论文:https://arxiv.org/abs/2107.14467

代码:https://github.com/CASIA-IVA-Lab/DPT

2

Motivation

近年来,Transformer在自然语言处理和语音识别方面取得了重大进展,逐渐成为序列建模任务的主流方法。受此启发,一些研究者成功地将Transformer应用于计算机视觉领域,并在图像分类、目标检测和语义分割等方面取得了良好的性能。

与NLP任务类似,Transformer通常将输入图像分成一系列固定大小的patch,然后通过Multi-head Self-Attention来建模不同patch之间的上下文关系。与卷积神经网络相比,Transformer可以有效地捕获序列内的长距离依赖关系,提取的特征包含更多的语义信息。

虽然目前Vision Transformer在CV任务中达到了比较不错的效果,但依旧存在一些问题。目前的工作大多都没有考虑图像的内容信息,使用了一个固定大小的patch embedding。这种“hard” patch分割方法可能会带来两个问题:

1)图像中对象的局部结构被拆分 。(一个固定的patch很难捕获完整的与对象相关的局部结构,因为对象在不同的图像中具有不同的尺度。如上图a所示,老鹰的尾巴、头等局部结构都被拆分到了不同patch中)

2)不同图像之间的语义不一致性 。(不同图像中的同一对象可能有不同的几何变化(缩放、旋转等)。分割图像patch的固定方法忽略了这种变化,可能将不同图片中的同一对象处理成不同的信息。)

因此,这些固定的patch分割方法可能会破坏语义信息,从而导致性能下降。

为了解决上述问题,本文提出了一个新的模块(DePatch),以一种可变形的方式对图像进行分割,从而在一个patch中保留语义信息,减少图像分割造成的语义破坏。

具体实现上,DePatch模块能够根据输入的视觉特征,学习每个patch的偏移(offset)和大小(scale),从而生成可变形的patch(如上图b所示)。此外这是一个轻量级的即插即用模块,能够被用于各种Transformer结构中。

在本文,作者将DePatch模块嵌入到了Pyramid Vision Transformer (PVT)中,形成Deformable Patch-based Transformer(DPT)。通过自适应调整的可变形patch,DPT能够基于局部的上下文信息为每个patch生成完整、鲁棒、有辨别性的特征。

3

方法

3.1. 回顾Vision Transformer

Vision Transformer由三部分组成,分别是:patch embedding层、Multi-head Self-Attention(MSA)层和feed-forward multi-layer perceptrons(MLP)层。网络从patch embedding层开始,该模块将输入图像转换为一系列token序列,然后通过MSA和MLP,获得最终的特征表示。

patch embedding层将图像划分为固定大小和位置的patch,然后将他们通过一个线性的embedding层转换到token。我们用一个的张量表示输入的图像特征,先前的工作就是将特征转换到固定大小的N个patch,每个patch的大小为:

然后将这些patch组合就能得到一个序列。

现在我们将分Patch的过程,仔细的展开讲一下,第i个patch可以被看做是一个矩形区域,这个矩形的中心坐标可以表示为:

因为Patch的大小和位置是固定的,所以就能够计算出这个patch左上角和右下角的坐标:

每个patch中有个像素,这些像素的坐标可以表示为:

这些像素点的特征可以表示为:

将这些特征铺平,并由线性层处理,就能够获得当前patch的embedding的表示:

MSA聚合了整个输入序列上的相对信息,给每个token都能有全局感知。首先将这些token embedding到三个不同的空间Q、K、V,然后Q和K相乘得到attention map,再将attention map与V相乘得到新的特征:

3.2. DePatch模块

上面描述的patch embedding过程是固定不变的。位置(、)和大小

0 人点赞