主页 > 背景

不写一行代码,完成机器视觉算法的研发

时间:2019-09-10 来源:巧手精品推荐

来自:阿里巴巴机器智能


不写一行代码,完成机器视觉算法的研发


小叽导读:xNN云平台面向普通的研发、质量、UED、运营等非算法专业的同学,也面向视觉与非视觉领域的算法同学,提供全自动的模型训练与模型压缩能力。同时配合专业的数据管理、数据标注、模型评测、端侧发布、云侧发布、数据监控等全套工程能力,使得用户能够在不写一行代码的情况下完成计算机视觉算法从数据准备到发布的研发全流程。


什么是xNN云平台

近年来,以深度学习为代表的AI算法在计算机视觉、自然语言处理、语音等众多领域都取得了突破性的技术进展与愈来愈令人信服的落地应用。随着软硬件生态的不断完善,深度学习的神秘感也在逐渐降低——“10行代码完成训练”、“30分钟入门而不放弃”、甚至于“AI从娃娃抓起”都不再是天方夜谭。

然而,在商业场景中将算法与数据转换为实实在在的生产力,要远远比跑一个demo 要复杂而严肃得多。数据工程、算法选型、模型调参、技术指标收敛、工程部署、线上迭代,还包括幕后的软硬件环境的准备与维护、预算管理,这些环节中的任何一个都能直接影响到整个项目的成败,同时也都离不开专家级的经验才能够真正做好。然而,专家级的算法、工程和数据工程师一定是稀缺的,项目依赖于专家的深度参与即意味着高昂的研发成本——即使对于技术储备算得上深厚的阿里经济体来说,目前我们也只看到了深度学习技术的点状应用,而远远谈不上全面落地。

xNN 引擎是蚂蚁金服提升AI研发效率的努力之一。自2017年8月上线以来,xNN在模型性能、模型尺寸等技术指标的收敛、以及提供稳定易用的工程部署能力方面都取得了一定的成果。

到目前,在支付宝 App 端已经面向近20个业务,落地了30多个模型,同时也输出到集团内多个兄弟App,并在各种IoT设备中得到了应用。刚刚结束的2019年春节支付宝五福活动中,运行在用户手机端侧的 xNN 在10天内完成了数千亿次前向调用,AR 扫福字的服务端算法也首次运行在xNN 的云侧版本上,实现了一套模型横跨端与云的统一。然而,在整个研发链路的其他环节,包括数据、算法、模型,目前仍然以领域专家手写代码的方式来完成,因而有着高昂的成本与门槛。

xNN 云平台是我们在计算机视觉领域针对以上问题的解决方案。云平台面向普通的研发、质量、UED(没错,已经有UED同学在使用了!)、运营等等非算法专业的同学,也面向视觉与非视觉领域的算法同学,提供全自动的模型训练与模型压缩能力。

同时配合专业的数据管理、数据标注(感谢蚂蚁AlphaQ!)、模型评测、端侧发布、云侧发布、数据监控等全套工程能力,使得用户能够在不写一行代码的情况下完成计算机视觉算法从数据准备到发布的研发全流程。我们衷心希望云平台能够像xNN 一样,进一步降低算法门槛、提升算法深度,为深度学习与计算机视觉算法在阿里经济体的全面落地作出贡献!

三步完成模型研发


下面的小视频展示了如何在云平台上快速完成深度学习模型的研发。


Step 1:数据采集+标注


根据自己的业务场景,采集一些图片作为训练样本,少的几十张,多的几万张,都可以(当然,有些场景下样本数量太少会影响识别效果)。然后花些时间对图片内容标注一下,也可以发动你的小伙伴,或者申请些预算求助于外包同学,动动手指,用人工的智能,帮助人工智能学习这些图片。

Step 2:一键训练


这一步就是使用标注好的图片,从xNN 云平台的算法仓库中选择一个合适的算法,创建你的训练任务。接下来可以喝杯咖啡,几十分钟或几个小时之后,你会收到一个钉钉通知,代表训练已经完成,可以来收货了。

Step 3:评测+发布


