GitHub屠榜开发神器问世,代号「LiteKit」!

共 5715字,需浏览 12分钟

 ·

2021-04-04 04:49


众所周知,当下越来越多的 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 能力,能够提供实时的人像分割,准确地分割人像和背景,可用于去除背景、人像抠图、照片合成、背景替换等业务之中。


可以一秒接入的 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 GitHub 地址:
https://github.com/PaddlePaddle/LiteKit


回顾精品内容


推荐系统

1、干货 | 基于用户的协同过滤推荐算法原理和实现

2、超详细丨推荐系统架构与算法流程详解

3、推荐 :一文从0到1掌握用户画像知识体系

机器学习

1、从小白到大师:一文Get决策树的分类与回归分析

自然语言处理(NLP)

1、AI自动评审论文,CMU这个工具可行吗?我们用它评审了下Transformer论文

2、Transformer强势闯入CV界秒杀CNN,靠的到底是什么"基因"

计算机视觉(CV)

1、9个小技巧让您的PyTorch模型训练装上“涡轮增压”...

GitHub开源项目:

1、火爆GitHub!3.6k Star,中文版可视化神器现身

2、两次霸榜GitHub!这个神器不写代码也可以完成AI算法训练

3、登顶GitHub大热项目 | 非监督GAN算法U-GAT-IT大幅改进图像转换

每周推荐:

1、本周优秀开源项目分享:无脑套用格式、开源模板最高10万赞

2、本周优秀开源项目分享:YOLOv4的Pytorch存储库、用pytorch增强图像数据等7大项目

七月在线学员面经分享:

1、 双非应届生拿下大厂NLP岗40万offer:面试经验与路线图分享

2、转行NLP拿下40万offer:分享我面试中遇到的54道面试题(含参考答案)

3、NLP面试干货分享:从自考本科 在职硕士到BAT年薪80万

浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报