“为什么火车要在铁轨上跑?”
“为什么飞机会在天上飞”
“为什么鱼要在水里游?”
“为什么太阳会发光?”
“为什么冬天河水会结冰?”
”为什么天会下雨?“
“这是什么呀?”
“为什么?为什么?”
小朋友在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当中。
好,大概的步骤就是这样了。或许已经有些同学已经跃跃欲试了~
不过,这接下来要讲的,才是关键中的关键,干货中的干货——其实就是经验分享。
在整个项目中,会有一些小tricky的地方需要注意:
训练图片的选择
训练图片里面,一定要注意物体在图片里必须是把物体的特征显示出来。例如这些:
以下的就不太好作为训练图片了。
选择训练图片建议
每种物体至少提供15张或以上主体的照片。
照片最好是不同背景、角度、主体大小的照片组合作为辅助训练使用。
接受JPG / JPEG,PNG和BMP格式的照片
照片不需要非常高清,但是物体特有的外形特征要相对清楚,照片大小不超过6 MB。需要拍摄物体整体,不要只拍摄物体的局部。
图像建议最短边缘为256像素。
还有一点的就是:
尽可能的考虑用户拍照时候的场景,尽可能使用现场的图片进行训练。例如这种:
高清大图固然好,不过当用户把有各种噪音的图用来做predict的时候,就有未必够准。所以我们还是忠于实际比较好。
另外,如何建立分类,这个也很重要。我建议是把相同的分成一类,例如:
白天的1号门开
白天的1号门关
黑夜的1号门开
黑夜的1号门关。
这样得到的效果会更加准确。
最后的最后,我们来个重磅的!!
有些同学说,任何操作都要上云,如果去到一个没有信号的地方就没用。
的确是,目前很多AI的功能都放在云上,或者是放在很Powerful的机器里。
不过呢,微软的CustomVision服务除了可以直接使用Azure上的API以外,还可以把训练好的模型下载到你的手机里。
具体的内容就不在这里展开了,点击阅读原文了解更多。
本文作者:麦子,资深工程师,云计算架构师,10年IT从业经验,曾参与大型海关、边防、边检等项目开发及数据库设计及企业大型公有云应用开发、迁移、部署项目解决方案设计。
推荐阅读
华扬联众使用微软Office 365与Azure助力全球业务发展