AI开发平台ModelArtsAI开发平台ModelArts

计算
弹性云服务器 ECS
裸金属服务器 BMS
云手机 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器 HECS
VR云渲游平台 CVR
特惠算力专区
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属企业存储服务
云存储网关 CSG
专属分布式存储服务 DSS
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘小站 IES
智能边缘平台 IEF
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
园区智能体 CampusGo
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
视频分析服务 VAS
语音交互服务 SIS
知识图谱 KG
人证核身服务 IVS
IoT物联网
设备接入 IoTDA
设备管理 IoTDM(联通用户专用)
全球SIM联接 GSL
IoT开发者服务
IoT数据分析
车联网服务 IoV
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
开发与运维
软件开发平台 DevCloud
项目管理 ProjectMan
代码托管 CodeHub
流水线 CloudPipeline
代码检查 CodeCheck
编译构建 CloudBuild
部署 CloudDeploy
云测 CloudTest
发布 CloudRelease
移动应用测试 MobileAPPTest
CloudIDE
Classroom
开源镜像站 Mirrors
应用魔方 AppCube
云性能测试服务 CPTS
应用管理与运维平台 ServiceStage
云应用引擎 CAE
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
资源管理服务 RMS
应用身份管理服务 OneAccess
区块链
区块链服务 BCS
可信跨链服务 TCS
智能协作
IdeaHub
开发者工具
SDK开发指南
API签名指南
DevStar
HCloud CLI
Terraform
Ansible
API问题定位指导
云生态
云市场
合作伙伴中心
华为云培训中心
其他
管理控制台
消息中心
产品价格详情
系统权限
我的凭证
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
应用编排服务 AOS
多云容器平台 MCP
基因容器 GCS
容器洞察引擎 CIE
云原生服务中心 OSC
容器批量计算 BCE
容器交付流水线 ContainerOps
应用服务网格 ASM
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB (for openGauss)
云数据库 GaussDB(for MySQL)
云数据库 GaussDB NoSQL
数据管理服务 DAS
数据库和应用迁移 UGO
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据湖治理中心 DGC
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
API网关 APIG
分布式缓存服务 DCS
分布式消息服务RocketMQ版
企业应用
域名注册服务 Domains
云解析服务 DNS
云速建站 CloudSite
网站备案
华为云WeLink
会议
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMAExchange
API全生命周期管理 ROMA API
安全与合规
安全技术与应用
DDoS防护 ADS
Web应用防火墙 WAF
云防火墙 CFW
应用信任中心 ATC
企业主机安全 HSS
容器安全服务 CGS
云堡垒机 CBH
数据库安全服务 DBSS
数据加密服务 DEW
数据安全中心 DSC
云证书管理服务 CCM
SSL证书管理 SCM
漏洞扫描服务 VSS
态势感知 SA
威胁检测服务 MTD
管理检测与响应 MDR
安全治理云图 Compass
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
专属云
专属计算集群 DCC
解决方案
高性能计算 HPC
SAP
游戏云
混合云灾备
华为工业云平台 IMC
价格
成本优化最佳实践
专属云商业逻辑
用户服务
帐号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
更新时间:2021-11-06 GMT+08:00
分享

使用MXNet实现Caltech图像识别

本教程适用于旧版训练。旧版训练即将下线,请使用新版训练教程,具体请参见使用自定义算法在ModelArts上构建模型

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

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

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

如果您了解MXNet引擎,且想基于此示例进行更多操作,请参见进阶使用说明了解更多。

准备工作

  • 在OBS管理控制台,新建桶和文件夹,用于存储数据和示例代码文件。本示例使用的桶和文件夹如表1所示。
    表1 需要新建的桶和文件夹

    OBS桶

    文件夹

    用途

    test-modelarts

    “/Caltech/data”

    用于存储Caltech数据集。

    /Caltech/codes

    用于存储示例代码。

    /Caltech/caltech-log

    用于存储生成的模型文件。

  • 从gitee下载ModelArts-Lab工程。下载完成后,将“ModelArts-Lab-master.zip”文件解压缩,在“ModelArts-Lab-master\official_examples\Using_MXNet_to_Train_Caltech101\codes”目录中获取示例代码,并上传至OBS中。详细文件及对应OBS路径请参见表2
    表2 获取示例文件并上传OBS

    获取的文件

    存储的OBS路径

    • “train_caltech.py”
    • “libimageaugdefault.so”
    • “symbol”目录及其下所有文件

    “test-modelarts/Caltech/codes”

    • “customize_service.py”
    • “config.json”

    “test-modelarts/Caltech/output/model”

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

准备数据

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

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”文件里是图片路径的列表,即“train”“val”数据集里各有哪些图片。“idx”文件可以帮忙做shuffle的文件,但是开发者在训练模型时不需要此文件,整个示例操作过程中不需关注。

