基于紫光同创FPGA的图像采集及AI加速

news2024/12/24 8:23:01

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处

适用于板卡型号:

紫光同创PGL50H开发平台(盘古50K开发板)

本篇优秀作品:2023集创赛全国总决赛紫光同创杯赛一等奖获奖作品,来自东莞理工+BugMaker的内容分享。

获奖作品:《基于紫光同创FPGA的图像采集及AI加速》

获奖队伍: 东莞理工学院+CICC1113+BugMaker

作品评语:视频输入接口支持HDMI,摄像头,光口,网口,PCIE上位机识别MAP达70%,视频输入帧率最高支持70帧,支持yolov5和yolov8识别帧率高。速度性能上较为优异。

部分成果及技术展示

01整体框架流程图

以上为我们的整体设计流程图,我们通过以太网接口、光口、HDMI输入接口以及摄像头接口实现了四路视频采集,其中网口数据是痛过PYTHON上位机传来,光口则是利用光纤回环实现输出,本质上还是通过获取第二个以太网接口的视频数据来实现视频采集输出,对于光口回环,它可以获取摄像头或者时HDMI输入的数据,但会导致视频源重复展示,故使用双网口,并两个网口传输不同视频数据以实现四路不同视频源的识别。

之后会将四路视频源分别进行缩放处理,变成960*540后拼接成一副1920*1080的四宫格视频进行输出展示,同时也将图像数据通过PCIE发送到PC端进行AI识别。同时,附加串口指令功能可修改拼接的模式可实现画中画显示以及预加速处理效果。

02双板卡方案

我们采用了两块盘古50K开发板实现双板卡方案,以达到资源最大利用,板卡一做图像采集以及预处理,板卡二通过HDMI输入接收板卡一HDMI输出的视频数据,再通过PCIE将数据发送到PC端进行识别。

在数据缓存设计中,我们使用了AXI读写DDR,并实现了5路AXI读写仲裁实现视频的实时拼接,为了解决读写时钟不同,加入了读写FIFO进行数据缓存,且起到了数据跨时钟的功能。两片DDR可支持一次写入32bit的像素数据,AXI总线位宽使用256bit,为视频流高效率传输提供了可能,同时为了避免画面撕裂,使用了三帧缓存架构。一个视频流有三个地址空间进行读写。

至于以太网上位机,我们使用PYTHON并使用UDP协议进行传输数据,由于一次最高传输的报文长度不能超过65536个字节,所以我们进行切片传输,把一帧图像分成多次传输,利用pyqt5编写了上位机界面。同时支持打开电脑摄像头进行传输,或者单独播放视频和打开摄像头。

03决赛优化

为了更好的适应自动驾驶,帧率非常重要,零点几秒的差距可能就是一场车祸,所以我们通过修改EDID以及提高输出时钟,让HDMI输出达到了87HZ,输入也达到了87HZ,进而提高了输入和输出的帧率。

而PCIE上位机我们使用C++编程,最终直接从内存读取数据然后送到YOLOV5或者YOLOV8中进行识别,目标检测算法采用最快的YOLOv8,配上最快的CPP+TensorRT(外加一点点汇编),上位机程序异步上传,识别函数异步处理,采用CPP真多线程编程,灵活的指针传参,突破了Python语言的GIL(全局解释器锁)只能利用单个线程的劣势、Python多进程传参带来的巨大延迟(将近10ms),在分赛区初赛时,帧率高达140FPS,总决赛帧率进一步翻倍,突破至240FPS一骑绝尘,能够在毫秒之间定生死的自动驾驶场景提供强有力的保障(取消识别结果的展示,帧率能更高)。

04夜间增强方案

因为本次提供的视频源还有黑夜道路下的视频,所以为了能够正确识别出黑夜下的车辆,我们在FPGA端做了夜间增强处理,相比在PC端,我们充分利用了FPGA的并行处理,加速了对视频流的夜间增强处理,实现了预处理加速。

本次使用MATLAB工具进行算法验证实现了夜间增强效果,旨在能够在夜间环境下正确识别出车辆以及交通灯等。

本次使用的算法是直方图均衡加上伽马变换,我们将两个算法的核心思维相结合,将最后伽马变换的曲线映射到0-255上,将RGB三通道分离出来单独处理,每个都是8bit即RGB888,也方便后续部署到FPGA上。

此为增强后的图像像素曲线。可以看到在像素值小于100时,其曲线斜率非常大,就是为了将低亮度的像素点增强。

右图为MATLAB进行处理后得到的图像,可见实现了图像增强,整体亮度变高,能够更加清晰的看到车辆,为后续识别提供了可能。

以下为不同场景测试:

可见算法得到的整体效果是不错的

将其转为查找表的形式部署进去FPGA中,将RGB三通道分离进行处理后再重新拼接成RGB888的格式。

以下是进行Modelsim仿真得到的图像,从右图可以看出用Verilog实现效果与Matlab基本一致。

* 实际部署效果

未增强

增强后可以识别到原本无法识别到的车辆、提高了识别率

YOLO识别补充

05时序以及资源

*部分作品内容演示:盘古50K开发板双板卡方案

赛题完成情况——要求

1、系统可演示,有完善的数据链路

√ 五路视频拼接输出,且缩放比例可调

2、FPS大于2  

√ 最高可达240fps识别

3、精度不低于60%

√  MAP单类最高达到89%,平均达到74%

4、精度更高,FPS更高

√  最高可达240fps识别

5、能进行多路视频的识别,进行拼接和融合。

√ 五路视频拼接输出且缩放比例可调

6、FPGA与PC通信接口采用PCIE接口

√ 并且集成在了YOLO识别中,开机运行一个文件即可一条龙完成。

时序方面 基本正常 无任何违例

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

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

相关文章

Lua学习笔记:词法分析

前言 本篇在讲什么 Lua的词法分析 本篇需要什么 对Lua语法有简单认知 对C语法有简单认知 依赖Visual Studio工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉 ♠ 一级标题…

stm32之PWM呼吸灯

呼吸灯是灯从渐亮到渐灭周而复始形成的一个效果。由于51没有PWM所以需要定时器模拟PWM才能实现呼吸灯的效果,但是stm32的通用定时器是有PWM模式的,所以不需要再用软件模拟,精准度也高。 本实验用的基于stm32f103C8t6。在PB8引脚上接了一个le…

stm32之串口/蓝牙控制led灯

该文章记录学习stm32串口遇到的一些问题,完整代码地址。 一、项目描述 通过串口或蓝牙发送指令来控制led灯。 open ------> led 亮close ------> led 灭其它 -------> 反馈给串口或蓝牙错误指令 二、项目用到的模块 stm32 串口1,PA9(TX), PA10(RX)HC…

计算机组成与设计硬软件接口学习2

并行处理器:从客户端到云 任务级并行或进程级并行:通过同时运行独立的多个程序来使用多处理器 并行处理程序:同时在多个处理器上运行的单个程序 通过增加硬件的方式,将取指令和指令译码实现并行,一次性取出多条指令…

MQTT 协议概要

01 MQTT协议 MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的支持在各方之间异步通信的消息协议。MQTT在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息…

[RF学习记录][ssh library][execute Command】关键字的返回值

有时候需要判断通过ssh在远程机器上执行的命令是否正常,使用关键字Execute Command可以在远程机器上运行命令,但是默认不加任何参数的话,没有看到范返回值,而这个关键字是带了几个参数的,简单的试验了下这几个参数&…

点云从入门到精通技术详解100篇-单期点云的高斯曲率定位桥梁潜在损伤技术研究

目录 前言 国内外研究现状 三维激光扫描对桥梁损伤检测的研究现状 基于点云高斯曲率损伤检测的研究现状 柱体偏差检测技术研究现状 存在的问题 法向量约束高斯曲率的 TLS 桥面潜在损伤区域探测 2.1 高斯曲率探伤的基本理论 2.2 点云拓扑关系建立的方法比较 2.2.1 KD-…

机器学习第十三课--主成分分析PCA

一.高维数据 除了图片、文本数据,我们在实际工作中也会面临更多高维的数据。比如在评分卡模型构建过程中,我们通常会试着衍生出很多的特征,最后就得到上千维、甚至上完维特征;在广告点击率预测应用中,拥有几个亿特征也是常见的事…

【数学建模】2023华为杯研究生数学建模F题思路详解

强对流降水临近预报 我国地域辽阔,自然条件复杂,因此灾害性天气种类繁多,地区差异大。其中,雷雨大风、冰雹、龙卷、短时强降水等强对流天气是造成经济损失、危害生命安全最严重的一类灾害性天气[1]。以2022年为例,我国强对流天气引发风雹灾害造成的死亡失踪人数和直接经济…

git:一、GIT介绍+安装+全局配置+基础操作

版本管理系统(SVN和Git): 集中式版本控制系统(SVN) SVN是集中式版本控制系统,版本库是集中放在中央服务器的. 工作流程如下: 1.从中央服务器远程仓库下载代码 2.修改后将代码提交到中央服务器远程仓库…

基于微信小程序的电影院订票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户微信小程序端的主要功能有:管理员的主要功能有:具体实现截图详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考论文参考源码获取 前言 💗博主介绍&…

原生js的animate()方法详解

1.介绍 Element 接口的 animate() 方法是创建一个新的 Animation 的便捷方法,将它应用于元素,然后运行动画。它将返回一个新建的 Animation 对象实例。 同时通过Element.getAnimations() 方法可获取元素所有的Animation实例。 2.语法 Element.animate…

读高性能MySQL(第4版)笔记14_备份与恢复(中)

1. 在线备份 2. 离线备份 2.1. 关闭MySQL做备份是最简单、最安全的 2.2. 所有获取一致性副本的方法中最好的 2.3. 损坏或不一致的风险最小 2.4. 根本不用关心InnoDB缓冲池中的脏页或其他缓存 2.5. 不需要担心数据在尝试备份的过程中被修改 2.5.1. 服务器不对应用提供访问…

Redis淘汰策略-架构案例2020(三十六)

上篇案例回顾: 解释器,管道过滤,隐式调用优缺点? 解释器 则是独立的语法规则,可以通过解释器来解析,可扩展性很高,灵活性强。 管道过滤则是侧重于数据的输入和输出,上一个模块的数…

stm32之看门狗

STM32 有两个看门狗,独立看门狗和窗口看门狗,独立看门狗又称宠物狗,窗 口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时,产生系统复位,对于窗口型看门狗同…

2023.9.20 简单了解 HTTP协议 及 Fiddle 安装使用

目录 HTTP 协议基本概念 Fiddle 下载 HTTP 请求格式 HTTP 响应格式 HTTP 协议基本概念 应用层使用最广泛的协议浏览器 基于 HTTP协议 获取网站是 浏览器 和 服务器 之间的交互桥梁HTTP协议 基于传输层的 TCP协议 实现HTTP 全称为 HyperText Transfer Protocol,中…

Java IO流实现文件复制

目录 前言 文件复制底层逻辑 代码实现 ​编辑 重点!!! 完整代码 改善思考 前言 Windows文件复制时我们是使用Ctrl C复制Ctrl V粘贴,上一篇文章Java基础入门对存储文件的相关操作 我们学习了Java IO流对文件的读写操作&…

数据结构--排序(1)

文章目录 排序概念直接插入排序希尔排序冒泡排序堆排序选择排序验证不同排序的运行时间 排序概念 排序指的是通过某一特征关键字(如信息量大小,首字母等)来对一连串的数据进行重新排列的操作,实现递增或者递减的数据排序。 稳定…

深度学习自学笔记二:逻辑回归和梯度下降法

目录 一、逻辑回归 二、逻辑回归的代价函数 三、梯度下降法 一、逻辑回归 逻辑回归是一种常用的二分类算法,用于将输入数据映射到一个概率输出,表示为属于某个类别的概率。它基于线性回归模型,并使用了sigmoid函数作为激活函数。 假设我们…

Git_06_创建分支/查看分支

创建分支 # 创建分支的同时,切换到该分支上 > git checkout -b 分支名称 # > git push origin 分支名称查看分支 # 查看本地分支 > git branch # 查看远程分支 > git branch -r # 查看所有分支 > git branch -a删除分支 # 删除本地分支 > git …