查看原文
其他

麦子 2018-05-28

“为什么火车要在铁轨上跑?”

“为什么飞机会在天上飞”

“为什么鱼要在水里游?”

“为什么太阳会发光?”

“为什么冬天河水会结冰?”

”为什么天会下雨?“

“这是什么呀?”

“为什么?为什么?”

小朋友在2岁-6岁这段年龄正处于对整个世界所有事物都非常好奇怪的阶段。他们的小脑袋瓜里装满了奇奇怪怪的问题,对一切事物都充满着兴趣。无数个为什么迎面而来,一轮刨根问底式的对话下来,估计有很多家长吃不消。

所以呢,经常会有家长一时答不上来,胡乱编一个理由或答案给小朋友。可说者无心,听者有意。有可能这个不正确的答案影响小朋友的一生。

我们试想,如果我们可以拿起手机拍一下,然后就可以识别出这个是什么东西,并且可以告诉我们相关的信息、视频、声音等等的话。那对于小孩子的教育,是不是很有帮助呢?

面对孩子天马行空的问题,让Microsoft Custom Vision来助爸爸妈妈们一臂之力吧!

Microsoft Custom Vision   

这个服务的主要功能是,首先要先放些图片告诉它是什么,然后训练好以后,就可以来做识别了。 有了这个服务,就可以在一步两步三步四步内实现图像识别分类的场景。下面带大家讲解一下。



第一步:

打开主站 https://customvision.ai/,用Microsoft Live ID登录一下

创建一个Project

我们能够看见这界面里有显示一个Domains。这个Domains里面的意思就是你需要识别的内容/场景是什么?我们这次要做动物,那我们就选General。

另外,我们能够看到下面有三个写左(compact)的。这三个的意思是可以把训练好的内容放到手机里面去跑。也就是说,可以离线的去进行物体识别。

后面再慢慢谈,赶紧创建再说。点击Create Project.

创建以后会马上进入项目的界面,我们先看看。整个界面里,会分成三个大的TAB——“Training Images”, ”Performance”, ”Predictions”。

  • “Training Images” 主要的功能是建立分类(Tags)、添加准备被训练的图片。

  • “Performance”主要显示被训练后模型的性能如何。

  • “Predictions” 主要是预测的情况。



第二步,

添加训练图片。点击Add images,然后从目录里选择你要用来训练的图片。 如下图

你可以多选或一张张的选。选择以后系统会让你添加一个标签,我就先写个giraffe吧。当然标签也是可以支持中文的。只不过,我想着在以后写代码的时候,写英文就不用切换输入法了。

点击upload,就会在portal显示这些图片的标签和tags了。

然后,我点击训练“Train”一下看看。由于不足够tag和图片,所以系统会提示错误。

有人会问:“这是为什么呢?”

这是因为训练的方法是使用了交叉验证的方式来进行模型训练,具体看连接https://en.wikipedia.org/wiki/Cross-validation_(statistics)。

好吧,我们再上传一些图片吧。



第三步,

在创建好分类和上传到图片以后,我们就可以点击右上方的”Train”进行模型训练。

训练的时间和训练的图片、分类数量有一定的关系。图片和tags越多,训练时间会相对比较久。

训练完后会出现以下的页面。

在这里,需要做一些解释。

Iteration

Iteration1 是代表不同的迭代,通俗一点就是一个训练好的模型。机器学习要不停的训练,对能够越来越准。所此呢,我们需要在使用的过程里面,定期进行训练。但并不是每一次训练都可以获得比上一次更好的结果,例如加入新的tag或者新加入的图像带有更多的噪音等等,都有可能影响结果。

所以Iteration的设计是,假如第二次的训练结果比第一次好的话,我们就可以直接调用Iteration2来上生产,不行的话,继续用Iteration1。不至于会影响生产效果。

Precision 和 Recall

