31_MobileViT网络讲解

VIT:https://blog.csdn.net/qq_51605551/article/details/140445491?spm=1001.2014.3001.5501

1.1 简介

MobileVIT是“Mobile Vision Transformer”的简称,是一种专门为移动设备设计的高效视觉模型。它结合了Transformer架构的优点与移动优先的设计原则,旨在实现在有限计算资源下进行高质量的计算机视觉任务处理,如图像分类、物体检测和图像分割等。MobileVIT的发展受到了Vision Transformer (ViT) 的启发,而ViT最初是为了解决自然语言处理任务并随后成功应用于计算机视觉领域。

Vision Transformer (ViT) 背景

ViT通过将图像分割成固定大小的 patches(块),然后使用线性嵌入层将这些patches转换为向量,再输入到Transformer编码器中进行处理,颠覆了基于卷积神经网络(CNN)的传统视觉模型设计。Transformer结构以其强大的序列处理能力和长距离依赖捕获能力著称,但在原始形式下,其计算成本较高,不直接适用于移动或嵌入式设备。

MobileVIT的特点

  1. 轻量化设计:MobileVIT的关键在于其轻量级的Transformer设计,通过减少Transformer层的复杂度和参数数量来降低计算和内存需求。这通常包括减少注意力头的数量、使用更小的隐藏维度以及引入更高效的注意力机制。

  2. 分层特征表示:尽管传统的ViT直接在全局图像patches上操作,可能忽视了局部特征的重要性,MobileVIT通过分层结构设计来保留局部信息,类似于CNN中的多尺度特征提取,这有助于提高对细粒度特征的识别能力。

  3. 低秩近似与参数共享:为了进一步减小模型大小,MobileVIT采用低秩分解等技术来近似大矩阵运算,并在不同层之间共享参数,从而在不显著牺牲性能的前提下降低计算负担。

  4. 效率优化:通过精心设计的模型微结构,如使用更高效的激活函数、归一化策略和优化的注意力机制,MobileVIT能够在保持高精度的同时,显著提升推理速度和降低能耗。

  5. 适应移动平台:MobileVIT特别考虑了移动设备的硬件限制,确保模型可以在各种资源受限的环境下运行,包括CPU、GPU和NPU(神经处理单元)。

应用场景

由于其高效性和准确性,MobileVIT适用于广泛的移动应用,包括但不限于智能手机、可穿戴设备、无人机和物联网(IoT)设备上的实时图像分析、增强现实(AR)、视频处理和智能监控等。

总结

MobileVIT代表了计算机视觉领域的一个重要进展,它通过将Transformer架构的强大力量与移动优化技术相结合,开辟了在移动设备上实现高级视觉理解任务的新途径。这种模型设计不仅推动了人工智能技术的普及,也促进了边缘计算和智能设备的进一步发展。随着技术的不断演进,未来我们有望看到更多基于MobileVIT及其衍生技术的应用出现。


 

1.2 当前纯Transformer模型存在的问题

纯Transformer对空间位置信息不够敏感,而图像信息对空间信息是比较重要的。解决方法:加入位置编码。

1.3 模型结构解析

对于计算机视觉任务上标准的transformer模型:

MobileVIT的网络结构如下图:

向下的箭头意思是下采样,数字是下采样倍数。

MV2代表在mobileNetV2提出的一个模块:(倒残差模块,先升维再降维)

对于MobileVIT blcok,输入是一个HxWxC的特征图,然后做“局部表征”,其实在代码就是用3x3卷积层实现的,然后用1x1调整通道数,调整完之后,进行一个全局的表征,全局表征等下细讲。

然后我们通过一个1x1卷积层取调整它的通道数还原回之前的通道数C。接着通过一个捷径分支(图中红色的大箭头)将得到的特征图与输入进行一个concat拼接,拼接完之后再通过一个nxn的卷积层进行一个特定的融合

全局表征

图忽略了channel。

在传统的transformer架构中,首先会把输入特征图进行展平,后面MSA首先会将一个像素与其他所有像素进行匹配。

在Mobile VIT中,首先会将输入的特征图划分成一个一个的patch,图中以2x2大小为例,划分完之后,在实际做attention的时候是将每一个patch当中对应位置相同的token去做self attention。也就是说图中颜色相同的token才会去做self-attention。

