bnn-fpga, 基于软件可编程fpga的二元卷积神经网络

分享于 

4分钟阅读

GitHub

  繁體 雙語
Binarized Convolutional Neural Networks on Software-Programmable FPGAs
  • 源代码名称:bnn-fpga
  • 源代码网址:http://www.github.com/cornell-zhang/bnn-fpga
  • bnn-fpga源代码文档
  • bnn-fpga源代码下载
  • Git URL:
    git://www.github.com/cornell-zhang/bnn-fpga.git
    Git Clone代码到本地:
    git clone http://www.github.com/cornell-zhang/bnn-fpga
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/cornell-zhang/bnn-fpga
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    出版物

    如果你在你的研究中使用这里代码,请参考我们的fpga'17纸张:

    
     @article{zhao-bnn-fpga2017,
    
    
     title ="{Accelerating Binarized Convolutional Neural Networks
    
    
     with Software-Programmable FPGAs}",
    
    
     author = {Ritchie Zhao and Weinan Song and Wentao Zhang and Tianwei Xing and
    
    
     Jeng-Hau Lin and Mani Srivastava and Rajesh Gupta and Zhiru Zhang},
    
    
     journal = {Int'l Symp. on Field-Programmable Gate Arrays (FPGA)},
    
    
     month = {Feb},
    
    
     year = {2017},
    
    
     }
    
    
    
    

    简介

    BNN FPGA是一种基于FPGA的二值化神经网络( BNN ) 加速器的开源实现。 Courbarieaux等人提出了BNN的体系结构和训练。 和开源 python 代码在 https://github.com/MatthieuCourbariaux/BinaryNet 可用。

    我们的加速器面向低功耗嵌入式现场可编程 soc,并在Zedboard上进行了测试。 在写入 CIFAR-10 测试集的10000映像时,错误率为

    插件生成设置

    在你的路径上需要 Xilinx SDSoC,而 Vivado HLS头包含你的CPATH上的文件。

    已经验证的SDSoC版本:2016.4,2017.1

    有了这些工具,就可以从知识库 root 中执行以下操作:

    
     % source setup.sh
    
    
     % cd data;./get_data.sh; cd.. 
    
    
     % cd params;./get_params.sh; cd.. 
    
    
    
    

    这将设置 环境变量 并下载数据和参数压缩文件。

    要构建软件模型,请执行以下操作:

    
     % cd cpp
    
    
     % make -j4
    
    
    
    

    要构建FPGA比特流,请执行( 软件构建完成后):

    
     % cd cpp/accel/sdsoc_build
    
    
     % make -j4
    
    
    
    

    邮局布线时间和面积信息以 sdsoc_build/_sds/reports/sds.rpt 提供。

    分支

    主分支包含调试生成,包括随机测试平台,每个层测试平台和完整的bnn测试平台。 优化后的分支只包含完整的测试结果。

    FPGA评估

    • FPGA比特流构建完成后,将 sd_card 目录复制到SD卡。
    • 数据和params目录复制到同一个SD卡。
    • 将卡插入Zedboard并打开Zedboard电源。
    • 通过USB连接到Zedboard并等待引导序列完成。
    • 在终端提示符处执行以下操作:
    
     % cd mnt
    
    
     % export CRAFT_BNN_ROOT=.
    
    
     %./accel_test_bnn.exe <N>
    
    
    
    

    其中,N 是要测试的图像数。 可以提供 CIFAR-10 测试集的多达 10000幅图像。 程序将打印出最终的预测精度和加速器运行时。 请注意,程序在调用加速器之前执行重量化和重排序,因这里在开始时会暂停。

    改变Convolvers的数目

    转到 cpp/accel/Accel.h,并将CONVOLVERS更改为所需的数字( 必须是 2的幂)。 你必须做一个清理,从头开始重建一切。

    已知问题和 Bug

    • 由于glibc包含的错误,SDSoC编译错误包括文件( #1)
      如果SDSoC在CPATH上看到本地版本的glibc,从而替代ARM版本进行交叉编译,就会发生这种情况。 解决方法是从CPATH中删除/usr/include。 在某些情况下,这会阻止SDSoC查看 zlib ;当前建议修复是在不同的( 非系统) 目录中构建 zlib,并将它的添加到。

    相关文章