位置: IT常识 - 正文

MobileViT模型简介(mobilenet模型)

编辑:rootadmin
MobileViT模型简介

推荐整理分享MobileViT模型简介(mobilenet模型),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mobile_visual,voigt模型,virtual mobility,vit 模型,vit 模型,vit 模型,mobile moving movable motional,voigt模型,内容如对您有帮助,希望把文章链接给更多的朋友!

论文名称:MobileViT: Light-Weight, General-Purpose, and Mobile-Friendly Vision Transformer 论文下载地址:https://arxiv.org/abs/2110.02178 官方源码(Pytorch实现):https://github.com/apple/ml-cvnets 自己从ml-cvnets仓库中剥离的代码:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_classification/MobileViT

文章目录0 前言1 模型结构解析1.1 Vision Transformer结构1.2 MobileViT结构1.3 Patch Size对性能的影响2 模型详细配置0 前言

自从2020年ViT(Vision Transformer)模型的横空出世,人们发现了Transformer架构在视觉领域的巨大潜力。近些年,越来越多的科研人员投入Transformer的怀抱,视觉领域的各项任务也不断被Transformer架构模型刷新。Transformer虽然强大,但在现在看来落地仍存在很多难点。比如模型参数太大(比如ViT Large Patch16模型光权重就有1个多G),而且算力要求太高,这基本就给移动端部署Transformer模型判了死刑。尽管近两年Transformer架构在视觉领域出现了很多优秀的工作,比如2021年的Swin-Transformer,它相比ViT效果更好且更轻量,但相比基于CNN的轻量级模型(比如MobileNet系列)无论是在模型参数上还是推理速度上都还有很大的差距。当然毕竟CNN从2012年的AlexNet发表至今已经过去10年了,无论是在模型结构的设计上,还是软硬件的调优上都已经优化的非常到位了。而Transformer模型才刚刚开始,我相信再过个几年,会有越来越多的学者从事研究Transformer轻量化设计,并且各软硬件厂商会针对Transformer做更多的优化,那时Transformer落地移动端将不再是问题。话题扯远了,言归正传今天我们来简单聊聊MobileViT,Apple公司(对,就是那个被啃了一口的苹果)在2021年发表的一篇CNN与Transfomrer的混合架构模型。近两年CNN和Transformer混合架构研究也是一大热点,CNN的轻量和高效+Transformer的自注意力机制和全局视野。为什么不用纯Transformer架构,前面提到了它很“重”,除此之外还有一些其他的问题,比如说:

Transformer缺少空间归纳偏置(spatial inductive biases)。这个之前在讲Transformer self-attention时有提到过。计算某个token的attention时如果将其他token的顺序打乱对最终结果没有任何影响。但在图像数据中,空间信息是很重要且有意义的。为了解决这个问题,常见的方法是加上位置偏置(position bias)/位置编码,比如Vision Transformer中使用的绝对位置偏置,Swin Transformer中的相对位置偏置,加上位置偏置虽然在一定程度上解决了空间位置的信息丢失的问题,但又引入了一个新的问题。迁移到别的任务上时,位置偏执信息往往需要调整。Transformer模型迁移到其他任务(输入图像分辨率发生改变)时比较繁琐。这里所说的繁琐是相对CNN而言的,而主要原因是引入位置偏置导致的。比如在Imagenet上预训练好的Vision Transformer(输入图片大小为224x224)模型后,现在要迁移到更大尺度的任务中,但由于Vision Transformer的绝对位置偏置的序列长度是固定的,等于H×W16×16\frac{H \times W}{16 \times 16}16×16H×W​其中H、W代表输入图片的高和宽,所以只要改变输入图像的尺度就无法直接复用了。现在最常见的处理方法是通过插值的方式将位置偏置插值到对应图像的序列长度。但如果不对网络进行微调直接使用实际效果可能会掉点,比如在224x224尺度上训练的网络,直接对位置偏置进行插值不去微调,在384x384的尺度上进行验证可能会出现掉点(CNN一般会涨点)。如果每次改变输入图像尺度都要重新对位置偏置进行插值和微调,那也太麻烦了。这里有人会说可以使用Swin Transformer中的相对位置偏置,确实如此,Swin Transformer相对位置偏置的序列长度只和Windows大小有关,与输入图像尺度无关。但在实际使用中,Windows的尺度和输入图像尺度又有一定关系。一般输入图像尺度越大,Windows的尺度也会设置的大些。只要Windows尺度发生变化,相对位置偏置也要进行插值了,那么问题又来了。当然这里并不是说位置偏置引入了一堆问题就去否定它的作用,只是现在所采用的位置偏置方式还有很多值得优化的地方。比如在Swin Transformer v2中就对v1的相对位置偏置进行了优化。Transformer模型训练困难。根据现有的一些经验,Transformer相比CNN要更难训练。比如Transformer需要更多的训练数据,需要迭代更多的epoch,需要更大的正则项(L2正则),需要更多的数据增强(且对数据增强很敏感,比如在MobileViT论文的引言中提到,如果将CutMix以及DeIT-style的数据增强移除,模型在Imagenet上的Acc直接掉6个点)。

