1+1>2,Paddle Lite与EdgeBoard无缝连接,快速实现部署应用

导读:Paddle Lite高性能推理引擎支持FPGA作为其底层加速硬件,其支持的模型可以很简单的部署到FPGA计算卡上,利用Paddle Lite上层框架的优化能力,加上FPGA底层超强的计算能力,在精度损失很小的情况下,模型运行速度可以得到很大的提升。本文通过Paddle Lite高性能推理引擎在百度EdgeBoard计算卡上部署蔬菜识别模型,达到了实时高效识别蔬菜品类的效果。

1. 基于飞桨开源深度学习平台的AI解决方案

作为飞桨开源深度学习平台的重要组成部分,Paddle Lite和EasyEdge通过有机组合,可以快速实现基于FPGA的嵌入式AI解决方案,具有高性能、高通用、低成本、易开发等四大优点,适用于开发验证、产品集成、科研教学、项目落地等应用方向,以及安防监控、工业质检、医疗诊断、农作物生长监控、无人驾驶、无人零售等应用场景。

2. 真实案例:蔬菜种类识别

针对真实的业务需求:蔬菜种类识别,本文进行了完整的案例实现。简便起见,我们采用了百度AI Studio的公开蔬菜识别模型,为了进一步提高识别速度和效率,采用的是int8量化训练的模型,量化的优点包括低内存带宽、低功耗、低计算资源占用以及低模型存储需求等。这里,硬件我们采用EdgeBoard来实现

图1 EdgeBoard计算卡

2.1. 量化训练原理

量化是将浮点数量化成定点数,以最大绝对值量化(max-abs)为例,量化公式如下:

前向计算量化过程如下:

a. 输入和权重被量化为8-bit整数

b. 在8-bit整数上执行矩阵乘法或卷积

c. 对矩阵乘法或者卷积操作的输出结果进行反量化,输出为32-bit浮点数

d. 在32-bit浮点型数据上执行偏置加法操作

图2 量化训练前向过程(左为量化过程,右为等价工作流)

为了充分的利用GPU提供的加速支持,上述的前向计算流可以等价为图2右的工作流:

对应反向传播计算过程:

图3 量化计算反向传播过程

2.2. 模型训练

本文采用的模型是Resnet50模型,它引入了新的残差结构,解决了随着网络加深,准确率下降的问题,在分类问题上表现良好,可以通过以下步骤进行模型训练:

a. 打开百度AI Studio官网https://aistudio.baidu.com/

b. 点击顶部菜单:项目->公开项目, 搜索 “EdgeBoard-Resnet50”,点击打开。

c. 加载训练数据和float模型,量化训练8bit模型

d. CPU评估量化训练模型效果

3. 模型的部署与测试

3.1. Paddle Lite支持FPGA硬件原理

Paddle Lite完整支持从Mobile到Server多种硬件,这主要得益于对不同硬件的统一抽象,不同的硬件提供统一的接口给上层框架,形成了硬件的可插拔,极大方便了底层硬件的扩展与支持。FPGA作为Paddle Lite的Backends之一,将自身硬件相关的kernel、驱动及内核进行了包装并向Paddle Lite提供了统一的op调用接口,使得Paddle Lite能很方便的集成FPGA的计算能力。同时通过Paddle Lite上层框架对模型的优化能力,包括各种op融合、计算剪枝、存储复用、量化融合的优化pass,以及kernel的最优调度、混合部署等功能,进一步实现了模型加速。整体结构原理如图所示。

图4 Paddle Lite支持EdgeBoard原理

3.2. Paddle Lite库编译

3.2.1. 拉取Paddle Lite库

git clone https://github.com/PaddlePaddle/Paddle Lite.git

3.2.2.编译Paddle Lite FPGA库

可以使用Paddle Lite使用的docker

cd Paddle Lite && ./lite/tools/build_FPGA.sh

编译完成时build_FPGA/lite/inference_lite_lib.armlinux.armv8.FPGA/cxx里包含了所需的头文件文件夹include和库文件夹lib,lib下静态库libpaddle_api_full_bundled.a是我们所需的Paddle Lite静态库文件

3.3. EdgeBoard模型部署

利用Paddle Lite在EdgeBoard上进行模型部署很简单,只需将include下头文件包含到调用Paddle Lite的代码文件中,将静态库文件与工程文件联编成可执行程序,即可运行。其中调用Paddle Lite的步骤如下:

3.3.1. 包含头文件

#include "paddle_api.h"         
#include "paddle_use_kernels.h"  
#include "paddle_use_ops.h"      
#include "paddle_use_passes.h"
using namespace paddle::lite_api;

3.3.2. 设置配置参数

std::vector<Place> valid_places({Place{TARGET(kFPGA), PRECISION(kFP16), DATALAYOUT(kNHWC)},
                           Place{TARGET(kHost), PRECISION(kFloat), DATALAYOUT(kNCHW)}});
std::string model_dir = j["model"];
std::string model_file = model_dir + "/model";
std::string params_file = model_dir + "/params";
// 1. Set CxxConfig
CxxConfig config;
config.set_model_dir(model_dir);
config.set_model_file(model_file);
config.set_param_file(params_file);
config.set_preferred_place(Place{TARGET(kFPGA), PRECISION(kFP16), DATALAYOUT(kNHWC)});
config.set_valid_places(valid_places);

