【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日截止~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性(可直接在属性中设置)2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox(列表框) 1.WinForm文件结构 .sln文件 &am…

Hadoop分布式安装

首先准备好三台服务器或者虚拟机,我本机安装了三个虚拟机,安装虚拟机的步骤参考我之前的一篇 virtualBox虚拟机安装多个主机访问虚拟机虚拟机访问外网配置-CSDN博客 jdk安装 参考文档:Linux 环境下安装JDK1.8并配置环境变量_linux安装jdk1.8并…

干货很干:5个有效引流方法,让客户找上门

如何才能把用户引流到私域?是很多老板,店主,线上创业者的卡点,今天分享5个实用方法: ✅线下导流 ✅巧用搜索 ✅同行互推 ✅社群引流 ✅内容输出 所以引流不仅需要知道方法,还需要知道底层逻辑,也…

uniapp开发微信小程序的巨坑

1、不能使用v-show 2、关于插槽的巨坑 这里我真的是摸索了好久。 小程序版本: hbuilderx版本: 其他版本不知道会不会出现以下情况。 如果组件中带有插槽,那么使用插槽时有以下要注意: 1、如果子组件通过slot,向外…

SQL sever中的函数(基础)

目录 一、聚合函数 1.1聚合函数概述 1.2SUM(求和)函数 1.3AVG(平均值)函数 1.4MIN(最小值)函数 1.5MAX(最大值)函数 1.6COUNT(统计)函数 1.6.1COUNT函数用法分类 1.6.2COUNT函数用法示例 1.7DISTINCT(取不重复记录)函数 1.8查询重复记录 二、数学函数 2.1数学函数…

ELK概述部署和Filebeat 分布式日志管理平台部署

ELK概述部署、Filebeat 分布式日志管理平台部署 一、ELK 简介二、ELK部署2.1、部署准备2.2、优化elasticsearch用户拥有的内存权限2.3、启动elasticsearch是否成功开启2.4、浏览器查看节点信息2.5、安装 Elasticsearch-head 插件2.6、ELK Logstash 部署(在 Apache 节…

中国密码算法与NIST标准对比

1. 引言 NIST定义AES为标准的对称密钥加密算法。但NIST被指出可能在加密算法中添加NSA后门。为此,在中国,ShāngM (SM) 系列密码算法,作为TLS 1.3集成和无线认证的备选方案: SM2:定义了认证(签名&#xf…

cuda卸载

去查看你的电脑显卡对应的cuda版本,不然还是一整个用不到gpu的情况嘿嘿. 啊啊啊啊打开控制面板看一下,驱动不要乱卸载: 这些东西不能全部卸载了哦,只能卸载含有“CUDA”的那几个(其实其他的可能也没有用 但是不懂的哇 …

用Rust和cURL库做一个有趣的爬虫

以下是一个使用 Rust 和 cURL 库的下载器程序,用于从wechat下载音频。此程序使用了 [/get_proxy] 提供的代码。 extern crate curl;use std::io::{self, Read}; use std::process::exit; use curl::easy::Easy;fn main() {let url "https://www.wechat.com/au…

vue3 源码解析(1)— reactive 响应式实现

前言 本文是 vue3 源码解析系列的第一篇文章&#xff0c;项目代码的整体实现是参考了 v3.2.10 版本&#xff0c;项目整体架构可以参考之前我写过的文章 rollup 实现多模块打包。话不多说&#xff0c;让我们通过一个简单例子开始这个系列的文章。 举个例子 <!DOCTYPE html…

Web攻防05_MySQL_二次注入堆叠注入带外注入

文章目录 MYSQL-二次注入-74CMS思路描述&#xff1a;注入条件&#xff1a;案例&#xff1a;74CMS个人中心简历功能 MYSQL-堆叠注入-CTF强网思路描述注入条件案例&#xff1a;2019强网杯-随便注&#xff08;CTF题型&#xff09; MYSQL-带外注入-DNSLOG注入条件使用平台带外应用场…

Mybatis-Plus CRUD

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Mybatis-Plus CRUD 通用 Service CRUD 封装 IService 接口&#xff0c;进一步封装 CRUD 采用 get 查询、remove 删除 、list 查询集合、page 分页的前缀命名方式区分 …

【0229】libpq库实现压测PG服务器max_connections的最大连接数

1. PG服务器接收的最大连接数 在PG服务的postgresql.conf配置文件中,参数:max_connections 注明了PG服务所能够接受的最大客户端的连接数量。此值默认是100,那么PG服务此参数最大能够调到多大呢? 本文将采用libpq库编写demo来进行压测,并将最终的结论和数据于文章中给出。…

UWB技术在定位系统中的革新应用

超宽带技术&#xff08;Ultra-Wideband, UWB&#xff09;的崛起为定位系统领域带来了前所未有的机遇。其亚米级别的高精度定位、强大的穿透能力以及高速数据传输的特性&#xff0c;使得UWB在室内和室外定位系统中得以广泛应用。本文将深入探讨UWB技术在定位系统中的应用&#x…

关于数据可视化那些事

干巴巴的数据没人看&#xff0c;数据可视化才能直观展现数据要点&#xff0c;提升数据分析、数字化运营决策效率。那关于可视化的实现方式、技巧、工具等&#xff0c;你了解几分&#xff1f;接下来&#xff0c;我们就来聊聊数据可视化那些事。 1、什么是数据可视化&#xff1f…

java 企业工程管理系统软件源码 自主研发 工程行业适用

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

LeetCode刷题---简单组(三)

文章目录 &#x1f352;题目一 20. 有效的括号&#x1f352;解法一&#x1f352;题目二 26. 删除有序数组中的重复项&#x1f352;解法一&#x1f352;题目三 21. 合并两个有序链表&#x1f352;解法一 &#x1f352;题目一 20. 有效的括号 给定一个只包括 ‘(’&#xff0c;‘…

在antd里面渲染MarkDown并且自定义一个锚点目录TOC(重点解决导航目录不跟随文档滚动的问题)

一、整体思路 由于有很多很长的文档需要渲染&#xff0c;我觉得用MarkDown的方式会比较适合管理&#xff0c;所以这两天测试了一下在antd里面集成MarkDown的渲染模块。 总体思路参考&#xff1a; https://blog.csdn.net/Sakuraaaa_/article/details/128400497 感恩大佬的倾情付…

windows安装最新pip官方教程

在执行pip的pip install --upgrade pip更新时&#xff0c;出现如下错误&#xff0c;怎么也无法重新安装&#xff1a; 根据官网的安装教程来 命令的方式一&#xff1a; • 卸载PIP的命令&#xff1a;python -m pip uninstall pip • 重装PIP的命令&#xff1a;python -m ensure…

Biome-BGC生态系统模型与Python融合技术教程

详情点击公众号链接&#xff1a;Biome-BGC生态系统模型与Python融合技术教程 前言 Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数&#xff0c;模拟日尺度碳、水和氮通量的有效模型&#xff0c;其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型…