针对以上问题,现有的、最简单的方式就是采用CNN与Transformer的混合架构,CNN能够提供空间归纳偏置所以可以摆脱位置偏置,而且加入CNN后能够加速网络的收敛,使网络训练过程更加的稳定。下图展示了MobileViT与当时主流的一些Transformer模型对比,通过下图可以看出,即使使用普通的数据增强方式MobileViT也能达到更高的Acc并且参数数量更少。

除此之外,作者还将MobileViT与一些传统的轻量级CNN进行了对比,如下图所示,在近似的参数数量下MobileViT的Acc要更高。

以上只提到了参数数量和Acc,并没有明确的推理速度对比,在论文中唯一能找到的一个有推理速度对比是表3,通过对比能够看到基于Tranaformer的模型(无论是否为混合架构)推理速度比纯CNN的模型还是要慢很多的(移动端)。作者在论文中给出解释主要还是说当前移动端对Transformer架构优化的还太少。

1 模型结构解析1.1 Vision Transformer结构

在讲MobileViT网络之前先简单回顾下Vision Transformer的网络结构,如果还不了解,建议先看下之前写的有关Vision Transformer的文章:https://blog.csdn.net/qq_37541097/article/details/118242600。下图是MobileViT论文中绘制的Standard visual Transformer。首先将输入的图片划分成一个个Patch,然后通过线性变化将每个Patch映射到一个一维向量中(视为一个个Token),接着加上位置偏置信息(可学习参数),再通过一系列Transformer Block,最后通过一个全连接层得到最终预测输出。

1.2 MobileViT结构

简单回顾完Vision Transformer后,再来看看本文要讲的MobileViT。下图对应的是论文中的图1(b),通过下图可以看到MobileViT主要由普通卷积,MV2(MobiletNetV2中的Inverted Residual block),MobileViT block,全局池化以及全连接层共同组成。

MobileViT模型简介(mobilenet模型)

关于MV2结构之前在讲MobileNetV2时有讲过,这里不再赘述,下图是当stride等于1时的MV2结构。上图中标有向下箭头的MV2结构代表stride等于2的情况,即需要进行下采样。

接下来就是最核心的MobileViT block,在论文的图1(b)中作者已经绘制出了MobileViT block的大致结构。首先将特征图通过一个卷积核大小为nxn(代码中是3x3)的卷积层进行局部的特征建模,然后通过一个卷积核大小为1x1的卷积层调整通道数。接着通过Unfold -> Transformer -> Fold结构进行全局的特征建模,然后再通过一个卷积核大小为1x1的卷积层将通道数调整回原始大小。接着通过shortcut捷径分支与原始输入特征图进行Concat拼接(沿通道channel方向拼接),最后再通过一个卷积核大小为nxn(代码中是3x3)的卷积层做特征融合得到输出。