训练完成后,你最想要知道的就是模型好不好用,效果怎么样。想要直观地体验一下,可以下载官方提供的移动云平台客户端,就可以实时体验这个模型的识别效果了。感性的体验之后,可以使用模型评测功能,对模型识别效果进行定量的分析和判定,横向比较各个模型的指标参数。如果决定模型可以用于线上业务,可一键将模型发布到手机客户端或者云服务器上,并提供在线的预测服务。


不写一行代码,完成机器视觉算法的研发


案例展示

xNN 云平台发布后,已有10+个业务场景接入使用,感谢xNN 云平台的用户对xNN 云平台的支持。这里有一些有代表性的案例,在这里与大家分享一下。

最高效


阿里巴巴某汽车团队的同学,从开始使用xNN 云平台,到训练出第一个模型,仅仅花费了2个小时。通过收集不同方位的车的信息,训练出一个分类模型,可以判断出车的方位信息。同时,我们统计了10+个业务场景首次训练的时间成本,通过xNN 云平台训练模型,平均只需1天时间,即可训练出第一个模型。



不写一行代码,完成机器视觉算法的研发


最勤奋


蚂蚁金服某内容团队的同学,是在xNN 云平台完成训练次数最多的用户,从开始使用到现在的1个月时间里,累计上传图片34万张,累计训练模型12个,平均每2天就会有一个新的模型问世。这些模型被应用于支付宝的产品中,模型会对所有的支付宝头像图片进行分析,筛选和过滤出含有敏感信息的图片,从而保障对用户透出的是合规的图片。

最跨界


蚂蚁金服某设计团队的同学,作为设计领域的高手,遇到图像识别方面的需求,之前必须要寻求算法同学的支持,才可以训练出一个模型,时间成本和沟通成本都比较高。现在完全可以根据自己的想法,轻松完成模型训练。当前的使用场景是检测图片中的二维码,通过对1000张图片的标注,就可以训练出一个二维码的检测器了。


不写一行代码,完成机器视觉算法的研发


实战中不断成长

衡量一个模型的好坏,需要从多个维度去评判。模型需要同时兼顾识别精度、运算速度、模型尺寸,一个环节出问题,就会导致模型无法使用。比如精度不够会影响业务识别效果;运算太慢会影响用户体验,浪费更多的计算资源;模型尺寸太大则会浪费用户的流量,并且对模型下载的成功率产生影响。xNN云平台目前已经可以提供出各方面表现都符合线上业务要求的模型,并在多个业务中不断打磨优化。

端化能力打磨


以训练识花模型为例,xNN 云平台优化版的模型,在识别精度无损的情况下,模型尺寸为原始的1/4,计算速度提升30%;如果你对运行速度和包大小有更高的要求,xNN 云平台高速版本可以在略微降低精度的前提下,模型尺寸为原始的1/10,计算速度提升90%(具体数据参见下方表格)。当然,如果你对某些指标有更高的要求,可以在xNN 云平台的基础之上,对算法进行进一步的优化。


不写一行代码,完成机器视觉算法的研发


业务经验积累


现在越来越多的业务场景需要图像识别的技术,支付宝内目前已有20余个业务在使用机器视觉团队提供的算法能力,甚至像支付宝的春节活动,也是通过这样的方式来完成。在这些业务场景中,我们将业务流程中的关键节点和容易踩坑的环节进行抽象和封装,集成到xNN 云平台中,让大家少走弯路,将更多的精力用于优化自己的业务体验。

同时,经过多个业务场景的不断尝试和调整,xNN云平台从精度、计算耗时、模型尺寸等多个指标,筛选出综合能力最好的模型,供大家使用和体验,这些模型已经被应用于线上多个业务场景中,可满足大部分业务场景的要求。

平台架构


不写一行代码,完成机器视觉算法的研发


数据标注


人工标注:xNN 云平台使用了 AlphaQ 平台的标注能力,可支持分类、检测、分割等多场景的标注,同时会对标注任务进行分解,支持多人同时标注。

算法标注:可使用模型仓库中的模型对图片进行预标注,人工标注只需做增量调整,降低人工标注的成本。


不写一行代码,完成机器视觉算法的研发


模型训练


训练调度:xNN 云平台的训练任务,通过 ALPS 运行在yarn 集群上。xNN云平台将每个训练任务拆解为PREPARE、SEARCH、TRAIN、SUMMRY四个阶段,根据各个阶段的功能,分配不同的计算资源和存储资源,最大化利用已有的计算能力。

超参搜索:训练过程会进行多次的超参搜索和训练,利用有效的超参搜索算法,降低计算量的同时,训练出效果更好的模型。

端化处理


模型压缩:集成自研的 xqueeze 模型压缩算法,内置的剪枝、量化、编码等技术,提供了十倍以上模型压缩能力,定点化算法更能缩减一半的推理耗时。

模型加密:所有 xNN 云平台产出的模型具备模型加密属性及自我校验能力,有效提高模型安全性及隐私性,防止模型信息泄露及被恶意篡改带来的风险。

模型表现


手机预览:训练出模型之后,安装移动云平台客户端,无需自己搭建模型的运行环境,手机扫码即可实时体验模型效果。

模型评测:针对同一个任务训练出多个模型之后,可以横向比较各个模型的指标参数,为决策是否进行模型更新提供指导数据。

云测平台真机实验:不同的网络结构运行在真机上的性能是不同的,通过接入云测平台,在100+真机上进行模型的实测,提供具有参考价值的性能指标。


不写一行代码,完成机器视觉算法的研发


模型发布


客户端发布:接入支付宝客户端发布平台,具备多种粒度的灰度和发布能力。

服务端发布:依托于 xNN-x86 引擎,真正做到统一模型的端云一体化部署。将模型推送至云端系统进行推理计算,发布过程可灰度、可监控、可回滚。

线上监控


性能指标:通过客户端的埋点数据和服务端的日志采集,监控模型在线上运行的性能指标数据。

数据回流:对于线上处理的图片,按比例回流到 xNN 云平台,用于线上识别效果分析和迭代训练的新增样本。

平台沉淀


算法仓库:沉淀由 xNN 云平台官方提供的分类算法、检测算法、OCR 算法等,以及由用户贡献的优秀算法。

数据仓库:沉淀每次训练过程所需要的已标注的图片,对于高质量且非敏感的数据,可共享给所有平台用户使用。

模型仓库:沉淀所有通过 xNN 云平台训练出的模型,对于使用场景广泛且效果效果优异的模型,共享给所有平台用户使用。

算法架构


不写一行代码,完成机器视觉算法的研发


  • 集成自研的 xqueeze 算法,提供强大的模型压缩、推理提速、模型编码与加密等能力;
  • 抽象通用的底层定义,包含构建模型图 Model、调度机制 Schedule、超参搜索策略 Strategy。以及下沉上层复用的能力,包含模型评测方法 Metrics、常用网络骨干 Nets、平台读写操作 IO Utils;
  • 实现接口方法,包含实现模型图中的网络结构 Customize Model、实现(数据预处理/超参搜索/模型训练/数据汇总/模型评测)的具体操作、实现具体的超参搜索方法;为了满足用户自定义网络结构等需求,我们也把本层的自定义能力,开放了出来,具体可参见【算法开放能力】小节。
  • 透出支持的算法应用场景,包含图像内容分类、目标物体检测、光学文字识别。

对于一次云平台的训练任务,背后的调度可分为四个阶段:PREPARE(数据预处理)、SEARCH(超参搜索)、TRAIN(网络训练)、SUMMARY(模型转换及压缩,结果归纳)。任务执行一次PREPARE 子任务,用于数据预处理、格式转换、生成tfrecords 等;对于同时的多个SEARCH 子任务,后台机制会保证SEARCH 任务的串行执行,防止超参的重复搜索;对于同时的多个train子任务,会被分配到不同的物理资源上执行,支持各训练的并发执行,尽可能地提高GPU 资源的利用效率;当被搜索的超参空间满足结束条件时,系统触发SUMMARY 子任务,用于xNN模型转换、加密、必要数据备份等。这4个步骤调用时间线如下图所示:


不写一行代码,完成机器视觉算法的研发


算法开放能力


