摘要:通过一个垃圾分类应用的开发示例,介绍AI Gallery在AI应用开发流程中的作用。
本文分享自华为云社区《AI Gallery:从0到1开发AI图像分类应用》,作者: yd_269359708 。
现如今,人工智能(AI)技术在计算机领域内,得到了越来越广泛的重视,并在各行各业中得到应用。然而无论是AI开发的初学者,还是资深的AI开发专家,在AI 应用开发工程中,都会面临着不小的麻烦。我们今天要介绍的AI Gallery,就是一个开放的开发者生态社区,提供了数据集、算法、模型等AI数字资产的共享,帮助开发者加速AI产品的开发与落地,保障AI开发生态链上各参与方高效地实现各自的商业价值。
在介绍AI Gallery之前,我们先来看看一个AI应用开发的基本流程,方面后面更好的说明AI Gallery在AI 应用开发流程中能够提供的帮助。大神请直接跳过此章。
AI开发的基本流程通常可以归纳为几个步骤:确定目的、准备数据、训练模型、评估模型、部署模型。

模型的开发训练,是基于之前的已有数据(有可能是测试数据),而在得到一个满意的模型之后,需要将其应用到正式的实际数据或新产生数据中,进行预测、评价、或以可视化和报表的形式把数据中的高价值信息以精辟易懂的形式提供给决策人员,帮助其制定更加正确的商业策略。
明白了AI 应用开发的流程,我们就可以在本地搭建环境来进行AI应用开发了。但是俗话说“工欲利其事必先利其器”,借助成熟的AI 开发平台,能够极大地提高我们的开发效率,缩短我们的开发周期,减少我们的开发成本。在这里,我推荐的是华为云的ModelArts 一站式AI开发平台。
ModelArts作为一个一站式的开发平台,能够支撑开发者从数据到AI应用的全流程开发过程。包含数据处理、模型训练、模型管理、模型部署等操作,并且提供分享功能,能够在AI Gallery上与其他开发者分享模型。
ModelArts支持图像分类、物体检测、视频分析、语音识别、产品推荐、异常检测等多种AI应用场景。
现在开始进入我们的主题:AI Gallery。
有AI应用开发经历的同学,应该都有类似的感悟。纵观AI应用的整个开发流程,从数据采集、标注,到算法模型的构建,每个环节都会产生许多可以复用的AI资产,而AI Gallery的目的之一就是充分发挥这些资产的效用,提高AI开发效率。
AI Gallery是在ModelArts的基础上构建的开发者生态社区,提供了Notebook代码样例、数据集、算法、模型、Workflow等AI数字资产的共享,为高校科研机构、AI应用开发商、解决方案集成商、企业级/个人开发者等群体,提供安全、开放的共享及交易环节,加速AI资产的开发与落地,保障AI开发生态链上各参与方高效地实现各自的商业价值。
接下来,我将通过一个垃圾分类应用的开发示例,介绍AI Gallery在AI应用开发流程中的作用。
注册华为云账号
首先你需要注册一个华为云账号。注册链接:注册_华为帐号 (huawei.com)
注册完成后,进入华为云控制台,建议在北京四使用,网络相对比较稳定。
创建OBS桶
OBS是华为云的对象存储服务,可以理解为一个放在云端的硬盘,我们在使用ModelArts开发AI应用的过程中,需要利用OBS来保存开发所需的一些文件,例如训练所需的数据集,训练完成的模型等。
创建OBS桶。
按照页面提示,选择合适的规格,需要注意,桶的区域要和上一步中ModelArts使用的区域相同,我选择的是北京四。
在后续开发的过程中,如果需要上传大批量的数据例如训练样本到OBS,推荐使用OBS Browser+。OBS Browser+简介_华为云 (huaweicloud.com)

