使用MXNet实现手写数字识别

举报
运气男孩 发表于 2021/09/30 22:29:04 2021/09/30
【摘要】 ModelArts为AI工程师提供了一站式AI开发全流程管理能力,AI工程师可以从数据准备、模型开发、模型训练、模型部署,一站式完成整个AI过程。兼容业界主流引擎,兼容用户习惯,同时,提供了自研的MoXing深度学习框架,提升算法开发效率和训练速度。这个小案例提供了使用MXNet实现手写数字图像识别应用的示例,帮助您快速梳理ModelArts的AI开发全流程。MNIST是一个手写体数字识别数...

ModelArts为AI工程师提供了一站式AI开发全流程管理能力,AI工程师可以从数据准备、模型开发、模型训练、模型部署,一站式完成整个AI过程。兼容业界主流引擎,兼容用户习惯,同时,提供了自研的MoXing深度学习框架,提升算法开发效率和训练速度。

这个小案例提供了使用MXNet实现手写数字图像识别应用的示例,帮助您快速梳理ModelArts的AI开发全流程。

MNIST是一个手写体数字识别数据集,常被用作深度学习的入门样例。本示例将针对MNIST数据集,使用MXNet原生接口编写的模型训练脚本(ModelArts默认提供),在ModelArts中完成模型训练,并将此模型部署为在线服务。部署完成后,用户可通过在线服务识别输入图片中的数字。

开始使用样例前,请仔细阅读准备工作罗列的要求,提前完成准备工作。本示例模型构建的步骤如下所示:

  • 步骤1:准备数据

  • 步骤2:训练模型

  • 步骤3:编写推理代码和配置文件,并上传至模型所在路径

  • 步骤4:导入模型

  • 步骤5:部署上线

  • 步骤6:测试服务

  • 步骤7:清除相应资源,避免产生费用

准备工作

已注册华为云帐号,且在使用ModelArts前检查帐号状态,帐号不能处于欠费或冻结状态。

当前帐号已完成访问授权的配置。如未完成,请参考使用委托授权针对之前使用访问密钥授权的用户,建议清空授权,然后使用委托进行授权。

已在OBS服务中创建桶和文件夹,用于存放样例数据集以及模型。如下示例中,请创建命名为“test-modelarts”的桶,并创建如表1所示的文件夹。

创建OBS桶和文件夹的操作指导请参见创建桶新建文件夹。请确保您使用的OBS与ModelArts在同一区域。

表1 文件夹列表

文件夹名称

用途

“dataset-mnist”

用于存储数据集。

“MXNet-mnist/code/”

用于存储训练脚本。

“MXNet-mnist/output/”

用于存储训练输出的模型和预测文件。

“MXNet-mnist/log/”

用于存储训练作业的日志。

针对此示例,ModelArts提供了部署上线需使用的训练脚本、推理代码和配置文件。请获取示例文件并上传OBS指定路径,详细请参见表2。

表2 上传示例文件至OBS

文件名称

描述

上传至如下OBS路径中

“train_mnist.py”

训练脚本。

“test-modelarts/MXNet-mnist/code/”

“customize_service.py”

推理代码。

“test-modelarts/MXNet-mnist/output/model”

提示

请在训练作业完成后,再执行上传操作。


“config.json”

配置文件。

    1. 获取示例文件。

      在gitee的ModelArts-Lab工程中,单击“克隆/下载”,然后单击“下载ZIP”,下载工程。

      下载完成后,解压缩“ModelArts-Lab-master.zip”文件,示例文件存储路径为:“\ModelArts-Lab-master\official_examples\Using_MXNet_to_Create_a_MNIST_Dataset_Recognition_Application\codes”

    2. 将示例文件上传至对应OBS路径。上传文件至OBS的操作指导请参见上传文件

步骤1:准备数据

ModelArts在公共OBS桶中提供了MNIST数据集,命名为“Mnist-Data-Set”,因此,本文的操作示例使用此数据集进行模型构建。您需要执行如下操作,将数据集上传至您的OBS目录下,即准备工作中您创建的OBS目录“test-modelarts/dataset-mnist”

  1. 单击数据集下载链接,将“Mnist-Data-Set”数据集下载至本地。

  2. 在本地,将“Mnist-Data-Set.zip”压缩包解压。例如,解压至本地“Mnist-Data-Set”文件夹下。

  3. 参考上传文件,使用批量上传方式将“Mnist-Data-Set”文件夹下的所有文件上传至“test-modelarts/dataset-mnist”OBS路径下。

    “Mnist-Data-Set”数据集包含的内容如下所示,其中“.gz”为对应的压缩包。

    • “t10k-images-idx3-ubyte”:验证集,共包含10000个样本。

    • “t10k-images-idx3-ubyte.gz”:验证集的压缩包文件。

    • “t10k-labels-idx1-ubyte”:验证集标签,共包含10000个样本的类别标签。

    • “t10k-labels-idx1-ubyte.gz”:验证集标签的压缩包文件。

    • “train-images-idx3-ubyte”:训练集,共包含60000个样本。

    • “train-images-idx3-ubyte.gz”:训练集的压缩包文件。

    • “train-labels-idx1-ubyte”:训练集标签,共包含60000个样本的类别标签。

    • “train-labels-idx1-ubyte.gz”:训练集标签的压缩包文件。