通过这种方式就能减少做attention时的计算量。原始的attention,计算量可以当作HWC,但在mobileVIT当中只让相同相对位置去attention,计算量为原来的四分之一(36之间互相计算变为9个之间互相计算)。

那么block中的unfold和flod都是什么意思呢?

unfold就是将颜色相同的拼成一个序列,然后我们将每个序列输入到transformer block中进行全局表征(全局建模),最后在通过fold将这些特征给折叠回原特征图的一个形式。

这里的每一个序列输入transformer  block 的时候是可以并行计算的。

PatchSize对模型性能的影响

patchsize就是输入到transformer block之前的划分。

图中patch size划分的组是842和222,每组中三个数字分别对应的是针对下采样的8倍,16倍,以及32倍的特征图。

然后分别在分类,目标检测,以及分割任务上进行了一个对比。

1.4 模型详细配置

out_channels 是每个layer输出的通道数。mv2_exp是MV2升维的倍数。transformer_channels是输入block的特征图的token的向量长度或者说通道数。ffn_dim是block中MLP中间层的节点个数。

patch_h和patch_w是patchsize的大小。num_head是attention的头的个数。

1.5 模型性能

 图右的表中,对于数据增强(augmentation)有两种方式,basic代表的是想resnet那样的比较简单的数据增强,就是随机裁剪和水平翻转。advance包括的数据增强比较多。

下图中可以看出,MObileVIT对数据增强不太敏感(basic情况下准确率仍较高)

(参数量和推理速度的快慢并没有特别的联系)

与其他轻量级和重量级的网络进行对比:

Time指推理速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在eclipse中导入本地的jar包配置Junit环境步骤(包含Junit中的方法一直标红的解决方法)

