【2021集创赛】Digilent杯二等奖:基于FPGA的动态视觉感知融合的运动目标检测系统

本文主要是介绍【2021集创赛】Digilent杯二等奖:基于FPGA的动态视觉感知融合的运动目标检测系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

杯赛题目:Diligent杯:基于FPGA开源软核的硬件加速智能平台
参赛组别:A组
设计任务:
利用业界主流软核处理器(仅限于Cortex-M系列及 RISC-V系列)在限定的DIGILENT官方FPGA平台上构建SoC片上系统,在 SoC中添加面向智能应用的硬件加速器(如从最简单的矩阵乘加加速到更复杂的神经网络硬件优化实现)以提高和优化系统的性能,并基于该SoC实现一个基于该SoC的智能信息处理系统,系统具有创新性、实用性和具体的应用场景。
参赛单位:中山大学
总决赛奖项:二等奖

1.项目介绍:

在物联网背景下, 能够高效地实现低功耗、低成本的边缘计算平台越来越受到关注。在无人驾驶和智能监控等领域有了长远的发展,其中高效的运动目标检测算法备受瞩目。对于运动目标检测的高效性需求,Event-based Camera (基于事件的相机)这一概念开始兴起, 动态视觉传感器(DVS)就是其中一类。基于模拟生物形态而开发的用于图像捕捉的DVS, 可快速捕捉并识别动态目标。一方面, 事件驱动的DVS可以快速获得运动目标所激活触发的地址-事件相关数据;另一方面,目前CNN在目标识别和目标检测等计算机视觉领域表现优异。

因此, 本项目采用了一种动态视觉传感器(DVS)和卷积神经网络相结合的运动目标检测混合算法策略。在实际应用中,基于硅视网膜的动态视觉传感器需要特定的运行环境和昂贵的价格,所以本项目使用了一种基于帧图像的动态视觉传感器建模方法。该方法对常见的帧图像视频流进行处理,使得像素矩阵中的像素单元相互独立,从时间和空间的维度上进行连续的差分与逻辑判断。并在此基础上,根据该方法生成的数据特征,使用聚类算法进行对运动目标的提取。并将提取的运动目标活跃区域输入到分类卷积神经网络,完成基于动态视觉传感器的目标检测算法的运算过程。与 Faster R-CNN和SSD卷积神经网络相比,基于动态视觉传感器的目标检测算法在检测运动物体时可以获得优异的检测精度,同时因为计算量的减少,检测速度预计可大幅提升。

普通相机与DVS相机之间的差别。DVS是使用CMOS集成的特定硅视网膜结构,该硅视网膜工作方式类似于生物视网膜,进行光传导与信号处理。不同于常规的图像传感器,DVS放弃了帧概念,因此不会限制响应等待时间和时间分辨率。同时,DVS是对局部亮度变化做出响应的成像传感器,不会像普通CMOS相机那样使用快门捕获图像,而是每个像素单元独立且异步运行,即每个像素可以独立响应亮度发生的变化。DVS中所包含的像素单元异步运行,可以独立响应光强亮度发生的变化,每个像素单元对光强变化进行连续的比较。

DVS中所包含的像素单元异步运行,可以独立响应光强亮度发生的变化,每个像素单元对光强变化进行连续的比较,其工作原理可以表述为:如果DVS中像素单元前后光强变化幅度超过设定阈值,则该像素单元重置其参考电平并生成事件,输出包含时间戳信息的地址-事件离散信息数据;如果变化幅度未达到设定阈值,则该像素单元保持静默,不输出信息数据。为了体现DVS逐像素差分的特点,我们将DVS建模中像素色域增的像素点转化为绿色,减的像素点转化为红色。
在这里插入图片描述

2.软硬件设计介绍:

在这里插入图片描述

我们提出了一种基于DVS和CNN混合框架的目标检测算法,其系统结构概述如图所示,该混合框架的目标检测算法检测过程可以分为三个步骤。首先,需要检测的图像数据流经过基于帧图像的DVS建模处理后,获得对应的地址-事件数据。第二步,使用DBSCAN聚类算法对获得的数据进行处理以提取活跃的运动目标区域。最后一步,将活跃的运动目标区域进行预处理,通过裁剪与缩放以适应CNN网络尺寸大小,处理后的活跃区域作为CNN模型的输入数据,经过卷积池化等运算后提取目标特征,输出识别后的结果

在这里插入图片描述

系统的总体框架如图所示。系统以ARM Cortex-m3片上系统为核心,通过AXI总线控制GPIO、UART、QSPI、DAP-LINK Debugger等基本外设以及针对车牌识别的外设。其中GPIO用于实现Cortex-m3波形输出,UART用于反馈系统信息与测试,QSPI用于访问FLASH,调试器对程序进行下载与调试。
Ov5640reset用于产生SCCB时序,对OV5640摄像头初始化。
VDMA由ARM核初始化好后,成为图像缓存与硬件加速通路的桥梁,且可以通过寻址在调试时实时查看DDR3内存内部数据。可以将各种中间结果存入存储,则ARM通过寻址的方式即可访问数据结果,方便调试。
HDMI输出可选择VDMA不同读出地址,便于实时查看处理数据过程,以及当前电路的效果。

3.总结与展望

首先,本设计通过软件与硬件的结合,将ARM Cortex-M3软核嵌入FPGA,完整地搭建出嵌入式系统,该系统可实现摄像头驱动并传输数据、运动目标定位检测、结果可视化输出至HDMI等。系统具有采集视频图像实时,定位准确,识别误差低,速度快等特点。完成了DVS的目标检测算法在更底层的嵌入式系统移植验证。

在算法方面,我们实现了对图像的采集到DVS建模的全流程硬件化,神经网络识别也成功硬件化。软核完成初始化与实现DBSCAN聚类算法的功能。
参赛感想

本次比赛是高校集成电路领域最为突出的赛事,可以和来自全国各地高校的优秀同学们的互相学习和交流,收获颇丰。我们团队以赛促学,在项目推进的过程中学到了很多课堂外的知识,受益匪浅。最后,感谢本次赛事组委会的工作人员和老师们的高效组织工作与指导,让我们能够参与到这样的大赛之中,接触到贴近于实际又富有新技术与挑战的题目,锻炼提高自身能力。

更多集创赛作品请查看2021年集创赛获奖作品合集(持续更新中)

这篇关于【2021集创赛】Digilent杯二等奖:基于FPGA的动态视觉感知融合的运动目标检测系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273313

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