简单搜索--Paddle Mobile的技术实现和业务落地

Paddle Mobile是PaddlePaddle组织下的致力于嵌入式平台的深度学习框架,集成了百度移动端预测的实践经验,提供多平台支持,在工程实现支持及底层算法模型压缩的基础上,通过CPU、mall GPU等硬件加速,作用于DuerOS、百度APP、百度网盘APP等移动端场景。目前,Paddle Mobile在PaddlePaddle 0.14版本下已支持CPU、Mali GPU等平台,以及图像、人脸、OCR等模型。值得一提的是,它的体积极小,最小仅300K。今天这篇文章是由百度大搜索高级研发工程师谢柏渊老师,为大家介绍Paddle Mobile的技术实现和业务落地。

以下为谢柏渊的演讲实录

Paddle Mobile框架概览


图一:Paddle mobile框架
Paddle mobile各大框架,偏重于与AI硬件的结合,提升本地用户性能。
? Paddle mobile的训练分为训练过程和运算过程,训练过程兼容统一训练模型,训练基础上提供量化深度压缩功能。
? 目标检测有单主体检测,多主体检测,手势识别。
? 实时OCR保证在高性能的情况下,每个图片完整的映射。
? 语音唤醒,形成无数的样本输出。
? 多硬件平台支持,支持全部ARM CPU,Mali GPU,高通DSP,Arm-Linux FPGA。

Paddle mobile的架构设计

Paddle mobile的架构设计主要分为: Loader 模块、 Program 模块、 Executor 模块、 Op 模块、 Kernel 模块、Scope variable Tensor 模块。它的模型分为两种结构: 一种为参数文件是散开的, 如下图, 红框为模型结构的 protobuf 文件, 其余为参数文件。

图二:模型

其中Loader 模块的作用是将模型结构信息 load 进内存, 如红框内的 protobuf 文件 load 进内存, 并对模型结构进行优化(如将几个细粒度的 op 融合成粗粒度的op, 如将 conv、 add、 batchnorm、 relu 融合为 conv_add_batchnorm_relu),方便进行算法优化。由于 conv 可以转换为两个大矩阵相乘, 更进一步可以分为若干个一行一列的小矩阵相乘, 并得出最终运算。

图三:op融合

Program 为 Loader 模块的结果, 包含了优化前的模型结构对象, 以及优化后的模型结构对象, 此模块基本对应 PaddlePaddle 模型结构, 关于Paddle 模型的概念定义, 详细设计可以参考 program.md。

kernel 为 op 的底层运算实现, 主要有两个函数, Init 和 Compute, 分别用来初始化、预处理 和 运算操作, 值得提出的是, kernel 会根据泛型特化到不同的平台, 如图所示:

图四:平台

不同平台的 kernel 实现, 为同一个 kernel 类不同泛型的特化实现, 目前有三个平台, arm、mali、fpga, 图中的 central-arm-func\ 目录为 op kernel 的 arm 实现, 它承担了 arm\ 目录下 kernel 的底层实现, 同时 arm 处理器作为中央处理器, central-arm-func\ 也可以作为其他协处理器的底层实现, 如: fpga 的某一个 op kernel 还没有 fpga 协处理器的实现, 就可以直接调用使用这里的 arm 实现.

Paddle Mobile的优化

Paddle Mobile的优化的体现在两个方面,体积优化和效率提升。其中,体积优化从三方面来进行:第一,模型量化压缩方案;第二,代码深度精简;第三,分模型打包。效率提升主要从Operator融合和各平台特化实现两方面才进行提升。

Scope用来存储管理所需要用到的variable,用来存储不同类型的对象,主要是矩阵为tensor,也就是说scpoe管理着op运算过程中所有参数矩阵,输入输出矩阵。可以将scope理解为一个map,这里在map上封了一层scope的概念是为了方便内存管理。scope可以用来存储不同类型的对象,Paddle mobile主要用它来存储tensor,tensor代表着矩阵,通过泛型可以用来存储不同类型的矩阵,但需要注意的是存入和取出时的类型必须保持一致,如果类型不一致,不能通过类型检查。

提问环节

提问:把很多模型压缩放到移动端,压缩是手动还是会自动。
谢柏渊:我们提供一个脚本,跟Paddle mobile项目读取模型一样,我们进行映射,按照255乘以值,预算的时候用这个数乘以255。具体实践可以看Paddle mobile这个项目有量化的脚本,做一个简单的片断。

提问:压缩是把矩阵一点点读进去,读的是哪部分?
谢柏渊:我对这个算法了解不是特别深入,这个想深入了解可以打开PaddlePaddle,在文档列表搜介绍。

提问:能否提供简单的算法然后传播,我们进行简单的预算?
谢柏渊:目前没有,后续考虑会支持。

提问:如果把训练好模型放到手机上,大概有多大?
谢柏渊:目前压缩以后,差不多有5兆,6兆左右,很小。例如有一些AR团队设立鸡蛋的模型,只有50多K,不用量化,量化以后10K,就没有必要了。模型大小跟复杂程度有关,用一张数据训练,参数大就大;模型设计的简单,参数少,模型也就小。模型大小是纯粹数据的排列,非常简单,你有多少数就多大。所以我们设计一个模型考虑的问题就是如何设计一个既省空间,效率又高,又准确的模型。