3.3.3. 创建预测器

// 2. Create PaddlePredictor by CxxConfig
predictor = CreatePaddlePredictor<CxxConfig>(config); 

3.3.4. 设置输入数据

std::unique_ptr<Tensor> input_tensor(std::move(predictor->GetInput(0)));
input_tensor->Resize(shape_t({1, 3, 224, 224}));
auto* input = input_tensor->mutable_data<float>();
read_image(value, input);

3.3.5. 开始预测

// 4. Run predictor
for (int i = 0;i < 2; i++) {
  predictor->Run();
}

3.3.6. 获取运行结果

// 5. Get output
std::unique_ptr<const Tensor> output_tensor;
std::move(predictor->GetOutput(0)));

3.4. 应用测试

将EdgeBoard计算卡与摄像头相连,可以测试我们的蔬菜识别模型的效果与运行速度,整个测试结果如下:

3.4.1. 检测结果测试

随便选取若干张图片,测试结果如下:

图5 EdgeBoard后台模型运行过程

再把图片可视化的效果看一下:

图6 EdgeBoard运行效果

3.4.2. 运行性能测试

对比ARM端芯片,EdgeBoard的性能有4-14倍提升,如下图所示:

图7 EdgeBoard对比ARM芯片,其他芯片数据均来测于Paddle Lite beta1版本 armv8+4线程,纵轴单位为ms

对比主流边缘及端类芯片,EdgeBoard也有不错的表现:

图8 与同类主流芯片性能比较,纵轴单位为ms

4. 总结

本文利用Paddle Lite推理引擎在EdgeBoard计算卡上部署Resnet50 int8量化蔬菜识别模型,实现了边缘端智能识别蔬菜品类的功能,可用于多种场景。整个应用借助Paddle Lite的上层框架优化能力与FPGA的底层计算加速能力,每秒可识别50帧,真正实现实时高效的蔬菜识别。

本案例具有极高的拓展性,由于Paddle Lite可以和飞桨PaddlePaddle模型无缝对接,加上EdgeBoard计算卡的软件可持续迭代、op持续更新等特点,在模型支持上的数量上和速度上均会有很大优势,如本文所用模型也可以更换成Inception等常用的分类模型或检测模型。

本文分享自微信公众号 - PaddlePaddle(PaddleOpenSource)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI掘金志

019 最受市场关注的 AI 安防芯片企业之「前端」

而这也使得人工智能芯片领域近几年来逐渐成了群雄逐鹿的重要“战场”,包括英特尔、谷歌、华为等在国内外各大科技巨头,及AI初创芯片公司不断涌入。

11330
来自专栏菜菜小屋

温度传感器 介绍以及驱动实现原理

4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI、低电平有效的从机选择线NSS。

34990
来自专栏编程语言xuetang

Java-小议计算机内存&字节

内存:计算机内存是由一个有序的字节序列组成,用于存储程序及程序需要的数据。你可以将内存想象成计算机执行程序的工作区域。一个程序和它的数据在被CPU执行前必须移...

6320
来自专栏腾讯技术工程官方号的专栏

腾讯物联网操作系统正式开源,最小体积仅1.8 KB

? 9月18日,腾讯宣布将开源自主研发的轻量级物联网实时操作系统TencentOS tiny。相比市场上其它系统,腾讯TencentOS tiny在资源占用、...

21830
来自专栏量子位

量子计算机的新对手:随机磁电路,因数分解更厉害

大数的因子分解是现代非对称加密的数学基础之一,谁能用算法在较短的时间内破解这个问题,就将严重威胁现存的加密体系。

10030
来自专栏光通信

熔融拉锥型(FBT) VS平面波导型(PLC)光分路器,如何选择?

光分路器(Splitter)是连接光线路终端(OLT)和光网络单元(ONU)的核心光器件,其主要作用是将光信号从一根光纤中分至多条光纤中,光分路器的性能直接关系...

9920
来自专栏MAC常见问题

Macbook风扇声音大怎么办?

Macbook风扇声音大怎么办?好多使用 MacBook 笔记本的朋友,都会遇到风扇声音大的时候。有的可能是硬件问题,有的可能是软件问题,也有的是属于正常情况。...

11230
来自专栏AI科技大本营的专栏

全球首个软硬件推理平台 :NVDLA编译器正式开源

2017 年,英伟达发布了深度学习加速器 NVDLA,全称 NVIDIA DeepLearning Accelerator,以推动在定制硬件设计中采用高效的 A...

11620
来自专栏AI掘金志

AI 安防芯片 IP 这门生意该怎么做?

随着AI在安防行业的落地,各类玩家也纷纷进入这一市场。如何实现差异化竞争,其中一个关键因素就是IP的选择。

4520
来自专栏量子位

腾讯最新开源IoT操作系统登上GitHub热榜,最小体积仅1.8 KB,标星1200+

鹅厂又开源,这次是一个操作系统,面向物联网场景,名为TencentOS-tiny。

14310

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励