胡廷贤
基于PYNQ的人脸识别车内儿童误锁检测预警系统
2021-9-23 14:50
阅读:3417

摘要: 本文提出一种基于PYNQ-Z1 的儿童防误锁人脸识别检测预警系统。通过搭建liunx环境,运行 Jupyter Notebook 交互式在线编译器,调用 IPython 内核和 PYNQ 的硬件库,导入 OpenCV 库编写并且编译执行 Python 程序,可实现在线控制 PYNQ-Z2 来获得视频流输入并对视频数据进行传输和处理,从而实现人脸图像的分析与检测。本设计利用了 PYNQ-Z2的可编程系统(PS)和可编程逻辑(PL)的交互式数据传输处理,尽可能的发挥 ARM FPGA 的优势,从而实时的进行人脸检测。

 

1、概述

车内儿童滞留问题一直是汽车安全领域的重要研究问题之一,目前主要研究工作仍然不能解决滞留车内儿童的安全问题。针对该问题,本文采用人脸识别技术,及时检测出车内滞留儿童,通过报警联动功能,及时解救受困儿童,具有很强的时效性。

近年来,人脸识别在支付、安保、机器人等领域得到了广泛应用,已成为计算机视觉领域的研究热点。      人脸识别需要检测、对齐和识别等步骤。

随着深度学习技术的发展,将深度学习算法应用到人脸识别,有效提高人脸识别检测精度和鲁棒性。

为提高便携性,使用嵌入式终端,

设计实现了一种基于PYNQ-Z1的人脸识别系统,在嵌入式终端实现结合深度学习的人脸识别——实时视频输入、人脸识别、显示结果输出。该系统应用在车内儿童滞留、误锁,防窒息报警灯等应用场景,可精准检测出车内儿童,并发出报警信号,联动显示到家人终端设备中,及时解救受困儿童,在时效性和精准线上具有很大优势。

 

1)本项目使用技术新。作出神经网络优化,添加具体功能应用等对项目的实现。通过使用 vivado 配置硬件资源,使用 petalinux 生成镜像,使用 DNNDK 生成 decent dnndc,使用SDK 生成可执行文件,最后在 PYNQ 开发板上运行。

2)儿童车内预警应用需求大。在乘用车内,儿童在密闭空间滞留时间过长,对儿童的身体和心里会造成很大伤害。预防儿童在误锁车内或长时间滞留,具有很大的应用市场。

3PYNQ开发嵌入式软硬件环境方便部署。使用嵌入式人人工智能开发板设计开发本项目,具有实施方便,可集成度高,PYNQ又可以进行定制化,后期与车联网,物联网扩展性高。

 

2、系统设计与实现

2.1、系统整体结构

 

系统框架图

 

功能说明:DPU 应用部署

1. 模型压缩 (主机)

2. 模型编译 (主机)

3. DPU 编程开发 (主机或开发板)

4. 混合编译 (开发板)

5. 运行 (开发板)

DPU IP 添加进一个 vivado 工程中,将所需 IP 进行连接,将 block_design 生成 HDL_wrapper,进一步生成 bitstream 并且输出.hdf 文件。

   petalinux 中生成所需文件及目录。

    构建一个应用,将使用 DNNDK 优化的训练模型生成的.elf 文件与.cc 文件共同输入到 SDK 中,添加环境变量到由 petalinux 生成的 sysroot 目录。

以脸部识别的 demo 为例,首先将 face_detection.cc dpu_densebox.elf(由 dnnc 生成)import 到指定的路径。添加后的文件结构如图所示。

经过链接、编译后,最终将 petalinux 生成的 BOOT.BINimage.ub SDK 生成的 face_detection.elf 复制到 SD 卡中,将 SD卡插入 Ultra96 开发板,便可运行。

 

系统框架整体介绍

 

系统资源调度示意图

 

1.  xilin xilinx x  开发软件的操作

1. Vivado

2. SDK

3. PetaLinux

4. Ubantu

2.  底层框架的搭建调试 底层框架的搭建调试

1. vivado IP 调用和参数设置

2. Ubantu 中下载安装 Petalinux,并调试环境

3. 创建 Petalinux 工程,利用服务器编译

3. 熟悉DPU工作模块的功能和流程

1DEep ComprEssioN Tool (DECENT),深度压缩工具:提供剪枝和定点化运算。

Deep Neural Network Compiler (DNNC), 神经网络编译器:将网络算法编译到 DPU 平台高效运行。运用 DECENT 后的 caffe 网络模型作为输入。

2Deep Neural Network Assembler (DNNAS), 神经网络集成器:将 DPU 指令流会编程标准的 ELF二进制文件Neural Network Runtime (N2Cube), 神经网络运行,运行时支持环境,神经网络的加载,资源管理,调度

3N2Cube 核心组件包括四个部分 : DPU 驱动程序 (Driver),加载器 (Loader)、性能分析器(Profiler)及编程开发库编程开发库 (Library)

DPU框架:

Tensorflow/Caffe的使用,具体配置部署教程参见官网和github源码。

 

2.2、  开发平台

 

2.3、系统实现与流程

1.1 实验分析与结果

开发板系统配置:

 

 

 

项目整体图示: 

 

 

 

 

 

 

 

 

 

 

 

 

 

实验结果

application 开发过程中,我们使用 Xilinx SDK 工具,利用前几步中制作的配置文件,进行 ARM 平台上的应用开发。由于在前一步中制作的.elf 文件在这里调试不成功,最后我们使用了 Xilinx提供的.elf 文件,然后在 SDK 中配置了交叉编译环境,基于 Xilinx face_detection 应用,我们增加了人脸计数和实时性能监测,包括帧率的监测和 CPU 和内存使用率的监测。另外我们尝试了视频的多路显示进行性能对比。

 

项目功能模块描述:


SDK 中编译出程序后,我们在PYNQ平台上进行了测试。测试结果表明,通过 DPU 对深度学习模型进行加速后,其应用能够在 ARM 处理器上流畅运行,我们的测试结果显示:1)在PYNQ上部署一个 DPU 核(B1152-1.3.0),大约占用了 FPGA 上一半的资源,所以在进一步优化的情况下可以考虑部署两个 DPU 核;2ARM 上的人脸检测的应用大约占用了 90%CPU 时间和 20%的内存(总 512MB),在这个情况下能够稳定在 30FPS 左右,画面非常流畅;3)增加一路视频显示会导致帧率下降到 13FPS 左右,出现延迟、跳帧的情况,我们估计这主要是 ARM 的性能瓶颈导致的。

 

 

测试训练集输出情况:


全系统FS模拟.PNG

  

 

 

1.2 主要创新点

 

1.3 心得体会

通过本次本赛,从嵌入式软件入门,编写底层驱动和软核,到App开发,收获颇丰。见识到PYNQ的生态,最吸引人的DPU加速。本次DPU人脸检测项目过程,是对心态和力气的双重考验。有时做项目遇到bug,长时间调试未果,心态容易崩溃。但是这次项目实战,也是技术岗位的一种积累。学习了FPGA的优势以及ARM处理器的强大功能,总之是收获满满。

嵌入式大赛封面.PNG

           参加嵌入式互联大赛

龙心卓越工程师培训证明.PNG

参与龙芯卓越工程师培训            

转载本文请联系原作者获取授权,同时请注明本文来自胡廷贤科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3431001-1305383.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?