提问:您的模型用的是哪个模型。
谢柏渊:模型因为属于商业化东西,我们对外开放了一部分,在官网可以查询和观看demo,对外也提供了接口,把项目编译出来后,ARM模型在手机上,处理好的数据输入进去,可以拿到所有点的结果。使用起来非常简单。

实录结束

谢柏渊,百度大搜索高级研发工程师,拥有多年Android开发经验,多模搜索部创新团队成员,Paddle Mobile团队成员,落地功能有图搜实时翻译,lite版语音搜索,悬浮球搜索等。目前主要负责Paddle Mobile从学术到上线的打通工作,推动技术实现到业务落地。

原文地址:http://blog.51cto.com/13970240/2288305

时间: 2024-10-10 02:44:53

简单搜索--Paddle Mobile的技术实现和业务落地的相关文章

百度再出Lens黑科技!用Paddle Mobile实现类人眼视觉AI能力

你知道吗?人类有 70%的信息获取来自于视觉.但目前存在两个问题: ①人眼本身只能看到物理世界,无法看到其背后复杂的信息世界: ②人类的记忆力有限,视野有限,于是会出现看了就忘.视野窄等各种问题. 科幻片里常见这样一种"人肉外挂":通过一系列的技术改造,主人公(比如史塔克)眼前出现的一切物体都会被自动识别,什么名称.用途.用法用量,全都可以秒速反馈回来,并被即时载入到记忆中,过目不忘. 如今,百度识图在百度 App 和简单搜索 App 上推出的最新版,通过应用Lens技术把这种科幻场景

参与过三次搜索引擎发展转折的百度,为什么要回归“简单搜索”

相信在搜索引擎技术产品化的二十余年间,我们早已经习惯了搜索引擎的商业化.不过在最近的数博会上,李彦宏却展示了一款名为"简单搜索"的语音交互搜索App,并且声明简单搜索永无广告. 相信很多人也曾想象过这样一款产品--通过语音发问,得出最简单的答案.不过可能大多数人没有想到,推出这款产品的是百度.很长一段时间内,百度的搜索引擎商业化一直为人诟病.但这次百度率先推出永无广告的语音交互搜索,无疑是在搜索引擎的技术和产品形式上都进行了重要创新. 当我们在质疑大企业的创新能力时常常会忽视一点,在技

专题一、简单搜索 - Virtual Judge

很久以前刷完了Virtual Judge上的简单搜索专题,现总结如下: POJ 1321 由于题目的数据范围比较小,可以直接dfs暴力.读入时记录每个空位的位置,保存在pX[]以及pY[]数组中.暴力的时候统计当前处理第几个空格以及当前处理到了第几行即可. #include <iostream> #include <memory.h> using namespace std; const int MAX = 128; long long ans; int N, K, nCnt; b

java 模拟简单搜索

Java 模拟简单搜索 实体类 package org.dennisit.entity; /** * * * @version : 1.0 * * @author : 苏若年 <a href="mailto:[email protected]">发送邮件</a> * * @since : 1.0 创建时间: 2013-4-8 下午04:51:03 * * @function: TODO * */ public class Medicine { private I

lucene4.3简单搜索示例代码

原文:lucene4.3简单搜索示例代码 源代码下载地址:http://www.zuidaima.com/share/1550463715560448.htm   示例代码,请牛哥们多

扒一扒那些说起来简单做着难的技术需求

原文链接 总有一些产品经理在跟技术沟通的时候,说这个不就是调用一个什么方法,那个按钮不就是添加个监听事件吗,有什么难的.但实际开发中要比产品经理想的困难.麻烦得多, 老夫来分享一些人僧惊艳. 对于产品和开发,两支天赋我都基本加通了.产品(游戏策划)方面的天赋点,是因曾经被坑了太多,失去了找到高契合度产品合作者的信心,于是自行转职修炼而成.作为一个二转角色,这题还是可以答一下的. 在分辨需求方靠谱度这方面,公司豢养的程序员是远不如宅家接外包的soho狗们的.被不靠谱的发包方坑乃是soho狗成长路上

kuangbin带你飞专题一 简单搜索 题解

目录 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题一 简单搜索 总结:用时2天半终于把这个专题刷完了 对于最基础的dfs bfs 路径打印 状态转移也有了一点自己些微的理解 其实2天半可以压缩到1天半的 主要是自己太懒了...慢慢加油刷bin神的专题呀 从大二下学期开始学算法 一开始就知道这个专题 一开始对于这个专题里的所有问题感觉都好难啊..就直接放弃了 看lrj的书 现在看到这个专题还挺唏嘘的吧 突然觉得思维和想法也不是很难 果然是那个时候心不静&还是储量不够吗

poj 3279 Fliptile (简单搜索)

Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16558   Accepted: 6056 Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He has arranged a brainy activity for cows in whic

和我一起打造个简单搜索之Logstash实时同步建立索引

用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 Java API 的方式建立索引,也可以通过 Logstash 的插件 logstash-input-jdbc 完成,今天来探讨下如何使用 logstash-input-jdbc 完成全量同步以及增量同步. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch