Microsoft AI - Custom Vision
概述
前几天的 Windows Developer Day 正式发布了 Windows AI Platform,而作为 Windows AI Platform 的模型定义和训练,更多还是需要借助云端来实现。Azure 无疑是一个很好的选择。
Azure 作为微软近几年主推的云服务,在 AI 和 Machine Learning 方面也处于领先水平。目前 Azure 提供的 AI 能力涵盖了机器视觉、语义语音、语言理解、语言翻译、认知服务等各个领域。它们大多以封装的 API 出现,开发者不需要关心训练数据集的采集,不需要关心训练过程和训练后的数据模型,只需要调用 API,输入你的数据拿到理想的输出就可以了,可以说是非常方便了,比如 Azure 的 Face API、Computer Vision API 等。但是,如果我们的数据集不是通用数据集,我们想使用自定义的特征,制定自己的分类呢?这种封装好的 API 似乎就不那么适合了。
针对这种场景,微软推出了 Custom Vision Service(自定义影像服务),包含在 Cognitive Services(认知服务)中,目前还处于 PREVIEW 阶段。虽然叫做 Custom Vision,但是目前只提供了图像自定义,或者叫做图像分类功能,在正式发布使用后应该会扩充影像定义的其他领域。
服务体验
基本概念
Custom Vision - Visual Intelligence Made Easy
这是 Custom Vision 的 Slogan,让视觉智能变得简单。而为什么叫做自定义呢,看看官网的一张使用流程图:
- Upload Images - 上传图片并做标记
- Train - 使用标记图片训练模型
- Evaluate - 对训练后的模型进行训练

使用过程
Custom Vision 的管理单位是项目,登录微软账号后,点击 “New Project” 我们就可以开始创建新的项目了:

输入项目名字和描述,选择一个域,就成功创建出一个项目了。这里我们重点看一下目前提供的域:General、Food、Landmarks、Retail、Adault、General (compact)、Landmarks (compact)、Retail (compact)。其中标注为 compact 的三个域,训练后的模型都是可以导出的。可以看出,因为还在预览阶段,所以提供的域还很少,对于开发者来说,如果可以确定为某个域的识别,就选择那个域,如果不能确定,就选定为 General。

项目创建成功后,我们来看一下项目主页面:
- Training Images - 上传你的训练图片数据集,上传后给每张图片做标记;在 Workspace 中对图片和标记进行管理;
- Performance - 针对训练数据的表现,可以看到每个分类训练后的表现数值,来调整自己的表现阈值;
- Predictions - 针对训练后的模型,评估和预测对测试图片的分类准确度表现;
- Train - 准备好训练图片数据集后,点击 Train 按钮开始训练任务;
- Quick Test - 训练完成后,可以用测试图片在线进行简单快速的测试;

接下来我们结合实际应用场景,实际体验一下使用过程。我们针对 5 个分类的手绘草稿进行分类识别,每个分类 10 张图片,分类分别是:airplane,alarmclock,ambulance,ant,arm:
需要注意的是,Custom Vision 对分类的数量和每个分类的图片量都有要求,至少两个分类,每个分类至少五张图片;

另外,因为 Custom Vision 还是预览版,所以对图片和项目的上限也有限制,每个项目只能上传 1000 张图片,50 个分类,20 次迭代。另外创建项目总数限制为 20 个项目,预测的 key 上限是每天 1000 个。如果使用 Azure 账号登录,数量限制会被取消,对应的是一个收费策略,针对 Azure 国际版用户:

现在开始通过我们的 50 张图片的数据集来训练模型:
可以看到,因为我们上传图片的量级很小,而且数据特征不是很稳定,所以每个分类训练的准确度都不太稳定,召回率也是一样。

数据模型训练完成后,我们先用最简单的方式 “Quick Test” 来测试一下分类准确度:
首先用一张在分类内的图片 airplane 来测试,可以看到,识别为 airplane 的几率明显大于其他几个分类。

再用一张不在分类内的 fish 来测试,因为 fish 不在我们的 5 个分类里,而且这张手绘草稿中的特征和分类里的也不相近,所以识别结果比较平均,且都比较低,这个结果在预期内。

API 结果验证
除了 "Quick Test" 的简单在线测试方式,还支持 API Prediction 方式,对于批量自动化测试更适合。在 Prediction Tab,可以看到这个项目对应的 API 地址和 Key 信息:

为了验证简洁,我们使用 Postman 按照上面指引的方式来设置参数和输入图片:


我们使用本地文件进行测试,设置 Headers 和 binary 类型的 Body 后,得到以下结果:
这里的 airplane 文件其实就是上面 Quick Test 的第一张图片,所以可以看出,检测结果也是一样的,这也验证了两种验证方式的结果。

