Xilinx 的 Zynq-7000 Soc(PYNQ-z2、Zedboard 和 ZCU102)中的 YOLOv2 加速器
Xilinx FPGA PYNQ-z2、Zedboard 和 ZCU102 加速 YOLOv2 的 Demo 我于 2019 年 7 月 1 日毕业于中国江南大学。相关论文现已发布。
硕士论文《基于FPGA的神经网络加速器的可扩展性研究》
期刊文章《基于FPGA的深度学习目标检测系统的设计与实现》
期刊文章《基于Zynq7000 FPGA异构平台的YOLOv2加速器的设计与实现》
对于PYNQ-z2和Zedboard,除了最终的Linux应用(对于PYNQ,转PYNQ目录;对于Zedboard和ZCU102,转SDK和PetaLinux),其他步骤几乎相同:
(1)软件仿真
首先,您应该从https://github.com/pjreddie/darknet下载 darknet 源,从https://pjreddie.com/media/files/yolov2.weights下载 yolov2.weights 。
其次,修改darknet的weight load函数,得到我们想要的weights和biases(这里考虑到batcn normalization可以结合weight和bias)。
第三,考虑到在硬件逻辑中实现的乘法和加法运算会在 FPGA 中消耗过高的资源[3][6],我们应该使用较低精度的运算而不是 float-32。在这里,我只是按照 [3] 和 [6] 将输入/输出特征映射、权重和偏差量化为动态固定 16。并在float-32精度下使用fixed-16操作代替multiple、add和relu操作。
(2)HLS加速器与仿真
哦,这部分太复杂了,不好归纳。当前的设计没有实现 C/RTL 仿真,因为那个测试台总是溢出!如果有人能解决,请告诉我并上传,谢谢!
(3)Vivado 模块设计
只需在 Vivado Block Design 中连接 YOLOv2 IP。只有 clock wizzard configuraiotn 应该小心。我记得输入时钟是100MHz,输出时钟是150MHz,Reset pin active low,就这样。
(4)Zedboard 的 Vivado SDK
这一步只是想获取可执行文件到PL中驱动和控制YOLOv2 Acceleraotr。在这里,我为加速器预留了 0x1000_0000 字节的内存来读取/写入特征图和读取权重。
(5)PetaLinux
相关步骤已在 Petalinux 目录中更新。只需使用从 Vivado 项目生成的两个文件(.hdf 文件和 .bit 文件)来创建一个 Peatalinux。然后在里面测试yolov2加速器。
每个目录都有一些步骤来帮助进一步实施或研究这个加速器。
基于FPGA的YOLOv2加速器设计与优化
根据对YOLOv2网络的分析,除路由层外,大部分层都是串行处理的。路由层可以通过预先设置一个特定的地址来实现。
从加速器的角度来看,需要做的工作就是按顺序与内存进行交互(读取内存数据,处理数据,然后写回内存数据)。由于输入和输出的数据量非常大,为了重用数据和减少内存访问次数,总是采用循环平铺技术,将卷积循环R、C、M、N平铺到Tr、Tc、Tm、Tn[8] .
加速器的整体架构如下图所示:
概述
与[4,5,8]类似,加速器有2个AXI4主接口和1个AXI4-Lite从接口。AXI-Lite 从接口负责读写控制、数据和状态寄存器组。输入特征图和权重由两个主接口同时读取,输出特征图通过写入通道同时写回。
Data Scatter模块用于生成相应的写入地址,并将从DRAM读取的数据分配到片上缓冲区。Data Gather 模块用于生成 DRAM 回写地址并将输出缓冲区中的数据写回 DRAM。其他红色模块负责卷积层(Conv和Leaky ReLU)、最大池化层(Pool)和重组层(Reorg)的处理。
重量安排
有效的 FPGA 带宽随着突发长度的增加而上升,最终在某个突发长度阈值以上趋于平缓 [7]。数据平铺技术通常会导致 DRAM 中行优先数据布局的不连续 DRAM 访问。为了减少内存访问次数并增加有效内存带宽,我们将整个瓦片的内核权重安排到一个连续的块中,以确保外部内存带宽的高利用率[3]。
并行卷积引擎
卷积层的加速策略类似于[5][6],利用输入输出并行来加速计算。通过设计多个并行乘法单元和添加树来实现卷积计算中的输入并行(Tn parallelism)和输出并行(Tm parallelism)。Tm*Tn 乘法单元是并行计算的。Log2(Tn)深度的加法树通过流水线进行累加,生成部分和。
乒乓操作
与[8]类似,该设计实现了乒乓缓冲区来重叠读取输入特征图和权重、写入输出特征图和计算的延迟,从而大大提高了计算引擎的动态利用率。
评估
实验表明,HLS中浮点加法需要三个DSP资源,浮点乘法需要两个DSP;定点 16 位乘法需要一个 DSP,定点 16 位加法仅使用 LUT 即可实现。fixed-16(Tn=2,Tm=32,Tr=26,Tc=26)布局布线后的资源消耗如下:
资源 数字信号处理器 内存 查找表 FF 频率 开发
INT16(n4m32) 旧 153(69%) 88(63%) 35977(68%) 36247(34%) 150MHz 滑板
FT32(n4m23) 旧款 209(95%) 115(82%) 36348(68%) 64077(60%) 140MHz 滑板
INT16(n4m32) 旧 147(6%) 88(10%) 36759(13%) 30447(6%) 180MHz ZCU102
FT32-(n8m28,CONV II=3,POOL II=2) 默认float32 259(72%) 91(42%) 31985(45%) 53728(38%) 180MHz 护边板(ZU3EG)
FT32-(n4m36,CONV II=3,POOL II=2) 当前 float32 mp 334(93%) 109(50%) 43877(62%) 73854(52%) 150MHz 护边板(ZU3EG)
根据目前的设计,DSP 和 BRAM 的价格更高。DSP的成本可以进一步降低(有很多位宽冗余乘法),BRAM的成本可以降低。(正如Shen [1]所说,BRAM在HLS中分配了2的指数大小。实际上,许多BRAM是冗余的。)。
两种情况下的性能对比如下表所示:
表现
CNN模型 YOLO v2 YOLO v2 YOLO v2 YOLO v2 YOLO v2 YOLO v2
木板 PYNQ 滑板 ZCU102 滑板 ZU3EG ZU3EG
时钟(MHz) 150 150 180 140 180 150
精确 固定16 固定16 固定16 Float-32 Float-32 Float-32
功率(瓦) 2.98 1.20 ? ? ? ?
行动(共和党) 29.47 29.47 29.47 29.47 29.47 29.47
性能(GOP/s) 25.98 30.15 36.13 6.63 11.81 13.08
功率效率(GOP/s/W) 4.20 6.02 ? ? ? ?
结果
图片1
参考:
[1] 通过资源分区最大化 CNN 加速器效率
[2] PLACID:基于 FPGA 的 DCNN 加速器创建平台
[3] 深入了解卷积神经网络的嵌入式 FPGA 平台
[4] DianNao 小型高吞吐量加速器用于无处不在的机器学习
[5] 用于多种深度卷积神经网络的高吞吐量 FPGA 实现的自动 RTL 编译器
[6] 卷积神经网络的动态多精度定点数据量化策略
[7] Caffeine:走向统一表示和加速深度卷积神经网络
[8] 优化基于 FPGA 的深度卷积神经网络加速器设计
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于FPGA的YOLOv2加速器设计与优化 根据对YOLOv2网络的分析,除路由层外,大部分层都是串行处理的。路由层可以通过预先设置一个特定的地址来实现。 从加速器的角度来看,需要做的工作就是按顺序与内存进行交互(读取内存数据,处理数据,然后写回内存数据)。由于输入和输出的数据量非常大,为了重用数据和减少内存访问次数,总是采用循环平铺技术,将卷积循环R、C、M、N平铺到Tr、Tc、Tm、Tn[8] . : 概述 加速器有2个AXI4主接口和1个AXI4-Lite从接口。AXI-Lite 从接口负责读写控制、数据和状态寄存器组。输入特征图和权重由两个主接口同时读取,输出特征图通过写入通道同时写回。 Data Scatter模块用于生成相应的写入地址,并将从DRAM读取的数据分配到片上缓冲区。Data Gather 模块用于生成 DRAM 回写地址并将输出缓冲区中的数据写回 DRAM。其他红色模块负责卷积层(Conv和Leaky ReLU)、最大池化层(Pool)和重组层(Reorg)的处理。
资源推荐
资源详情
资源评论
收起资源包目录
基于FPGA的YOLOv2加速器设计与优化(FPGA的源码) (8093个子文件)
yolov2_acc_gen_template.h.b0 38KB
yolov2_acc_test_template.h.b0 28KB
yolov2_acc_test_template.h.b1 26KB
yolov2_acc_test_template.h.b2 33KB
yolov2_acc_test_template.h.b3 33KB
yolov2_acc_test_template.h.b4 38KB
yolov2_acc_test_template.h.b5 29KB
yolov2_acc_test_template.h.b6 29KB
yolov2_acc_test_template.h.b7 29KB
yolov2_acc_test_template.h.b8 29KB
yolov2_acc_test_template.h.b9 31KB
yolov2.bit 3.86MB
data.c 47KB
parser.c 45KB
lsd.c 44KB
go.c 43KB
image.c 38KB
classifier.c 35KB
network.c 30KB
detector.c 28KB
lstm_layer.c 24KB
region_layer.c 19KB
convolutional_layer.c 19KB
darknet.c 18KB
attention.c 15KB
rnn.c 15KB
utils.c 14KB
gru_layer.c 13KB
nightmare.c 13KB
coco.c 13KB
yolo_layer.c 12KB
connected_layer.c 11KB
yolo.c 11KB
captcha.c 11KB
compare.c 11KB
batchnorm_layer.c 10KB
detection_layer.c 10KB
rnn_layer.c 10KB
demo.c 10KB
deconvolutional_layer.c 10KB
blas.c 9KB
crnn_layer.c 9KB
local_layer.c 9KB
box.c 8KB
gemm.c 8KB
cifar.c 8KB
instance-segmenter.c 8KB
segmenter.c 8KB
regressor.c 7KB
iseg_layer.c 7KB
rnn_vid.c 7KB
normalization_layer.c 5KB
cost_layer.c 5KB
reorg_layer.c 5KB
voxel.c 5KB
layer.c 4KB
writing.c 4KB
tag.c 4KB
matrix.c 4KB
cuda.c 4KB
maxpool_layer.c 4KB
route_layer.c 4KB
activations.c 4KB
tree.c 4KB
super.c 4KB
dice.c 4KB
softmax_layer.c 3KB
upsample_layer.c 3KB
option_list.c 3KB
shortcut_layer.c 3KB
AddThisCodeSegmentToParse.c 3KB
crop_layer.c 3KB
swag.c 2KB
logistic_layer.c 2KB
avgpool_layer.c 2KB
l2norm_layer.c 2KB
activation_layer.c 2KB
dropout_layer.c 2KB
art.c 1KB
list.c 1KB
col2im.c 1KB
im2col.c 1KB
softmax.c 943B
densenet201.cfg 19KB
resnext152-32x4d.cfg 16KB
resnet152.cfg 15KB
resnext101-32x4d.cfg 11KB
resnet101.cfg 10KB
yolov3-spp.cfg 8KB
yolov3-openimages.cfg 8KB
yolov3.cfg 8KB
yolov3-voc.cfg 8KB
darknet53.cfg 6KB
darknet53_448.cfg 6KB
resnext50.cfg 5KB
resnet50.cfg 5KB
resnet34.cfg 4KB
yolov1.cfg 3KB
yolov2.cfg 3KB
yolov2.cfg 3KB
共 8093 条
- 1
- 2
- 3
- 4
- 5
- 6
- 81
资源评论
TD程序员
- 粉丝: 2459
- 资源: 437
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
- python-leetcode面试题解之第168题Excel表列名称-题解.zip
- python-leetcode面试题解之第167题两数之和II输入有序数组-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功