不秃头 | 如何用ModelArts满足一个奶茶重度爱好者的好奇心

举报
Srius 发表于 2020/04/25 16:50:15 2020/04/25
【摘要】 作为一个奶茶重度爱好者,在街上看见小姐姐拿着一杯看起来特别好喝的奶茶,摩拳擦掌好想知道她喝的是什么。直接上去问?女票重拳出击警告!办法总是有的,比如做一个奶茶识别小工具~

上周听了昌启哥的【用AI识别草莓成熟】的分享之后,深受启发,心想,既然ModelArts的自动学习功能可以用来识别草莓的成熟度,那能不能再用它来识别一些别的东西呢?~看了一眼手边的奶茶,嗯,奶茶也许是个不错的选择~


作为一个奶茶重度爱好者,在街上看见小姐姐拿着一杯看起来特别好喝的奶茶,摩拳擦掌好想知道她喝的是什么。直接上去问?女票重拳出击警告!要是有一个奶茶识别工具就好辽~


说干就干~


数据获取

其实最难的应该就是数据获取的部分,因为在华为云ModelArts强大的自动学习功能加持下,建模、学习、预测都能够自动完成,反而是数据的获取成了一个比较麻烦的环节(疯狂暗示MA下一步加入一个“自动获取”功能)。数据来源选择的是美团(因为饿了么已经关闭了桌面端的订餐入口,看不到饮品详情了~),由于时间关系,暂时只爬取了北京市所有coco门店的奶茶图片及标签。


本着技术是为人服务的原则,我首先选择的是最“摸鱼”的方法——用某爪鱼来爬取数据。一通行云流水般的操作之后,却得到这样的结果。



图片链接全部为空,这是什么情况?我赶紧打开网页,查看网页的源代码信息。发现,原来图片被包裹在了一个div标签中,猜想软件在自动采集的时候只采集了div,没有采集到div下一级的img,自然就是空白了。(结果后面发现不是这个原因...)


偷懒失败,只好自己动手,丰衣足食了~


打开pycharm,导入selenium和requests,根据网页结构定位到需要爬取的图片,设置好翻页,暂停时间,开始爬取。(其中有很多细节问题,由于这篇是奶茶识别专场,爬虫部分就不过多介绍啦~详情见另一篇文章~(避踩雷 | 爬取美团门店信息中的“量子幽灵”))


经过一番操作~一共爬到150多家门店共900张奶茶图片,足够做一个展示了~(原来光是北京就开了这么多家coco门店,看来全国3000家无压力鸭~)



数据标注

打开ModelArts,创建新的图片分类实例。

 

这里有两种创建方式。

 

一种是新建数据集,如图所示,




再向数据集中添加刚刚爬取到的奶茶图片。


然后选中需要标注的图片,为其打上“coco奶茶”、“大叔奶茶”、“百香果双响炮”之类的标签。

 


还要一个一个人工标注~是不是感觉非常麻烦?

 

于是我选择了另外一种方式——使用已有数据集。

 

还好在爬取数据的时候我顺便爬了他们的标签,通过ModelArts的实例(首页第二个实例花卉识别)确认了自动标注所需要的输入格式——图片和txt文档名相同,txt中写入对应图片的标签,如图所示。



自动生成标签文件的代码如下:

import os
 
dir = 'C:/Users/Sirius/Desktop/data' # 这里要改成自己文件夹的路径
list = os.listdir(dir)
for l in list:
    tag = l.split('_')[0]
    name = l.split('.')[0]
    with open('C:/Users/Sirius/Desktop/data/%s.txt' % name, 'w', encoding='utf-8') as f: # 这里也是哟~要改成自己文件夹的路径
        f.write(tag)


得到已经标注好的数据之后,就可以开始操作辽~

 

打开OBS,上传数据集文件夹



上传完毕~



模型训练

完成数据集的处理之后,就可以正式开始训练辽~

打开ModelArts的自动训练功能,设置好算法(随便选了一个图像分类的算法),设置数据来源为我们刚刚上传的文件,训练输出为止为同目录下的output文件夹,参数保持默认,开始训练。


可以看到模型已经开始训练辽~(据观察,网页不是实时刷新的,而是每半分钟更新一次状态信息)



等待大概十分钟,训练完成!



模型部署

点击运行成功的训练模型,将训练好的模型部署到服务中~



再点击“部署上线”,给模型部署一个在线服务~



安排上了!来试试分类的效果如何~


模型测试

测试一:coco奶茶

点击“预测”~上传一张没有拿去训练的图片,得到这样的结果:



可以看到,预测地还是蛮准的,实际的查准率应该是超过了85%(没有考虑标签大小写的问题,还需要进一步的处理~)


测试二:百香果双响炮


可以看到,百香果双响炮(最喜欢喝这个辽~)也被很准确(98.8%)滴识别了出来~

 

那么,本次尝试基本就宣告成功啦~


还想进一步?

本次探索主要的不足在于:

 

一是样本比较少,只选择了北京市的coco门店,改改爬虫代码阔以获取到更多的数据,能够覆盖更广的奶茶品类。

 

二是标签没有进行处理,比如像字母大小写、名字差了一两个字这些情况,还可以进一步滴改进~

 

另外,光是对奶茶进行分类其实也没啥意思,要是能够加入奶茶的更多信息(例如品牌、卡路里、成分组成等等),就可以有更多的使用场景辽~比如奶茶卡路里识别~(虽然很多手机已经内置这个功能惹~)


写在最后

ModelArts的一些使用体会

 

两个字形容ModelArts的使用体验——【极佳】


我自己的专业是信息管理与信息系统(信管),这个专业过去主要研究的是文献情报信息,所以需要处理的一般是文本数据(提到文本分析首先就想到了分词、TF-IDF、K-Means/KNN三板斧~),平时主要是使用算法而不是去研究算法,就比如做信息检索实验的时候,一般是用jieba或者nltk对中英文进行分词变形,然后用sklearn库中封装的各种算法进行训练、建模和预测,已经很适应把训练模型这一步作为一个黑箱来使用了。

 

但当更进一步,接触比如图像识别、语音识别这些领域时,就发现还需要使用更多的库,比如tensorflow、pytorch之类的主流人工智能库,这些学习难度都比较大。另一方面,机器学习模型往往建立在大量训练的基础上,对硬件也有一定的要求,高级一些的任务,PC可能很难胜任。

 

而ModelArts就很好地解决了这两个问题,我还是可以像以前一样,把数据获取下来,打好标签,然后一股脑儿扔给ModelArts,就能得到一个相当不错的训练模型。需要使用时,调用API就好了,可以节省很多资源。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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

举报
请填写举报理由
0/200