完成上述的准备工作,我们开始正式的AI应用开发工作。根据第二章的AI开发基本流程,我们首先要确定我们开发的这个应用需要解决什么问题。在本教程中,我们假设需要开发一个垃圾分类应用,用户上传垃圾的照片,我们返回垃圾所属的分类。
确定完目的,我们需要准备训练所需的数据集。AI Gallery上提供了7.7w+的数据集,包括官方发布的和用户共享的数据集,覆盖了主流的AI应用场景。
打开AI Gallery的数据集专栏,搜索垃圾分类,可以看到很多的垃圾分类相关的数据集。AI Gallery数据集专栏
我们选择其中的一个数据集,点击查看详情。可以看到这个数据集是已经标注完成的,我们可以直接该数据集进行模型训练。
点击下载,将数据集下载到ModelArts数据集。
下载方式选择ModelArts数据集,数据集输出位置和输入位置,可以选择在OBS桶内新建一个文件夹

点击确定,页面会跳转到Gallery的个人中心。(这里下载的数据集可能没有第一时间同步过来,可以多刷新几次)
数据集会在后端自动下载,我们先来到ModelArts,左侧导航栏选择数据管理->数据集。等待刚刚下载数据集导入完成。
由于有些AI算法需要切分完成的数据集(将数据集切分为训练集和验证集),我们这里打开数据集详情,发布一个新版本,在新版本中对数据集进行切分。点击确定,等待数据集新版本发布完成。至此,数据集准备工作就完成了。

准备完数据,我们开始进行模型训练。由于垃圾分类在AI中属于图像分类的范畴,所以我们到AI Gallery的算法专栏,搜索图像分类,选择一个合适的算法,推荐选择官方发布的算法,官方会定期更新官方算法,来保证算法的效果,这里我选择了一个官方发布的EfficientNetB0图像分类算法。
AI Gallery算法专栏
图像分类-EfficientNetB0
简单浏览下该算法,发现很适合我们的垃圾分类场景。
点击订阅,订阅成功后点击前往控制台,云服务区域选择北京四(和上文相同的区域)。
跳转到ModelArts控制台后,选择算法最新的版本,创建训练作业。
按照提示,填写相应的信息。训练输入这里我们选择刚刚下载的数据集,训练输出可以在OBS桶内新建一个文件夹,超参都是用默认的不变,规格这里可以选择显示免费的(可能需要排队,不想排队的话可以选择收费的规格)。点击提交,开始训练作业。



打开训练作业详情页面,可以看到作业的状态以及训练过程中打印的日志。等待训练作业完成后,点击右上角的创建AI应用的按钮。

部署类型选择在线服务,如果有批量服务或者边缘服务的需求,也可以把这两个选上。
等AI 应用创建完成后,就来到了最后一步,模型部署。点击刚刚创建的AI应用,选择部署为在线服务。
因为我们这里只是体验下开发流程,所以可以选择免费的规格(一小时后自动停止,且每个账号只能部署一个免费规格的AI应用)。
待在线服务部署成功,至此,我们成功上线了一个垃圾分类。接下来我们看一下这个AI应用的效果,以及如何调用相应的API。
AI应用部署成功后,ModelArts会自动生成一个API接口,供开发者调用,可以看到我们这里是一个POST请求,请求的参数类型是file类型。返回两个参数,表明预测的结果和每个标签的概率。这个API接口支持AK/SK认证以及token认证,我们可以在其他项目中调用这个API接口,实现垃圾的分类识别功能。
除了API调用,ModelArts还支持网页上在线预测,我们单击预测,来到预测页面,上传一张测试图片,单击预测,右侧就会显示出预测结果。可以发现,我们的模型成功识别到了这是厨余垃圾的水果果皮。
相比于其他AI开发平台,华为云ModelArts是更快的普惠AI开发平台,涉及数据标注与准备、模型训练、模型调优、模型部署等AI开发全流程,为AI应用开发提供一站式服务。ModelArts 是可以让开发者上手更快、训练更快、部署更快的全流程平台。AI Gallery作为在ModelArts的基础上构建的开发者生态社区,提供了丰富的AI应用开发所需的数据集,算法,模型。除此之外,AI Gallery还提供了社区交流的功能,大家可以在Gallery交流学习心得,同时本针对AI Gallery也安排了一场直播,欢迎感兴趣的开发者预约报名参与:https://bbs.huaweicloud.com/live/cloud_live/202211081900.html
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain