原创 如何用百度大脑FZ3深度学习卡+Paddle模型创建你的应用?

2020-7-22 17:02 617 33 33 分类: FPGA/CPLD 文集: zynq

前言:米尔科技的FZ3是与百度紧密合作推出的一款基于Xilinx Zynq Ultrascale CZU3EG芯片打造的深度学习计算卡,芯片内部集成了4核ARM A53处理器+GPU+FPGA的架构,具有多核心处理能力、FPGA可编程能能力以及视频流硬件解码能力等特点。

同时内置了基于Linux操作系统+百度深度学习平台-飞桨(Paddle)定制的深度学习软核,深度兼容百度大脑模型资源与工具平台(EasyDL/AIStudio),可高效、快速的实现模型的训练-部署-推理等一系列流程,极大降低了开发验证、产品集成、科研教学、项目部署的门槛。

 
软核简介
  
FZ3 计算卡内部搭载Linux系统,开发者可以基于Linux系统进行应用程序进行开发。 
主要调用流程: 
->1.应用程序获取视频输入 
->2.调用预测库加载模型 
->3.调度模型和底层驱动加速模块进行计算 
->4.获得运行结果

 

如何用Paddle模型开发应用?

1.模型获得

目前Paddle-Mobile仅支持Paddle训练的模型。如果你手中的模型是不同种类的模型,需要进行模型转换才可以运行。验证过的网络包含resnet、Inception、ssd、mobilenet等。

训练模型:
如果您没有模型,可以使用sample中的模型,或自己训练模型。
1.通过PaddlePaddle开源深度学习框架自己训练模型; 
2.通过AI Studio平台训练模型;
3.可以在EasyDL等平台上传标注数据,训练模型;
转换模型:
1.如果您已有caffe模型,我们提供了相应的转换工具,帮助转为Paddle模型。                                                                                                              
2.如果您已有Tensorflow模型,我们提供了相应的转换工具,帮助转为Paddle模型。

 

2.连接视频数据源

FZ3提供多种视频输入硬件接口,支持多种协议输入图像数据作为数据源。包括bt1120、usb、mipi、GIGE
等协议。
1.usb协议视频数据输入:
可以选择uvc usb摄像头作为视频源。插入usb摄像头到FZ3 的usb接口
2.bt1120协议视频数据输入:
可以选择海思具有bt1120视频数据输出的网络摄像头,通过fpc排线连接FZ3的BT1120接口,具体针脚的定义可参考硬件说明。
3.mipi协议视频数据输入:
可以选择适配好的mipi摄像头作为视频源,通过fpc连接FZ3的mipi接口。
4.GIGE协议视频数据输入:
可以选择支持linux系统的GIGE相机,并联系我司进行相机官方sdk的适配,硬件连接FZ3的网口。

 3.加载驱动

使用FZ3的加速功能,预测库会把计算量大的op通过驱动调用fpga进行运算。运行自己的应用前需要加载驱动,编译好的驱动位于/home/root/workspace/driver目录,提供无日志输出和有日志输出两个版本。
加载驱动

insmod /home/root/workspace/driver/fpgadrv.ko


卸载驱动(正常情况您不需要卸载驱动,若需要加载有日志输出的版本,可以通过如下命令卸载后,再加载该版本)

rmmod /home/root/workspace/driver/fpgadrv.ko

设置驱动自动加载

 

1.在系统中添加自启动脚本

 

// 打开启动目录 cd /etc/init.d/ // 新建启动脚本并编辑,名称可以自定义 vim eb.sh 脚本内容 chmod +x /home/root/workspace/driver/fpgadrv.ko insmod /home/root/workspace/driver/fpgadrv.ko

 

2.建立软链接

 

cd /etc/rc5.d/ ln -s /etc/init.d/eb.sh S99eb

 

3.更改脚本权限

 

chmod +x /etc/init.d/eb.sh reboot

四、使用预测库
FZ3支持Paddle-Moblie预测库,编译好的预测库,位于/home/root/workspace/paddle-mobile。具体使用 把预测库的头文件和动态库拷贝到自己应用中即可。另外可以参考我们提供的sample。Paddle-Moblie源码可以参考https://github.com/PaddlePaddle/paddle-mobile
五、创建应用
1.添加预测库
拷贝/home/root/workspace/paddle-mobilie/下面的动态库和头文件到您的工程中。在CmakeLists.txt添加paddle- mobile库的引用

set(PADDLE_LIB_DIR "${PROJECT_SOURCE_DIR}/lib" ) set(PADDLE_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include/paddle-mobile/" ) include_directories(${PADDLE_INCLUDE_DIR}) LINK_DIRECTORIES(${PADDLE_LIB_DIR}) ... target_link_libraries(${APP_NAME} paddle-mobile)

 

2.添加模型
拷贝自己训练的模型到您的工程中
3.添加预测数据源
可以选择图片,摄像头数据作为预测数据源,使用摄像头需要插入相应的摄像头。

USB摄像头
1)插入摄像头后,通过ls /dev/video* 查看设备接入情况。通过会显示如下:

