【2021集创赛】Arm杯三等奖:基于FPGA的人脸检测SoC设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。

团队介绍
参赛单位:合肥工业大学
队伍名称:芯创之家
指导老师:邓红辉、尹勇生
参赛杯赛:Arm杯
参赛人员:王亮 李嘉燊 金京
获奖情况:全国总决赛三等奖

1.项目简介

人脸检测系统在诸多领域都有实际作用,比如自动进行出入登记:人员或车辆出入小区时可自动抓拍扫描记录,省去人工记录,省时省力;安防应用:可利用此识别技术对小区常住人口和流动人口进行分类识别,对可疑人员行动轨迹提前预警,为小区安防工作带来极大便利。并且本设计可以不断扩展,用于识别车辆、设备等,更换算法后还可以实现人脸识别,应用于管理或者刑侦破案中,可以通过训练以识别一些难以观察到的微小疾病,用于医学观测。

本SoC是基于ARM官方提供的Cortex-M3软核和Xilinx Artix-7系列开发板实现,使用AMBA2和AMBA3总线协议以及ARM提供的CMSDK工具设计SoC。外设搭配一个摄像头用于数据的采集,一个液晶显示屏用于显示处理结果,同时绑定数码管显示人脸数量等信息。基于Viola-Jones算法完成人脸检测的功能,实现了Viola-Jones算法完成人脸检测的功能。

2.系统运行流程介绍

a. 在线上使用PyTorch等前端框架对该算法进行训练,得到权重等参数提前存储在FPGA例化的RAM中,用C语言完成算法的实现,生成相应的指令存储在例化好的RAM中。
b. 摄像头采集图像数据,传递给Cortex-M3处理器。
c. 处理器接收图片后,开始读取指令和参数,调用FPGA的计算资源进行计算
d. 算法完成后将处理好的图像数据通过HDMI传递到显示屏,并将一些信息传递给绑定的数码管,完成输出结果的显示。

3.系统架构

3.1架构简介

本系统的架构如下图3.1所示。整个框架搭载在一块FPGA开发板上。可简单地分为软件和硬件两个部分,Cortex-M3和上面的RAM是软件部分,RAM中存储指令,ARM处理器通过轻量级的AHB总线协议和它通信,通过指令总线取指,通过数据总线进行数据访问。可以使用Keil在线调试SoC,通过J-link连接开发板与PC机,将C语言代码编译成的汇编代码烧录至指令RAM中即可。
在这里插入图片描述

图3 1整体系统架构图

3.2软硬件功能划分

软件部分主要包括Cortex-M3和上面的RAM是软件部分。硬件部分主要用于数据采集和计算,我们将高速外设(显示器、摄像头等)和低速外设(LED、UART等)分别挂载到不同的总线上,这样可以避免资源的浪费。

4.外设挂载

4.1 液晶显示屏

在这里插入图片描述

图4.1 1 显示屏模块框架
上图是显示屏模块,摄像头采集到的数据会存储在DDR中供处理器和显示屏读取,处理器计算结束后会将画框后的图片通过AHB-AXI转换传输到DDR,DDR再经过HDMI传递到显示屏上。HDMI驱动里使用了两个FIFO来避免读写时的数据冲突。

4.2 摄像头

在这里插入图片描述

图4.2 1 摄像头模块框架
上图3所示是摄像头模块的框架,摄像头用于采集数据,并将采集数据传送给DDR,与显示屏类似,我们也使用了FIFO避免数据冲突。由于我们使用的摄像头采集的图像中,每个像素点的位数为16bits,但总线协议每个时钟周期只能传送8bits,因此需要首先经过一个位宽转换器,打一拍完成像素完整传递后再传递给FIFO模块。其余模块再通过相应的总线发出请求从DDR中读写数据。

4.3 数码管和LED灯

开发板上有一个四位数码管和四颗LED灯,我们使用LED来显示程序是否正常运行,数码管用来显示人脸的数量,四颗LED同时也会作为4位二进制数来表示人脸数量,最多表示15个,这些功能都是软件驱动的。

4.4 UART串口

UART串口可将识别速度等信息传送至上位机,用于监测SoC运行情况以及实时人脸检测的速度。

5.加速器设计

5.1 片上存储优化

在不使用 DMA 的情况下,内核通过 DCode 经过总线矩阵协调,使用 AHB 把外设采集的数据读取到内核,然后内核 DCode 再通过总线矩阵协调,把数据存放到内存 SRAM 中。DMA 正好可以取代这样的工作。由 DMA 控制器的 DMA 总线与总线矩阵协调,使用AHB 把外设的数据经由 DMA 通道存放到内存 SRAM。如果使用DMA,它是不经过内核的直接传到了SRAM,因此加快处理速度,MCU也可以处理其他事情 ,起到了给芯片减负的效果。因此可以将DDR换成DMA。

