18600329666

咨询技术专家

扫一扫
与技术专家在线沟通

Menu
GitHub开源:飞桨移动端部署工具LiteKit发布
   目前,越来越多的AI场景将AI能力直接部署在移动端,其优势主要在于实时、省流、以及安全性等方面。这些AI能力给移动端产品带来巨大的想象空间,促进了移动互联网下半场的繁荣。
  在移动端智能化的背后,离不开移动开发者以及人工智能应用算法工程师。在实际业务开发中,算法工程师开发出来的AI算法,最终都要交付给移动开发者进行工程落地。这个落地的链条其实难度相当大,总结来说涉及以下两方面:
 
  -一款没有任何AI实践的产品,不仅要进行模型的训练、预测引擎的集成,还需要根据不同模型进行数据的前后处理,图像的各种颜色空间、存储格式的转换,过程中可能会使用到Python、C/C++、iOS、Android等多种语言,接入门槛高。
 
  -同时,接入AI能力的过程非常复杂,涉及引擎调用相关开发、前后处理相关开发、甚至并发相关处理,考虑到移植和复用情况,更需要兼容多种业务场景、进行模块化拆分,导致工作量成倍增加。
 
  如果您也面临以上问题,那么LiteKit将是您最好的选择!话不多说,我们先看效果!
        视频超分
  这个图片来自百度百家号推出壮美极境公益项目的视频。左边的图片为480p原始视频截图,右边的图片为360p视频通过超分能力重建的480p视频截图。通过左右视频截图对比,可以看到超分后的视频(右侧)在手机上可以达到与原始视频(左侧)几乎一致的视觉体验。

