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

关注公众号,发现CV技术之美

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中有

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值