Model Arts 新手入门 —— 找云宝【我的低代码AI体验】
Model Arts
首先登录华为云官网:https://www.huaweicloud.com/
然后依次选择“产品”—>“人工智能”—>“AI开发平台ModelArts”
Model Arts 官网地址为:https://www.huaweicloud.com/product/modelarts.html
AI平台ModelArts,是面向开发者的一站式 AI 平台,为机器学习与深度学习提供海量数据预处理及交互式智能标注、大规模分布式训练、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。
新手入门 —— 找云宝
项目概述
使用自动学习实现物体检测应用
实验目的
这里提供了一个“找云宝”样例(“云宝”是华为云的吉祥物),帮助您快速熟悉ModelArts自动学习的使用过程。
实验步骤
-
准备数据
登录OBS服务,创建OBS桶和文件夹。(请自定义桶名称,不能与其他桶重名)
创建OBS桶和文件夹的操作指导请参见 创建桶 和 新建文件夹。为保证数据能正常访问,请务必保证创建的OBS桶与ModelArts在同一区域。 -
获取数据
单击 数据集下载链接,将 “Yunbao-Data-Custom” 数据集下载至本地并解压。
参考 上传文件,使用批量上传方式将 “Yunbao-Data-Custom” 文件夹下的所有文件上传至 “test-modelarts/dataset-yunbao” OBS路径下。获取的数据集分为2个子目录,分别为 “eval” 和 “train”。“train” 存储的数据用于模型训练,“eval” 存储的数据可用于模型的预测。 -
执行引导
完成前两步后,点击下面“开始引导”按钮,根据引导完成找云宝任务
准备数据
登录华为云官网:https://www.huaweicloud.com/
然后依次选择“产品”—>“存储”—>“对象存储服务OBS”
或者直接进入OBS官网:https://www.huaweicloud.com/product/obs.html
对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,使用时无需考虑容量限制,并且提供多种存储类型供选择,满足客户各类业务场景诉求
创建OBS桶
进入控制台,左侧默认会定位到“桶列表”项,按流程引导步骤创建桶
注意:创建桶操作是免费的,但往桶里面存储数据需要按量收费
桶命名规范有几点要求
- 不能与别人创建的桶重名
- 仅支持小写字母、数字、中划线(-)、英文句号(.)
- 禁止以中划线(-)或英文句号(.)开头及结尾
配置如下(你们可以自行修改)
- 区域:华北-北京四
- 桶名称:yunbao-2023
- 数据冗余存储策略:单AZ存储(为了省钱)
- 默认存储类型:低频访问存储
- 桶策略:私有
点击“创建”按钮,会出来一个确认对话框,点击确认后就会立即创建桶了
创建成功后,会跳转到桶列表页面,然后里面展现出你刚刚创建的OBS桶
创建文件夹
注意:后面发现使用OBS Browser+工具上传,会把文件夹也上传上来,所以这里无需新建文件夹。如果你要手动一张张的通过网页端上传,这里才要新建这个文件夹
点击桶名称,来到“桶对象”页
点击“新建文件夹”按钮,分别创建两个文件夹“eval” 和 “train”
- “train” 存储的数据用于模型训练
- “eval” 存储的数据可用于模型的预测
获取数据
数据集下载
点击链接,将 Yunbao-Data-Custom.zip 下载到本地。目录结构如下,里面有两个文件夹,分别是 eval 和 train
train 文件夹中的内容
“train” 存储的数据用于模型训练。打开该目录,可以看到各种云宝的图片。其中,有的图片还带有一个同名的xml文件
我们打开 2018-09-25_222145.jpg 和与之同名的 2018-09-25_222145.xml 看看
下面是 2018-09-25_222145.xml 文件的内容,可以看到 xml 记录了如下信息
- 图片文件名(filename)
- 图片尺寸(宽和高,width & height)
- 4个云宝对象,和其对应的位置信息(bndbox)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<annotation>
<folder>Images</folder>
<filename>2018-09-25_222145.jpg</filename>
<source>
<database>Unknown</database>
</source>
<size>
<width>708</width>
<height>565</height>
<depth>1</depth>
</size>
<segmented>0</segmented>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>106.00</xmin>
<ymin>26.00</ymin>
<xmax>272.00</xmax>
<ymax>203.00</ymax>
</bndbox>
</object>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>462.00</xmin>
<ymin>66.00</ymin>
<xmax>676.00</xmax>
<ymax>222.00</ymax>
</bndbox>
</object>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>81.00</xmin>
<ymin>346.00</ymin>
<xmax>306.00</xmax>
<ymax>535.00</ymax>
</bndbox>
</object>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>420.00</xmin>
<ymin>323.00</ymin>
<xmax>610.00</xmax>
<ymax>533.00</ymax>
</bndbox>
</object>
</annotation>
另外,该目录下还有一个 label_map_dict 文件。它是一个json格式的,存储的是云宝名字等于云宝。
{
"yunbao" : "yunbao"
}
eval 文件夹中的内容
“eval” 存储的数据可用于模型的预测。打开该目录,可以看到各种云宝的图片。其中,有的图片还带有一个同名的xml文件
我们打开 2018-09-25_221913.jpg 和与之同名的 2018-09-25_221913.xml 看看
下面是 2018-09-25_221913.xml 文件的内容,可以看到 xml 记录了如下信息
- 图片文件名(filename)
- 图片尺寸(宽和高,width & height)
- 4个云宝对象,和其对应的位置信息(bndbox)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<annotation>
<folder>Images</folder>
<filename>2018-09-25_221913.jpg</filename>
<source>
<database>Unknown</database>
</source>
<size>
<width>963</width>
<height>676</height>
<depth>1</depth>
</size>
<segmented>0</segmented>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>199.00</xmin>
<ymin>35.00</ymin>
<xmax>477.00</xmax>
<ymax>416.00</ymax>
</bndbox>
</object>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>565.00</xmin>
<ymin>44.00</ymin>
<xmax>807.00</xmax>
<ymax>428.00</ymax>
</bndbox>
</object>
<object>
<name>yunbao</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>445.00</xmin>
<ymin>467.00</ymin>
<xmax>598.00</xmax>
<ymax>656.00</ymax>
</bndbox>
</object>
</annotation>
另外,该目录下还有一个 label_map_dict 文件。它是一个json格式的,存储的是云宝名字等于云宝。
{
"yunbao" : "yunbao"
}
train 与 eval 文件夹中的内容总结
通过对比可以得出
- train 和 eval 文件夹总都存有包含云宝的图片(并且一幅图片中,可能只包含一个云宝照片,也可能包含多个云宝照片)
- 两个文件夹中,有的图片带有同名的xml文件,而有些图片不带xml
- 两个文件夹中的xml文件,均是同样的格式,而且均描述了云宝在图片中的位置信息
- 两个文件夹下均有一个 label_map_dict 文件。它存储着一个JSON对象:
{"yunbao":"yunbao"}
数据集批量上传至OBS
对象是数据存储的基本单位,在OBS中文件和文件夹都是对象。您可以上传任何类型(文本、图片、视频等)的文件,并在桶中对这些文件进行管理。
若需要将对象移动到桶内其他位置,推荐下载使用OBS Browser+图形化管理工具,下载地址如下:https://developer.huaweicloud.com/tools#section-1
下载OBS Browser+
这里我选择图形化界面的 OBS Browser+工具。
OBS Browser+ 是一款全新的图形化桌面应用工具,支持完善的桶管理操作和对象管理操作,支持众多的批量操作,也支持许多高级的桶管理和对象管理功能,能够满足不同用户的业务场景需求。具有性能稳定,效率高,体验佳等优势。轻松帮您数据上云!
它提供了3种登录方式,分别是
- AK方式登录
- 账号登录
- 授权码登录
这里我选择AK方式登录,其中桶路径为:obs://bucket-name/folder-name
获取AK/SK
获取AK和SK的方式为
- 右上角账户名,点击“我的凭证”
- 左侧切换到“访问密钥”选项卡
- 新建访问密钥
- 下载 credentials.csv 密钥文件
- Access Key Id 就是AK;Secret Access Key 就是SK
注意:如果访问密钥泄露,会带来数据泄露风险,且每个访问密钥仅能下载一次,为了帐号安全性,建议您定期更换并妥善保存访问密钥。
登录OBS Browser+ 上传文件
用户名可以随便输入,不必与华为云账号名相同,然后输入credentials.csv里的AK/SK后,即可登录
登录后就可以看到我的 yunbao-2023这个桶了
切换到 obs:\yunbao-2023\train (应该是 obs:\yunbao-2023 目录下即可,因为会连文件夹一起上传) 路径下。然后击“上传”按钮,然后“添加文件夹”,选中train
上传后,在任务管理器选项卡可以查看到上传进度(多文件并行上传,我截图慢了,所以只截到最后一个)
注意:上面犯了一个错误,其实只要在 obs:\yunbao-2023 这个目录下上传文件夹即可(因为会把这个文件夹,也给上传上来,这里要注意了)
分别上传train 和 eval 两个文件夹后,如下图
Model Arts 创建物体检测
回到 Model Arts,并进入管理控制台,其地址如下:
https://www.huaweicloud.com/product/modelarts.html
对“步骤一”和“步骤二”分别点击“我已准备完成”按钮,然后再点击“步骤三”的开始引导
它会弹窗提醒你,接下来的操作一共有4步
- 创建:创建“自动学习”项目
- 标注:给素材标注好标签
- 训练:设置训练参数,发布训练
- 部署上线:发布上线
创建
点击左侧面板的“自动学习”按钮
创建“物体检测”项目
填写“项目名称”、“数据集名称”,选择“数据集输入位置”,云宝数据集OBS路径为 “/test-modelarts/dataset-yunbao/train/” (它这里写的不对,数据集无法手动输入,只能选区自己的OBS桶里的数据,因此应该是要用我们自己刚刚上传到OBS的数据)。“数据集输出位置”选择一个空目录。
我们新建一个“output”目录用来输出
最后如下图所示,点击底部的“创建项目”按钮,开始创建项目
标注
之前在文件目录下看到的xml文件,就是云宝的标注文件了。但华为云留了几个未标注的图片,供我们练练手
我以第一行为例,蓝色的是未标注,红色的是已标注
切换到“未标注”选项卡,单击任意一张图片,进入图片标注界面。
点击鼠标左键,选择对话框左上角,再次点击则为右下角
这里我只标注了一个,它就提示我开始训练了
训练
在弹出的“训练设置”对话框中配置相关参数,然后单击“下一步 > 提交”开始模型的自动训练
有几个比较重要的参数,含义如下
- 训练验证比例:表示将已标注样本随机分为训练集和验证集的比例,默认训练集比例为0.8,manifest中的usage字段记录划分类别
- 增量学习版本:用户可以在之前训练成功的版本中,自主选择精度最高的版本进行再训练,可以加快模型收敛速度,提高训练精度。
- 训练偏好:值为accuracy first(精度优先,训练时间较长,模型较大)、balance(平衡)、performance first(性能优先,训练时间较短,模型较小)三档
注意:
- 自动学习训练免费规格用于使用体验,训练作业会在1小时(不包括模型发布时间)后自动停止,请勿在训练设置中使用超过1小时的最大训练时长。
- 自动学习训练免费规格资源不包含对象存储服务(OBS)存储资源费用
确认参数无误后,点击“提交”按钮
训练任务提交后,它就会自动开始训练了,我们需要耐心等待。现在是23:05分,我们记录一下训练完成时长
只花了6分钟左右,找云宝的项目就训练完毕了,准确率有91%
评估结果如下
- 召回率:0.800
- 精确率:1.00
- 准确率:0.906
- F1值:0.889
部署上线
在版本管理这边,点击“部署”按钮,使用“自动学习免费规格CPU”
部署失败解决
部署失败,错误信息为:A maximum of 1 free services are allowed
这个错误的意思就是,免费版的最多只能部署一个,虽然你之前的时间到了,被停止了,但是还必须手动删除,才能再部署这个免费的
重新部署
点击“返回自动学习”按钮,左侧选项卡切换到“部署上线”—> “在线服务”,删掉我们之前部署的项目
然后再切换到“自动学习”选项卡,点击项目名称“find_yunbao_demo”,切换到“模型训练”选项卡,然后再次点击“部署”按钮
部署任务提交成功后,照例要等待一段时间,华为云会在后台对项目进行自动部署
部署大概需要3分钟左右,现在已经部署完毕了
服务测试
从华为云博客奖品页面,找到一个云宝图片,然后下载到本地
- 包含图片的网页为:https://bbs.huaweicloud.com/blogs/386369
- 图片地址为:https://bbs-img.huaweicloud.com/blogs/img/20221111/1668154746936193784.jpg
点击“上传图片”按钮,上传我们刚刚下载的云宝照片
然后点击“预测”按钮,它会出现一个扫描线动画,水平扫描你这张图片,最后告诉你有多少概率是云宝
从预测结果来看,有94%的概率,被自动学习应用判断为是“云宝”,并且在返回的JSON报文中,还会帮你圈出云宝的位置范围,并在图片上做出相应的标识,从图上来看,还是蛮准的
返回的报文格式如下
{
"detection_classes": [
"yunbao"
],
"detection_boxes": [
[
"25.272814",
"51.2215",
"473.16373",
"352.3046"
]
],
"detection_scores": [
"0.9414309"
]
}
下面换另一张不是华为云云宝的图片,我这里用皮卡丘的图片,图片链接如下:
https://img2.baidu.com/it/u=2058826265,3911122445&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500
注意:百度下载的图片现在默认是webp格式,而华为云的这个项目只支持识别:jpg、jpeg、bmp、png这四种类型,因此要进行手动转码,才能上传
惊呆了,这准确率还有待提高啊!!!居然认为皮卡丘图片,有80%的概率是云宝。。。。
另外,点击右下角的“接口调用”,可以查看到调用方式的帮助文档
总结
- 整个"找云宝"的AI项目完成下来,我惊讶的发现居然没涉及到什么算法问题,可以说是零代码构建AI应用了。
- 但其背后实现的智能算力却很强,不但能够识别是否是云宝,并给出准确率,还能精准的找到云宝的位置(虽然也有被误判的情况,比如上图给的皮卡丘,也被判定为云宝)
- 我认为一个产品是否优秀,在于其可解决问题的难度,和其操作过程的简单程度。化繁为简,让外行也能解决难题,虽然有点小瑕疵,但是瑕不掩瑜 —— 这大概就是ModelArts给我留下的第一印象吧,总而言之,棒极了
【万众瞩目的低代码AI应用开发实战营来啦!开启实战营之旅(免费体验),写体验文章,赢开发者大礼包!】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/384262
- 点赞
- 收藏
- 关注作者
评论(0)