YOLO算法改进Backbone系列之:EffificientFormer

本文研究了视觉Transformer在计算机视觉任务中的速度问题,提出了一种维度一致的EfficientFormer模型,通过优化patchembedding、tokenmixer和MLP结构,实现在保持高精度的同时显著提高在移动设备上的推理速度,尤其是在ImageNet-1K和iPhone12上的表现优于MobileNet。
摘要由CSDN通过智能技术生成

摘要:视觉Transformer在计算机视觉任务领域发展循序,取得了令人深刻的优异表现。但是由于模型中注意力机制的设计和海量的参数使得基于ViT的模型往往比轻量级的卷积模型慢好几倍。因此使得VT的实时性部署就十分具有挑战性,尤其想在移动端这种资源受限的硬件上。近期有的研究尝试通过NAS或混合设计化简ViT的计算复杂度,但是推理速度仍然不尽如人意。从而衍生一个重要的问题:Transformer真的能在保持高性能的前提下达到和MobileNet一样的速度吗?为了回答这一问题本文首先回顾了ViT的网络结构额其中使用的运算操作,找到其中低效的部分。然后本文引入一个维度一致的Transformer模型作为设计范式。最后本文进行延迟驱动的裁剪惹怒来获得一系列EfficientFormer。实验结果显示获得的模型在移动端上性能和推理速度都十分有益,最优秀的模型在ImageNet-1K上达到了79.2%的分类精度同时在iPhone12上的推理速度进位1.6ms,比MobineNet的速度还快。本文最大的模型L7则达到了7.0ms推理速度下83.3%的分类精度,本文的工作证明了对Transformer进行设计后可以在移动端同时保证高精度和快速推理。

transformer 运行速度慢的原因分析:
(1)参数量大
(2)随着 token 长度增加计算复杂度呈二次增加
(3)norm layer 不可融合
(4)缺乏编译器级别优化 (比如 CNN 中的 Winograd)

本文提出了一种dimension-consistent的纯transformer网络,另外通过 latency-driven slimming来得到一系列最终模型 (面向运行时间优化,而不是 MAC 或参数量)
(1)大 kernel 和 stride 的 patch embedding 是在移动设备上的速度瓶颈:由 DeiT-S、PoolFormer 与 LeViTate-256 的对比可以看出,慢的原因主要是 large-kernel 卷积在编译器级别没有类似 Winograd 之类的优化,这里替换成几个 3x3 卷积代替直连能加速
(2)一致的特征维数对于 token mixer 的选择很重要:token mixer 的可选方案有传统的拥有去哪聚感受野的 MHSA mixer、更复杂的 shifted window attention、类似 pooling 的非参数化算子。其中 shifted window 算子目前大部分移动设备编译器都不支持,主要关心运算高效的 pooling token mixer 和精度更优的 MHSA。本文设计在 4D 特征和 3D MHSA 中尽量不用 reshape
(3)conv-bn 的延迟比 LN(GN)-Linear 更优,掉点可接受:因为 BN 在测试阶段吸到 conv 中能降低测试延迟,本文中在 4D 特征中尽量使用 conv-bn 结构,3D 特征中使用 LN 为了获取更高精度
(4)非线性层的延迟取决于硬件和编译器:GeLU 在 iphone12 上几乎不比 relu 慢,但是 HardSwish 很慢(LeViT-256 在使用 HardSwish 时延迟为 44.5 ms,使用 GeLU 是 11.9 ms),本文使用 GeLU 作为非线性层

在这里插入图片描述
(1)整个网络由一个 patch embeding 和一系列 meta transformer blocks (MB) 构成,其中 MB 是 tokenmixer 后接 MLP 构成
(2)在 EfficientFormer中,使用了 3x3 卷积来构建 patch embedding layer
(3)为了保持每个block内的特征维度的一致性,同时有效地利用 attention 机制来提升模型性能,论文先用基于 4D Tensor 的卷积操作(标记为 MB4D)构建了前3个stage,再使用基于3D Tensor的注意力机制模块(标记为 MB3D)完善和构建了后2个stage
(4)在MB4D中,作者使用了Pooling 操作来作为token mixer,同时使用了 CONV-BN来构建 MLP。
(5)在MB3D中,作者使用了MHSA(multi-head self-attention)作为token mixer,使用 LN-Linear的方式构建 MLP
(6)激活函数统一使用了GeLU形式
(7)Patch Embedding:2个3x3卷积,步长为2

EfficientFormer变体结构配置信息如下:
在这里插入图片描述

在YOLOv5项目中添加模型作为Backbone使用的教程:
(1)将YOLOv5项目的models/yolo.py修改parse_model函数以及BaseModel的_forward_once函数
在这里插入图片描述
在这里插入图片描述

(2)在models/backbone(新建)文件下新建Efficientformer.py,添加如下的代码:
在这里插入图片描述

(3)在models/yolo.py导入模型并在parse_model函数中修改如下(先导入文件):
在这里插入图片描述

(4)在model下面新建配置文件:yolov5_effcientformer.yaml
在这里插入图片描述

(5)运行验证:在models/yolo.py文件指定–cfg参数为新建的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值