/dev/video0 /dev/video1 /dev/video2 /dev/video2为usb摄像头v4l2输出yuv数据,当应用提示找不到设备时,可以修改src/video_classify.cpp或者 src/video_detection.cpp。 通过/home/root/workspace/tools下video工具检测摄像头联通性 // src/video_classify.cpp 169行config.dev_name = "/dev/video2";

 

2)另外可以修改摄像头分辨率

// src/video_classify.cpp 170行 config.width = 1280; config.height = 720;

 

3)运行video工具

//读取usb摄像头,采集一张图片保存到本地 cd /home/root/workspace/tools/video ./v4l2demo -i /dev/video2 -j -n 1 //如有疑问,查看帮助 ./v4l2demo -h

 

执行程序后在build目录下会生成jpg文件,可以查看图片否正确。如果没有生成图片,检测是否识别到USB设备。
bt1120 ipc摄像头
FZ3通过bt1120协议接收原始数据进行推理后,可以把结果通过串口或spi传回ipc(bt1120、串口、spi
接口定义参考硬件说明)。可以在图片帧的像素数据中携带帧编号。
插入摄像头后,通过/home/root/workspace/tools下video工具检测摄像头联通性

1)查看设备,正常情况下设备为/dev/vide01

 

ls /dev/video* /dev/video0 /dev/video1

2)配置摄像头参数

media-ctl -v --set-format '"a0010000.v_tpg":0 [RBG24 1920x1080 field:none]'

 

3)运行video工具

//读取BT1120摄像头,采集一张图片保存到本地cd /home/root/workspace/tools/video ./v4l2demo -i /dev/video1 -j -n 1 //如有疑问,查看帮助 ./v4l2demo -h

 

执行程序后在build目录下会生成jpg文件,可以查看图片否正确。如果没有生成图片,检测bt1120连接线是否正确。
4.调用预测库加载模型和使用预测数据
初始化模型

Predictor _predictor_handle = new Predictor(); _predictor_handle->init(model, {batchNum, channel, input_height, input_width}, output_names);

 

准备数据
1.缩放图片到指定的大小。如果网络只能固定大小输入,需要缩放到网络输入大小。
2.图片预处理(减均值、转浮点、归一化等).
3.产出数据,由于FZ3使用的NHWC格式,通常视频过来的数据就是NHWC格式,就不需要NHWC->NCHW转换。预测数据
调用API的predict接口,传输处理好的数据,获取预测结果

bool predict(const float* inputs, vector &outputs,vector &output_shapes);

 

更多说明请点击了解:
http://www.myir-tech.com/product/mys-czu3eg.htm
看到这里,你是否已经掌握了用米尔FZ3深度学习卡+百度飞桨(Paddle)模型来打造你的各种应用?
实际应用场景参考:

作者: myfeiyang888, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3881300.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
相关推荐阅读
myfeiyang888 2020-07-22 17:08
STM32MP1如何让洗衣机操作界面更炫酷?
随着经济以及时代的快速发展,人们对家里的生活电器需求不断增长,很多家用电器的传统按键以及旋钮操作已经无法满足人们对多功能的要求,越来越多的家电采用触摸屏的控制形式,米尔针对该应用场景基于STM32MP...
myfeiyang888 2020-07-09 14:24
用百度大脑EasyDL平台轻松玩转AI
什么是EasyDL?: EasyDL是百度大脑推出的定制化AI训练及服务平台,支持面向各行各业有定制AI需求的企业用户及开发者使用。支持从数据管理与数据标注、模型训练、模型部署一站式AI开发...
myfeiyang888 2020-05-22 10:34
用QT控制台应用程序控制IMX8M mini开发板的LED亮灭
不久前米尔在面包板网站进行了MYD-C8MMX开发板的试用活动,引起广大爱好者的热烈反应,并且产出了不少杰出的作品,下面来看这位工程师是怎么用QT控制台应用程序控制LED亮灭的吧: 转眼间距...
myfeiyang888 2020-05-11 10:02
玩转FPGA边缘视觉——4k视频图像抓取
随着现代图像及视频处理技术的不断发展,人们对图像处理提出了新的要求,最近几年,图像的分辨率和扫描频率都有了较大范围的提升,1080P分辨率的视频已经非常流行,2K甚至4K分辨率的图像也在火热发展中。&...
广告
EE直播间
更多
我要评论
0
33
广告
关闭 热点推荐上一条 /6 下一条