【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

相关文章

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

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环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