使用MXNet实现Caltech图像识别

举报
运气男孩 发表于 2021/06/27 22:13:04 2021/06/27
【摘要】 这里介绍在ModelArts平台如何使用深度学习框架MXNet训练Caltech数据集,并把得到的模型发布成一个可用的推理服务。首先,参考[准备工作]完成前期准备,然后,参考如下基本流程使用MXNet完成Caltech图像识别应用。[准备数据]:获取Caltech101数据集,并上传至OBS。[训练模型]:使用MXNet原生接口编写模型训练脚本,新建训练作业进行模型训练。[部署模型]:得到训...

这里介绍在ModelArts平台如何使用深度学习框架MXNet训练Caltech数据集,并把得到的模型发布成一个可用的推理服务。

首先,参考[准备工作]完成前期准备,然后,参考如下基本流程使用MXNet完成Caltech图像识别应用。

  1. [准备数据]:获取Caltech101数据集,并上传至OBS。
  2. [训练模型]:使用MXNet原生接口编写模型训练脚本,新建训练作业进行模型训练。
  3. [部署模型]:得到训练好的模型文件后,新建预测作业将模型部署为在线预测服务。
  4. [预测结果]:发起预测请求获取预测结果。

准备工作

  • 在OBS管理控制台,新建桶和文件夹,用于存储数据和示例代码文件。

    表1 需要新建的桶和文件夹

image.png

  • 从gitee下载ModelArts-Lab工程,并在“ModelArts-Lab”工程中获取codes文件夹中的示例代码,并上传至OBS中。详细文件及对应OBS路径请参见表2

    表2 获取示例文件并上传OBS

    获取的文件

    image.png

    说明:

    • 请在训练作业完成后,再执行上传操作。
    • 如果训练作业运行多次,将生成不同的版本,“caltech-log”目录下将生成多种版本的目录,如“V0001”、“V0002”,请基于训练作业的版本,将文件上传至对应版本下的“model”文件夹内。

准备数据

Caltech101数据集是加利福尼亚理工学院提供的101类(加一个背景类)开源图像数据集,每一类大约有40~800张左右的图片,每张图片是接近300×200大小不等的。

ModelArts已将Caltech101数据集存储到OBS公共桶中,且命名为“Caltech101-data-set”。您可以通过如下步骤获取数据集,并上传至OBS桶对应的文件夹下。例如本示例中的路径为“test-modelarts/Caltech/data”。

  1. 单击数据集下载链接,将“Caltech101-data-set”数据集下载至本地。

  2. 在本地,将“Caltech101-data-set.zip”压缩包解压。例如,解压至本地“Caltech101-data-set”文件夹下。

  3. [上传文件],使用批量上传方式将“Caltech101-data-set”文件夹下的所有文件上传至“test-modelarts/Caltech/data”OBS路径下。

    为了方便进行预处理操作,已经制作好了MXNet使用的“rec”文件。需要说明的是,在深度学习领域,训练之前一般会把数据集按“6:2:2”的比例分成训练集、验证集和测试集。训练集就是训练时使用的数据集,验证集是在训练过程中评估模型好坏的数据集,测试集是在训练完成以后评估模型的数据集。由于本示例不需要评估模型最终的结果如何,所以没有使用测试集,直接按“8:2”分成了训练集和验证集。“train”是训练集,“val”是验证集。数据集中的“lst”文件和“idx”文件,“lst”文件里是图片路径的列表,即“train”和“val”数据集里各有哪些图片。“idx”文件可以帮忙做shuffle的文件,但是开发者在训练模型时不需要此文件,整个示例操作过程中不需关注。

训练模型

数据准备完成后,您需要使用MXNet接口编写训练脚本代码。ModelArts提供了一个编写好的代码示例,train_caltech.py,如下操作使用此示例训练模型。