我个人认为有关Unfold -> Transformer -> Fold这块介绍的并不是很清楚(可能是我太菜),所以看了下源码自己重新绘制了一个方便大家理解的版本。这里为了方便我们将Unfold -> Transformer -> Fold简写成Global representations,它的具体计算过程如下图所示。首先对特征图划分Patch(这里为了方便忽略通道channels),图中的Patch大小为2x2,即每个Patch由4个Pixel组成。在进行Self-Attention计算的时候,每个Token(图中的每个Pixel或者说每个小颜色块)只和自己颜色相同的Token进行Attention,这样就达到了减少计算量的目的,没错就这么简单。对于原始的Self-Attention计算每个Token是需要和所有的Token进行Attention,假设特征图的高宽和通道数分别为H, W, C,这里记计算成本为Cost=O(WHC)。如果按照刚刚说的,每个Token只和自己颜色相同的Token做Attention,假设Patch大小为2x2,那么计算成本为Cost=O(WHC/4),即理论上的计算成本仅为原始的14\frac{1}{4}41​。至于为什么能这么做,这里简单谈谈我的看法。对于图像数据本身就存在大量的数据冗余,比如对于较浅层的特征图(H, W下采样倍率较低时),相邻像素间信息可能没有太大差异,如果每个Token做Attention的时候都要去看下相邻的这些像素,个人感觉有些浪费算力。这里并不是说看相邻的像素没有意义,只是说在分辨率较高的特征图上收益可能很低,增加的计算成本远大于Accuracy上的收益。而且前面已经通过nxn的卷积层进行局部建模了,进行全局建模时就没必要再看这么细了。

而刚刚提到的Unfold和Fold只是为了将数据给reshape成计算Self-Attention时所需的数据格式。对于普通的Self-Attention计算前,一般是直接展平H, W两个维度得到一个Token序列,即将[N, H, W, C] -> [N, H*W, C]其中N表示Batch维度。但在MobileViT block的Self-Attention计算中,只是将颜色相同的Token进行了Attention,所以不能简单粗暴的展平H, W维度。如下图所示,文中的Unfold就是将相同颜色的Token展平在一个序列中,这样就可以直接使用普通的Self-Attention并行计算每个序列的Attention了。最后在通过Fold折叠回原特征图即可。

1.3 Patch Size对性能的影响

在上面1.2章节中我们已经讲完了MobileViT结构,接着我们再来聊聊有关patch_size对网络性能的影响。前面有提到大的patch_size能够提升网络推理速度,但是会丢失一些细节信息。这里直接看下论文中给的图8,这里展示了两组不同的patch_size组合在三个任务中的性能,包括图像分类,目标检测以及语义分割。其中配置A的patch_size为{2, 2, 2},配置B的patch_size为{8, 4, 2},这三个数字分别对应下采样倍率为8,16,32的特征图所采用的patch_size大小。通过对比可以发现,在图像分类和目标检测任务中(对语义细节要求不高的场景),配置A和配置B在Acc和mAP上没太大区别,但配置B要更快。但在语义分割任务中(对语义细节要求较高的场景)配置A的效果要更好。

2 模型详细配置

在论文中,关于MobileViT作者提出了三种不同的配置,分别是MobileViT-S(small),MobileViT-XS(extra small)和MobileViT-XXS(extra extra small)。三者的主要区别在于特征图的通道数不同。下图为MobileViT的整体框架,最开始的3x3卷积层以及最后的1x1卷积层、全局池化、全连接层不去赘述,主要看下图中的标出的Layer1~5,这里是根据源码中的配置信息划分的。下面只列举了部分配置信息,更加详细的配置可查看源码。

对于MobileViT-XXS,Layer1~5的详细配置信息如下:

layerout_channelsmv2_exptransformer_channelsffn_dimpatch_hpatch_wnum_headslayer1162NoneNoneNoneNoneNonelayer2242NoneNoneNoneNoneNonelayer348264128224layer464280160224layer580296192224

对于MobileViT-XS,Layer1~5的详细配置信息如下:

layerout_channelsmv2_exptransformer_channelsffn_dimpatch_hpatch_wnum_headslayer1324NoneNoneNoneNoneNonelayer2484NoneNoneNoneNoneNonelayer364496192224layer4804120240224layer5964144288224

