Loading [MathJax]/jax/output/CommonHTML/autoload/multiline.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >登上更高峰!颜水成、程明明团队开源ViP,引入三维信息编码机制,无需卷积与注意力

登上更高峰!颜水成、程明明团队开源ViP,引入三维信息编码机制,无需卷积与注意力

作者头像
AIWalker
发布于 2021-07-05 10:34:02
发布于 2021-07-05 10:34:02
50100
代码可运行
举报
文章被收录于专栏:AIWalkerAIWalker
运行总次数:0
代码可运行

作者丨Happy 审稿丨邓富城 编辑丨极市平台

极市导读

本文从位置信息编码出发,引入了高-宽-通道三维信息编码机制。为进一步校正不同分支的作用,提出了加权融合方式。ViP在ImageNet上取得了83.2%的top1精度,代码已开源。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

标题&作者团队

paper: https://arxiv.org/abs/2106.12368

code: https://github.com/Andrew-Qibin/VisionPermutator

本文是颜水成与程明明团队在MLP架构方面的一次探索,从位置信息编码出发,引入了高-宽-通道三维信息编码机制;为进一步校正不同分支的作用,提出了加权融合方式(即注意力机制)。该文的思路与一作之前的“TripletAttention”非常相似,区别在于前者作用于CNN,而后者作用于MLP架构。Whatever,ViP将类MLP架构的性能进一步向上推了一把,使其具有与CNN、Transformer相当的竞争力。

Abstract

本文提出一种概念简单、数据高效的类MLP架构Vision Permutator(ViP)用于视觉识别任务。通过对2D特征表达所携带的位置信息重要性的认知,ViP采用线性投影方式沿高与宽维度编码特征表达。这使的ViP能够沿单一空间维度捕获长距离依赖关系,同时沿另一个方向保持精确的位置信息,然后通过相互补充聚合方式产生位置敏感输出,进而形成关于目标区域的强有力表征。

作者通过实验表明:ViP具有与CNN、Transformer相当的竞争力。无需空域卷积或者注意力机制,无需额外大尺度训练数据,仅需25M可学习参数,ViP在ImageNet上取得了81.5%的top1精度,这比大部分CNN与Transformer都要优秀。当把模型参数提升到88M,模型精度可以进一步提升到83.2%。作者期望该工作能促进社区重新思考空间信息的编码并辅助类MLP方法的设计。

Method

上图给出了本文所提ViP整体架构示意图,ViP以

224×224

的图像作为输入,并将其均匀的拆分为图像块(

14×14 or 7×7

)序列。所有图像块将采用共享线性层将输入映射为线性嵌入(也称之为词);接下来,我们将所有词送入到Permutators序列以编码空间、通道信息。所得词最后沿空间维度进行全局池化,后接线性分类层进行类别预测。

Permutator

在前面Figure1的左上角,我们可以看到所提Permutator模块的示意图。我们可以看到:除了LayerNorms与跳过连接外,Permutator包含两个成分(1) Permute-MLP用于编码空间信息(2)Channel-MLP用于编码通道信息。其中,Channel-MLP具有与ViT中的前馈层类似的架构,包含两个全连接层并内置GELU激活;对于Permute-MLP,本文提出沿着高与宽维度分别处理词。从数学公式来看,给定C维词

XRH×W×C

,Permutator的公式定义如下:

Permute-MLP 上图给出了Permute-MLP的结构示意图,它包含三个分支,每个分支用于编码不同的信息:高、宽、通道。通道信息的编码比较简单,我们仅需全连接层进行线性投影;重点是如何编码高与宽两个维度的空间信息。

假设隐层维度C维384,输入图像分辨率

。为沿着高维度编码空间信息,我们首先进行高-通道维度置换。给定输入

,我们首先将其沿通道维度拆分为S块

,满足

。此时,块尺寸为

,N=16,

。然后,我们执行一次高-通道置换操作得到

;接下来,我们采用全连接层对期进行高信息混合。为复原原始维度信息,我们需要再执行一次高-通道置换操作并输出

。类似的,对于第二个分支,我们执行与上述类似的宽-通道置换操作并生成

。最后,我们将所有词表达相加送入到新的全连接层中得到Permute-MLP的输出,描述如下:

Weighted Channel-MLP

