MindSpore入门体验实验

MindSpore入门体验实验

0. 前言

logo_MindSpore

昇思MindSpore是一款华为公司独立开发的深度学习框架,它是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标。其中,易开发表现为API友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以及端侧场景。本篇博客旨在使用MindSpore框架体验AI从开发到部署的全流程。

1. 实验介绍

1.1 数据集介绍

狗与牛角包分类数据集,该数据集有狗和牛角包两个类别,每个类有大约150张训练图像、20张验证图像和1张推理图像。具体数据集如下所示:

datset-dog

1.2 MobileNet V2模型

MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络,相比于传统的卷积神经网络,MobileNet网络使用深度可分离卷积(Depthwise Separable Convolution)的思想在准确率小幅度降低的前提下,大大减小了模型参数与运算量。并引入宽度系数 α \alpha α 和分辨率系数 β \beta β 使模型满足不同应用场景的需求。

由于MobileNet网络中Relu激活函数处理低维特征信息时会存在大量的丢失,所以MobileNetV2网络提出使用倒残差结构(Inverted residual block)和Linear Bottlenecks来设计网络,以提高模型的准确率,且优化后的模型更小。

mobilenet

图中Inverted residual block结构是先使用1x1卷积进行升维,然后使用3x3的DepthWise卷积,最后使用1x1的卷积进行降维。与Residual block结构相反,Residual block是先使用1x1的卷积进行降维,然后使用3x3的卷积,最后使用1x1的卷积进行升维。

详细内容可参见MobileNet V2论文

1.3 实验目的

本次实验使用MindSpore Vision中的mobilenet_v2网络微调的方法来开发一个AI应用(狗和牛角包分类),并将训练好的网络模型部署到Android手机上,执行推理和部署功能。通过实验希望大家能有如下收获:

  • 对AI开发流程有初步的概念
  • 对MindSpore框架有良好的体验
  • 对AI应用的部署有初步的概念

1.4 实验总体设计

准备实验材料
配置实验环境
执行微调训练
模型格式转换
安卓手机端部署与推理

2. 实验过程

2.1 准备实验材料

2.1.1 下载已准备好的材料

实验所需所有材料,这里我通过百度网盘将实验所需的所有材料给出,大家可以直接下载使用,大家也可以按照下面给出的连接手动下载:

2.1.2 手动逐项下载实验材料
  • 首先在选择一个目录,最好不要包含中文, 先新建一个文件夹并命名为dog_and_bread,进入dog_and_bread文件夹。

  • dog_and_bread文件夹下新建一个datasets文件夹,下载狗与牛角包分类数据集,并解压到datasets中。

  • 下载预训练好的模型,放到dog_and_bread中。

  • 下载Windows-x64模型转换工具或者Linux-x86_64模型转换工具,放到dog_and_bread中;

  • 下载实验python脚本,放到dog_and_bread中然后:

    • 用记事本打开代码文件,注释掉“# 下载并解压数据集”和“# 下载预训练模型文件”这两行下面的代码,如下(在行首加上#代表注释这行代码,这样的话它就不会运行了):

      # 下载并解压数据集

      # dl.download_and_extract_archive(dataset_url, path)

      # 下载预训练模型文件

      # dl.download_url(models_url)

  • 新建一个python脚本conv.py,将下面的内容添加进去

    • from mindspore import export, Tensor
      from mindspore import load_checkpoint, load_param_into_net
      from mindvision.classification.models import mobilenet_v2
      import numpy as np
      
      # 定义并加载网络参数
      net = mobilenet_v2(num_classes=2, resize=224)
      param_dict = load_checkpoint("best.ckpt")
      load_param_into_net(net, param_dict)
      
      # 将模型由ckpt格式导出为MINDIR格式
      input_np = np.random.uniform(0.0, 1.0, size=[1, 3, 224, 224]).astype(np.float32)
      export(net, Tensor(input_np), file_name="mobilenet_v2_1.0_224", file_format="MINDIR")
      
  • 目录情况如下:

    • image-20220602145948619

2.2 实验环境环境搭建

2.2.1 环境要求
  • python=3.7.5
  • mindspore=1.6.1
  • mindvision
  • matplotlib
  • numpy
  • PIL(pillow)
2.2.2 具体搭建步骤

这里以Windows系统下,Anaconda的虚拟环境为例,进入Anaconda Prompt。

步骤一:创建新的虚拟环境,安装python3.7.5
  • 执行conda create -n exp python==3.7.5 -y
  • 激活环境conda activate exp
  • image-20220602153410162
