【手摸手学ModelArts】零代码轻松实现图像分类

举报
胡琦 发表于 2020/05/28 19:35:49 2020/05/28
【摘要】 零代码轻松实现图像分类本文首次发表于华为云社区AI实战营版块,主要是作者参与【2020华为云AI实战营】】的一些学习经验,此次分享的是利用华为云AI开发平台ModelArts实现简单的图像分类,主要用到ModelArts的一键模型上线和市场订阅算法来实现同一个图像分类。开局一张图,故事全靠编。社群里边很多小伙伴的学习积极性和技巧都很sixsixsix,开局的这张图就是小花快跑大佬的学习总结,...

零代码轻松实现图像分类

本文首次发表于华为云社区AI实战营版块,主要是作者参与【2020华为云AI实战营】】的一些学习经验,此次分享的是利用华为云AI开发平台ModelArts实现简单的图像分类,主要用到ModelArts的一键模型上线和市场订阅算法来实现同一个图像分类。

day01-start.png
开局一张图,故事全靠编。

社群里边很多小伙伴的学习积极性和技巧都很sixsixsix,开局的这张图就是小花快跑大佬的学习总结,一天之内发布了四篇,不仅详细的描述了零代码AI开发图像分类的过程,还附有贴心实在的流程图。本战五渣就没有这么用心的学习了,因为对我来说这次实践非常的不顺,特别是使用市场订阅的算法时,各种坑,这里也顺带记录一下。

准备

所谓“工欲善其事,必先利其器”,既然都选择了零代码来实现图像分类,那必然会选择吊炸天的工具来辅助我们。这里,我用是华为云的AI开发平台ModelArts,然后图片和训练的模型存放在华为云的对象存储服务OBS。所以第一件事是要开通相关的服务,当然开通之前可以先去领券,毕竟白piao还是很爽的,一直白piao一直爽。

What'sModeArts.png
ModelArtshttps://www.huaweicloud.com/product/modelarts.html
AI开发平台ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。

What'sOBS.png
OBShttps://www.huaweicloud.com/product/obs.html
对象存储服务(Object Storage Service,OBS)提供海量、安全、高可靠、低成本的数据存储能力,可供用户存储任意类型和大小的数据。适合企业备份/归档、视频点播、视频监控等多种数据存储场景。

youhuiquan.png
优惠券报名即领:
https://competition.huaweicloud.com/information/1000038439/introduction?share=38d92be5f006417d8b1e2a3c0ab09619
花厂经常会举办一些AI训练营、算法比赛等活动,只要我们积极参与,优惠券应该是管够的。如果您想学做AI,来http://huaweicloud.ai/准没错。

OBS-Browser.png
OBS Browser+https://support.huaweicloud.com/browsertg-obs/obs_03_1003.html
OBS Browser+是一款用于访问和管理对象存储服务(Object Storage Service,OBS)的图形化工具,支持完善的桶管理和对象管理操作。OBS Browser+的图形化界面可以非常方便地让用户在本地对OBS进行管理,例如:创建桶、上传下载文件、浏览文件等。
ps: 目前只支持windows,其他平台可下载OBS Browser或者obsutil命令行工具。

foods-imgs.png
图片数据集https://modelarts-labs.obs.cn-north-1.myhuaweicloud.com/end2end/foods_recongition/foods_recongition_23.tar.gz
此次学习图像分类的数据集囊括了1630张23个分类的美食图片,这样量级数据对整个实践时长来说是合适的,我们无需操作等待太久就能轻松完成学习。

AKCK.png
访问密钥配置https://support.huaweicloud.com/prepare-modelarts/modelarts_08_0002.html
获取访问密钥并完成ModelArts全局配置只是使用AI开发平台ModerArts的其中一个步骤,当然尤为重要的一步。其他的还涉及到账号的注册、OBS通的创建等。

数据集的创建及标注

dataresources.png
"上帝说要有光于是就有了光",我说要有数据集,于是我就下载了源数据集创建了OBS通并上传了1630张美食图片和标注文件。创建OBS通要注意的点是创建桶的区域需要与ModelArts所在的区域一致。例如:当前ModelArts在华北-北京四区域,在对象存储服务创建桶时,请选择华北-北京四。另外要注意的是OBS的使用可能会涉及到计费,我们可以先找官方的小助手领取一些低消费或者零消费的资源,当然如果您有认证开发者或者学生认证的话,应该是可以享受到一些大额的优惠券,用来学习实践的话“从入门到入院”应该是足够了。首先很感谢ModelArts官方提供的数据集,从数据集的内容来看,已经有了标注文件.txt;实际开发中可能需要我们自己去爬取或者通过别的手段获取到数据集。在我看来,脱离应用场景谈技术都是耍流氓;这次我们的应用场景是要训练出一个简单的美食识别模型,至于涉及到的技术,我想每个人都会有自己独特的看法。而今天,作为小白的我自从接触到了AI开发平台ModelArts,我觉得借助ModelArts就足以实现这个美食识别需求(PS:目前我也只会使用工具,代码还真撸不出来)。