训练模型

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

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

  1. 请参见准备工作,将“codes”目录下训练作业所需文件上传至OBS,例如“test-modelarts/Caltech/codes”
    • codes目录下训练模型所需文件为:“train_caltech.py”“libimageaugdefault.so”“symbol”目录下所有文件。
    • OBS中用于存储训练脚本的文件夹必须命名为“codes”。否则训练作业将执行失败。
  2. 在ModelArts管理控制台,进入“训练管理 > 训练作业”页面,单击左上角的“创建”
  3. “创建训练作业”页面,参考图1图2填写相关信息,然后单击“下一步”

    “算法来源”:选择常用框架

    “AI引擎”:请务必选择“MXNet”“MXNet-1.2.1-python3.6”。由于示例代码已编写其使用引擎版本,如果使用“MXNet-1.2.1-python2.7”,训练作业将运行失败。

    “代码目录”:设置为“test-modelarts/Caltech/codes”

    “启动文件”:设置为“train_caltech.py”示例脚本所在路径。

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

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

    “资源-类型”:建议选择GPU资源,由于此训练作业数据量较大,运行时间较长,建议选择GPU资源。

    图1 创建训练作业-填写基本信息
    图2 创建训练作业-详细参数
    图3 创建训练作业-资源规格

    表3 运行参数说明

    参数

    说明

    num_epochs

    训练需要迭代的次数,默认为“30”

    batch_size

    训练的每次更新包含的样本数量大小, 默认为“128”

    lr

    学习率,默认为“0.1”

    lr_step

    学习率减小的epoch,默认为“16,24,27”。也就是说学习率会在第16个epoch结束时减小为原来的0.1倍,为0.01,第24、27epoch同理。

    num_layers

    resnet模型的卷积层数,可供选择的有“18”“34”“50”,默认为“34”

    disp_batches

    每隔多少步输出一次,默认为“20”

  4. “规格确认”页面,确认训练作业的参数信息,确认无误后单击“提交”
  5. 在训练作业管理页面,当训练作业变为“运行成功”时,即完成了模型训练过程。如有问题,可单击作业名称,进入作业详情界面查看训练作业日志信息。

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

部署模型

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

  1. 在部署模型之前,请参见准备工作,将推理代码和配置文件上传至对应OBS路径下。本示例使用的OBS路径为“/test-modelarts/Caltech/output/model”
  2. 在ModelArts管理控制台,单击左侧导航栏中的模型管理>模型,进入“模型”页面,单击“导入”
  3. “导入”页面,参考图4填写相关参数,然后单击“立即创建”
    “元模型来源”中,选择“从对象存储服务(OBS)中选择”页签。然后在“选择元模型”右侧文本框选择训练作业中“训练输出位置”指定的路径。
    图4 导入训练模型

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

  4. 单击模型名称左侧的小三角,打开此模型下的所有版本。在对应版本所在行,单击操作列“部署>在线服务”,将模型部署为在线服务。
    “部署”页面,系统自动选择上一步骤导入的模型,然后根据界面提示完成在线服务创建。
    图5 部署模型为在线服务

预测结果

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

  1. “在线服务”页面,单击在线服务名称,进入服务详情页面。
  2. 单击“预测”页签,然后单击“上传”选择本地用于预测的图片,然后单击“预测”

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

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

    图6 图片预测
  3. 如果不在需要使用此模型及在线服务,建议清除相关资源,避免产生不必要的费用。
    • “在线服务”页面,“停止”“删除”刚创建的在线服务。
    • 进入OBS,删除本示例使用的OBS桶及文件夹,以及文件夹的文件。
    • 删除数据:前往OBS,删除上传的数据,然后删除文件夹及OBS桶。

进阶使用说明

  • 优化模型

    当然,并不是所有的图片都能够预测正确,比如本实验如果使用的全都是默认的参数去进行训练,在验证集上差不多只有78%左右的准确率。如果对结果不满意,或者想自己尝试让深度学习的模型效果更加好,可以调节下列参数“num_epochs”“batch_size”“lr”“lr_step”“num_layers”,详细参数说明请参见表4。在训练日志中,每个epoch结束都会输出模型当前在验证集上的表现,如图7所示,可以通过这些变化来观察改动了上述参数后对训练模型有什么样的影响。

    图7 训练输出日志
    表4 指标值解释

    指标值

    说明

    Validation-accuracy

    预测的置信度最高的类别是正确的比例,即上述推理测试时输出predicted_label正确占总预测结果的比例,结果越高,模型越好。在深度学习领域一般称为top-1

    Validation-cross-entropy

    交叉熵,用来评判对每一类预测准确率的损失值,越小越好

    Validation-top_k_accuracy_5

    预测的置信度最高的前5类中如果有正确的那一类,就认为这次预测是正确的。在深度学习领域一般称为top-5,同样,结果越高,模型越好。

    数值的改变并不能提供一个直观的模型效果提升,建议使用更多测试图片,图片在现有的模型上有的能预测正确,有的不能。例如,如图8所示图片,这张图片概率排在第二的是预测正确的,也就是top5是正确的。经过调参,可以让这张图片预测的结果变成正确的,同样,也可能将原来那些预测不正确的图片预测正确,这就是对模型的能力有一定提升。当然,如果会使用MXNet,完全可以自己修改代码或者制作自己的rec文件来进行训练,ModelArts同样提供开发环境可以让使用者直接在云上修改代码,详情操作请参见•使用开发环境修改模型

    图8 预测错误的图片
  • 使用开发环境修改模型

    如下操作只针对想使用开发环境在云上修改代码或者修改文件的使用者。

    1. 在ModelArts管理控制台,在左侧导航栏中选择“开发环境>Notebook”,单击“进入旧版”,在旧版“Notebook”页面,单击“创建”,创建一个新的Notebook。
    2. 在创建Notebook页面,根据界面提示填写参数,详细指导请参见创建Notebook实例
    3. 当Notebook状态变为运行中时,单击操作列打开,进入Jupyter页面。在Jupyter界面可以直接打开相应文件进行更改然后保存,也可以在右上角的“New”中创建Python环境运行代码做调试,或者新建“Terminal”(linux云上开发环境)去调试代码。

      如果不需要使用Notebook时,请及时在“Notebook”页面停止服务,避免造成欠费。

分享:

    相关文档

    相关产品

关闭导读