搭建JUnit环境 一、配置环境 跟上一篇的那种方法不一样,直接Add to Build Path 是先将jar包复制到项目的lib目录下,然后直接添加 选定项目>>>右键>>>Bulid Path>>>Add Libraries>>>Configure Build Path(配置构建路…

python—爬虫爬取电影页面实例

下面是一个简单的爬虫实例,使用Python的requests库来发送HTTP请求,并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站,并提取每部电影的主义部分。 首先,确保你已经安装了requests和lxml库。如果没有安装&#x…

Fast Planner规划算法(一)—— Fast Planner前端

本系列文章用于回顾学习记录Fast-Planner规划算法的相关内容,【本系列博客写于2023年9月,共包含四篇文章,现在进行补发第一篇,其余几篇文章将在近期补发】 一、Fast Planner前端 Fast Planner的轨迹规划部分一共分为三个模块&…

4.基础知识-数据库技术基础

基础知识 一、数据库基本概念1、数据库系统基础知识2、三级模式-两级映像3、数据库设计4、数据模型:4.1 E-R模型★4.2 关系模型★ 5、关系代数 二、规范化和并发控制1、函数依赖2、键与约束3、范式★3.1 第一范式1NF实例3.2 第二范式2NF3.3 第三范式3NF3.4 BC范式BC…

rockchip的yolov5 rknn python推理分析

rockchip的yolov5 rknn推理分析 对于rockchip给出的这个yolov5后处理代码的分析,本人能力十分有限,可能有的地方描述的很不好,欢迎大家和我一起讨论,指出我的错误!!! RKNN模型输出 将官方的Y…

直方图的最大长方形面积

前提知识:单调栈基础题-CSDN博客 子数组的最大值-CSDN博客 题目描述: 给定一个非负数(0和正数),代表直方图,返回直方图的最大长方形面积,比如,arr {3, 2, 4, 2, 5}&#xff0c…

景区导航导览系统:基于AR技术+VR技术的功能效益全面解析

在数字化时代背景下,游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手,不仅因为它能提供实时、精准的导航服务,更在于其融合AR(增强现实)、VR(虚拟现实)等前沿技术&…

十三、网络编程正则表达式设计模式(模块23)

网络编程&正则表达式&设计模式 模块23_网络编程&正则表达式&设计模式第一章.网络编程1.软件结构2.服务器概念3.通信三要素4.UDP协议编程4.1.客户端(发送端)4.2.服务端(接收端) 5.TCP协议编程4.1.编写客户端4.2.编写服务端 6.文件上传6.1.文件上传客户端以及服务…

【开发踩坑】 MySQL不支持特殊字符(表情)插入问题

背景 线上功能报错: Cause:java.sql.SQLException:Incorrect string value:xFO\x9F\x9FxBO for column commentat row 1 uncategorized SQLException; SQL state [HY000]:error code [1366]排查 初步觉得是编码问题(utf8 — utf8mb4) 参考上…

Leetcode 2520. 统计能整除数字的位数

问题描述: 给你一个整数 num ,返回 num 中能整除 num 的数位的数目。 如果满足 nums % val 0 ,则认为整数 val 可以整除 nums 。 示例 1: 输入:num 7 输出:1 解释:7 被自己整除&#xff0…

浅谈芯片验证中的仿真运行之 timescale (五)提防陷阱

一 仿真单位 timeunit 我们知道,当我们的代码中写清楚延时语句时,若不指定时间单位,则使用此单位; 例如: `timescale 1ns/1ps 则 #15 语句表示delay15ns; 例:如下代码,module a 的timescale是1ns/1ps, module b 是1ps/1ps; module b中的clk,频率是由输入参…

HTML开发笔记:1.环境、标签和属性、CSS语法

一、环境与新建 在VSCODE里&#xff0c;加载插件&#xff1a;“open in browser” 然后新建一个文件夹&#xff0c;再在VSCODE中打开该文件夹&#xff0c;在右上角图标新建文档&#xff0c;一定要是加.html&#xff0c;不要忘了文件后缀 复制任意一个代码比如&#xff1a; <…

primeflex教学笔记20240720, FastAPI+Vue3+PrimeVue前后端分离开发

练习 先实现基本的页面结构&#xff1a; 代码如下&#xff1a; <template><div class"flex p-3 bg-gray-100 gap-3"><div class"w-20rem h-12rem bg-indigo-200 flex justify-content-center align-items-center text-white text-5xl">…

C++关系运算符重载 函数运算符重载

#include <iostream> #include <string> using namespace std; //实现关系运算符重载 仿函数 class Person { public:Person(int Age,string Name){age Age;name Name;}int age;string name;int operator()(){return age ;}bool operator(const Person& p)…

用html做python教程01

用html做python教程01 前言开肝构思实操额外修饰更换字体自适应 最后 前言 今天打开csdn的时候&#xff0c;看见csdn给我推荐了一个python技能书。 说实话&#xff0c;做得真不错。再看看我自己&#xff0c;有亿点差距&#x1f61f;。 开肝 先创建一个文件&#xff0c;后缀…

获取本地时间(Linux下,C语言)

一、函数 #include <time.h> time_t time(time_t *tloc);函数功能&#xff1a;获取本机时间&#xff08;以秒数存储&#xff0c;从1970年1月1日0:0:0开始到现在&#xff09;。返回值&#xff1a;获得的秒数&#xff0c;如果形参非空&#xff0c;返回值也可以通过传址调用…

昇思25天学习打卡营第9天 | 使用静态图加速

用静态图加速在MindSpore中的实践体验 在深入学习MindSpore框架的过程中&#xff0c;我特别关注了动态图和静态图两种模式的运行机制及其各自的优缺点。通过实际编程实验和应用&#xff0c;我对静态图加速的效果和应用场景有了更深入的了解。 动态图与静态图的对比 在开始使…

Xcode学习笔记

Xcode学习笔记 前言一、在Mac上安装Xcode并做点简单设置1.查看一下Xcode的版本 二、使用Xcode新建一个Playground三、swift基础-变量1.swift是什么2.变量是什么3.建立变量4.改变变量5.小帖士 四、swift基础-变量命名规范1.使用小驼峰命名法2.使用有意义且描述性的名称3.避免使用…

【web】-flask-简单的计算题(不简单)

打开页面是这样的 初步思路&#xff0c;打开F12&#xff0c;查看头&#xff0c;都发现了这个表达式的base64加密字符串。编写脚本提交答案&#xff0c;发现不对&#xff1b; 无奈点开source发现源代码&#xff0c;是flask,初始化表达式&#xff0c;获取提交的表达式&#xff0…

【iOS】——探究isKindOfClass和isMemberOfClass底层实现

isKindOfClass 判断该对象是否为传入的类或其子类的实例 // 类方法实现&#xff0c;用于检查一个类是否属于另一个类或其父类链上的任何类。(BOOL)isKindOfClass:(Class)cls {// 从当前类开始&#xff0c;tcls将沿着元类的继承链向上遍历。for (Class tcls self->ISA(); …