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

news/2024/7/21 4:26:52 标签: fpga开发, 人工智能, 图像处理

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

适用于板卡型号:

紫光同创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.niftyadmin.cn/n/5043627.html

相关文章

Ubuntu 基础配置

源配置 源路径: /etc/apt/sources.list aliyun源 20.04 deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.a…

极客时间:左耳听风【文章笔记 思考总结】

本篇博客是学习过程中的笔记、思考和总结。原文链接:https://time.geekbang.org/column/intro/100002201 开篇词 | 洞悉技术的本质,享受科技的乐趣01 | 程序员如何用技术变现(上)02 | 程序员如何用技术变现(下&#xf…

FL Studio 21内置鼓机FPC怎么用 常用编曲鼓点怎么排列

FL Studio 21内置鼓机FPC怎么用?FPC是一款模拟硬件打击垫建模的鼓机,使用方法和硬件打击垫很像,但是多出了修改采样等更加细节的功能。常用鼓点怎么排列?电子音乐中常见的鼓点有4/4拍鼓组和Trap类型鼓组。 FL Studio Win-安装包&a…

深度对话|Sui在商业技术堆栈中的地位

近日,我们采访了Mysten Labs的商业产品总监Lola Oyelayo-Pearson,共同探讨了区块链技术如何为企业提供商业服务,以及为什么Sui特别适合这些用例。 1.请您简要介绍一下自己、您的角色以及您是如何开始涉足Web3领域的? 目前&#…

HarmonyOS 如何使用异步并发能力进行开发

一、并发概述 并发是指在同一时间段内,能够处理多个任务的能力。为了提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰,HarmonyOS 系统提供了异步并发和多线程并发两种处理策略。 ● 异步并发是指异步代码在执行到一定程度后会被暂…

算法基础之高精度总结

目录 高精度算法分类 高精度加减乘除的异同点 加和乘 相同点 减和除 相同点 不同点 处理前导0的方式 高精度算法分类 分类:加、减、乘、除 其中加减乘都适用于两个数都是高精度,除法因为除数是高精度的话不好用整除的方法,所以除法时…

matlab符号函数

一、符号函数简介 符号函数是matlab的一个重要功能,可以用来表示数学上的函数,同时也可以用来进行数值计算。 创建符号函数的方法: 利用syms定义符号变量生成符号函数利用sym和生成符号函数利用函数文件生成符号函数 1.1 syms方法 首先利…

深度学习中的激活函数 – 完整概述

1.什么是激活函数? 生物神经网络启发了人工神经网络的发展。然而,人工神经网络甚至不能近似代表大脑的工作方式。在我们知道为什么在人工神经网络中使用激活函数之前,了解生物神经网络中激活函数的相关性仍然很有用。 典型的神经元具有由细胞体、向其他神经元发送信息的轴…