【论文解读】FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization

1.介绍

 最先进的延迟-精度权衡

在两个广泛使用的平台——移动设备和桌面GPU上的延迟是最快的

1.1 之前存在的问题

由于内存访问成本的增加,跳过连接(skip connections)在延迟方面造成了很大的开销

1.1.1 跳过连接 为什么 会增加内存访问成本?

这主要与以下两个因素有关:

  1. 内存需求:跳过连接会引入额外的特征映射或张量,从而增加了模型内存的使用。每个跳过连接需要存储一定数量的特征映射,这可能导致更多的内存占用。虽然这种增加通常不会显著影响模型的总体内存占用,但在某些情况下可能会有一些额外的内存压力。

  2. 内存访问:在深度神经网络中,计算和存储特征映射需要大量的内存访问。跳过连接增加了需要读取和写入的特征映射数量,这可能会导致内存访问成本的增加。

1.2 FastViT 改进之处

  • 引入了完全可重新参数化的RepMixer来删除跳过连接。
  • 将所有密集的k×k卷积替换为它们的分解版本,即逐通道卷积和逐点卷积。使用了线性训练时间过参数化( linear train-time overparameterization)。这些额外的分支仅在训练期间引入,并在推理时重新参数化。
  • 在早期阶段使用大卷积核来替代自关注层

1.3 前置知识

  • 解耦 训练 和 推理
  • 参数重参数化
  • 使用大核卷积的好处(为什么可以使用大核卷积替代自关注层)

2. FastViT

 (a)解耦训练时间和推理时间架构的FastViT架构概述。阶段1、2和3具有相同的体系结构,并使用RepMixer进行令牌混合。在阶段4中,自关注层用于令牌混合。(b)卷积系统的结构。(c)卷积- ffn的体系结构(d) RepMixer块概述,它在推理时重新参数化跳过连接。

基本内容已经在上图片上了

【论文解读参考】解读模型压缩24:FastViT:快速卷积 Transformer 的混合视觉架构 - 知乎 (zhihu.com)

3.代码

3.1 不同型号 

FastViT 一共有6个型号。

3.2 RepCPE

 在fastvit_sa12,fastvit_sa24,fastvit_sa36,fastvit_ma36等模型中

pos_embs = [None, None, None, partial(RepCPE, spatial_shape=(7, 7))]

在推理时将原先的残差分支去除,只看前向推理函数

#reparam_conv 和 self.pe其实是参数基本相同的卷积
 def forward(self, x: torch.Tensor) -> torch.Tensor:
        if hasattr(self, "reparam_conv"):
            x = self.reparam_conv(x)
            return x
        else:
            x = self.pe(x) + x
            return x

 3.3 basic_blocks

 token_mixer有两种选择,RepMixerBlock和AttentionBlock,一般也只会在最后一个层结构中使用AttentionBlock

3.3.1 RepMixerBlock

 和其他的Mixer结构相似

3.3.1.1 RepMixer

(1)训练结构

 残差结构的实现是通过带分支结构的MobileOneBlock减去不带分支结构的MobileOneBlock实现的

x = x + self.mixer(x) - self.norm(x)
(2)重参数

 重参数的原理和RepVGG相同,不过多赘述了

3.3.1.2 ConvFFN

其实也相对简单,值得一提的是ConvFFN似乎不进行重参数化

 3.4 PatchEmbed

区别一般的,通过一个ReparamLargeKernelConv和一个MobileOneBlock进行映射

ReparamLargeKernelConv来自Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNshttps://openaccess.thecvf.com/content/CVPR2022/papers/Ding_Scaling_Up_Your_Kernels_to_31x31_Revisiting_Large_Kernel_Design_CVPR_2022_paper.pdf

class PatchEmbed(nn.Module):
    """Convolutional patch embedding layer."""

    def __init__(
        self,
        patch_size: int,
        stride: int,
        in_channels: int,
        embed_dim: int,
        inference_mode: bool = False,
    ) -> None:

        super().__init__()
        block = list()
        block.append(
            ReparamLargeKernelConv(
                in_channels=in_channels,
                out_channels=embed_dim,
                kernel_size=patch_size,
                stride=stride,
                groups=in_channels,
                small_kernel=3,
                inference_mode=inference_mode,
            )
        )
        block.append(
            MobileOneBlock(
                in_channels=embed_dim,
                out_channels=embed_dim,
                kernel_size=1,
                stride=1,
                padding=0,
                groups=1,
                inference_mode=inference_mode,
                use_se=False,
                num_conv_branches=1,
            )
        )
        self.proj = nn.Sequential(*block)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = self.proj(x)
        return x

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swin Transformer是一种新型的层次化视觉Transformer模型,它在Vision TransformerViT)的基础上进行了改进,并在多个视觉任务上取得了更好的效果。本文将对Swin Transformer论文进行读,详细介绍其创新点和实验结果。 ## 创新点 Swin Transformer主要有以下三个创新点: ### 1. 层次化注意力 Swin Transformer引入了层次化注意力机制,将图像分成多个块进行处理,每个块内部使用全局自注意力机制,不同块之间使用局部注意力机制。这种层次化的注意力机制可以减少全局自注意力机制的计算量,同时保持局部信息的传递。 ### 2. Shifted Window 传统的ViT使用固定大小的图像块进行处理,而Swin Transformer使用了一种称为Shifted Window的方法,将每个块按照一定的步长进行平移,使得每个块都包含了周边的信息。这种方法可以更好地捕捉到图像中的全局信息。 ### 3. Swin Transformer Block Swin Transformer引入了一个新的Swin Transformer Block,它是由多个Shifted Window构成的,每个Shifted Window内部使用了类似于ViT的注意力机制。这种新的Transformer Block可以更好地捕捉到局部和全局的信息。 ## 实验结果 Swin Transformer在多个视觉任务上都取得了很好的效果,比如ImageNet分类、COCO目标检测、Cityscapes语义分割等。在ImageNet上,Swin TransformerViT-Large模型具有更好的性能,同时参数数量更少,计算效率更高。在COCO目标检测任务中,Swin Transformer在使用相同的backbone的情况下,比ViT-Large模型具有更高的AP值。在Cityscapes语义分割任务中,Swin Transformer在使用相同的backbone的情况下,比DeiT-base模型具有更高的mIoU值。 ## 总结 Swin Transformer是一种新的层次化视觉Transformer模型,它引入了层次化注意力机制、Shifted Window和Swin Transformer Block等创新点,并在多个视觉任务上取得了很好的效果。这些创新点可以更好地捕捉到图像中的局部和全局信息,同时减少了计算量,提高了计算效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值