Mobile-ViT (MobileViT)网络讲解

这篇具有很好参考价值的文章主要介绍了Mobile-ViT (MobileViT)网络讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  上篇博文我们分析了VIT的代码,有不了解的小伙伴可以去看下:Vision Transformer(VIT)代码分析——保姆级教程。这篇博文我们先介绍下Mobile-ViT的原理部分,代码分析我们下篇博文再介绍。下面附上论文和官方代码。

  • 论文连接:https://arxiv.org/abs/2110.02178
  • 官方代码:https://github.com/apple/ml-cvnets

一.Transformer

  在学习Mobile-ViT之前,建议各位小伙伴先学习下Transformer的知识点,不然直接看Mobile-ViT可能会有点吃力。关于Transformer的学习可以参考以下给出的视频和博文链接:

  • 【機器學習2021】自注意力機制 (Self-attention) (上)
  • 【機器學習2021】自注意力機制 (Self-attention) (下)
  • 【機器學習2021】Transformer (上)
  • 【機器學習2021】Transformer (下)
  • 详解Transformer中Self-Attention以及Multi-Head Attention
  • Vision Transformer详解

这里我们先简单的介绍下Transformer存在的问题以及我们常用的视觉Transformer网络ViT

1.1.Transformer存在的问题

  VIT及其变种性能都已经很强大了,那么我们为什么要有Mobile-ViT网络呢?根据Transformer的原理我们可以知道当前的Transformer模型主要存在以下问题:

  • 参数多,算力要求高
  • 缺少空间归纳偏置:即纯Transformer对空间位置信息不敏感,但是呢,我们在进行视觉应用的时候位置信息又比较重要,为了解决这个问题就引入了位置编码。
  • 不容易迁移到其他任务:这个问题核心还是引入的位置编码导致的,如ViT中采用的是绝对位置偏置,绝对位置编码的序序列长度是和输入序列的长度保持一致,即在训练模型的时候制定了输入图像的大小之后他的长度是固定的,这样在后面训练的时候如果改变了输入图像的大小,那么位置编码序列的长度和输入序列的长度就会不一致,导致无法训练。因此又出现了插值,即将绝对位置编码插值到与输入序列相同的长度。但是呢,插值也会出现问题,把插值的模型拿来直接用的话会出现模型性能下降的问题,如在 224 × 224 224\times224 224×224上训练, 512 × 512 512\times512 512×512上进行测试,理论上应该是性能会提升,但实际上会下降。因此插值之后还要对模型进行微调,这样就很麻烦。于是又出现了相对位置编码,如Swin Transformer,他只和window的大小有关。但是,如果迁移到其他任务,图像尺度相差比较大的情况下还是会进行微调,总之就是没有一个可以拿来直接用不用调整的模型。
  • 模型训练困难:需要更多的训练数据,更大的L2正则,更多的数据增强,更多的epoch,并且对数据增强还比较敏感。

  注意:模型的参数数量和推理时间没有什么关联。如下图,虽然MobileViT的参数比Mobilenetv2的参数少,但是推理时间还是远远大于Mobilebetv2
Mobile-ViT (MobileViT)网络讲解

1.2.Vision Transformer

  下图是作者给出的标准的ViT模型,仔细观察就会发现,这个ViT和我们平时见到的ViT有一点不同,就是他没有cls_token。有没有cls_token不重要,cls_token只是针对分类才加上去的,下面这个网络才是最标准的视觉ViT网络。
Mobile-ViT (MobileViT)网络讲解
  上面展示是标准视觉ViT模型,下面我们再来看下本次介绍的重点:Mobile-ViT网路结构,如下图所示:
Mobile-ViT (MobileViT)网络讲解
上面的网络的核心内容就是MV2Mobile ViT block模,下面我们来介绍下这两个模块。

二.Mobile-ViT

2.1.MV2

  MV2就是mobilenetv2里面Inverted Residual Block,即下面的图所示的结构,图中MV2是当stride等于1时的MV2结构,上图中标有向下箭头的MV2结构代表stride等于2的情况,即需要进行下采样。