本示例使用深度卷积神经网络resnet进行了训练,resnet的卷积层个数可选为“18”、“34”、“50”。在可选的“18”、“34”、“50”情况下,模型层数越大,代表模型越深,训练所需的时间越长,模型准确率能更好。resnet是常用的图像分类卷积神经网络之一。

  1. 参照上面的[准备工作],将“codes”目录下训练作业所需文件上传至OBS,例如“test-modelarts/Caltech/code”。

说明:
- codes目录下训练模型所需文件为:“train_caltech.py”、“libimageaugdefault.so”和“symbol”目录下所有文件。
- OBS中用于存储训练脚本的文件夹必须命名为“codes”。否则训练作业将执行失败。

  1. 在ModelArts管理控制台,进入“训练管理 > 训练作业”页面,单击左上角的“创建”。

  2. 在“创建训练作业”页面,参考[图1]和[图2]填写相关信息,然后单击“下一步”。

    “算法来源”:设置为“train_caltech.py”示例脚本所在路径。

    “数据来源”:设置为Caltech101示例数据存储的路径。

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

    说明:

    • AI引擎请务必选择“MXNet”,“MXNet-1.2.1-python3.6”。由于示例代码已编写其使用引擎版本,如果使用“MXNet-1.2.1-python2.7”,训练作业将运行失败。
    • 由于此训练作业数据量较大,运行时间较长,建议选择GPU资源。

    图1 创建训练作业-填写基本信息
    image.png

    图2 创建训练作业-详细参数
    image.png

    图3 创建训练作业-资源规格
    image.png

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

  4. 在训练作业管理页面,当训练作业变为“运行成功”时,即完成了模型训练过程。如有问题,可单击作业名称,进入作业详情界面查看训练作业日志信息。

    说明:

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

  5. (可选)在模型训练的过程中或者完成后,可以通过创建可视化作业查看一些参数的统计信息。

    其中,“训练输出位置”请选择步骤训练作业中“训练输出位置”参数中的路径。根据界面提示完成可视化作业创建。

表3 运行参数说明

image.png

部署模型

模型训练完成后,可以创建预测作业,将模型部署为在线预测服务。在部署模型之前,获取推理代码“customize_service.py”和配置文件“config.json”并上传至OBS中。此推理代码和配置文件为ModelArts为操作样例提供的示例。

  1. 在部署模型之前,请参见[准备工作],将推理代码和配置文件上传至对应OBS路径下。本示例使用的OBS路径为“/test-modelarts/Caltech/output/”。

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

  3. 在“导入”页面,参考[图4]填写相关参数,然后单击“立即创建”。

    在“元模型来源”中,选择“从对象存储服务(OBS)中选择”页签。然后在“选择元模型”右侧文本框选择训练作业中“训练输出位置”指定的路径。

    图4 导入训练模型
    image.png

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

  4. 单击模型名称左侧的小三角,打开此模型下的所有版本。在对应版本所在行,单击操作列“部署>在线服务”,将模型部署为在线服务。

    在“部署”页面,系统自动选择上一步骤导入的模型,然后根据界面提示完成在线服务创建。

    图5 部署模型为在线服务
    image.png

预测结果

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

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

  2. 单击“预测”页签,然后单击“上传”选择本地用于预测的图片,然后单击“预测”。

    “predicted_label”:表示模型最终认为这张图片的归类,这里我们可以看到输出的是“laptop”也就是笔记本电脑,表示模型预测正确。

    “scores”:置信度,也就是模型认为这张图片属于某一类的概率。会输出概率最高的前五项,是在网络的最后一层加入了softmax层转化来的。

    图6 图片预测
    image.png

  3. 如果不在需要使用此模型及在线服务,建议清除相关资源,避免产生不必要的费用。

    • 在“在线服务”页面,“停止”或“删除”刚创建的在线服务。
    • 进入OBS,删除本示例使用的OBS桶及文件夹,以及文件夹的文件。
    • 删除数据:前往OBS,删除上传的数据,然后删除文件夹及OBS桶。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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