OBSresources.png
我创建了北京四的OBS桶,并命名为ai-camp,将准备阶段下载的数据解压了再将train&test上传到day01的data文件夹中,另外还新建了output和logs两个文件夹用来给后续步骤使用。数据的准备阶段,我最开始考虑的方案是想借助ModelArts中的notebook来实现,notebook有terminals工具,可以通过wget将数据集下载并解压到notebook的工作空间,然后通过Moxing连接并上传到OBS,也就是说我们可能不需要OBS Browser+工具,只需几行命令、几行代码就可以实现数据集的准备。当然,这一切只是我的想法,仅仅是未付诸行动且未被验证的想法,希望各位大佬指导指导是否可行。废话唠嗑完,我最后还是选择了使用工具。

createddatabase.png
经过ModelArts-数据集管理-数据集-创建数据集的操作,我准备创建一个名叫food-classification的数据集,这里注意的点是数据集输入位置选择到train目录,我再这里栽了个大坑,深陷其中久久不能自拔,之前我直接选择的我创建的data目录,也就是train的父级目录,导致后面训练一直失败。我总结的大概原因是:test目录的数据不应该拿来训练,而且test目录下的图片是不会有标注的,也就是说本身就不能用来训练;这算是我终于明白为什么会有num_classes in eval dataset is not match的错误日志,血淋淋的教训!
数据集创建成功之后,我们可以清晰的看到每次有200张图片被自动处理(标注),200张这个数字我之前使用Moxing上传图片到OBS也遇到过,这就是强大的后台逻辑设置的一个参数。云平台完成数据同步之后,我们会发现这个数据集有40张图片未被标注,未被标注的原因无非就是这40张图片没有对应的.txt文件,其实在之前使用Moxing批量上传标注文件到OBS的时候,我还遇到了一个Bug:图片明明有对应的.txt标注文件,在平台上并没有对应的分类和标注,通过工程师的排查,大概是因为我自制的.txt文件编码格式有问题,不过我想说的是同样的方法生成的.txt文件10个类只有3个类完整的没有被标注,这点我是很不理解的,可能代码的世界就是这样。

mark.gif

接下来,我们要做的是把剩余未被标注的40张图片手动标注。这里还是有必要分享一下我的小诀窍:

  1. 进入未标注tab,先拉到下面把左下角每页显示数设置为最大(目前是60,应该可以通过技术手段设置到更大的数字),别问我问什么,为了方便!

  2. 善用筛选条件,未标注tab下面应该是有个筛选条件的展开项,右边有蓝色文字展开,点击展开便能显示筛选功能,这里文件名选项展开还有目录的选项,目录选项可以直达OBS选择框。虽然本次实践并没有用到,但是以后如果您的OBS桶中已经按照标签为文件夹的名字或者文件名称将数据分类了,那么这个小小的窍门将能帮助您以目录或者文件名为单位快速标注图片。

qiaomen.png文字比较抽象,我这边还是上张图片以示说明。图片展示的是另外一个数据集,从图片中可以看出,OBS桶的图片是以文件目录进行分类的,比如我们想标记所有的小米粥,那只需在筛选条件那选择目录-点击文件夹图片选择小米粥这个目录,就能快速选择所有的小米粥进行标注。

smartmark.png
幸好只有40张未标注,要是有400张甚至更多的话,估计我要哭晕。不过我们可以尝试隐藏的神技能--智能标注智能标注隐藏在待确认tab下,当存在未标注数据时,才能启用智能标注。这个功能我用的少,暂时不做评论,我猜应该是后台运用了机器学习之类的技术。接下来分别实践一下一键模型上线(自动学习)和使用市场订阅算法实现图像分类。

一键模型上线

标注完成之后我们点击返回数据集概览再点击右上角发布按钮进行发布。这里我们选择训练验证比例为0.8,也就是说80%的数据作为训练集,20%的数据作为验证集,这个数字我们在后续发布迭代数据集的时候可以适当修改进行优化。点击返回数据集列表,在刚刚创建的这条数据集数据的右边点击一键模型上线,即可进入到内置模型创建页面,这里注意一下,我选的训练服务器是带GPU的、部署服务器只需CPU,这里容易踩到坑,创建完毕之后如果一帆风顺的话,会自动进行初始化-训练-生成模型-部署一条龙操作,我们只需等待最终的部署成功即可在线预测。整个过程,我们可以查看一键模型上线的任务进度、任务历史,可以查看训练中的训练详情,可以随时停止任务。其实在odelArts-训练管理-训练作业ModelArts-模型管理-模型以及ModelArts-部署上线-在线服务等页面可以实时跟进整个自动模型上线的过程,同样我们也可以在对应的服务中操作修改进行迭代。这一条龙的体验对小白用户来说入门真的很简单,哪怕是没有编程经验也能快速使用。