对于MobileViT-S,Layer1~5的详细配置信息如下:

layerout_channelsmv2_exptransformer_channelsffn_dimpatch_hpatch_wnum_headslayer1324NoneNoneNoneNoneNonelayer2644NoneNoneNoneNoneNonelayer3964144288224layer41284192384224layer51604240480224

其中:

out_channels表示该模块输出的通道数mv2_exp表示Inverted Residual Block中的expansion ratiotransformer_channels表示Transformer模块输入Token的序列长度(特征图通道数)num_heads表示多头自注意力机制中的head数ffn_dim表示FFN中间层Token的序列长度patch_h表示每个patch的高度patch_w表示每个patch的宽度

到此,有关MobileViT的内容就基本讲完了。如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

本文链接地址:https://www.jiuchutong.com/zhishi/300031.html 转载请保留说明!

上一篇:「文心一言」内测详细使用体验(文心为何意)

下一篇:前端程序员和后端程序员有什么不同?我来告诉你薪资待遇差多少(前端程序员和后端程序员哪个工资高)

  • 抖音音浪是什么(抖音音浪是什么时候可以提现)

    抖音音浪是什么(抖音音浪是什么时候可以提现)

  • 苹果13什么时候开售(苹果13什么时候发售的)

    苹果13什么时候开售(苹果13什么时候发售的)

  • 华为p40可以用无线充电器吗(华为p40可以用无线网卡吗)

    华为p40可以用无线充电器吗(华为p40可以用无线网卡吗)

  • realmex50pro有几根天线呢(realmex50pro是塑料中框么吗)

    realmex50pro有几根天线呢(realmex50pro是塑料中框么吗)

  • 快手怎么保存别人的视频(快手怎么保存别人禁止下载的视频)

    快手怎么保存别人的视频(快手怎么保存别人禁止下载的视频)

  • 拼多多店铺收藏怎么没有了(拼多多店铺收藏量多有什么好处)

    拼多多店铺收藏怎么没有了(拼多多店铺收藏量多有什么好处)

  • 天猫精灵方糖重置(天猫精灵方糖重新连接wifi)

    天猫精灵方糖重置(天猫精灵方糖重新连接wifi)

  • 钢化膜用久了边缘出现气泡(钢化膜用久了边缘出现气泡需要更换吗)

    钢化膜用久了边缘出现气泡(钢化膜用久了边缘出现气泡需要更换吗)

  • 微信粘贴不了是怎么办(微信不能粘帖)

    微信粘贴不了是怎么办(微信不能粘帖)

  • 苹果手机陌生人打不进来怎么回事(苹果手机陌生人打进来一直在通话中怎么办)

    苹果手机陌生人打不进来怎么回事(苹果手机陌生人打进来一直在通话中怎么办)

  • 打印机长边翻页和短边翻页的区别(打印机长边翻页怎么放纸)

    打印机长边翻页和短边翻页的区别(打印机长边翻页怎么放纸)

  • 手机rcs是什么意思(手机rc是什么意思)

    手机rcs是什么意思(手机rc是什么意思)

  • 搜索历史怎么关(搜索历史怎么关闭不了)

    搜索历史怎么关(搜索历史怎么关闭不了)

  • airpods2怎么重启(airpods2怎么重启配对)

    airpods2怎么重启(airpods2怎么重启配对)

  • 抖音注销对方关注里还有我吗(抖音注销后关注我的人还可以看到吗)

    抖音注销对方关注里还有我吗(抖音注销后关注我的人还可以看到吗)

  • 苹果7显示蜂窝移动更新失败是怎么回事(苹果7显示蜂窝网络更新失败是怎么回事?)

    苹果7显示蜂窝移动更新失败是怎么回事(苹果7显示蜂窝网络更新失败是怎么回事?)

  • 抖音注销后身份证可以绑定其他号嘛(抖音注销后身份信息还可以用吗)

    抖音注销后身份证可以绑定其他号嘛(抖音注销后身份信息还可以用吗)

  • 头条号限流多久解除(头条号限流多久能恢复)

    头条号限流多久解除(头条号限流多久能恢复)

  • 华为nova6啥时候上市(华为nova6啥时候停售的)

    华为nova6啥时候上市(华为nova6啥时候停售的)

  • p30微信视频怎么美颜(p30微信视频声音小怎么解决)

    p30微信视频怎么美颜(p30微信视频声音小怎么解决)

  • 苹果xmax无服务怎么解决(iphone x max 为什么总是无服务)

    苹果xmax无服务怎么解决(iphone x max 为什么总是无服务)

  • p30pro防水级别(p30pro防水性能怎么样)

    p30pro防水级别(p30pro防水性能怎么样)

  • Request获取请求数据中文乱码问题

    Request获取请求数据中文乱码问题

  • 强化学习之stable_baseline3详细说明和各项功能的使用

    强化学习之stable_baseline3详细说明和各项功能的使用

  • 分公司和总公司不在一个区
  • 新个税税率法
  • 食堂用固定资产可以抵扣吗
  • 两个日期连在一起怎么写
  • 三方合同怎么盖章
  • 分公司一定要汇总申报吗
  • 房地产企业消防设施计入什么科目
  • 员工交通费补贴标准
  • 出国考察需要什么手续
  • 折扣销售销售折扣销售折让有何区别
  • 应交税费进项税额属于什么科目借贷方向
  • 政府补助收入总额等于
  • 产品亏本销售财务如何处理
  • 税号开错了
  • 开具普通发票只写单位名称和税号可以吗?
  • 宜宾劳务公司有哪些
  • 企业年薪扣税政策
  • 发票有问题找谁
  • 自然报废产生的固定资产净损失计入什么科目
  • 发生坏账损失账务处理
  • 鸿蒙桌面卡片怎么变小
  • 结转本年利润之后还要干啥
  • 被投资企业所在地什么意思
  • 配置path环境变量
  • 华为如何定时关机
  • php serialize
  • php框架怎么写
  • 咨询服务费怎么报印花税
  • PHP:Memcached::setMultiByKey()的用法_Memcached类
  • 哪些情况需要做进项税转出
  • 花卉绿萝的养殖方法
  • 公司年终奖怎么缴税
  • 辅助生产成本的分配
  • 出售固定资产减免的税款账务处理
  • 迪格庄园阿拉扎尼河谷红葡萄酒750ml
  • 大熊雨林中一只小熊
  • 实缴资本多久可以取出随便用吗
  • 微信小程序设计规范(官方)文档
  • chs命令
  • 出口退税抵减应计入哪里
  • 坏账损失计入损益表
  • 销货退回未开红字发票
  • php.ini上传限制
  • python 规划求解
  • 税前补发补扣
  • 一般纳税人开普票税率是多少
  • 收到现金股利是什么意思
  • 质量赔偿金
  • 固定资产属于净资产指的是什么
  • 小规模纳税人购进税控收款机
  • 建筑施工企业工程施工明细科目
  • 免费样品销售给客户怎么入账
  • 公司的长期股权投资该如何做账
  • 技术开发免税收入怎么算
  • 怎样计算存款利息?
  • mysql rand整数
  • windows xp windows
  • 微软官方操作系统叫什么
  • 简述linux几种主流发行版本及其特点
  • 在Linux系统中安装虚拟window
  • 丢失msvcp71.dll
  • windows7修改注册表
  • pcc是什么文件
  • windows wps
  • win7电脑dns存在问题怎么修复
  • SpriteBuilder Demo学习笔记
  • Ext中下拉列表ComboBox组件store数据格式用法介绍
  • OpenGL图元管理
  • 安卓手机微信取消窗口化
  • 批处理杀死进程
  • 使用Python对SQLite数据库操作
  • listview设置item宽度
  • shell提示
  • net user %username%
  • js获取图片的宽高
  • 青岛崂山区税务局官网
  • 国税局和税务局合并
  • 纳税申报过了申报期未申报怎么办
  • 重庆国家税务局发票流向查询
  • 纳税人分类分级管理办法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设