1、 ISSN1672-4305CN12-1352/N实 验 室 科 学LABORATORY SCIENCE第 26 卷 第 4 期 2023 年 8 月Vol.26 No.4 Aug.2023计算机应用 基于 PYNQ 平台的人脸检测系统设计王 洁,李鹏飞(大连理工大学 软件学院,辽宁 大连 116620)摘 要:ZYNQ 平台提供了 ARM+FPGA 架构用以提高系统执行效率。PYNQ 平台在 ZYNQ 基础上添加了 linux+python 环境,降低使用异构平台开发计算机视觉算法难度,因此对基于 PYNQ 的人脸检测系统进行研究。使用 vivado 工具链设计并实现人脸检测核心算法、使用高
2、层次综合工具将检测算法定制为可复用 IP 核、添加粘合逻辑将定制的 IP 核与 ZYNQ 硬核相连、编写上位机驱动程序控制实现 ARM 和 FPGA 数据交互过程、实现数据采集并以视频流输入结果等步骤。此实验案例以软硬件协同设计为指导思想,充分发挥 FPGA 的并行计算性能和 ARM 程序设计灵活性,有效提高人脸检测系统执行效率。关键词:PYNQ 平台;人脸检测;软硬件协同设计中图分类号:TP311.1 文献标识码:A doi:10.3969/j.issn.1672-4305.2023.04.010Design of face detection system based on PYNQ pl
3、atformWANG Jie,LI Pengfei(School of Software Technology,Dalian University of Technology,Dalian 116620,China)Abstract:Zynq platform provides ARM+FPGA architecture to improve system execution efficiency.Linux+Python environment is transplanted on the Zynq by PYNQ which reduces the difficulty of develo
4、-ping computer vision algorithms with heterogeneous platforms.Therefore,the face detection system based on PYNQ is studied.The core algorithm of face detection is designed and implemented with vivado plat-form.The detection algorithm is customized as a reusable IP core with high-level synthesis tool
5、s.The customized IP core is connected with the Zynq hard core by glue logic.The data interaction between ARM and FPGA is controlled by upper computer program.Realizing data acquisition and inputting the results with video stream.This experimental case takes the software and hardware collaborative de
6、sign as the guiding ideology,giving full play to the parallel computing performance of FPGA and the flexibility of ARM programming and effectively improving the execution efficiency of face detection system.Key words:PYNQ;face detection;hardware/software codesign 收稿日期:2021-09-10 修改日期:2022-04-17作者简介:
7、王洁,博士,副教授,主要研究方向为并行体系研究、容错计算。E-mail:wangjie1003 基金项目:大连理工大学研究生 教改 基金(项 目编号:JG _2019065)。近年来,电子商务趋向大众化以及嵌入式设备数量的飞速增长 1,如何准确识别用户的身份信息已经成为信息时代的一个热门话题,人脸检测作为身份识别的关键技术之一 2,需要更通用、更高效、更稳定的算法和平台支持。FPGA 技术的发展为人脸检测技术提供了新的解决方案,具有低功耗、高计算效率、开发周期短等优点 3。但 FPGA 平台开发难度大,且不支持主流的计算机视觉软件库,限制了应用场景 4。ARM 作为嵌入式领域通用处理器应用范围
8、广,可兼容多数主流软件库。因此基于 ARM+FPGA 架构的开发平台能够充分发挥计算性能并有效利用现有软件资源 5。本文提出一种基于 PYNQ 平台的人脸检测系统设计与实现方法实验案例。系统核心算法使用高层次综合方法在 FPGA 平台实现,利用 FPGA 并行性提高复杂算法的运行效率。系统总体的流程控制和各模块之间的协同方法则基于 ARM 平台实现,满足系统设计灵活性的要求。王洁,等:基于 PYNQ 平台的人脸检测系统设计1 研究内容和主要工作以软硬件协同为指导思想 6,围绕基于 PYNQ的平台人脸检测系统设计与实现,本文工作可总结为如下几个方面:(1)调研 PYNQ-Z2 的基本架构和外设资
9、源;(2)系统功能软硬件划分;(3)人脸检测算法的高层次综合设计,使用 Vivado 开发环境定制适用于 PYNQ 平台 IP 核的方法;(4)PYNQ 平台 PS端程序与 PL 端交互的方法;(5)人脸检测系统在PYNQ 平台的实现方法。2 PYNQ 平台简介PYNQ 是 Xilinx 推出的一个开源项目 7,使用Python 降低 Xilinx 平台的开发难度。通过 Python语言和硬件库,开发人员可以充分发挥 Xilinx SOC器件如 PYNQ 的 Programmable Logic(PL)部分和Processing System(PS)部分的各自优势通过软硬件协同方法构建高性能的
10、应用系统 8。如图 1 所示,PYNQ 框架通过高层次的封装,分离底层硬件 FPGA实现细节与上层应用层的使用方法 9,在软件开发者的角度,PYNQ 框架已经提供了访问已有 FPGA外设资源的硬件库 10,高层软件开发者使用 Python语言就可以同调用软件库一般使用硬件资源,不需要考虑 Verilog HDL/VHDL 的实现细节即可享受FPGA 的并行计算资源 11。图 1 PYNQ 架构图3 定制 IP 核3.1 FPGA 开发环境搭建FPGA 的开发设计工作在 Vivado 软件下进行,本文使用的是 Vivado 2018.2 的最初版本。可以在Xilinx 官网 https:/ 上下
11、载并安装各种版本的 Vivado,建议读者使用 2018 或 2019 版本。为进行本文实验,在 Vivado 安装过程中 Select edi-tion to install 界面勾选 vivado HL System Edition。进入 Vivado HL System edition 界面,勾选 software de-velopment kit,其余按照默认即可。安装完成后,在start 目录中会添加 DocNav、Vivado 等多款软件,本文实验过程主要使用 vivado 和 vivado hls。在软件vivado license manager 内 obtain licens
12、e-connect now 进入 xilinx 官网申请 license,之后 vivado 便可正常使用。3.2 使用 Vivado HLS 定制加速器本节要设计实现人脸检测算法加速器。使用vivado hls 创建一个新工程。本文设计的人脸检测加速器源码可以在 https:/ 下载,将源代码文件存放在工程文件的根目录下。在Add/Remove Files 窗口,Add Files 添加工程源文件 haar.cpp,设置顶层函数为 detectFaces,进入 testbench 窗口。在 testbench 窗口不用添加任何的文件。在 solution configuration 界面,时
13、钟周期设为10,不用后缀。开发板选择 PYNQ 完成工程创建。工程环境生成完毕后,FaceDetect/Source/haar.cpp 即可查看源代码内容,本文已经预先完成源代码设计,此处不需要修改。Solution-run c synthesis-active solution 开始综合,综合完成后会显示综合报告,报告包含了性能与资源预估,以及设计的延时信息。通过 solution1-impl-misc-drivers-mul_v1_0-src-xmul_hw.h,在这个文件中可以找到 re-sult_size 的地址,我们之后能够通过地址传递数据。solution-export RTL 打
14、开导出 IP 界面。在 Export RTL 界面 format selection-IP Catalog。evaluate gen-erated RTL 选择 verilog,勾选 Vivado synthesis place and route,运行设计实现。设计实现完成后将生成设计实现报告,生成的 IP 被以 zip file 格式存放在impl ip 目录下。整体流程如图 2 所示。图 2 定制加速器流程3.3 在 vivado 中添加 IP 核已经生成的 IP 核需要配合 ZYNQ 硬核并添加额外逻辑电路才能工作。添加 IP 核的流程如图 3所示。本文使用 Board file 文件
15、代替手动配置 Pro-cessing System(PS)端的过程,该文件包含开发板 PS端的所有配置。可以从 https:/ 下载本文的 Board file 文件。将Board file 文件夹内的 pynq-z2 文件夹复制到viva-do 的安装目录/2018.2/data/boards/board_parts/zynq 目录下。14图 3 IP 核封装流程导入开发板配置文件后,创建新工程并输入必要配置信息。使用 vivado,create new project 创建一个新工程,工程名和工程路径都不能含有中文字符。在 project Type 界面选择 RTL Project,目标语
16、言选择verilog,多语言混合编程。若之前添加 board file 文件成功,则选择 PYNQ 平台,回车进入 New project summary 界面,确认开发板相关信息是否正确。在 vivado 主界面完成 IP 核的连接和总体设计。IPINTEFRATOR-create block design 创 建 一 个block 设计。主界面 add ip 添加已有 IP 核,选择zynq7 processing system将 Zynq ip 核添加到工程中。点击 run block automation 选项将 zynq ip 核的DDR 和 FIXED_IO 接口与 ps 端的接口
17、对应连接。project manager-IP Catalog-User Repository 将之前设计设计的 IP 核加入 block design。run block au-tomation 生 成 一 些 粘 合 逻 辑 将 该 IP 核 连 接 到ZYNQ7 PS 侧。source-design sources-design_1(design_1.bd),create HLD wrapper 生成顶层文件。等待 wrapper 完成后 generate bitstream 生成 bit 文件,该文件用于 FPGA 的控制。bit 文件生成后,file-export-export bl
18、ock design 生成 tcl 文件,该文件配合 bit 文件使用。设计了一个人脸检测核心算法加速器 IP 核,该IP 核不能够自主工作,IP 核的输入数据来源于 PS端,而且计算结果也将返回给 PS 端进行处理,至此PL 端的构建配置工作全部完成,下文将进行 PS 端上位机程序的设计。4 驱动程序设计4.1 PYNQimage 下载PYNQ 开发板出厂时并没有预装相应的开发环境,需要用户自行下载 PYNQ-Z2 镜像文件,该文件是一个可启动的 linux 镜像,包含了 PYNQ python 包和其它开源包,本文使用 2.6 版本镜像文件,可以从官网 http:/www.pynq.io/
19、board 下载。镜像文件下载完成后,可用开源工具 win32diskimager 将原始镜像烧录到 SD 卡中,开源烧录工具从 https:/source- 开发板配置根据图 4 所示,将 1 处 boot 跳线设置为 SD 位置,将电路板设置为从 micro-SD 卡启动。若使用USB 电缆为电路板供电,将 2 处电源条线设置为 USB位置,也可将跳线设置为 REG,从外部 12V 电源调节器为电路板供电。将带有 PYNQ-Z2 镜像的 MicroSD卡插入开发板下方 3 处的插槽。将 4 处 USB 电缆连接 PC。网线插入以太网口。拨动电源开关后,红灯立刻亮起。10 秒钟后,黄绿灯将常
20、亮。一分钟后,两个蓝色 LED 和四个黄绿色 LED 闪烁,蓝色 LED 随后关闭,而黄绿色 LED 保持常亮,设备准备完毕。开发板初始化完成后,为计算机分配静态 IP 地址,使用 pc浏览器访问192.168.2.99 即可查看PYNQ 集成的ju-pyter 开发环境登录界面,默认用户名和密码都是 xil-inx,登录后即可访问 jupyter 资源。图 4 开发板配置图4.3 上位机程序设计本节将设计运行在 ARM 处理器的上位机程序,用以驱动加速器的工作、向加速器传递图片数据并接受加速器运算结果。将之前的 bit 文件和 tcl 文件拷贝到开发板目录下。为了与 IP 核交互,上位机程序
21、需要加载该 IP 核的 overlay,在 jupyter 中输入from pynq import Overlay 和 overlay=Overlay(“/home/xilinx/pynq/overlays/detectFaces.bit”),overlay是 PYNQ 架构中,软件操控硬件的主要方式,使用overlay 软件工程师可以像调用库函数一样操控硬件。Overlay 中所有设备都可以通过 overlay 的类属性来访问,属性里面包含了特定的驱动。针对本文加速器,使用 overlay.detectFaces.read(0 x20)读取24 王洁,等:基于 PYNQ 平台的人脸检测系统设
22、计result_size 值,接收检测到的人脸数量。只有采用值传递的参数才可以用 read 读取,而指针型参数则需要传递地址。加速器中的指针型参数如 indata、result_x、result_y、result_w、result_h,需要连续内存区域的数组首地址作为参数。在jupyter 中输入from pynq import allocate导入内存分配函数,该函数可以分配物理上连续的内存空间,并返回一个 pynq.buffer 对象。Jupyter 内使用 allocate()分配内存,其中 Indata=allocate(shape=(240,320),dtype=np.uint32)
23、,result _x=allocate(shape=(100),dtype=np.uint32),result_y,result_w,result_h 获取连续内存空间地址方式相同。完成内存分配后,需要初始化这部分内存。PS端接收到视频流后,使用裁剪后的输入图像初始化Indata,其他部分内存初始化为0。PYNQ 的 ARM 核运行 Linux 系统,USB 端口和其他标准接口可用于将现成的 USB 和其他外围设备连接到 Zynq PS,使用 Python/Linux 进行控制。PYNQ 镜像包含常见USB 设备的驱动程序,使用 video_in=cv2.Video-Capture(0)读取
24、USB 摄像头的输入视频流。base=BaseOverlay(base.bit),hdmi_out=base.video.hd-mi_out 负责视频流输出。用 video_in.set()裁剪原始视频流。cv2.cvtcolor()函数将当前帧进行灰度转换。用裁剪后的灰度图像初始化 indata 内存区域。Sendchannel.transfer(indata.physical_address)将这些内存的物理地址传递给加速器 IP 核的输入端口。Recvchannel.transfer(result_x.physical_ad-dress)将地址传给输出端口。Result_x 对应的内存区
25、域数据即是加速器运算后的结果。在输入图像中将运算结果绘制为矩形,使用 hdmi_out.writeframe()输出检测结果。5 板级实现本章完成基于 PYNQ 的人脸检测系统实验环境搭建和成果展示。完成核心算法加速器构建,生成 bit 及 tcl 文件并拷贝到目标文件夹下和上位机程序设计之后,仅使用 jupyter 环境便可将 IP 核以及PS 端控制程序加载到开发板并启动系统运行,但在下载前还需要进行必要配置。5.1 开发板外设连接实验以视频流作为输入输出,开发板需要连接相应输入输出设备。PS 端程序设计第二节的连接方式不需要改变,在此基础上将 USB 摄像头通过USB hub 连接到 P
26、YNQ 开发板上。本实验使用的USB 摄像头型号为 GUCEE HD98,读者可自主选择,但应使用常见的家用摄像头,因为工业级摄像头需要额外添加驱动。开发板存在两个 HDMI 接口 hd-mi_in 和 hdmi_out,分别接受和发送视频流,不可混用。若使用 hdmi 作为输入设备,则需要使用 base=BaseOverlay(base.bit),hdmi_in=base.video.hdmi_in 代替 video_in=cv2.VideoCapture(0)接受视频流输入。将显示器连接线的 hdmi 端接入 hdmi_out口,另一端接入显示器。为体现本文设计优势,另采用 cv2.Cas
27、cadeClassifier().detectMultiScale()纯软件实现人脸检测算法,纯软件实现和本文协同设计的人脸检测系统运行环境参数如表 1 所示。表 1 系统运行环境参数软件实现协同设计软件环境Dual-core ARM Cotex-A9Dual-core ARM Cotex-A9硬件环境-Artix-7 FPGAARM 主频650MHz650MHzFPGA 主频-100MHz5.2 系统运行结果展示在 jupyter 内将 bit 文件加载到 FPGA 并启动人脸检测程序。PYNQ 开发板通过视频传输线将运算结果交给显示器,软件实现和本文协同设计的检测结果如表 2 所示,人脸检
28、测系统的运行效果如图 5所示。实际运算结果表明,本文实验案例能够在PYNQ 平台运行并输出正确检测结果。表 2 系统检测速度输入分辨率输出分辨率运算时间软件实现64048019201080416ms协同设计64048019201080157ms图 5 基于 PYNQ 平台的人脸检测系统运行效果图(下转第 47 页)34潘文婵,等:基于人工智能 TensorFlow 平台的建设与研究据增强、L2 正则化、LRN 层来提高模型的性能,增加模型的泛化能力。提升模型性能,随着训练次数的增加,模型准确率逐渐增加。5 改革实验教学方法以改革实验教学方法为切入点,构建人工智能实验平台,开展多种形式的实验室开
29、放项目,积极鼓励学生参加学科竞赛,培养产业需求的高素质应用型人才。通过项目需求驱动教学和实验内容,提高学生的主动学习能力、工程实践能力和人工智能思维能力。实验课程内容依托人工智能 TensorFlow 平台,实现了图像识别、目标检测、人脸识别等的应用。采用以需求为导向的案例实验教学方法,案例教学的核心优势在于选择生动翔实的案例。在人工智能技术体系中,深度学习已经成为其中最有影响的关键技术。结合深度学习在不同领域的具体应用案例,学生对这些实际的案例进行学习和复现,提高了解决复杂工程问题的能力。重视教学与科研的紧密结合,将前沿的科研成果融入到课堂教学中,深化教学内容。在实验教学活动中,加强创新性实
30、验,提高学生的创新能力和综合素质。6 人才培养体系建设人工智能 TensorFlow 平台,研究人工智能的前沿技术,结合人工智能、大数据和云计算等领域的课程,将理论学习、实践教学和人工智能项目融为一体8。注重多学科交叉融合,将创新项目与实践实训相结合,培养学生的创新思维能力。在新工科建设背景下,通过人工智能实验平台的建设,从教学、实践、应用等方面实现“人工智能+X”复合型人才的培养。7 结语本文对人工智能 TensorFlow 平台建设进行探讨,详细阐述人工智能在图像识别技术上的应用,探索新工科人才培养的模式。基于 TensorFlow 平台,使用卷积神经网络对 CIFAR-10 数据集进行图
31、像分类,通过改进的神经网络参数优化算法,提高图像识别准确率。人工智能实验平台以人工智能、大数据、云计算等新技术为核心技术,将新一代人工智能技术与教学实验课程、科研项目、实习实践等深度融合,提升学生的创新实践能力,加快培养复合型创新人才。参考文献(References):1 周志华.机器学习M.北京:清华大学出版社,2016.2 刘凯,张立民,张兵强.基于人工智能的大学计算机基础综合实验设计J.实验技术与管理,2020,37(4):196-200.3 王一超,韦建文.基于高性能计算平台的 TensorFlow 应用探索与实践J.实验室研究与探索,2017,36(12):125-128.4Lecu
32、n Y,Bengio Y,Hinton G.Deep learning J.Nature,2015,521(7553):436-444.5 卜庆锋.互联网+背景下人工智能专业教学的研究J.软件,2020,41(6):257-260.6 唐子清,姚俭.基于深度学习的数字识别方法研究J.软件导刊,2020,19(9):228-232.7Deniz O.,Bueno G.,Salido J.,et al.Face Recognition Using Histograms of Oriented GradientsJ.Pattern Recognition Letters,2011,32(12):15
33、98-1603.8 杨谨羽.大数据技术实验室建设探索与研究J.科技经济导刊,2018,26(19):165.(上接第 43 页)6 结语本文基于 PYNQ 开发平台,以软硬件协同为主要思想构建实时人脸检测系统,使用高层次综合方法,在 PL 部分构建人脸检测核心算法硬件 IP 核加速器,在 PS 部分设计上位机程序调用加速器并控制系统流程。该系统以视频流为输入经加速器运算得到人脸位置,标记人脸后以视频形式输出处理结果。实验结果表明相较于纯软件设计,本文系统运行时间减少约 60%,能够充分发挥各部分的计算优势,提高系统性能。参考文献(References):1 李娥.人脸检测方法综述J.信息技术与
34、信息化,2018(4):24-26.2 游清清,谌海云,骆俊,等.人脸检测技术综述J.无线互联科技,2017(10):137-140.3 张硕.基于 FPGA 的多路 CNN 并行计算体系结构研究D.北京:北京工业大学,2020.4 张军阳,王慧丽,郭阳,等.深度学习相关研究综述J.计算机应用研究,2018,35(7):1921-1928,1936.5 杨晓安,罗杰,苏豪,等.基于 Zynq-7000 高速图像采集与实时处理系统J.电子科技,2014,27(7):151-154.6 李振宇.基于 PL-PS 架构的图像处理系统的实现与算法应用D.济南:山东大学,2016.7 董亦博.基于 PY
35、NQ 的图像视觉显著性检测系统设计D.哈尔滨:哈尔滨工业大学,2018.8 邹翔熙.基于 FPGA 的卷积神经网络的 IP 化设计与实现D.海口:海南大学,2020.9Zhenhan Shen.Design of Fire Recognition System based on ZYNQJ.International Core Journal of Engineering,2021,7(8):48-56.10 Muhammed AlKadi,Benedikt Janssen,Jones Yudi,et al.General-Purpose Computing with Soft GPUs on FPGAsJ.ACM Trans-actions on Reconfigurable Technology and Systems(TRETS),2018,11(1):1-22.11 Goldsmith J,Ramsay C,Northcote D,et al.Control andvisual-isation of a software defined radio system on the Xilinx RFSoC platform using the PYNQ frameworkJ.IEEE Access,2020(8):129012-129031.74