【最佳实践】使用Caffe实现手写数字识别

举报
云上精选 发表于 2020/04/23 17:57:35 2020/04/23
【摘要】 基于Caffe引擎,开发训练脚本,并通过AI全流程开发实现手写数字识别的应用

本章节介绍在ModelArts平台如何使用Caffe实现MNIST数据集的手写数字图像识别应用。

使用Caffe实现手写数字图像识别样例的操作流程如下所示。

  1. 准备数据:获取MNIST数据集,并上传至OBS。
  2. 编写模型:编写训练脚本,并编写prototxt文件定义网络结构和配置网络训练时各种参数,然后上传至OBS桶中。
  3. 训练模型:使用ModelArts服务,新建训练作业进行模型训练。
  4. 部署模型:训练结束后,将模型导入ModelArts,并将模型部署为在线服务。
  5. 预测结果:发起预测请求获取预测结果。

准备数据

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”:训练集标签的压缩包文件。

编写模型

数据完成准备后,您需要基于Caffe接口编写模型及其相关的配置文件。在本示例中,ModelArts提供了已编写好的训练脚本和相关配置文件。

  1. 从gitee下载ModelArts-Lab工程,解压缩文件,并在“ModelArts-Lab”工程的“ModelArts-Lab-master\official_examples\Using_Caffe_to_Create_a_MNIST_Dataset_Recognition_Application\codes”目录下获取“train.py”“src”文件夹。其中,“src”文件夹包含文件及其介绍请参见表1
    表1 示例代码文件

    文件

    描述

    “train.py”

    训练脚本。

    “src/lenet_solver.prototxt”

    配置训练时参数的prototxt文件。

    “src/lenet_train_test.prototxt”

    训练时的网络结构文件。

    “src/lenet_deploy.prototxt”

    推理模型。

    “src/customize_service.py”

    推理脚本。

    “src/config.json”

    推理使用的配置文件。

  2. 将获取的文件上传至OBS中。例如“/test-modelarts/caffe/codes/”,结构如下所示。

    由于配置文件和训练脚本已编写了绝对路径,建议您直接上传的OBS文件夹必须以“codes”命名。

    test-modelarts
        |--caffe
            |--codes
                |--train.py
                |--src
                    |--lenet_solver.prototxt
                    |--lenet_train_test.prototxt
                    |--lenet_deploy.prototxt
                    |--customize_service.py
                    |--config.json

训练模型

最后,利用已经上传的数据集和训练程序脚本完成模型训练,训练结束后,将在指定目录生成模型。

  1. 在ModelArts管理控制台,进入“训练管理 > 训练作业”页面,单击左上角的“创建”
  2. “创建训练作业”页面,参考图1图2填写相关信息,然后单击“下一步”

    “算法来源”:选择的代码目录必须包含表1所示文件,且必须使用命名为“codes”文件目录。

    “数据来源”:选择数据存储位置,然后选择数据集存储的OBS路径。

    “运行参数”“data_path_suffix”用于指定代码目录的最后一级目录名称,本示例为“data_path_suffix=codes”。如果此处不设置codes目录,训练作业将执行失败。

    “资源池”:由于训练时间较长,建议选择GPU资源池。
    图1 创建训练作业-基本信息
    图2 创建训练作业-详细参数
  3. “规格确认”页面,确认训练作业的参数信息,确认无误后单击“提交”
  4. 在训练作业管理页面,当训练作业变为“运行成功”时,即完成了模型训练过程。如有问题,可单击作业名称,进入作业详情界面查看训练作业日志信息。
    系统将生成的模型存储在此训练输出位置下的model文件夹中,您可以在前往OBS查看生成的模型文件。本示例中,生成的模型存储在 “/test-modelarts/caffe/mnist-model/model”目录下。

    训练作业需要花费一些时间,预计十几分钟。当训练时间超过一定时间(如1个小时),请及时手动停止,释放资源。否则会导致欠费,尤其对于使用GPU训练的模型项目。

部署模型

模型训练完成后,可以将模型部署为在线预测服务。在部署模型之前,确保准备数据中的推理代码和配置文件已按要求上传。您也可以基于模型包规范,开发自己所需的推理代码及配置文件。

  1. 在ModelArts管理控制台,单击左侧导航栏中的模型管理>模型,进入“模型”页面,单击“导入”
  2. “导入模型”页面,参考图3填写相关参数,然后单击“立即创建”
    “元模型来源”中,选择 “从OBS中选择”页签。然后在 “选择元模型”右侧文本框选择训练作业中 “训练输出位置”指定的路径。
    图3 导入模型

    “模型列表”页面,当模型状态变为“正常”时,表示模型已导入成功。

  3. 单击模型名称左侧的小三角,打开此模型下的所有版本。在对应版本所在行,单击操作列“部署>在线服务”,将模型部署为在线服务。
    “部署”页面,参考 图4填写参数,然后根据界面提示完成在线服务创建。
    图4 部署模型

预测结果

完成模型部署后,等待服务部署完成,当服务状态显示为“运行中”,表示服务已部署成功。

  1. “在线服务”页面,单击在线服务名称,进入服务详情页面。
  2. 单击“预测”页签,在“选择预测图片文件”右侧,单击“上传”按钮选择一张黑底白字的图片,然后单击“预测”

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

    • 由于推理代码和配置文件中已指定图片要求,用于预测的图片,大小必须为“28px*28px”,且图片必须是黑底白字。
    • 建议不要使用数据集中自带的图片,可以使用Windows自带的画图工具绘制一张。
    图5 预测结果展示
  3. 如果不再需要使用此模型及在线服务,建议清除相关资源,避免产生不必要的费用。
    • “在线服务”页面,“停止”“删除”刚创建的在线服务。
    • “模型管理”页面,“删除”刚导入的模型。
    • “训练作业”页面,“删除”运行结束的训练作业。
    • 进入OBS,删除本示例使用的OBS桶及文件夹,以及文件夹的文件。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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