AC7050 核心板上配有两个 Micron(美光) 的 4Gbit( 512MB) 的DDR3 芯片(共计 8Gbit),型号为 MT41J256M16HA-125(兼MT41K256M16HA-125)。 DDR 的总线宽度共为 32bit。 DDR3 SDRAM 的最高运行时钟速度可达 333.3MHz(数据速率667Mbps)。该 DDR3 存储系统直接连接到FPGA 的BANK34和 BANK35的存储器接口上。因此可以将数据存储到DDR3中之后在由加速器读取里面的数据从而提高数据处理速度。

图5.1 加速器整体框架
当摄像头完成前两帧数据采集后开启目标检测单元,加速器模块与DDR交换数据并计算相关参数,检测完成后将目标进行框选,开始运行目标跟踪算法。
在这里插入图片描述

图5.1 DDR3 DRAM原理示意图 1

5.2 多线程移窗

在所用到的算法中采用决策时级联检测器是把摄像头采到的数据进行取。传统的采集方案是逐行检测这样会降低检测,因此需要前一步完成采集 才能进入下一步采集是一种串行运行的方式。因此提出并行采集的方案,采用多个加速器组成了一个多线程的并行加速器,因此就可以处理多个窗的数据检测,从而提高了人脸检测的速度。

6.模块及系统仿真

7.系统整体测试结果

在硬件平台上实现系统,并正确编译、下载软件程序, 现场编程调试,通过按键改变LED等的闪烁方式或频率证实系统运行情况。
在这里插入图片描述

·功能展示二
通过led来显示摄像头识别到的人脸数量仿真结果如下图所示。

在这里插入图片描述

8.参赛体会

本系统使用2001年CVPR提出的经典的人脸检测算法Viola-Jones,采用积分图像(integral image)技术,加速对Haar-like输入特征的计算,采用 AdaBoost 算法进行特征选择,选择出几个关键的视觉特征,采用检测级联技术提高准确率,允许图像的背景区域被很快丢弃,从而将更多的计算放在可能是目标的区域上,减少了计算开销算法。在算法的实现过程中,文献是非常好的工具,在文献中汇集了若干科研工作者的智慧,也在不断的实践中,修复了若干问题,在稳定性和性能方面都较好的实现。因此,通过对这些文献的认真研究,对有统一的、经过良好设计、实现、测试的基础模块适当引用,可以提高开发效率,集中注意力攻克更核心的部分。

在开发的过程中,要学习以及熟练使用各种开发工具来简化开发,如CMSDK、Matlab、system generator等。在整个系统的开发过程中,开发工具的使用至关重要,例如开发过程中需要使用CMSDK快速搭建基于CortexM3的专用SoC。对于这些软件的使用,可以大大节省时间,并且可以研发出更高效的系统。

在SoC的搭建过程中,对整体框架的把握至关重要。本次设计中,框架可分为软件和硬件两个部分,每部分的组成成为设计的重要部分,连接和通信均建立于框架的基础上,因此在设计中要结合开发板与应用需要,对各个部分进行设计划分,实现系统的统一高效协作。

在这次比赛中,很荣幸可以与全国各地200余所高校参赛队伍共同努力。非常感谢赛事组委会的老师和工作人员在本次大赛中的辛苦付出!

作品内容来源于芯创之家,转载请标明出处。欢迎大家参加极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动,10月1日截止~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】RCC时钟模块(使用HAL库)

https://gitee.com/linhir-linhir/stm32-f103-c8/blob/master/STM32%E6%9C%80%E6%96%B0%E5%9B%BA%E4%BB%B6%E5%BA%93v3.5/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h STM32最新固件库v3.5/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c…

Centos使用tomcat部署jenkins

jenkins的最新版本已经不在支持jdk8,支持的jdk环境如下: 安装jdk环境 yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64安装tomcat tomcat官网 cd /optwget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat…

【项目管理】如何开展高质量的团队管理

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

0026Java程序设计-中学走读生信息管理系统设计与实现

文章目录 摘要**目录**系统设计开发环境 摘要 目前,中学走读生信息管理系统已经发展成为学校的学生走读管理工作中必不可少的一个组成部分,没有该系统,学生的日常工作就会变得繁琐、效率低下。在信息化的社会发展下,有必要建立一…

【VPX610】 青翼科技基于6U VPX总线架构的高性能实时信号处理平台

板卡概述 VPX610是一款基于6U VPX架构的高性能实时信号处理平台,该平台采用2片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元,采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元,具有2个FMC子卡接口,各个处理节点之…

成功率高达99%!美国伊利诺伊大学研究人员实现镱量子比特无损测量