Mobile-ViT (MobileViT)网络讲解

2.2.MobileViT

  MV2来源于mobilenetv2,所以Mobile-ViT的核心还是MobileViT这个模块。我们来分析下这个结构到底是什么,为什么他能减少模型参数量,提升模型的推理速度。
Mobile-ViT (MobileViT)网络讲解
  从上面的模型可以看出,首先将特征图通过一个卷积层,卷积核大小为 n × n n\times n n×n,然后再通过一个卷积核大小为 1 × 1 1\times 1 1×1的卷积层进行通道调整,接着依次通过UnfoldTransformerFold结构进行全局特征建模,然后再通过一个卷积核大小为 1 × 1 1\times 1 1×1的卷积层将通道调整为原始大小,接着通过shortcut捷径分支与原始输入特征图按通道concat拼接,最后再通过一个卷积核大小为 n × n n\times n n×n的卷积层进行特征融合得到最终的输出。这里有小伙伴可能会对folodunfold感到迷惑,所以这个地方的核心又落到了global representation部分(图中中间蓝色字体部分)。

Mobile-ViT (MobileViT)网络讲解
  我们以单通道特征图来分析global representation这部分做了什么,假设patch划分的大小为 2 × 2 2\times 2 2×2,实际中可以根据具体要求自己设置。在Transformer中对于输入的特征图,我们一般是将他整体展平为一维向量,在输入到Transformer中,在self-attention的时候,每个图中的每个像素和其他的像素进行计算,这样计算量就是:
P 1 = W H C P_{1}=WHC P1=WHC
其中,W、H、C分别表示特征图的宽,高和通道个数。
  在Mobile-ViT中的是先对输入的特征图划分成一个个的patch,再计算self-attention的时候只对相同位置的像素计算,即图中展示的颜色相同的位置。这样就可以相对的减少计算量,这个时候的计算量为:
P 2 = W H C 4 P_{2}=\frac{WHC}{4} P2=4WHC
  为什么可以这么做呢?简单理解一张图像的每个像素点的周围的像素值都差不多,并且分辨率越高相差越小,所以这样做并不会损失太多的信息。而且Mobile-ViT在做全局表征之前已经做了一次局部表征了(图中的蓝色字体)。
  我们再来介绍下unfoldfold到底是什么意思。unfold就是将颜色相同的部分拼成一个序列输入到Transformer进行建模。最后再通过fold是拼回去。如下图所示:
Mobile-ViT (MobileViT)网络讲解
  跟这个操作比较类似的pytorch官方自带的关于foldunfold操作的pytorch代码实现可以参考下这篇博文:「详解」torch.nn.Fold和torch.nn.Unfold操作。现在我们再来看下网络的整体结构是不是容易理解多了。

Mobile-ViT (MobileViT)网络讲解
  下面我们来简单的看下patch size对模型性能的影响,patch如果划分的比较大的话是可以减少计算量的,但是划分的太大的话又会忽略更多的语义信息,影响模型的性能。我们看下轮论文里面作者做的实验,下图从左到右对语义信息的要求逐渐递增。其中配置A的patch大小为{2, 2, 2},配置B的patch大小为{8, 4, 2},这三个数字分别对应下采样倍率为8,16,32的特征图所采用的patch大小。通过比较这三幅图可以发现,在图像分类和目标检测任务中,配置A和配置B在准确率和mAP上没多大区别,配置B要更快一些。但在语义分割任务中,配置A的效果要比较好。
Mobile-ViT (MobileViT)网络讲解
Mobile-ViT (MobileViT)网络讲解

2.3.模型配置

  论文中总共给出了三组模型配置,即MobileViT-SMobileViT-XSMobileViT-XXS,三种配置是越来越轻量化。
至此,关Mobile-ViT的理论部分基本上介绍完了,欢迎各位大佬批评指正。文章来源地址https://www.toymoban.com/news/detail-455445.html