在上面的公式中,本文采用了简单的加法进行三分支融合。这里,本文通过重校正不同分支的重要性改进Permute-MLP并提出了Weighted Permute-MLP。直接看code吧,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class WeightedPermuteMLP(nn.Module):
    def __init__(self, dim, segment_dim=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.):
        super().__init__()
        self.segment_dim = segment_dim
        self.mlp_c = nn.Linear(dim, dim, bias=qkv_bias)
        self.mlp_h = nn.Linear(dim, dim, bias=qkv_bias)
        self.mlp_w = nn.Linear(dim, dim, bias=qkv_bias)
        self.reweight = Mlp(dim, dim // 4, dim *3)      
        self.proj = nn.Linear(dim, dim)
        self.proj_drop = nn.Dropout(proj_drop)
    def forward(self, x):
        B, H, W, C = x.shape
        S = C // self.segment_dim
        h = x.reshape(B, H, W, self.segment_dim, S).permute(0, 3, 2, 1, 4).reshape(B, self.segment_dim, W, H*S)
        h = self.mlp_h(h).reshape(B, self.segment_dim, W, H, S).permute(0, 3, 2, 1, 4).reshape(B, H, W, C)

        w = x.reshape(B, H, W, self.segment_dim, S).permute(0, 1, 3, 2, 4).reshape(B, H, self.segment_dim, W*S)
        w = self.mlp_w(w).reshape(B, H, self.segment_dim, W, S).permute(0, 1, 3, 2, 4).reshape(B, H, W, C)

        c = self.mlp_c(x)
        
        a = (h + w + c).permute(0, 3, 1, 2).flatten(2).mean(2)
        a = self.reweight(a).reshape(B, C, 3).permute(2, 0, 1).softmax(dim=0).unsqueeze(2).unsqueeze(2)

        x = h * a[0] + w * a[1] + c * a[2]

        x = self.proj(x)
        x = self.proj_drop(x)
        return x
    
class Mlp(nn.Module):
    def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.):
        super().__init__()
        out_features = out_features or in_features
        hidden_features = hidden_features or in_features
        self.fc1 = nn.Linear(in_features, hidden_features)
        self.act = act_layer()
        self.fc2 = nn.Linear(hidden_features, out_features)
        self.drop = nn.Dropout(drop)

    def forward(self, x):
        x = self.fc1(x)
        x = self.act(x)
        x = self.drop(x)
        x = self.fc2(x)
        x = self.drop(x)
        return x

Configurations of ViP

上表给出了不同大小ViP的配置信息,块尺寸越大模型越小。ViP-Small/14与ViP-Small/16仅有一个块嵌入模块后接16个Permutators;而ViP-Small/7、ViP-Medium/7以及ViP-Large/7则具有两个阶段,每个阶段有一个块嵌入模块。

Experiments

上表给出了近期类MLP方法的性能对比,可以看到:

  • 所提ViP-Small/7凭借25M参数取得了81.5%的top1精度,这优于大部分类MLP方法并与83M参数量的最佳gMLP-B具有相当精度;
  • 所提ViP-Medium/7则凭借55M参数取得了82.7%top1精度,超越其他所有类MLP方案;
  • 所提ViP-Large/7则凭借88M参数将模型性能进一步提升到了83.2%。

本文认为:上述性能提升的主要因素在于空间信息的编码方式。ViP的这种分离编码方式可以生成精确的位置敏感输出;此外,ViP不仅在粗粒度词表达上进行编码,还在更细粒度词上进行编码。

上表对比了所提方法与经典CNN、Transformer等方法的性能对比,从中可以看到:

  • ViP-Small/7取得了81.5.%的top1精度,优于ResNeSt的81.1%;
  • 相比DeiT、T2T-ViT以及Swin,所提ViP具有更佳性能;

尽管如此,所提ViP距离最优秀的CNN、Transformer仍存在性能差距,比如NFNet的86.5%、LV-ViT的86.4%以及CaiT的86.5%。本文认为:类似于Vision Transformer方向,类MLP方法仍有很大的改进空间

Ablation Study

接下来,我们将从不同角度对所提ViP进行消融实验分析。

上表对比了细粒度词表达编码的重要性能,可以看到:

  • 更小的初始开尺寸有助于提升模型性能;
  • 细粒度词表达编码有助于提升模型性能,但同时降低了模型效率

上表对比了模型缩放的作用,可以看到:提升模型的层数、隐层维度可以得到更佳的性能

上表对比了数据增强的有效性,可以看到:类似数据增广对于CNN与Transformer的作用,数据增广对于ViP同样非常重要

上表对Permutator进行了消融分析,可以看到:

  • 无论是高信息编码移除还是宽信息编码移除均会造成性能显著下降;
  • Weighted Permute-MLP可以将朴素Permute-MLP的性能从80.2%提升到80.6%。

本文亮点总结

1. 通过对2D特征表达所携带的位置信息重要性的认知,ViP采用线性投影方式沿高与宽维度编码特征表达。

