31_MobileViT网络讲解

VIT:https://blog.youkuaiyun.com/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指推理速度。

### 使用 MobileViT 替换深度学习模型中的骨干网络 MobileViT 是一种结合了卷积神经网络(CNN) 和 Vision Transformer(ViT) 的优势的新型架构,旨在提供高效且轻量化的解决方案[^1]。当考虑用 MobileViT 替换现有的骨干网络时,主要关注的是如何无缝集成这一新组件到已有的框架中。 #### 1. 准备工作 在开始之前,确保安装必要的库和支持工具: ```bash pip install torch torchvision torchaudio mobilevit ``` #### 2. 加载预训练的 MobileViT 模型 加载官方提供的预训练权重可以加速开发过程并提高性能。这里展示如何获取一个预训练版本的 MobileViT: ```python import timm model_name = "mobilevit_s" model = timm.create_model(model_name, pretrained=True) ``` 此代码片段利用 `timm` 库来创建并初始化名为 `mobilevit_s` 的模型实例。 #### 3. 修改现有模型结构 假设有一个基于 ResNet 或其他 CNN 架构的经典图像分类器,则可以通过以下方式将其特征提取部分替换为 MobileViT: ```python class CustomModel(nn.Module): def __init__(self, num_classes=1000): super().__init__() self.mobilevit = model # 假设原模型的最后一层是一个线性分类器 self.fc = nn.Linear(1024, num_classes) def forward(self, x): features = self.mobilevit(x) output = self.fc(features.mean(dim=[2, 3])) # Global Average Pooling return output ``` 这段代码定义了一个自定义类 `CustomModel`,其中包含了作为主干网的新引入的 MobileViT 实例以及用于最终预测的一层全连接层。 #### 4. 测试与优化 完成上述更改后,在目标平台上测试修改后的模型至关重要。特别是对于移动端部署场景来说,应该特别注意运行效率方面的要求[^2]: - **量化**: 可以尝试对浮点数参数进行量化处理以减少内存占用和计算成本; - **剪枝**: 移除不重要的通道或节点有助于降低复杂度而不显著影响准确性; - **编译优化**: 利用像 TensorFlow Lite、ONNX Runtime 这样的平台特定工具链来进行进一步提速。 通过这些步骤,能够有效地将更先进的 MobileViT 集成进传统计算机视觉任务当中,从而获得更好的表现效果的同时保持较低资源消耗特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值