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

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

适用于板卡型号:

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

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

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

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

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

部分成果及技术展示

01整体框架流程图

基于紫光同创FPGA的图像采集及AI加速_第1张图片

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

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

02双板卡方案

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

基于紫光同创FPGA的图像采集及AI加速_第2张图片

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

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

基于紫光同创FPGA的图像采集及AI加速_第3张图片

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上。

基于紫光同创FPGA的图像采集及AI加速_第4张图片

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

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

以下为不同场景测试:

基于紫光同创FPGA的图像采集及AI加速_第5张图片

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

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

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

基于紫光同创FPGA的图像采集及AI加速_第6张图片

* 实际部署效果

未增强

基于紫光同创FPGA的图像采集及AI加速_第7张图片

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

基于紫光同创FPGA的图像采集及AI加速_第8张图片

YOLO识别补充

基于紫光同创FPGA的图像采集及AI加速_第9张图片

基于紫光同创FPGA的图像采集及AI加速_第10张图片

05时序以及资源

基于紫光同创FPGA的图像采集及AI加速_第11张图片

基于紫光同创FPGA的图像采集及AI加速_第12张图片

基于紫光同创FPGA的图像采集及AI加速_第13张图片

基于紫光同创FPGA的图像采集及AI加速_第14张图片

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

基于紫光同创FPGA的图像采集及AI加速_第15张图片

基于紫光同创FPGA的图像采集及AI加速_第16张图片

赛题完成情况——要求

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

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

2、FPS大于2  

√ 最高可达240fps识别

3、精度不低于60%

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

4、精度更高,FPS更高

√  最高可达240fps识别

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

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

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

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

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

你可能感兴趣的:(fpga开发,FPFA,图像处理,fpga开发,人工智能,图像处理)