2. ViP具有与CNN、Transformer相当的竞争力:无需空域卷积或者注意力机制,无需额外大尺度训练数据,仅需25M可学习参数,ViP在ImageNet上取得了81.5%的top1精度。当把模型参数提升到88M,模型精度可以进一步提升到83.2%。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AIWalker 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析
https://github.com/open-mmlab/awesome-vit
OpenMMLab 官方账号
2022/02/28
2.9K0
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析
【图像分类】Vision Transformer理论解读+实践测试
Vision Transformer是2021年谷歌在ICLR上提出的算法,算法原理并不复杂,但是其价值是开创性的。它首次将NLP领域火热的Transformer模型架构移植到了CV领域,打破了这两个领域壁垒,并取得不错的成效。
zstar
2022/09/20
2.9K0
【图像分类】Vision Transformer理论解读+实践测试
解析 Token to Token Vision Transformer
Vision Transformer!的提出让我们看到了Transformer模型在图像方向的潜力,但其有一些缺点,如需要超大型数据集(JFT)预训练,才能达到现在CNN的精度。本文分析了ViT的一些不合理之处:
BBuf
2021/03/11
7.6K0
STF-顶会图像压缩方法
随着视觉应用的日益增多,图像压缩已经成为图像处理领域的一个重要研究课题。传统的图像压缩方法,如JPEG、JPEG2000等,主要依赖于手工设计的规则,虽然这些方法在一定程度上解决了图像存储和传输的问题,但在处理复杂纹理和细节方面存在局限性。近年来,基于卷积神经网络(CNN)的学习型图像压缩方法展示了优越的率失真性能。然而,CNN在捕捉局部冗余和非重复纹理方面仍存在不足,这限制了图像重建质量的进一步提升。
Srlua
2024/12/20
1280
STF-顶会图像压缩方法
CvT: 如何将卷积的优势融入Transformer
与之前BoTNet不同,CvT虽然题目中有卷积的字样,但是实际总体来说依然是以Transformer Block为主的,在Token的处理方面引入了卷积,从而为模型带来的局部性。最终CvT最高拿下了87.7%的Top1准确率。
BBuf
2022/01/27
9350
CvT: 如何将卷积的优势融入Transformer
可视化VIT中的注意力
来源:DeepHub IMBA 本文约4000字,建议阅读8分钟 本文为你介绍ViT模型。 2022年, Vision Transformer (ViT)成为卷积神经网络(cnn)的有力竞争对手,
数据派THU
2023/04/18
1.1K0
可视化VIT中的注意力
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
本文证明了蒙面自动编码器(MAE)是一种可扩展的计算机视觉自监督学习器。我们的MAE方法很简单:我们屏蔽输入图像的随机补丁并重建丢失的像素。
机器学习炼丹术
2021/12/06
1.3K0
preprint版本 | 何凯明大神新作MAE | CVPR2022最佳论文候选
Tansformer | 详细解读:如何在CNN模型中插入Transformer后速度不变精度剧增?
本文工作解决了Multi-Head Self-Attention(MHSA)中由于计算/空间复杂度高而导致的vision transformer效率低的缺陷。为此,作者提出了分层的MHSA(H-MHSA),其表示以分层的方式计算。
集智书童公众号
2021/07/07
5.8K0
带掩码的自编码器MAE详解和Pytorch代码实现
监督学习是训练机器学习模型的传统方法,它在训练时每一个观察到的数据都需要有标注好的标签。如果我们有一种训练机器学习模型的方法不需要收集标签,会怎么样?如果我们从收集的相同数据中提取标签呢?这种类型的学
deephub
2021/12/15
3.7K0
带掩码的自编码器MAE详解和Pytorch代码实现
YoloV8改进策略:注意力改进|引入DeBiLevelRoutingAttention注意力模块(全网首发)
在计算机视觉领域,目标检测任务的性能提升一直是研究热点。我们基于对YoloV8模型的深入理解,创新性地引入了DeBiLevelRoutingAttention(简称DBRA)注意力模块,旨在进一步增强模型的特征提取能力和目标检测精度。
AI浩
2024/10/22
7600
YoloV8改进策略:注意力改进|引入DeBiLevelRoutingAttention注意力模块(全网首发)
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
基于Transformer的体系结构在自然语言处理(NLP)领域取得了巨大的成功。受Transformer在语言领域的巨大成功的启发,Vision Transformer被提出,并在ImageNet数据集上取得了优秀的性能。Vision Transformer就像NLP中的word token一样,将图像分割成patches并输入Transformer之中,并通过Transformer的几个multi-head self-attention层来建立远程依赖关系。
集智书童公众号
2022/02/11
9620
MoA-Transformer | Swin-Transformer应该如何更好地引入全局信息?
金字塔ViT | 华为提出使用金字塔结构改进Transformer,涨点明显(Pytorch逐行解读)
新的“PyramidTNT”通过建立层次表示,显著地改进了原来的TNT。PyramidTNT相较于之前最先进的Vision Transformer具有更好的性能,如Swin-Transformer。
集智书童公众号
2022/02/10
1K0
金字塔ViT | 华为提出使用金字塔结构改进Transformer,涨点明显(Pytorch逐行解读)
【YOLOv8】YOLOv8改进系列(8)----替换主干网络之Swin Transformer
论文介绍了一种新的视觉Transformer模型——Swin Transformer,它旨在成为计算机视觉领域的通用骨干网络。Swin Transformer通过其独特的层次化结构和移位窗口(Shifted Windows)机制,解决了传统Transformer在视觉任务中的计算复杂度问题,并在图像分类、目标检测和语义分割等多个任务中取得了优异的性能。
HABuo
2025/03/19
2310
【YOLOv8】YOLOv8改进系列(8)----替换主干网络之Swin Transformer
图像恢复SwinIR: Image Restoration Using Swin Transformer
在图像超分辨率、图像去噪、压缩等图像修复(Image restoration)任务中,卷积神经网络目前仍然是主流。但是卷积神经网络有以下两个缺点:
JOYCE_Leo16
2024/03/19
1.2K0
图像恢复SwinIR: Image Restoration Using Swin Transformer
OutLook Attention:具有局部信息感知能力的ViT
近段时间,Transformer-based模型在Visual Recognition领域取得了非常大的进展。但是如果不借助额外的训练数据,Transformer-based模型离CNN-based模型还是具有一定的差距(NFNet-F5(CNN-based):86.8%,CaiT(Transformer-based):86.5%)。作者认为,这是因为token embedding并没有进行细粒度特征表示,因此本文提出了一种新的Attention方式,通过局部信息的感知,能够获得更加细粒度的特征表示。
BBuf
2021/07/23
7420
YOLOv8改进:全网原创首发 | 多尺度空洞注意力(MSDA) | 中科院一区顶刊 DilateFormer 2023.9
本文全网首发独家改进:多尺度空洞注意力(MSDA)采用多头的设计,在不同的头部使用不同的空洞率执行滑动窗口膨胀注意力(SWDA),全网独家首发,创新力度十足,适合科研
AI小怪兽
2023/10/20
2.2K0
CNN、Transformer、MLP架构的经验性分析
ViT的兴起挑战了CNN的地位,随之而来的是MLP系列方法。三种架构各有特点,为了公平地比较几种架构,本文提出了统一化的框架SPACH来对比,得到了具有一定insight的结论。论文来自微软的A Battle of Network Structures: An Empirical Study of CNN, Transformer, and MLP
BBuf
2021/12/27
1.1K0
CNN、Transformer、MLP架构的经验性分析
FAST-VQA(论文复现)
现实世界视频分辨率的提高对于深度视频质量评估(VQA)在效率与准确性之间提出了一个难题。一方面,保持原始分辨率将导致不可接受的计算成本。另一方面,现有的实践方法,如图像缩放和裁剪,会因为细节和内容的丢失而改变原始视频的质量,因此对质量评估是有害的。通过对人类视觉系统中的时空冗余以及视觉编码理论的研究,我们观察到,一个邻域周围的质量信息通常是相似的,这促使我们研究一种有效的、对质量敏感的邻域表征方案用于VQA。在这项工作中,我们提出了一种统一的方案,即时空网格小立方体采样(St-GMS),以获得一种新型样本,我们称之为片段。首先将全分辨率视频按照预设的时空网格划分为小型立方体,然后对齐时间上的质量代表进行采样,以组成用于VQA的片段。此外,我们设计了一个专门为片段量身定制的网络架构,即片段注意力网络(FANet)。利用片段和FANet,所提出的效率端到端的FAST-VQA和FasterVQA在所有VQA基准测试上的性能显著优于现有方法,同时仅需要1/1612的FLOPs,相较于当前最先进技术大幅降低。
Srlua
2024/11/30
1550
FAST-VQA(论文复现)
YoloV8改进策略:注意力改进|VOLO,视觉识别中的视觉展望器|即插即用|附代码+改进方法
本文参考的是《VOLO:视觉识别中的视觉展望器》一文,该论文主要讨论了视觉识别领域中卷积神经网络(CNNs)与视觉转换器(ViTs)的性能对比,并提出了一个新的模型架构——Vision Outlooker(VOLO)。VOLO通过引入一种新颖的前景注意力机制(Outlook Attention),在ImageNet分类任务上实现了卓越的性能,且能够很好地迁移到下游任务,如语义分割。
AI浩
2024/11/13
1.2K0
YoloV8改进策略:注意力改进|VOLO,视觉识别中的视觉展望器|即插即用|附代码+改进方法
YOLOv8优化策略:全新的聚焦线性注意力模块(Focused Linear Attention)| ICCV2023 FLatten Transforme
本文独家改进:全新的聚焦线性注意力模块(Focused Linear Attention),既高效又具有很强的模型表达能力,解决视觉Transformer计算量过大的问题,最终引入到YOLOv8,做到二次创新;
AI小怪兽
2023/11/10
8660
推荐阅读
相关推荐
Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验