Precision的意思是在对图像进行分类时,分类器可能会如何正确分类图像?在用于训练分类器(狗和小马)的所有图像中,模型的百分比是否正确?在100幅图像中,有99个正确的标签可以提供99%的精度。


Recall的意思是在所有应该被正确分类的图像中,您的分类器识别出的分辨率有多少?召回率为100%意味着如果在用于训练分类器的图像中有38个狗图像,则分类器找到38只狗。

两个数值的百份比在不同的场景有不同的作用,简单来讲就是如果你要识别准确测试的样本,那么就需要关注Precision值。如果你要识别全部样本,那么就需要关注Recall值。这两个值是一个tradeoff。

再通俗一点讲,Precision就是宁可放过不可杀错,Recall就是宁可杀错不可放过。

这两个值可以根据不同的场景,通过Thresholds来调节,见下图:

听起来很复杂有没有?以后我们再展开讲,不过我推荐一本书给大伙学习一下《Hands-OnMachine Learning With Scikit-Learn and TensorFlow》,里面其中有专门的章节来解释Precision 和Recall的关系。



第四步,

开搞!!  

我们点击“Predictions”的Tab来进行快速的测试。

我们可以选择网上的图片,或者上从本机中上传测试图片。

我们这里就Bing一张图片回来试试。。

然后把URL写填到这里

提交后,系统就会自动去拿这张图片,并且进行分析。得出来的结果如下:

99.9% 是长颈鹿!!! 好厉害。

被Predict过的图片会在“PREDICTIONS”时出现,然后用鼠标放上去,图片就会出来系统建议的类。就像这样

点击图片,就可以对把这张图片添加到相应的tags当中。

点击Save and Close就可以将这个图片添加到训练库中,留待下一次的训练。



好,大概的步骤就是这样了。或许已经有些同学已经跃跃欲试了~

不过,这接下来要讲的,才是关键中的关键,干货中的干货——其实就是经验分享。

在整个项目中,会有一些小tricky的地方需要注意:

训练图片的选择

训练图片里面,一定要注意物体在图片里必须是把物体的特征显示出来。例如这些:

以下的就不太好作为训练图片了。

选择训练图片建议

  • 每种物体至少提供15张或以上主体的照片。

  • 照片最好是不同背景、角度、主体大小的照片组合作为辅助训练使用。

  • 接受JPG / JPEG,PNG和BMP格式的照片

  • 照片不需要非常高清,但是物体特有的外形特征要相对清楚,照片大小不超过6 MB。需要拍摄物体整体,不要只拍摄物体的局部。

  • 图像建议最短边缘为256像素。

还有一点的就是:

尽可能的考虑用户拍照时候的场景,尽可能使用现场的图片进行训练。例如这种:

高清大图固然好,不过当用户把有各种噪音的图用来做predict的时候,就有未必够准。所以我们还是忠于实际比较好。

另外,如何建立分类,这个也很重要。我建议是把相同的分成一类,例如:

  • 白天的1号门开

  • 白天的1号门关

  • 黑夜的1号门开

  • 黑夜的1号门关。

这样得到的效果会更加准确。



最后的最后,我们来个重磅的!!

有些同学说,任何操作都要上云,如果去到一个没有信号的地方就没用。

的确是,目前很多AI的功能都放在云上,或者是放在很Powerful的机器里。

不过呢,微软的CustomVision服务除了可以直接使用Azure上的API以外,还可以把训练好的模型下载到你的手机里。

具体的内容就不在这里展开了,点击阅读原文了解更多。

本文作者:麦子,资深工程师,云计算架构师,10年IT从业经验,曾参与大型海关、边防、边检等项目开发及数据库设计及企业大型公有云应用开发、迁移、部署项目解决方案设计。

推荐阅读

华扬联众使用微软Office 365与Azure助力全球业务发展

案例 | 设备这样交互,比别人少花60%时间升级工业4.0

微信里的助理?让你的办公效率瞬间开挂

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存