一、内容和目标
1. 实验内容
-
本实验主要介绍基于寒武纪 MLU370 MagicMind 平台的EfficientNetV2 (Tensorflow2, C++/Python3, INT8) 图像分类推理应用的开发方法。
-
基于 EfficientNetV2 分类网络和寒武纪 MLU370 MagicMind 平台,您可以读取本地图像数据作为输入,对图像中的物体进行分类,得到物体所属类别的概率。
2. 实验目标
-
掌握使用寒武纪 MLU370 MagicMind 平台进行 AI 模型推理的基本方法。
-
理解 EfficientNetV2 模型的整体网络结构及其开发调试细节。
-
熟悉使用 MagicMind Python API 生成模型、C++ API 部署模型的流程。
二、前置知识
寒武纪软硬件平台介绍
-
硬件:寒武纪 MLU370 AI 加速卡
-
框架:Tensorflow 2.5.0、MagicMind 0.14.0
三、网络结构
CVPR 2021中提出了全新的EfficientNetV2系列网络,在网络参数量更小、训练速度更快的同时,具备SOTA级别的精度。
EfficientNetV2算法作者在EfficientNetV1的基础上提出了一些改进:
-
V1中使用了MBConv结构,其中depthwise conv在专用加速器上的性能并不理想,作者提出了Fused-MBConv,使用conv3x3替换掉MBConv中的conv1x1和depthwise conv3x3,MBConv和Fused-MNBConv的结构如下图所示:
-
EfficientNetV2使用了 MBConv 和 Fused-MBConv 的混合结构。
-
EfficientNetV2中每个 stage 与 V1 版本相比拥有更多的层数。
-
在训练中通过NAS搜索,寻找MBConv和Fused-MNCBConv结构的最佳组合。
EfficientNetV2作为一系列网络的集合,可以通过调整深度和宽度的倍率参数,配置不同规模的网络,EfficientNetV2目前拥有S、M、L、XL,以及为了与EfficientNetV1对比使用了相同倍率参数的b0、b1、b2、b3共8种网络结构。
本次实验使用的 EfficientNetV2-S 网络结构如下表所示:
Stage |
Operator |
Stride |
Channels |
Layers |
0 |
Conv3x3 |
2 |
24 |
1 |
1 |
Fused-MBConv1, k3x3 |
1 |
24 |
2 |
2 |
Fused-MBConv4, k3x3 |
2 |
48 |
4 |
3 |
Fused-MBConv4, k3x3 |
2 |
64 |
5 |
4 |
MBConv4, k3x3, SE0.25 |
2 |
128 |
6 |
5 |
MBConv6, k3x3, SE0.25 |
1 |
160 |
9 |
6 |
MBConv6, k3x3, SE0.25 |
2 |
256 |
15 |
7 |
Conv1x1 & Pooling & FC |
- |
1280 |
1 |
四、模型推理
模型推理整体流程如下图所示,主要包含模型工程准备,模型生成和模型部署三部分:
STEP 1. 工程准备
-
准备txt中的依赖。
-
下载原始 EfficientNetv2 工程,本实验已经提供工程环境,EfficientNetv2源代码在
offical_repo
目录下。 -
下载 EfficienrNetv2-s 预训练模型,并将其放置于model目录下。
-
使用官方脚本将官方提供的ckpt格式模型转为 MagicMind支持的
saved_model
格式。
STEP 2. 模型生成(Python)
-
模型准备与参数设置:准备MagidMind Tensorflow Parser支持的SavedModel格式的模型,设置输入尺寸、模型保存路径等参数。
-
Network 和 BuildConfig 配置: MagicMind ⽀持直接导⼊框架训练好的模型,并表⽰成 Network 对象。模型导⼊⼯作由 Parser 来完成。MagicMind 还提供了BuilderConfig 来配置 Builder 的行为,通过 BuilderConfig设置,用户可配置硬件平台,输入摆数,归一化参数等信息。
-
配置量化数据校准器:MagicMind 提供了量化校准器(Calibrator),支持 post-training 量化功能,能够基于浮点模型和样本数据计算并设置数据的分布范围,并且可以根据数据的分布特点,选择不同的量化粒度。
-
生成 MagicMind 模型:调用 MagicMind 的
build_model
接口生成模型,build_model
⽣成的模型中包含MLU指令、图结构等静态数据。⽣成的模型可以序列化到⽂件或内存,或从⽂件或内存反序列化,从⽽满⾜跨平台部署需求。
STEP 3. 模型推理(C++)
- 前处理:使用 opencv 读取测试图片,预处理步骤包含归一化与
center_crop
。 - 利用 MagicMind 进行推理:
3. 后处理:将MLU 设备端的输出拷贝到 CPU 后,进行Softmax操作、Top5排序,根据排序结果和 ImageNet 标签得到分类结果。
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
Modelzoo仓库:https://gitee.com/cambricon/modelzoo