Verilog小白
同学你好,你的问题很有挑战性,也很有意义。从工程师角度看,这是一个典型的算法-硬件协同设计问题。我提供一些具体步骤和注意事项。
首先,明确你的实时性指标。比如1080p@30fps?这决定了你的系统时钟和流水线深度。Artix-7的资源(以A7-35T为例,DSP约90个,BRAM约1.8Mb)非常有限,所以必须做取舍。
对于物理模型加速:建议从最简单的图像滤波算法开始,比如快速中值滤波或双边滤波变体。导向滤波计算量大,但可以近似优化。硬件上,核心是设计一个可配置的滑动窗口处理单元。用多个并行的乘法器和加法器处理窗口内像素。注意,为了节省资源,可以考虑将浮点运算全部转换为定点运算,比如Q格式。研究一下用移位和加法代替乘法。
对于轻量CNN映射:这是难点。不建议直接用现成的RainNet,它的参数量可能还是太大。你需要自己设计一个极简的CNN,比如3-5层,每层通道数很少(如16-32)。采用深度可分离卷积代替标准卷积,能大幅减少计算量和参数。量化方面,使用8位定点(权重和激活值都是8位)是底线,甚至可以尝试4位。工具链可以用Vitis AI进行量化与编译,但自定义程度高的话,可能需要自己写RTL来描述计算单元。重点优化数据复用,减少BRAM占用。
公平对比框架设计:
1. 效果对比:使用公开的去雨数据集(如Rain100H)中的连续帧作为输入。在PC上用浮点模型跑出软件结果作为参考。FPGA实现后,将输出图像传回PC,计算PSNR/SSIM。注意两种算法在FPGA上都是定点实现,所以对比时要和各自的浮点软件版对比,看精度损失;也要相互对比。
2. 实时性与功耗对比:在相同输入视频和时钟频率下,测量处理一帧所需时钟周期数,算出最大帧率。用板载功耗监测或外接电流表测量典型工作功耗。资源利用率报告直接看Vivado综合实现后的数据。
最后的选择建议:如果时间有限,优先实现物理模型方案,因为它确定性高,硬件设计更直观。深度学习方案不确定性大,容易在资源或时序上卡住。但后者效果可能更好,更能体现你的工作量和创新。根据你的时间和能力来定。
