GitHub屠榜开发神器问世,代号「LiteKit」!
一款没有任何 AI 实践的产品,不仅要进行模型的训练、预测引擎的集成,还需要根据不同模型进行数据的前后处理,图像的各种颜色空间、存储格式的转换,过程中可能会使用到 Python、C/C++、iOS、Android 等多种语言,接入门槛高。 同时,接入 AI 能力的过程非常复杂,涉及引擎调用相关开发、前后处理相关开发、甚至并发相关处理,考虑到移植和复用情况,更需要兼容多种业务场景、进行模块化拆分,导致工作量成倍增加。
视频超分
( 图 1:高清原视频)
(图 2:低清超分后视频)
性能优化
从上面的测试结果可以看到,在 18 年 iPhoneXsMax 上,视频超分也能够达到 32.15ms 的预测速度,支持播放器 25FPS 的超分。在最新的 iPhone12 上,相比 iPhoneXsMax,预测速度进一步提升 30%。
手势识别
人像分割
可以一秒接入的 AI 能力
如何接入
// 1. 创建实例,创建接口为同步的接口,不需要进行额外的配置。
self.srVideo = [LiteKitVideoSuperResolutionor createVideoSuperResolutionorWithError:&error];
// 2.推理,对于视频超分,只需要输入后图片和scale倍数,即可获得超分后的图片。
UIImage *newImg = [self.srVideo superResolutionWithUIImage:inputImage scale:1.0 error:&error];
// 3. 释放,根据业务场景定义
self.srVideo = nil;
LiteKit 的设计
创建后,可以反复使用执行推理
推理的过程整体只有一类 API:对输入数据(input)执行推理,同步返回输出数据(output)。图中和模型直接相关的前后处理的流程,都被封装在了 AI 能力推理接口内部,用户既不需要关心,也不需要任何处理。为了方便不同业务不同的输入,每个能力的推理接口可能有几个,这几个接口能力完全相同,唯一不同的只是输入和输出类型,用户通常只需要根据自己的输入输出类型关心最便捷使用的一个即可。
释放与创建一一对应,当 AI 业务退出的时候,执行即可。
LiteKit 的架构
移动端的 AI 开发者接入了 LiteKitCore 之后,不必再关心推理引擎的配置、模型的加载等复杂操作,LiteKit 内部管理了推理引擎大部分复杂的配置,同时仍然支持使用者灵活的配置一些入模型地址等的关键参数。
LiteKitCore 向上对 AI 能力的开发者,提供了 Java/ObjectiveC/C++ 三套接口,能大大降低端 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;
LiteKit GitHub 地址:
回顾精品内容
推荐系统
机器学习
自然语言处理(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:面试经验与路线图分享