基于FPGA的卷积网络加速(2)

       分享一下是实现的CNN卷积层的一些思路,我使用的工具是xilinx的hls高级综合开发IDE,可以用高级语言c/c++来开发硬件,具体文档可看xilinx的ug902。考虑最后希望实现摄像头采集图像,FPGA加速CNN之后能够实时地输出结果(目标检测或者分类都有可能)。而摄像头是以行扫描的方式输出一幅图像,所以把输入图像数据按行存在DDR,而FPGA按行从DDR读图像。FPGA的特点之一就在于流水线处理,可以在一幅图像还没有采集完的时候就开始处理。

        比如卷积核的大小为3,边缘padding填0,步长为1,则我将linebuffer的大小设置为(Height+2*padding)*Channel*3。第一次卷积需要从DDR读入两行图像,第一行需要填0。linebuffer做卷积计算,则可以输出一行输出图像(再把输出的一行图像按行输出给下一层卷积层)。

       然后,第二次卷积需要把linebuffer的行往上移,并且再读入一行像素,就可以做第二次卷积。hls中c simulation的打印值,输出的RTL的仿真图如下所示。

      最后的网络除了全连接层之外全部放在FPGA上,效率和资源利用率比把一幅图像或者特征图都读到FPGA上再做卷积要高不少。至于卷积的并行计算在上一篇有提到过,下次再详细有时间再详细写。

       

猜你喜欢

转载自blog.csdn.net/qq_38128961/article/details/89643836
今日推荐