平台提供了在不同应用场景下的优秀算法实践,从而尽可能地减少了用户在算法侧的负担,选择使用平台默认提供的算法,即可得到较优的模型。然而不同场景的数据千差万别,通用的算法包也可能难以面面俱到。此时,用户可以借助我们的算法API开放能力,去主动调整训练参数、自主设计网络结构,甚至还可以完全开发一套新的算法场景。我们依据开发的时间成本,将接入算法API的模式依次分为三种:参数配置模式、模型定义模式、阶段定义模式。用户可以根据自身需求,选择相应模式进行算法开发。

参数配置模式(推荐指数★★★★★):


不写一行代码,完成机器视觉算法的研发


用户创建任务选择相应算法包后,平台会透出高级配置选项,提供算法参数配置能力。可以配置但不仅限于模型网络参数、减枝力度、量化阶数等。此模式接入成本为零,可以配置的参数由两部分组成:

  1. 算法透出可配置参数:不同的算法包,对外透出的可配置参数可能不同,由算法包提供者对外暴露。如平台提供的分类算法包,对外透出了 input_size, dept_multiplier, batch_size, num_epochs 等参数。
  2. 平台固有可配置参数:平台侧已经实现网络结构减枝、量化、移动端转换等通用能力,这部分通用能力的参数也可以被用户配置,如减枝模式(prune_mode)、量化模式(quant_mode)、TOCO 转换配置参数等。

Tips:所有遵行平台开发规范的算法包,都会自动具有该配置项。

模型定义模式(推荐指数★★★★):



不写一行代码,完成机器视觉算法的研发


如果除了参数配置外,用户还希望自主定义网络结构,那么通过模型定义模式接入,即基于平台已有的开放算法包做二次开发。用户仅仅需要实现几个核心方法(网络结构定义,优化算法,loss定义),就能快速地完成对算法包的主干网络和优化方法的替换。这种模式下,用户无需关心分类、检测、OCR 场景的数据如何预处理,也无需关心模型如何实现压缩、量量、xNN模型转换,用户只需要关注网络结构本身即可。具体而言,用户可选择自定义实现如下三个部分:network(必选)、input_fn(可选)、hooks(可选)。


不写一行代码,完成机器视觉算法的研发


  1. network (必选)a. build_model: 函数的入参,是平台基于不同类型场景已预处理妥善的 features、 labels、is_training 等参数,用户直接基于上述变量,构造自己的网络结构即可b. get_train: 定义网络优化方法, 如 RMSPropOptimizer、MomentumOptimizer、AdamOptimizer 等。c. get_loss: 获取自定义的 loss,用于训练阶段梯度回传,以及模型择优比较。
  2. input_fn (可选):模型在训练、测试、预测阶段的输入数据解析、在线扩增、输入节点定义等,可以分别利用 train_input_fn、eval_input_fn、inference_input_fn 进行添加。
  3. hooks (可选)模型:训练、测试、预测阶段的一些前处理、后处理操作,如自定义指标的计算、预训练模型的加载等,可以分别利用 get_training_hooks 、get_evaluation_hooks 、get_prediction_hooks 进行添加。

阶段定义模式(推荐指数★★★):



不写一行代码,完成机器视觉算法的研发


如果用户希望自定义地更多,渗入到算法各个阶段,比如希望借助平台的模型压缩、端化能力来搭建自己的算法场景,那么用户可以选择阶段定义模式。平台上所有算法包均基于xnncloud-common 基础包实现,封装了模型减枝、参数量化、模型转换加密等通用功能,并抽象出必要的算法调度阶段,包括数据预处理(PREPARE)、参数搜索(SEARCH)、模型训练(TRAIN)、结果汇总(SUMMARY)、模型评价(EVALUATION),来供用户自定义实现。

  1. 数据预处理 (必选):实现数据离线扩增、数据集的划分、数据特征提取等过程。
  2. 参数搜索 (可选):默认采用grid search策略,用户也可以实现自定义的参数搜索策略,来指导超参搜索过程。
  3. 模型训练 (可选):默认会根据用户自定义的网络结构、loss、train_op,自动完成模型训练与压缩过程。
  4. 结果汇总 (可选):定义评价最优模型的指标(默认采用 loss),选择 top K 模型,并完成 xNN 模型转换、上传模型等结果保存操作。
  5. 模型评价 (必选):基于训练得到的pb文件,计算模型在测试数据集上的预测结果,并计算性能指标。

相关阅读