步骤2:训练模型

数据准备完成后,您可以创建一个训练作业,选用MXNet引擎,基于已上传的“train_mnist.py”训练脚本,并最终生成一个可用的模型。本示例已提供编码完成的脚本(基于MXNet引擎的原生接口),如果使用自行编写的代码,请使用ModelArts支持的引擎类型及其对应版本的接口,并满足其要求。

    1. 在ModelArts管理控制台,在左侧导航栏中选择“训练管理 > 训练作业”,进入“训练作业”管理页面。

    2. 单击“创建”,进入“创建训练作业”页面。

    3. “创建训练作业”页面,填写相关信息,参数填写指导请参见如下步骤。

      • “算法来源”:选择常用框架,在“AI引擎”右侧下拉框中选择“MXNet”,并选择“MXNet-1.2.1-python2.7”版本。选择“代码目录”“启动文件”。此示例中,“代码目录”的OBS路径为“test-modelarts/MXNet-mnist/code/”“启动文件”的OBS路径为“test-modelarts/MXNet-mnist/code/train_mnist.py”。训练脚本“train_mnist.py”上传说明请参见准备工作

      • “数据来源”:请选择“数据存储位置”页签,然后指定MNIST数据集存储的OBS路径。

      • “训练输出位置”:训练作业生成的模型和预测文件的存储路径。使用准备工作中已创建好的“mnist-model”文件夹。如果没有可用文件夹,您可以单击“选择”,在弹出对话框中新建文件夹。

      • “运行参数”:单击“增加运行参数”,增加“max_epoches=10”参数。针对“max_epoches”参数,1个epoch代表整个数据集训练一遍,此运行参数表示训练10个epoch,数值可更改,不填写时使用默认值(默认值为100),“max_epoches”值越大训练时间越长。

      • “作业日志路径”:从已有的OBS桶中选择日志存储路径。使用准备工作中已创建好的“train-log”文件夹。如果没有可用文件夹,您可以单击“选择”,在弹出对话框中新建文件夹。

    a.在基本信息区域,“计费模式”“版本”为系统自动生成,不需修改。请根据界面提示填写“名称”“描述”

图1 名称和描述
image.png

    b.在参数配置区域,选择“数据来源”,设置“算法来源”“运行参数”“训练输出位置”“作业日志路径”

图2 作业参数配置
image.png

在资源设置区域,选择“公共资源池”,选择资源“类型”“规格”以及“计算节点个数”


说明:由于MNIST数据集数据较多,为提升训练效率,操作示例选择GPU训练。但是,GPU的费用高于CPU,请根据实际情况选择可用的资源池。

如果选择免费规格,请仔细阅读提示信息。

图3 设置资源
image.png

单击“下一步”完成信息填写。

  1. “规格确认”页面,确认训练作业的参数信息,确认无误后单击“提交”

  2. “训练作业”管理页面,可以查看新建训练作业的状态。训练作业的创建和运行需要一些时间,预计十几分钟,当状态变更为“运行成功”时,表示训练作业已完成。

    您可以单击训练作业的名称,可进入此作业详情页面,了解训练作业的“配置信息”“日志”“资源占用情况”等信息。在“训练输出位置”所在的OBS路径中,即“/test-modelarts/mnist-model/”路径,可以获取到生成的模型文件。

    图4 训练作业详情页面
    image.png

步骤3:编写推理代码和配置文件,并上传至模型所在路径

参考准备工作中的指导,获取推理代码“customize_service.py”和配置文件“config.json”。此推理代码和配置文件是ModelArts提供的示例。

在步骤2:训练模型中,训练作业生成的模型存储在“test-modelarts/mnist-model”路径下,且系统将自动生成“model”文件夹,模型相关的文件存储在此目录下。将获取的“customize_service.py”“config.json”文件,上传至“model”文件夹下。
说明:

如果训练作业运行多次,将“训练输出位置”生成不同的版本,即“mnist-model”目录下将生成多种版本的目录,如“V0001”、“V0002”,请基于训练作业的版本,将文件上传至对应版本下的“model”文件夹内。

