网站首页 > 技术教程 正文
摘要:视觉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 运行速度慢的原因分析:
- l参数量大
- 随着 token 长度增加计算复杂度呈二次增加
- norm layer 不可融合
- 缺乏编译器级别优化 (比如 CNN 中的 Winograd)
本文提出了一种dimension-consistent的纯transformer网络,另外通过 latency-driven slimming来得到一系列最终模型 (面向运行时间优化,而不是 MAC 或参数量)
- 大 kernel 和 stride 的 patch embedding 是在移动设备上的速度瓶颈:由 DeiT-S、PoolFormer 与 LeViTate-256 的对比可以看出,慢的原因主要是 large-kernel 卷积在编译器级别没有类似 Winograd 之类的优化,这里替换成几个 3x3 卷积代替直连能加速
- 一致的特征维数对于 token mixer 的选择很重要:token mixer 的可选方案有传统的拥有去哪聚感受野的 MHSA mixer、更复杂的 shifted window attention、类似 pooling 的非参数化算子。其中 shifted window 算子目前大部分移动设备编译器都不支持,主要关心运算高效的 pooling token mixer 和精度更优的 MHSA。本文设计在 4D 特征和 3D MHSA 中尽量不用 reshape
- conv-bn 的延迟比 LN(GN)-Linear 更优,掉点可接受:因为 BN 在测试阶段吸到 conv 中能降低测试延迟,本文中在 4D 特征中尽量使用 conv-bn 结构,3D 特征中使用 LN 为了获取更高精度
- 非线性层的延迟取决于硬件和编译器:GeLU 在 iphone12 上几乎不比 relu 慢,但是 HardSwish 很慢(LeViT-256 在使用 HardSwish 时延迟为 44.5 ms,使用 GeLU 是 11.9 ms),本文使用 GeLU 作为非线性层
- 整个网络由一个 patch embeding 和一系列 meta transformer blocks (MB) 构成,其中 MB 是 tokenmixer 后接 MLP 构成
- 在 EfficientFormer中,使用了 3x3 卷积来构建 patch embedding layer
- 为了保持每个block内的特征维度的一致性,同时有效地利用 attention 机制来提升模型性能,论文先用基于 4D Tensor 的卷积操作(标记为 MB4D)构建了前3个stage,再使用基于3D Tensor的注意力机制模块(标记为 MB3D)完善和构建了后2个stage
- 在MB4D中,作者使用了Pooling 操作来作为token mixer,同时使用了 CONV-BN来构建 MLP。
- 在MB3D中,作者使用了MHSA(multi-head self-attention)作为token mixer,使用 LN-Linear的方式构建 MLP
- 激活函数统一使用了GeLU形式
- 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参数为新建的
猜你喜欢
- 2024-10-20 Φ I L O S O Φ 葡萄酒品牌包装设计 via:Backbone Branding
- 2024-10-20 YOLO算法改进Backbone系列之MogaNet
- 2024-10-20 YOLO算法改进Backbone系列之:Fcaformer
- 2024-10-20 YOLO算法改进Backbone系列之:Dfformer
- 2024-10-20 YOLO算法改进Backbone系列之:PVTv2
- 2024-10-20 食品包装设计分享 | Backbone Craft Beer国外英文字体精酿啤酒
- 2024-10-20 YOLO算法改进Backbone系列之:ParC-Net
- 2024-10-20 Backbone的优秀设计作品 | 水果 果汁 插画 手绘 创意 设计
- 2024-10-20 索尼参与开发PS版手机手柄公布 售价99.99美元
- 2024-10-20 EfficientFormer:轻量化ViT Backbone
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)