步骤二:安装mindspore和mindvision
  • 执行下面命令安装cpu版本的mindspore-1.6.1

    • pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.1/MindSpore/cpu/x86_64/mindspore-1.6.1-cp37-cp37m-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
      
  • 执行下面命令安装mindvision

    • pip install mindvision -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 执行pip list查看是否安装成功

    • image-20220602155731338

详细安装教程可以去官网查看

步骤三:验证是否能正常运行
  • 依次执行以下命令,观察是否报错,无报错即安装成功。

  • python
    import mindspore
    import mindvision
    # 确认安装成功后退出python环境
    exit()
    
  • image-20220602160058716

2.3 MobileNet V2模型微调

本实验使用MobileNet V2的预训练模型进行微调,通过删除MobileNet V2预训练模型中最后一个用于分类的1x1的卷积层的参数,使用狗与牛角包数据集对模型进行重新训练以更新模型参数。

2.3.1 具体步骤
步骤一:进入实验路径
  • 进入2.1节创建的dog_and_bread路径:
    • image-20220602161508956
步骤二:进行微调训练与评估
  • 运行mindspore_infer.py脚本,执行python mindspore_infer.py执行十轮微调训练。

    • 训练过程图image-20220602162037107

    • 模型评估内容

      Epoch: [  1 /  10], Train Loss: [0.362], Accuracy:  0.975
      epoch time: 40297.560 ms, per step time: 1389.571 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:20:51.120.006 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  2 /  10], Train Loss: [0.421], Accuracy:  1.000
      epoch time: 33285.182 ms, per step time: 1147.765 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:21:22.687.854 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  3 /  10], Train Loss: [0.395], Accuracy:  1.000
      epoch time: 31615.851 ms, per step time: 1090.202 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:21:53.611.95 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  4 /  10], Train Loss: [0.343], Accuracy:  1.000
      epoch time: 30412.341 ms, per step time: 1048.701 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:22:24.652.200 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  5 /  10], Train Loss: [0.461], Accuracy:  1.000
      epoch time: 31595.999 ms, per step time: 1089.517 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:22:55.253.750 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  6 /  10], Train Loss: [0.378], Accuracy:  1.000
      epoch time: 30743.555 ms, per step time: 1060.123 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:23:26.843.271 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  7 /  10], Train Loss: [0.392], Accuracy:  1.000
      epoch time: 31550.518 ms, per step time: 1087.949 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:23:59.384.269 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  8 /  10], Train Loss: [0.357], Accuracy:  1.000
      epoch time: 32361.001 ms, per step time: 1115.897 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:24:32.989.804 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [  9 /  10], Train Loss: [0.328], Accuracy:  1.000
      epoch time: 33875.533 ms, per step time: 1168.122 ms
      [WARNING] ME(6504:20768,MainProcess):2022-06-02-16:25:05.507.399 [mindspore\train\model.py:954] CPU cannot support dataset sink mode currently.So the evaluating process will be performed with dataset non-sink mode.
      --------------------
      Epoch: [ 10 /  10], Train Loss: [0.360], Accuracy:  1.000
      epoch time: 32197.596 ms, per step time: 1110.262 ms
      ================================================================================
      End of validation the best Accuracy is:  1.000, save the best ckpt file in ./best.ckpt
      

训练结束后会出处一个best.ckpt的模型,此时不要按ctrl+C强制退出。

2.3.2 可视化模型预测

训练完成后会输出一张推理预测图:

image-20220602162543727

关闭这张推理图之后会生成一个mobilenet_v2_1.0_224.mindir的文件,用于后面的部署。

2.4 模型格式转换

为实现模型文件在手机侧的推理功能,步骤如下:

  • 转换文件格式:将MindIR文件格式,转换成Android手机上MindSpore Lite可识别的MS文件;

  • 应用部署:在手机侧部署应用APK,即下载一个MindSpore Vision套件Android APK;

  • 应用体验:最后将ms模型文件导入到手机侧后,体验狗与牛角包的识别功能。

2.4.1 设置环境变量

转换工具需要用到一些动态库,我们需要将这些库导入环境变量中。这里我们需要得到mindspore-lite-1.6.1-win-x64 的地址{converter_path},比如我的地址C:\Users\STZZ\Desktop\dog_and_bread\mindspore-lite-1.6.1-win-x64

那么我这里{converter_path}=C:\Users\STZZ\Desktop\dog_and_bread\mindspore-lite-1.6.1-win-x64

  1. Linux下使用MindSpore Lite Converter转换文件格式。
# 下载解压后设置软件包的路径,{converter_path}为解压后工具包的路径,PACKAGE_ROOT_PATH为设置的环境变量
export PACKAGE_ROOT_PATH={converter_path}

# 将转换工具需要的动态链接库加入到环境变量LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${PACKAGE_ROOT_PATH}/tools/converter/lib:${LD_LIBRARY_PATH}
  1. Windows下使用MindSpore Lite Converter转换文件格式。
# 下载解压后设置软件包的路径,{converter_path}为解压后工具包的路径,PACKAGE_ROOT_PATH为设置的环境变量
set PACKAGE_ROOT_PATH={converter_path}
# 如set PACKAGE_ROOT_PATH=C:\Users\STZZ\Desktop\dog_and_bread

# 将转换工具需要的动态链接库加入到环境变量PATH
set PATH=%PACKAGE_ROOT_PATH%\tools\converter\lib;%PATH%
2.4.2 执行模型转换

上面我们讲过,转换的目的是:将MindIR文件格式,转换成Android手机上MindSpore Lite可识别的MS文件。这里我们需要得到mobilenet_v2_1.0_224.mindir 的地址{experiment_path},比如我的地址是image-20220602180241733

那么我这里{experimnet_path}=C:\Users\STZZ\Desktop\dog_and_bread

  1. Linux下执行转化
# 在mindspore-lite-1.6.1-linux-x64/tools/converter/converter执行转换命令
./converter_lite --fmk=MINDIR --modelFile={experiment_path}/mobilenet_v2_1.0_224.mindir  --outputFile={experiment_path}/mobilenet_v2_1.0_224
  1. WIndows下执行转化
# 在mindspore-lite-1.6.1-win-x64\tools\converter\converter路径下执行转换命令
call converter_lite --fmk=MINDIR --modelFile={experiment_path}\mobilenet_v2_1.0_224.mindir --outputFile={experiment_path}\mobilenet_v2_1.0_224
2.4.3 转换结果

image-20220602182102494

转换成功后打印CONVERT RESULT SUCCESS:0,且在当前目录下生成mobilenet_v2_1.0_224.ms文件。

image-20220602182422801

其他环境下载MindSpore Lite Converter参见下载MindSpore Lite

2.5 应用部署

2.5.1 APK应用下载

目前本实验部署只是支持安卓手机,下载MindSpore Vision套件的Android端应用APK,并在手机上安装,其应用名称显示为MindSpore Vision

MindSpore Vision APK主要是作为视觉开发工具的示例所用,提供拍照、选择图片等基础UI功能,并且提供分类、检测、人脸识别等AI应用DEMO。

打开APP后,在首页点击分类模块后,即可点击中间按钮进行拍照获取图片,或者点击上侧栏的图像按钮选择进行图片相册用于图像分类功能。

main

在默认情况下,MindSpore Vision分类模块内置了一个通用的AI网络模型对图像进行识别分类。

result

2.5.2 模型部署

最后将上述训练的自定义网络模型mobilenet_v2_1.0_224.ms部署到Android手机侧,体验狗与牛角包的识别功能。

步骤一:创建配置文件

定义模型部署需要按照如下格式定义网络模型需要用到的信息,即自定义标签文件,并在本地电脑端侧创建一个必须以custom.json命名的json格式标签文件。

{
  "title": '狗和牛角包',
  "file": 'mobilenet_v2_1.0_224.ms',
  "label": ['牛角包', '狗']
}

Json标签文件中需包含titlefilelabel三个Key值字段,其含义如下:

  • title :自定义模块标题(狗和牛角包);

  • file :上文转换好的模型文件名称;

  • label :自定义标签label的数组信息。

步骤二:标签与模型文件部署到手机

MindSpore Vision APK的首页上长按分类按钮,可以进入自定义分类模式,并且选择需要部署的标签和模型文件。

为实现手机端狗与牛角包的识别功能,需将标签文件custom.json文件和模型文件mobilenet_v2_1.0_224.ms一起放置到手机上指定目录下。这里以Android/data/Download/ 文件夹为例,首先把标签文件和模型文件同时放在上述手机地址,如图所示,点击自定义按钮,然后会弹出系统文件功能,点击左上角的打开文件,然后找到Json标签文件和模型文件存放的目录地址,并选择对应的Json文件。

step

标签与模型文件部署到手机后,即可点击中间按钮进行拍照获取图片,或者点击上侧栏的图像按钮选择图片相册用于图像,就可以进行狗与牛角包的分类识别。

result1

本实验仅包含手机侧简单的部署过程,想要了解推理更多内容请参考MindSpore Lite

2.6 实验总结

通过本次实验我们能够体验基于MindSpore框架开发的AI模型,从训练到部署到应用这一整个AI开发流程,对MindSpore的易用性有了一个很直观的感受。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值