前往OBS管理控制台,找到“test-modelarts”桶,然后进入“test-modelarts/mnist-model/model”路径,执行“上传对象”的操作。OBS的上传操作指导,请参见上传文件

图5 上传推理代码和配置文件
image.png

步骤4:导入模型

训练完成的模型还是存储在OBS路径中,您可以将此模型导入到ModelArts中进行管理和部署。

  1. 在ModelArts管理控制台中,单击左侧导航栏中的模型管理>模型,进入“模型”页面。

  2. “模型”页面,单击“导入”

  3. “导入模型”页面,设置相关参数,然后单击“立即创建”

    图6 导入模型页面
    image.png
    • 设置模型的“名称”“版本”

    • “元模型来源”:单击“从对象存储服务(OBS)中选择”页签,在“选择元模型”参数中,设置此模型所在的OBS路径,如“test-modelarts/MXNet-mnist/output/”“AI引擎”会根据选择路径下的模型文件自动选择,当前示例使用的是“MXNet”引擎。

      说明:

      选择模型所在路径时,请务必选择“model”文件夹的父目录,如果选择到“model”文件夹,将导致系统无法自动识别模型及配置文件,无法导入模型。

    • “推理代码”:系统将根据选择的原模型信息,自动生成对应推理代码路径及文件名称。

  4. 模型导入完成后,系统将自动跳转至模型列表页面。您可以在模型列表页面查看已导入的模型及其版本。

步骤5:部署上线

模型导入完成后,且模型状态为“正常”时,可以将模型部署上线,可部署为“在线服务”“批量服务”“边缘服务”。如下操作步骤以部署为在线服务为例。

  1. “模型”页面,单击模型名称左侧的小三角,打开此模型下的所有版本。在对应版本所在行,单击操作列的“部署”,然后在下拉框中选择“在线服务”,进入“部署”页面。

  2. “部署”页面中,设置相关参数,然后单击“下一步”

    设置在线服务的“名称”。在“选择模型及配置”区域中,系统将自动选择步骤步骤4:导入模型中的模型及其版本,在“计算节点规格”右侧下拉框中选择使用的资源,本示例选用“CPU:2核 8GiB”资源部署在线服务。

    环境变量:在本示例中,由于推理代码和配置文件需要补充三个信息,请参考如下指导补充环境变量。

    图7 部署在线服务
    image.png
    • “input_data_name”:参数值必须是images。针对自己开发训练脚本的场景,此参数是必须设置的。您可以在导入模型时设置参数,也可以写到推理代码中。

    • “input_data_shape”:代表NCHW。本示例的数值为“0,1,28,28”,表示设置了输入图片的规则,其中,输入预测图片大小必须是“28px*28px”

    • “output_data_shape”:模型输出的类别数。本示例指定范围为“0,10”,表示输出结果会显示“0~9”中10个类别的数字,以及属于每一个类别的概率。此范围必须与训练代码中的类别数一致。

  3. “规格确认”页面,确认信息完毕后,单击“提交”

  4. “部署上线>在线服务”页面,您可以查看在线服务的相关信息。由于模型部署上线需要花费一些时间,请耐心等待几分钟。当在线服务的状态为“运行中”时,表示在线服务已部署完成。

步骤6:测试服务

在线服务部署成功后,您可以进入在线服务,发起预测请求进行测试。

  1. “在线服务”管理页面,单击在线服务名称,进入在线服务详情页面。

    在线服务详情页面中,单击“预测”页签,进入预测页面。

    “选择预测图片文件”右侧,单击“上传”按钮,上传一张黑底白字的图片,然后单击“预测”

    预测完成后,预测结果显示区域将展示预测结果,根据预测结果内容,可识别出此图片的数字是“8”的概率为“1”


    图8 预测成功结果
    image.png
    1. 由于推理代码和配置文件中已指定图片要求,用于预测的图片,大小必须为“28px*28px”,且图片必须是黑底白字。

    2. 建议不要使用数据集中自带的图片,可以使用Windows自带的画图工具绘制一张。

    3. 本示例代码仅输出了Top5置信度的类别。

步骤7:清除相应资源,避免产生费用

为避免产生不必要的费用,在完成试用后,建议您删除相关资源,如在线服务、训练作业、数据及其OBS目录。

  • 删除在线服务:在“在线服务”页面,单击操作列的“更多>删除”

  • 删除训练作业:在“训练作业”页面,单击操作列的“删除”

  • 删除数据:前往OBS,删除上传的数据,然后删除文件夹及OBS桶。

  • 删除训练脚本和模型等文件:进入OBS管理控制台,删除相关文件夹及数据,然后再删除“test-modelarts”的桶。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。