到了这里,关于Mobile-ViT (MobileViT)网络讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像分类】【深度学习】ViT算法Pytorch代码讲解

    ViT是由谷歌公司的Dosovitskiy, Alexey等人在《 An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale【ICLR2021】》【论文地址】一文中提出的模型,提出了一种基于transformer结构的模型,摒弃传统的CNN结构,直接将Transformer应用到图像块序列上一样可以达到非常好的性能。 论文

    2024年02月08日
    浏览(61)
  • ViT网络模型

    自2017年Google提出的Transformer结构以来,迅速引发一波热潮,最初《Attention is all you need》这篇论文的提出是针对于NLP领域的,通过自注意力机制代替传统处理序列数据时采用的循环神经网络结构,不仅实现了并行训练,提升了训练的效率,同时也在应用中取得很好的结果。之后

    2024年02月04日
    浏览(24)
  • vit网络模型简介

    目录 一、前言 1.1 Transformer在视觉领域上使用的难点 1.2 输入序列长度的改进 1.3 VIT对输入的改进 二、Vision Transformer模型 2.1 Embedding层 2.2 Transformer Encoder 2.3 MLP Head 2.4  具体流程 三、模型搭建参数 四、结果分析 1.1 Transformer在视觉领域上使用的难点         在NLP中,输入trans

    2023年04月11日
    浏览(18)
  • 【计算机网络】——前言计算机网络发展的历程概述

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算

    2024年02月08日
    浏览(51)
  • 计算机网络-网络层上篇

    目录 一、网络层概述 二、网络层提供的两种服务 (一)面向连接的虚电路服务 (二)无连接的数据报服务 (三)虚电路服务与数据报服务的比较 三、IPv4地址及其应用 (一)IPv4地址概述 (二)分类编址的IPv4地址 1、A类地址 2、B类地址 3、C类地址  (三)划分子网的IPv4地

    2024年02月11日
    浏览(22)
  • 计算机网络-数据链路层上篇

    目录 一、数据链路层概述 二、封装成帧 三、差错检测 (一)奇偶校验 (二)循环冗余校验CRC 四、可靠传输 (一)停止-等待协议SW  (二)后退N帧协议GBN (三)选择重传协议SR 五、点对点协议PPP (一)点对点协议PPP的帧格式 ​(二)透明传输- 面向字节的异步链路采用插

    2024年02月11日
    浏览(45)
  • 卷积神经网络——上篇【深度学习】【PyTorch】

    5.1.1、理论部分 全连接层后,卷积层出现的意义? 一个足够充分的照片数据集,输入,全连接层参数,GPU成本,训练时间是巨大的。 (convolutional neural networks,CNN)是机器学习利用自然图像中一些已知结构的创造性方法,需要更少的参数,在处理图像和其他类型的结构化数据

    2024年02月12日
    浏览(32)
  • 前端--性能优化【上篇】--网络优化与页面渲染优化

    link标签的rel属性设置dns-prefetch,提前获取域名对应的IP地址 用户与服务器的物理距离对响应时间也有影响。 内容分发网络(CDN)是一组分散在不同地理位置的 web 服务器,用来给用户更高效地发送内容。典型地,选择用来发送内容的服务器是基于网络距离的衡量标准的。 优

    2024年02月08日
    浏览(41)
  • 【Docker 那些事儿】容器网络的 “梦华录”(上篇)

    当企业开始大规模使用 Docker 时,工程师就需要掌握很多关于网络的知识。   Docker 作为目前流行的轻量级容器技术,有很多令人称道的功能,如前面介绍的 Docker 镜像管理。   然而, Docker 也有很多不完善的地方,网络方面就是 Docker 比较薄弱的部分。   作为初学者的我们来

    2024年02月01日
    浏览(47)
  • Linux系统应用编程(五)Linux网络编程(上篇)

    1.两个网络模型和常见协议 (1)OSI七层模型(物数网传会表应) 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层(自下到上) (2)TCP/IP四层模型(网网传应) 网络接口层(链路层)、网络层、传输层、应用层 (3)常见网络协议所属层 2.字节序 (1)两种

    2023年04月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包