左图是360p原始视频的单帧画面,右边将360p视频超分到480p的画面,对比来看画面放大后,画面不仅没有损失清晰度,而且变得更清楚。
  所谓视频超分,通俗来说,就是将低像素的视频转成高像素,而且视频还能变得更清楚!
  而对于手机场景来说,视频超分本身最重要的不仅仅是追求极致的超分效果,而是速度和效果的均衡。手机视频超分主要目标是在手机端上达到25FPS(手机端的视频通常是25FPS,通常来说24FPS+视觉上才不会感觉到卡顿)的前提下,对画面进行优化重建。
 
  LiteKit提供的视频超分是业内首次开放的能够达到25FPS的视频超分解决方案。在手机移动应用项目中最常见的是360p视频。LiteKit支持从360p到480p场景下进行25FPS的超分。除此以外,LiteKit的视频超分能够对播放器解码后的YUV420视频帧数据直接进行处理,并获得相同格式的输出数据,消除了将视频帧数据进行数据格式转换的过程,大大方便了用户的使用,并降低使用耗时。
 
  性能优化
 
  LiteKit的视频超分能力模型,经过反复的性能调优,可以支持360p->480p的超分场景下播放器25FPS的持续超分。

  

  从上面的测试结果可以看到,在18年iPhoneXsMax上,视频超分也能够达到32.15ms的预测速度,支持播放器25FPS的超分。在最新的iPhone12上,相比iPhoneXsMax,预测速度进一步提升30%。
  手势识别

  


 
  这是LiteKit提供的手势识别AI能力。它可以准确的检测手势所在位置的矩形坐标、手势类型和置信度,支持识别六种类型的手势,包括手、五指手势、V手势、握拳、1手势、OK手势。
  人像分割

  


 
  (人像分割前)(人像分割后)
 
  这是LiteKit提供的人像分割AI能力,能够提供实时的人像分割,准确地分割人像和背景,可用于去除背景、人像抠图、照片合成、背景替换等业务之中。
 
  快速体验
 
  以上就是LiteKit目前开放出来的AI能力,这些AI能力可以直接点击以下链接快速安装Android Demo体验(只需一部安卓手机即可):
 
 
  可以一秒接入的AI能力
 
  对于APP开发者来说,是不是很想知道这些能力能否接入到自己的移动应用之中呢?
 
  答案当然是肯定的!不仅能接入,而且可以说是一秒就能接入你的APP工程!
 
  LiteKit提供视频超分、人像分割、手势识别一系列AI能力,这些AI能力均来自于百度各个业务线AI场景多年的技术沉淀,并以SDK的形式提供,做到了开箱即用。
 
  即使是没有任何AI实践的APP开发者,只需通过调用两三个简单API连接LiteKit提供的SDK软件包,就可以顺利接入AI能力。就像拆开快递箱一样简单,打开箱子就可以直接用。
 
  你可以把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以连通外界,而这个接口就是API。
 
  如何接入
 
  LiteKit的接入只需要创建、推理、释放三步即可完成AI能力的开发。虽然对于视频超分、人像分割、手势识别,甚至包括未来将要开源的新AI能力,输入输出会各有不同,但是整体流程和API的样式都被抽象成类似的步骤,甚至API的命名都会保持高度一致,让学习成本降到最低。下面的代码就是视频超分能力的接入过程:
 
  (内容持续更新中,最新内容可以访问此链接获取。 

 

  LiteKit的设计

  


        LiteKit把接入过程整体抽象为:创建、推理、释放三步:
 
  -创建后,可以反复使用执行推理
 
  -推理的过程整体只有一类API:对输入数据(input)执行推理,同步返回输出数据(output)。图中和模型直接相关的前后处理的流程,都被封装在了AI能力推理接口内部,用户既不需要关心,也不需要任何处理。为了方便不同业务不同的输入,每个能力的推理接口可能有几个,这几个接口能力完全相同,唯一不同的只是输入和输出类型,用户通常只需要根据自己的输入输出类型关心最便捷使用的一个即可。
 
  -释放与创建一一对应,当AI业务退出的时候,执行即可。
 
  关于输入数据的获取和输出数据的使用,在真实的业务落地中,是需要开发者进行考虑的问题。例如在推理前,需要拿到相机帧,考虑到手机的自动旋转及前后镜头的问题,需要开发者对图像进行旋转。在获得推理结果后,需要开发者把推理的结果用适当的方案进行渲染。
 
  LiteKit的架构
 
  LiteKit从下至上主要分为三层:  

      1.最底层的Paddle Lite:是百度飞桨深度学习平台提供的开源推理引擎,能够提供CPU、GPU等多种环境下进行推理。
 
  2. 中间的LiteKitCore框架层:隔离了业务方对Paddle Lite的直接依赖,并向上层提供基本一致的OC、Java、C++ API,提供了基础结构和数据类型的定义,并提供通用的工具集。
 
  3. LiteKit业务层:根据各自不同的业务,封装了人像分割、视频超分、手势识别等能力。LiteKit的能力将会不断的扩充。
 
  LiteKit的人像分割、视频超分、手势识别三大能力, 底层统一依赖LiteKitCore。目前LiteKitCore也同步进行了开源。LiteKitCore作为移动端AI能力部署工具,其职责主要是向下接管推理引擎,并向上提供统一的AI推理能力。
 
  -移动端的AI开发者接入了LiteKitCore之后,不必再关心推理引擎的配置、模型的加载等复杂操作,LiteKit内部管理了推理引擎大部分复杂的配置,同时仍然支持使用者灵活的配置一些入模型地址等的关键参数。
 
  -LiteKitCore向上对AI能力的开发者,提供了Java/ObjectiveC/C++三套接口,能大大降低端AI开发者的开发成本。
 
  下面以C++接口接入CPU AI推理能力为例,简单示范一下接入的流程:
 
  -使用LiteKitCore创建AI推理引擎管理实例,不再需要关心模型的结构,推理引擎的使用方式,只需要通过LiteKitCore进行简单的配置。  
  -使用AI推理能力的时候也不需要关心推理引擎具体如何调用,LiteKitCore提供方便使用的C++/Java/ObjectiveC API。  

      在开发不同业务的过程中,上层的业务配置根据不同业务场景设置,底层LiteKitCore部分代码完全可以复用和移植,极大的降低了AI能力开发的工作量。
 
  展望
  LiteKit作为飞桨的移动端部署工具,能够快速的部署基于百度深度学习框架飞桨的轻量化推理引擎Paddle Lite的AI能力。能够让AI能力在任何APP中、任何场景下快速的工程化落地,可以让同学们简单的实现自己的AI特效。