Py学习  »  Git

GitHub 又一开发必备神器问世,代号「LiteKit」!

GitHubDaily • 3 年前 • 346 次点击  
公众号关注 “GitHubDaily”
设为 “星标”,每天带你逛 GitHub!


大家好,我是小 G。

众所周知,当下越来越多的 AI 场景将 AI 能力直接部署在移动端,其优势主要在于实时、省流、以及安全性等方面。这些 AI 能力给移动端产品带来巨大的想象空间,促进了移动互联网下半场的繁荣。

在移动端智能化的背后,离不开移动开发者以及人工智能应用算法工程师。在实际业务开发中,算法工程师开发出来的 AI 算法,最终都要交付给移动开发者进行工程落地。这个落地的链条其实难度相当大,总结来说涉及以下两方面:
  • 一款没有任何 AI 实践的产品,不仅要进行模型的训练、预测引擎的集成,还需要根据不同模型进行数据的前后处理,图像的各种颜色空间、存储格式的转换,过程中可能会使用到 Python、C/C++、iOS、Android 等多种语言,接入门槛高。
  • 同时,接入 AI 能力的过程非常复杂,涉及引擎调用相关开发、前后处理相关开发、甚至并发相关处理,考虑到移植和复用情况,更需要兼容多种业务场景、进行模块化拆分,导致工作量成倍增加。
如果您也面临以上问题,那么 LiteKit 将是您最好的选择!话不多说,我们先看效果!


视频超分




( 图 1:高清原视频)


(图 2:低清超分后视频)


这个视频来自百度百家号推出壮美极境公益项目。图 1 的视频为 480p 原始视频,图 2 的视频为 360p 视频通过超分能力重建的 480p 视频。通过图 1、图 2 视频对比,可以看到超分后的视频在手机上可以达到与原始视频几乎一致的视觉体验。

(超分前)

(超分后)

上图是 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<:litekitmachineservice> service = litekit_framework::CreateLiteKitMachineService(config);

  • 使用 AI 推理能力的时候也不需要关心推理引擎具体如何调用,LiteKitCore 提供方便使用的 C++/Java/ObjectiveC API。
// 1. 创建input
std::unique_ptr<: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-Lite
gitee:
https://gitee.com/paddlepaddle/paddle-lite

・Paddle Lite Demo 项目地址・
https://github.com/PaddlePaddle/Paddle-Lite-Demo
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110830
 
346 次点击