模型推理:EfficientNetV2图像分类

模型推理:EfficientNetV2图像分类

本实验主要介绍基于MagicMind平台的EfficientNetV2图像分类推理应用的开发方法。
难易程度: 中级|实验人次:1715

一、内容和目标

 

1. 实验内容

  1. 本实验主要介绍基于寒武纪 MLU370 MagicMind 平台的EfficientNetV2 (Tensorflow2, C++/Python3, INT8) 图像分类推理应用的开发方法。

  2. 基于 EfficientNetV2 分类网络和寒武纪 MLU370 MagicMind 平台,您可以读取本地图像数据作为输入,对图像中的物体进行分类,得到物体所属类别的概率。

 

2. 实验目标

  1. 掌握使用寒武纪 MLU370 MagicMind 平台进行 AI 模型推理的基本方法。

  2. 理解 EfficientNetV2 模型的整体网络结构及其开发调试细节。

  3. 熟悉使用 MagicMind Python API 生成模型、C++ API 部署模型的流程。

 

二、前置知识

寒武纪软硬件平台介绍

  • 硬件:寒武纪 MLU370 AI 加速卡

  • 框架:Tensorflow 2.5.0MagicMind 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. 工程准备

  1. 准备txt中的依赖。

  2. 下载原始 EfficientNetv2 工程,本实验已经提供工程环境,EfficientNetv2源代码在offical_repo目录下。

  3. 下载 EfficienrNetv2-s 预训练模型,并将其放置于model目录下。

  4. 使用官方脚本将官方提供的ckpt格式模型转为 MagicMind支持的saved_model格式。

 

STEP 2. 模型生成(Python)

  1. 模型准备与参数设置:准备MagidMind Tensorflow Parser支持的SavedModel格式的模型,设置输入尺寸、模型保存路径等参数。

  2. Network 和 BuildConfig 配置: MagicMind ⽀持直接导⼊框架训练好的模型,并表⽰成 Network 对象。模型导⼊⼯作由 Parser 来完成。MagicMind 还提供了BuilderConfig 来配置 Builder 的行为,通过 BuilderConfig设置,用户可配置硬件平台,输入摆数,归一化参数等信息。

  3. 配置量化数据校准器:MagicMind 提供了量化校准器(Calibrator),支持 post-training 量化功能,能够基于浮点模型和样本数据计算并设置数据的分布范围,并且可以根据数据的分布特点,选择不同的量化粒度。

  4. 生成 MagicMind 模型:调用 MagicMind 的 build_model 接口生成模型,build_model ⽣成的模型中包含MLU指令、图结构等静态数据。⽣成的模型可以序列化到⽂件或内存,或从⽂件或内存反序列化,从⽽满⾜跨平台部署需求。

 

STEP 3.   模型推理(C++)

  1. 前处理:使用 opencv 读取测试图片,预处理步骤包含归一化与center_crop
  2. 利用 MagicMind 进行推理:

   3.  后处理:将MLU 设备端的输出拷贝到 CPU 后,进行Softmax操作、Top5排序,根据排序结果和 ImageNet 标签得到分类结果。

 

五、相关链接

实验代码仓库:https://gitee.com/cambricon/practices

Modelzoo仓库:https://gitee.com/cambricon/modelzoo

 

申 请 试 用