0%

FPGA实现CNN之github开源代码阅读

本节主要分享在github中阅读学习别人开源代码的感悟。

https://github.com/omarelhedaby/CNN-FPGA

  • 该代码展开得很少,更多得考虑资源,架构上没有啥特色,就是乘加运算的堆叠【浮点乘加】

  • 但其提供的设计文档很详细

  • 不建议细看

  • 卷积模块设计框图:

    image-20240923221927480

  • softmax模块设计框图:

    image-20240923222011978
  • 平均池化设计框图:

    image-20240923222056732
  • 这里面有个串行加法器的写法有点意思:

    image-20240923221812752


https://github.com/padhi499/Image-Classification-using-CNN-on-FPGA

  • 该代码主要实现的卷积+ReLu+最大池化,卷积最底层小模块没展开,用串行实现的,但顶层模块均展开并行处理

  • 但总的来说,在整体架构上没有创新特色,就是简单地复制几倍资源并行去做

  • 不建议细看

  • 卷积实现框图:

    • 卷积顶层:是9个卷积块的并行(对于$5\times 5$的图片,卷积核是$3\times 3$,步长为1的情况下需要滑动卷积9次,展开后即用9个卷积块并行处理)

      image-20241006200407737

    • 卷积块:

      image-20241006201221908
    • 矩阵乘累加模块:这里MAC是串行实现方式,只有一个硬件单元,用时间换资源了

      image-20241006201322564
  • ReLu层:并行Relu

    7_relu_activation
  • 最大池化层:

    • 池化顶层:3 * 3 经过2 * 2池化,需要滑动4次池化窗口,故此处为4次展开并行处理

      10_max_pooling
    • 小池化块:对于每次池化窗口22=4个数据,级联方式需要3个比较器得最大值,*这样子可以实现流水处理方式**

      image-20241006201951218

欢迎来到ssy的世界