模型推理: DeepLabv3 图像分割

模型推理: DeepLabv3 图像分割

本实验主要介绍基于MLU370 MagicMind的DeepLabv3图像分割推理应用的开发方法。
难易程度: 中级|实验人次:1746

一、内容和目标

 

1. 实验内容

  1. 本实验主要介绍基于寒武纪 MLU370 MagicMind 平台的DeepLabv3 (TensorFlow, Python, Qint8_mixed_float16)图像分割推理应用的开发方法。

  2. 介绍 MagicMind 支持网络输入形状可变特性,可在构建网络时指定输入形状的变化范围。

 

2. 实验目标

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

  2. 理解 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: 工程准备

  1. 预训练模型下载:下载 DeepLabv3 模型固化权重,并将其放置于./deeplabv3_model目录下。

  2. 安装依赖: pip install -r requirements.txt

  3. 配置环境变量: source env.sh

 

STEP2: 模型生成

  1. 构建融合图:MagicMind Parser目前已支持Tensorflow模型, 准备好下载模型的frozen pb文件。

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

  3. shape_mutable动态输入配置: 配置项 graph_shape_mutable 作为标志⽹络是否可变的总开关,默认为 true,表⽰该⽹络是可变的。如果 graph_shape_mutable 不设置或者设置为 true,并且构建⽹络时使⽤固定维度,MagicMind 在编译模型时会将该⽹络的输⼊维度修改为可变的。对于卷积⽹络(⽐如 ResNet),MagicMind ⽬前仅对 N(batch size)、H(Height)、W(Width)维度可变进⾏性能优化。

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

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

 

STEP3: 模型推理

  1. 前处理:DeepLabv3模型的前处理主要为输入图像的resize和BGR2RGB操作。

  2. 利用 MagicMind 进行推理:

    3. 后处理:对于分割结果,首先要生成colormap,即label与颜色的映射关系,最后将推理结果的label通过label_to_color_image映射成图像,保存结果。

 

五、相关链接

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

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

申 请 试 用