autoserver.png
从上面的预测结果来看,虽然结果比较理想,但是返回的结果不是我们预期的,只返回了5个类的判断数据,这也许和内置算法的推理算法有关。最后我们再来看看一键模型上线究竟自动干了哪些事?

  1. 创建并运行了训练作业。这里使用率内置算法ResNet_v1_50,我用的默认参数,大概9分钟不到可以训练完毕。
    autotrain.png

  2. 创建了模型,模型的准确率0.90。对我来说算是个理想的模型了,起码我是没有这种编程能力,只会负优化。内置算法自动创建的模型应该是无法修改推理代码的,这估计也是导致后面在线服务返回的数据格式不是期望的。
    automodel.png

  1. 部署了模型的在线服务。唯一的缺点就是预测结果的数据格式无法自定义。

市场订阅算法

AIMarket.png
AI市场是一次大胆的尝试,也是一种创新,将AI开发的各方紧密的联系在一起,也便于优秀模型的复用和推广。我们从ModelArts-算法管理-市场订阅-查找算法进入到AI市场,本次实践使用的是最多订阅的云端算法--
图像分类-ResNet_v1_50,说实话市场中ResNet算法太多了,目前来看通过AI市场右上角排序选择最多订阅或者最多浏览就能找到此次实践使用的订阅算法。在算法的详情页点击红色的订阅按钮,一路确定(PS:注意是否收费)就能成功订阅并在算法管理的市场订阅tab下看的刚刚订阅的算法。当然,如果还需了解更多可以在算法的详情页查看使用文档,学习一些进阶的操作。

tongbu.pngcreatemarkettrain.png
订阅完算法之后,我们就要用她了。习惯性先刷新一下看没有新版本,然后同步一下,再然后创建训练作业。当然这个页面也是有很多其他的操作入口,如算法描述入口、订阅算法的管理等等。

createmarkettrain.png
createmarkettrain2.png
createmarkettrain3.png
同样创建训练作业的时候,也有些地方要留意,如数据集的选择,GPU的选择,保存训练参数(非必须)。因为有券在手且买了三元资源(找小组手领取),后面我还是选择了人民币玩法,避免长时间等待排队影响学习热情。创建完毕之后,我们可查看训练详情或者回到训练任务列表。同样,在训练详情页中我们能够看到训练的配置信息、日志、资源占用等。在训练进行中,我会习惯性看看日志,如果看到报红我会提前结束训练任务根据日志进行排查。小伙伴们如果遇到问题可以积极地向社群、社区求助,实在没办法可以适当走走工单,千万别放弃(我隔了一个星期才重新实践,之前训练了20来次都失败了,关键没找到原因差点就放弃)

AIMarketmodel.png
训练成功完成后在训练详情页面的右上角点击创建模型,可以进入到模型创建页面,我这里都是使用的默认参数,主要的核心点是元模型的来源选择刚刚训练完毕的训练作业。

AIMarketmodeldetail.png
模型生成完毕之后,我们需要手动部署。在模型的详情页的右上角点击部署,进行在线服务部署,部署的时候也注意只选择CPU的服务器。从模型详情来看,我们的默认参数训练出来的模型的准确率只有0.89,接下来我们进行简单的调优。
aimarketservice.gif

ModelArts-训练管理-训练作业点击上面创建的市场订阅算的的训练作业进入到详情页,点击右上角修改对训练任务进行一些参数的调优,这里可能涉及到父版本的问题,我也暂时没弄明白。社区大佬解答了两点:

  1. 父版本就是以前训练的版本,可在父版本(即以前训练的版本)上做修改,调整参数,简化开发流程,提高开发速度。

  2. 至于如何选择,可通过左上角的版本对比,对比不同版本的准确率、召回率等指标,选择最好的版本,在其上再做调优,以获得更好的模型。这里的最好的版本就是所说的父版本了。
    负优化.png

显然调优的结果非常不理想。通过和社区里的小伙伴交流,得知将数据集的训练数据和验证数据比例修改为0.9:0.1就能大幅度提高准确率。于是我将数据集升级到V002,主要修改了数据集比例。

newdatabase.gif


然后又重新修改了训练作业,使用V002版本的数据集


newtrain.gif


结果还算理想:

newtrainresult.png


尾声

又是一个匆匆结尾,虽然草率,但是真诚!昨晚有幸参加了ModerArts社区闭门会,见识到了很多大佬,很多大咖超乎我的想象,希望未来的日子里能和各位大佬共同建设ModelArts社区,能像各位大佬学到更多,最后祝愿2020,我们都更好!


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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