【导读】之前详细介绍了轻量级网络架构的开源项目,详情请看深度学习中的轻量级网络架构总结与代码实现,今天将正式开启Transormer轻量级网络架构新篇章,本文将主要介绍一种更小,更快的轻量级Transformer端侧网络架构 ---MobileViT,该网络架构在参数量和精度方面大幅度超过了当前最优的轻量级网络架构(比如Mobile-Former,MobileNetV3等等).
本文提出的MobileViT网络架构旨在有效的结合CNN的归纳偏置优势和ViT的全局感受野能力,它是一个轻量级,通用的,低时延的端侧网络架构。首先它利用了CNN中的空间归纳偏置优势以及对数据增强技巧的低敏感性的特性,其次,它结合了ViT中对输入特征图信息进行自适应加权和建立全局依赖关系等优点。具体做法如下:
如上图所示,MobileViT主要提出了MobileViT block(如上图1(b)所示), MobileViT块使用标准卷积和Transformer来有效的结合local和global的视觉表征信息。其中标准卷积主要涉及三个操作:展开(unfloading) 、局部处理(local processing) 和展开(folding) 。而Transformer块主要是为了获取得到全局建模依赖关系。这两种方式的巧妙结合可以有效地将局部和全局信息进行编码。以前通常的做法是将patch进行投影,然后用Transformer学习patch之间的全局信息,这就丢失了图像的归纳偏置信息,因此就耗费更多的参数来进行学习,而且最后得到的模型普遍又深又宽。而MobileViT block则既具有卷积的性质,又具备ViT全局建模能力。此外,MobileViT巧妙地结合了mobilenetv2的逆残差模块,再通过有效地设计摆放mbv2 block和MobileViT block的位置顺序,从而实现local与global的视觉表征信息交互。最后将MobileViT 应用在不同的端侧视觉任务(图像分类、物体检测、语义分割)上都取得了比当前轻量级 CNN或ViT模型更好的性能。值得注意的一点:不同于大多数基于ViT的模型,MobileViT模型仅仅使用基础的数据增强训练方式,就达到了更优的性能。
import torch
from light_cnns import mobilevit_s
model = mobilevit_s()
model.eval()
print(model)
input = torch.randn(1, 3, 224, 224)
y = model(input)
print(y.size())
后续我们将针对具体视觉任务集成更多的移动端网络架构。希望本项目既能让深度学习初学者快速入门,又能更好地服务科研学术和工业研发社区。
后续将持续更新模型轻量化处理的一系列方法,包括:剪枝,量化,知识蒸馏等等,欢迎大家Star和Follow
(欢迎各位轻量级网络科研学者将自己工作的核心代码整理到本项目中,推动科研社区的发展,我们会在readme中注明代码的作者~)