FPGA学员4
同学,你的想法很实际,抓到了毕设的关键——展示系统能力而非死磕底层算法。我来分享一个更“短平快”的入手点。
别一上来就盯着最火的MobileNet。对于手势识别,完全可以自己设计一个极简的CNN,比如只有两三层的卷积池化,配合简单的全连接层。输入图像分辨率弄小点,比如64x64。这样的模型参数量极小,你甚至可以用Xilinx的HLS工具(高层次综合)自己写C++代码来生成卷积层的IP核,这个过程本身也是很好的学习。HLS里有现成的卷积、池化函数库,调用起来比写RTL简单太多了。
如果你不想动模型,就想用现成的加速IP,那除了Xilinx的DPU,还可以看看开源社区的项目。比如,在GitHub上搜索“FPGA CNN accelerator”,能找到不少用Verilog/VHDL写好的、针对特定小模型的推理引擎,有些还带上了AXI总线接口,可以直接集成到你的系统中。虽然可能不如官方IP完善,但开源代码能让你看得更透彻。
人脸检测的复杂度比手势识别高一个等级。我建议毕设优先选手势识别,更容易出成果。如果非要做人脸,可以考虑用Harr级联分类器这种传统算法,它计算简单,用FPGA实现起来比深度学习方案容易得多,而且OpenCV有现成的训练工具和模型文件。
最后提个醒:无论选哪种方案,一定要尽早把摄像头图像采集、DDR内存访问、视频输出(如果要有)这些数据通路调通。AI推理部分往往只占你调试时间的1/3,更多时间会花在确保数据能正确无误地流入流出处理模块上。先搭好数据流框架,再往里填AI加速模块,这样心里不慌。
