一、内容和目标
1. 实验内容
-
本实验主要介绍基于寒武纪 MLU370 MagicMind平台的Caffe-SSD目标检测推理应用的开发方法和性能优化,其中性能优化操作包括Int8量化,本实验中Caffe-SSD采用的backbone为VGG,输入尺寸为300x300。
-
基于Caffe-SSD检测网络和寒武纪MLU370 MagicMind平台,您可以读取本地图像数据作为输入,对图像数据中的目标物体进行时识别,得到物体的在图像中的坐标、置信度以及类别。
2. 实验目标
-
掌握使用寒武纪MLU370 MagicMind平台进行AI模型推理的基本方法。
-
理解SSD模型的整体网络结构及其开发调试细节。
二、前置知识
1. 寒武纪软硬件平台介绍
-
硬件:寒武纪MLU370系列AI加速卡
-
框架:Caffe、MagicMind 0.14.0
2. MagicMind 介绍
MagicMind 是⾯向寒武纪 MLU370 (寒武纪处理器,简称MLU) 的推理加速引擎。 MagicMind 能将人工智能框架(TensorFlow, PyTorch,Caffe 等)训练好的算法模型转换成 MagicMind 统⼀计算图表示,并提供端到端的模型优化、代码生成以及推理业务部署能力。用户无需过多关注底层硬件细节,只需专注于推理业务开发。
获取更多有关 MagicMind 资料,请参考寒武纪官网文档MagicMind相关内容。
三、网络结构
SSD算法的全名是Single Shot MultiBox Detector,Single shot指明了SSD算法属于one-stage方法,MultiBox指明了SSD是多框预测。对于Faster R-CNN,先通过CNN得到候选框,然后进行分类和回归,而YOLO和SSD可以一步完成检测,SSD的特点是:
SSD提取了不同尺度的特征图来做检测,大尺度特征图可以用来检测小物体,而小特征图用来检测大物体;
SSD采用了不同尺度和长宽比的先验框Anchors,原理图如下:
其中:
-
Conv代表卷积操作;
-
ReLU代表ReLU激活函数;
-
Pool代表池化操作;
-
Norm代表Normalize操作;
-
FC代表全连接层;
-
Concat表示Concat操作;
-
Priorbox、Location、Classes表示三个预测头数据;
-
Reshape表示Reshape操作。
四、模型推理
模型推理整体流程如下图所示,主要包含模型工程准备,模型生成和模型推理三部分。
STEP 1: 工程准备
-
下载SSD预训练权重,并将其解压后放置于
Caffe_model
目录下,可执行bash prepare.sh
来自动下载并解压。 -
准备好待测试的数据集放入images目录下。
STEP 2: 模型生成
-
MagicMind Parser目前已支持Caffe模型,准备好下载的
.caffemodel
和.prototxt
文件。 -
MagicMind 支持直接导入框架训练好的模型,并表示成 Network对象。模型导入⼯作由Parser来完成,Network可以表示⼀个神经⽹络,它由Node和Tensor组成,Node表示具体的运算,如Convolution或是while循环等控制,Tensor表示Node的输入输出。Tensor中记录了输入输出的属性,包括数据类型、形状、名字等,MagicMind 提供了BuilderConfig来配置Builder的行为,通过BuilderConfig,用户可配置硬件平台,输入摆数,归一化参数等信息。
-
MagicMind 提供了量化校准器(Calibrator),它支持 post-training 量化功能,能够基于浮点模型和样本数据计算并设置数据的分布范围,并且可以根据权重数据的分布特点,选择不同的量化粒度。
-
调用MagicMind的
build_model
接口生成模型,build_model
生成的模型中包含MLU指令、权值、图结构等静态数据,生成的模型可以序列化到文件或内存,或从文件或内存反序列化,从而满足跨平台部署需求。
STEP 3: 模型推理
-
前处理:SSD模型的前处理主要是模型的减均值和BGR2RGB操作。
-
利用 MagicMind 进行推理:
3. 后处理:MagicMind处理完后,还需要在CPU上坐标映射回原图操作,NMS操作已经在MLU上完成。
五、相关链接
实验代码仓库:https://gitee.com/cambricon/practices
Modelzoo仓库:https://gitee.com/cambricon/modelzoo