查看原文
其他

快来尝鲜!移动开发者实现AI业务的必选神器——飞桨移动端部署工具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的持续超分。

  

机型
预测引擎平均耗时(ms)
iPhone Xs Max
32.15
iPhoone 12
22.46


从上面的测试结果可以看到,在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的命名都会保持高度一致,让学习成本降到最低。下面的代码就是视频超分能力的接入过程:

内容持续更新中,最新内容可以访问此链接获取。
https://github.com/PaddlePaddle/LiteKit

// 1. 创建实例,创建接口为同步的接口,不需要进行额外的配置。
self.srVideo = [LiteKitVideoSuperResolutionor createVideoSuperResolutionorWithError:&error];
// 2.推理,对于视频超分,只需要输入后图片和scale倍数,即可获得超分后的图片。
UIImage *newImg = [self.srVideo superResolutionWithUIImage:inputImage scale:1.0 error:&error];
// 3. 释放,根据业务场景定义
self.srVideo = nil;



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进行简单的配置。

// 1. 创建config
litekit_framework::LiteKitConfig config; 
config.machine_type = litekit_framework::LiteKitConfig::MachineType::PaddleLite; // machine_type设置
litekit_framework::LiteKitConfig::PaddleLiteConfig paddle_config;
paddle_config.model_type = litekit_framework::LiteKitConfig::PaddleLiteConfig::LITE_MODEL_FROM_FILE; // 设置模型的路径
paddle_config.model.model_from_file.data = fileDir.data;
paddle_config.model.model_from_file.size = fileDir.length;
config.machine_config.paddle_lite_config = paddle_config;
/*省略一些不重要属性的设置*/

// 2. 加载machine
std::shared_ptr<litekit_framework::LiteKitMachineService> service = litekit_framework::CreateLiteKitMachineService(config);

  • 使用AI推理能力的时候也不需要关心推理引擎具体如何调用,LiteKitCore提供方便使用的C++/Java/ObjectiveC API。
// 1. 创建input
std::unique_ptr<litekit_framework::LiteKitData> inputData = service->getInputData(0);
litekit_framework::LiteKitTensor *ainput = inputData->litekitTensor;

// 2. 执行predict
service->run();

// 3. 获取output
std::unique_ptr<const litekit_framework::LiteKitData> outputData = service->getOutputData(0);
const litekit_framework::LiteKitTensor *output_tensor = outputData->litekitTensor;


在开发不同业务的过程中,上层的业务配置根据不同业务场景设置,底层LiteKitCore部分代码完全可以复用和移植,极大的降低了AI能力开发的工作量。


展望




LiteKit作为飞桨的移动端部署工具,能够快速的部署基于百度深度学习框架飞桨的轻量化推理引擎Paddle Lite的AI能力。能够让AI能力在任何APP中、任何场景下快速的工程化落地,可以让同学们简单的实现自己的AI特效。

LiteKit在不久的将来还会开放OCR等更多的能力,支持更多的业务场景。大家对LiteKit即将开放的能力,还有什么期待呢,如果有的话,就请快速扫描二维码,填写您对AI能力的需求吧。




相关链接




想进一步了解LiteKit的小伙伴,可以上Github点star并查看完整文档及Demo。


LiteKit GitHub地址:
https://github.com/PaddlePaddle/LiteKit

⭐点击文末『阅读原文』立即star⭐


更多参考:
如果您想详细了解更多关于端侧AI部署的相关内容,可以多多关注飞桨Paddle Lite。Paddle Lite支持包括手机移动端嵌入式端在内的端侧场景,支持广泛的硬件和平台,是一个高性能轻量级的深度学习推理引擎。除了和飞桨核心框架无缝对接外,也兼容支持其他训练框架如TensorFlow、Caffe保存的模型(通过X2Paddle工具即可将其他格式的模型转换成飞桨模型)。


如在使用过程中有问题,可加入飞桨推理部署QQ群进行交流:959308808。

如果您想详细了解更多飞桨推理部署的相关内容,请参阅以下文档。

·LiteKit FAQ·
https://github.com/PaddlePaddle/LiteKit/blob/develop/Doc/LiteKitCoreFAQ.md

·Paddle Lite项目地址·
github:https://github.com/PaddlePaddle/Paddle-Litegitee:https://gitee.com/paddlepaddle/paddle-lite
·Paddle Lite Demo项目地址·https://github.com/PaddlePaddle/Paddle-Lite-Demo


飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。


END



点击"阅读原文",立即star!↓↓↓

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

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