一、内容和目标
1. 实验内容
-
本实验主要介绍基于寒武纪 MLU370 MagicMind 平台的DeepLabv3 (TensorFlow, Python, Qint8_mixed_float16)图像分割推理应用的开发方法。
-
介绍 MagicMind 支持网络输入形状可变特性,可在构建网络时指定输入形状的变化范围。
2. 实验目标
-
掌握使用寒武纪 MLU370 MagicMind 平台进行模型推理的基本方法。
-
理解 DeepLabv3 模型的整体网络结构及其开发调试细节。
二、前置知识
1. 寒武纪软硬件平台介绍
-
硬件:寒武纪 MLU370 AI 加速卡
-
框架:TensorFlow、MagicMind 0.13.0
2. MagicMind 介绍
MagicMind 是⾯向寒武纪 MLU370 (寒武纪处理器,简称MLU) 的推理加速引擎。 MagicMind 能将人工智能框架(TensorFlow,PyTorch 等)训练好的算法模型转换成 MagicMind 统⼀计算图表⽰,并提供端到端的模型优化、代码⽣成以及推理业务部署能⼒。用户无需过多关注底层硬件细节,只需专注于推理业务开发。
获取更多有关 MagicMind 资料,请参考寒武纪官网文档MagicMind相关内容。
三、网络结构
deeplabv3采用ASPP空间金字塔并行池化结构,对输入图像进行不同尺度的特征提取,将预测结果融合得到最终输出。
采用 encoder-decoder结构,编解码过程中融合不同尺度、阶段的特征图。
原网络中增加context模块捕获长程信息。
采用ASPP并空间金字塔池化行结构,获取多尺度物体信息。
deeplabv3模型中,改进了ASPP结构,增加了1 * 1的conv 和 global avg pool。在串联结构中,使用并行池化方法处理连续下采样过程中卷积核权重失效问题。
四、模型推理
模型推理整体流程如下图所示,主要包含模型工程准备,模型生成和模型推理三部分。
STEP1: 工程准备
-
预训练模型下载:下载 DeepLabv3 模型固化权重,并将其放置于
./deeplabv3_model
目录下。 -
安装依赖:
pip install -r requirements.txt
-
配置环境变量:
source env.sh
STEP2: 模型生成
-
构建融合图:MagicMind Parser目前已支持Tensorflow模型, 准备好下载模型的frozen pb文件。
-
Network 和 BuildConfig 配置: MagicMind ⽀持直接导⼊框架训练好的模型,并表⽰成 Network 对象。模型导⼊⼯作由 Parser 来完成。MagicMind 还提供了BuilderConfig 来配置 Builder 的行为,通过 BuilderConfig 设置,用户可配置硬件平台,输入摆数,归一化参数等信息。
-
shape_mutable
动态输入配置: 配置项graph_shape_mutable
作为标志⽹络是否可变的总开关,默认为 true,表⽰该⽹络是可变的。如果graph_shape_mutable
不设置或者设置为 true,并且构建⽹络时使⽤固定维度,MagicMind 在编译模型时会将该⽹络的输⼊维度修改为可变的。对于卷积⽹络(⽐如 ResNet),MagicMind ⽬前仅对 N(batch size)、H(Height)、W(Width)维度可变进⾏性能优化。 -
配置量化数据校准器:MagicMind 提供了量化校准器(Calibrator),它⽀持 post-training 量化功能,能够基于浮点模型和样本数据计算并设置数据的分布范围,并且可以根据权重数据的分布特点,选择不同的量化粒度。
-
生成 MagicMind 模型:调用 MagicMind 的
build_model
接口生成模型,build_model
⽣成的模型中包含MLU指令、权值、图结构等静态数据。⽣成的模型可以序列化到⽂件或内存,或从⽂件或内存反序列化,从⽽满⾜跨平台部署需求。
STEP3: 模型推理
-
前处理:DeepLabv3模型的前处理主要为输入图像的resize和BGR2RGB操作。
-
利用 MagicMind 进行推理:
3. 后处理:对于分割结果,首先要生成colormap,即label与颜色的映射关系,最后将推理结果的label通过label_to_color_image
映射成图像,保存结果。
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
Modelzoo仓库:https://gitee.com/cambricon/modelzoo