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的特点
轻量化设计:MobileVIT的关键在于其轻量级的Transformer设计,通过减少Transformer层的复杂度和参数数量来降低计算和内存需求。这通常包括减少注意力头的数量、使用更小的隐藏维度以及引入更高效的注意力机制。
分层特征表示:尽管传统的ViT直接在全局图像patches上操作,可能忽视了局部特征的重要性,MobileVIT通过分层结构设计来保留局部信息,类似于CNN中的多尺度特征提取,这有助于提高对细粒度特征的识别能力。
低秩近似与参数共享:为了进一步减小模型大小,MobileVIT采用低秩分解等技术来近似大矩阵运算,并在不同层之间共享参数,从而在不显著牺牲性能的前提下降低计算负担。
效率优化:通过精心设计的模型微结构,如使用更高效的激活函数、归一化策略和优化的注意力机制,MobileVIT能够在保持高精度的同时,显著提升推理速度和降低能耗。
适应移动平台: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指推理速度。