模型导出
上面我们说过,带有 compact 字样的模型是可以导出的,目前 Custom Vision 平台支持的导出方式有两种:
- iOS 11 (Core ML) - .mkmodel 文件格式
- Android (Tensorflow) - .pb 文件格式
看到这里,不禁想吐槽一把,大家还记得前面介绍过的 Windows AI Platform 吗,它支持的 onnx 模型文件格式,在 Custom Vision 中并不支持,这还是一家人吗?
Microsoft AI - Custom Vision的更多相关文章
- Microsoft AI - Custom Vision in C#
概述 前面一篇 Microsoft AI - Custom Vision 中,我们介绍了 Azure 认知服务中的自定义影像服务:Custom Vision,也介绍了如果通过这个在线服务,可视化的完成 ...
- 1小时快速搭建基于Azure Custom Vision和树莓派的鸟类分类和识别应用
1. 引言 最近在微软Learn平台学习Azure认知服务相关的内容,看到了一个有关"使用自定义视觉对濒危鸟类进行分类"的专题,该专题的主要内容就是使用 Azure Custom ...
- Add AI feature to Xamarin.Forms app
Now, AI is one of important technologies.Almost all platforms have API sets of AI. Following list is ...
- AI应用开发实战
AI应用开发实战 出发点 目前,人工智能在语音.文字.图像的识别与解析领域带来了跨越式的发展,各种框架.算法如雨后春笋一般,互联网上随处可见与机器学习有关的学习资源,各大mooc平台.博客.公开课都推 ...
- Modernizing Business Process with Cloud and AI
The world is awash with digital transformation. Every customer and partner that I talk to, across ev ...
- dynamics 365 AI 解决方案 —— 介绍
Digital transformation has been reshaping our world and artificial intelligence (AI) is one of the n ...
- Microsoft Hackathon 2019 留念
参加今年微软的 Hackathon 是 2019 年 7 月份的事情,但是后来各种各样的事情,考托.考G.网申……就给耽搁了.我本来以为自己的记忆力足够好,几个月以后也能写很多东西,然鹅……现在发现好 ...
- Microsoft 机器学习产品体系对比和介绍
Microsoft 提供多种多样的产品选项用于生成.部署和管理机器学习模型. 本文将比较这些产品,并帮助你选择所需的产品,以便最有效地开发机器学习解决方案. 机器学习产品 描述 作用 Azure云端服 ...
- MS Batch AI
微软的Batch AI服务是一项新服务,它可以帮助你在GPU pool上训练和测试机器学习模型,包括深度学习模型.它简化了在当前许多流行的深度学习框架(如TensorFlow.Microsoft认知工 ...
随机推荐
- docker 数据卷之进阶篇
笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...
- 用Node.JS+MongoDB搭建个人博客(model目录)(三)
model目录主要是封装一些经常使用的方法,便于使用. setting.js文件: 很简单,就单单封装了一个url作为公用,以后改就方便改了. md5.js(不推荐用): db.js文件: db.js ...
- python︱字符操作杂记(split、zip...)
字符串特别是中文在python里面还是有很多需要注意的地方. . . . 一.字符串 . . 1.字符串连接 方式一:单个字符相连用 + 就可以: 方式二:list组内相连,可以用join: 方式三: ...
- 解决 Cannot find OpenSSL's <evp.h> 和sasl.h not found!
编译mongodb拓展出现 Cannot find OpenSSL's <evp.h> 解决方法:安装openssl yum install openssl openssl-devel 出 ...
- servlet上传文件报错(三)
1.具体报错如下 null null Exception in thread "http-apr-8686-exec-5" java.lang.OutOfMemoryError: ...
- 使用ifstream和getline读取文件内容[c++]
转载:http://www.cnblogs.com/JCSU/articles/1190685.html 假设有一个叫 data.txt 的文件, 它包含以下内容: Fry: One Jillion ...
- Error Code: 1068. Multiple primary key defined
1.错误描述 10:10:38 alter table user add num int(8) primary key first Error Code: 1068. Multiple primary ...
- Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...
- CentOS配置samba服务
1.服务器需要下载samba.sambaclient包 yum install samba samba-client -y 2.客户端需要下载samba-client.cifs-utils包 yum ...
- linux命令类型及执行顺序
一 为什么要使用命令行 当初级Linux用户面对缺乏图形界面的Linux时很多人都会抱怨:为何要死守命令行?为什么不采用人机互交好.更简单的图形界面呢?事实上,图形界面在某些任务方面确实高效而且简 ...