电子爱好者小张
同学你好,我也是用Pynq-Z2做过图像处理的。针对你的问题,我的建议是走‘软硬协同’路线,别想把整个模型都塞进PL。Zynq-7020的PL部分大概只有85K逻辑单元,13Mb BRAM,全放CNN可能不够。一个务实方案是:用PL实现最耗时的卷积计算,其他层(如全连接、后处理)放在PS端的ARM核上用C++跑。具体可以这样:先找一个非常轻量的手势检测模型(比如Tiny-YOLO的变种,或者自己设计的几层小网络),用Darknet或PyTorch训练好。然后用Vitis AI的DPU(虽然官方对7020支持一般,但社区有裁剪版的DPU)或者自己用HLS写一个卷积加速器。摄像头数据流用OpenCV在PS端捕获,但通过Zero-copy方式将视频帧传到PL的预处理模块(比如用AXI VDMA),预处理后进入卷积加速器,结果再传回PS。为了保证30fps,一定要计算每个环节的耗时:摄像头采集(~30ms)、预处理(~10ms)、推理(目标~20ms)、后处理(~5ms)。如果某个环节超时,就考虑优化或者降低分辨率(比如从640x480降到320x240)。另外,记得利用PL的并行性,比如同时处理多个像素点。常见坑:PS和PL之间的数据带宽可能成为瓶颈,尽量用高带宽的AXI接口;Pynq的Python层开销大,实时处理的话最好用C++在PS端写主程序。