研究人员通过无损测量镱-171量子比特实现了实时控制。(图片来源:网络) 金属镱-171原子可能在自然界中最接近完美量子比特。最近的一项研究展示了如何使用它们来进行重复的量子测量和量子比特自旋,这一研究成果将有助于可扩展量子…

蓝桥云课--1024 第 2 场算法双周赛

2-铺地板【算法赛】&#xff08;找规律&#xff09; 一、题目要求 二、思路 &#xff08;1&#xff09;因为每块地砖都是2*3的规格&#xff1a; 1.n<2或者m<2的时候&#xff0c;则不能使用上述规格的瓷砖 No 2.n<3或者m<3的时候&#xff0c;也不能使用上述规格…

30天精通Nodejs--第二天:模块系统与npm

深入了解Node.js&#xff1a;模块系统与npm Node.js作为一款强大的服务器端JavaScript运行环境&#xff0c;模块系统和npm&#xff08;Node Package Manager&#xff09;是其成功的重要组成部分。为我们平时提供了便捷的工具和资源&#xff0c;使得在Node.js平台上构建应用变得…

现在java和大数据选什么?

现在java和大数据选什么&#xff1f; 到底是选择大数据还是JAVA&#xff1f;”相信这个问题困惑着许多转行待定人士和高校专业待选的学生。 在普通人眼里可能会觉得这两个专业或者行业没啥区别&#xff0c;都是IT里的&#xff0c;能有啥大不同。这是第一层。最近很多小伙伴找我…

【Linux】MAC帧协议 + ARP协议

文章目录 &#x1f4d6; 前言1. 数据链路层2. MAC帧格式3. 再谈局域网4. ARP协议4.1 路由器的转发过程&#xff1a;4.2 ARP协议格式&#xff1a; 5. 如何获得目的MAC地址 &#x1f4d6; 前言 在学完网络层IP协议之后&#xff0c;本章我们将继续向下沉一层&#xff0c;进入到数…

深入浅出排序算法之希尔排序

目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xf…

详解预处理(1)

目录 预定义符号 预处理指令#define #define定义符号 #define定义宏 #define替换规则 #和##&#xff08;C语言预处理操作符&#xff09; # ## 带副作用的宏参数 宏和函数的对比 命名约定 在之前我们学习了一个文本文件.c生成一个可执行程序。今天我们详细讲解其中的…

01 # 手写 new 的原理

new 做了什么? 在构造器内部创建一个新的对象这个对象内部的隐式原型指向该构造函数的显式原型让构造器中的 this 指向这个对象执行构造器中的代码如果构造器中没有返回对象&#xff0c;则返回上面的创建出来的对象 手写 new 的过程 new 是一个运算符&#xff0c;只能通过函…

CSS隐藏元素的N种方法,你知道哪一种最适合你?

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、前…

Camtasia2024永久激活码

真的要被录屏软件给搞疯了&#xff0c;本来公司说要给新人做个培训视频&#xff0c;想着把视频录屏一下&#xff0c;然后简单的剪辑一下就可以了。可谁知道录屏软件坑这么多&#xff0c;弄来弄去头都秃了&#xff0c;不过在头秃了几天之后&#xff0c;终于让我发现了一个值得“…

【Linux】gdb调试

目录 进入调试查看代码运行代码断点打断点查断点删断点从一个断点转跳至下一个断点保留断点但不会运行该断点 退出调试逐过程逐语句监视跳转至指定行运行结束当前函数 进入调试 指令&#xff1a;gdb 【可执行文件】&#xff1a; 查看代码 &#xff1a;l 【第几行】如果输入指…

安全设备

一.防火墙 5层应用层 防火墙 4层 udp tcp 协议 华为 厂商 华为 h3 1.区域划分 Dmz 停火区 Untrust 不安全区域 Trust 安全区域 防火墙 默认禁止所有 二.Waf Web 应用防火墙 放到web前面 产品 雷池 绿盟 软件 安…

递归神经网络 (RNN)

弗朗西斯科佛朗哥 一、说明 循环神经网络非常有趣&#xff0c;因为与前馈网络不同&#xff0c;在前馈网络中&#xff0c;数据只能在一个方向上传播&#xff0c;每个神经元可以与连续层的一个或多个神经元连接&#xff0c;在这种类型的网络中&#xff0c;神经元还可以环回自身或…

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

技术背景 实时位置&#xff08;MobilePosition&#xff09;订阅和上报&#xff0c;对GB28281设备接入终端尤其重要&#xff0c;如移动单兵设备、执法记录仪、智能安全帽、车载终端等&#xff0c;Android国标接入设备通过获取到实时经纬度信息&#xff0c;按照一定的间隔上报到…