64

西安交大获得DAC19系统设计竞赛FPGA赛道亚军,这里是他们的设计方案

 4 years ago
source link: https://www.tuicool.com/articles/7FvU7rM
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

近日,第二届「低功耗目标检测系统设计挑战赛」落下帷幕。来自西安交通大学人工智能与机器人研究所的队伍 XJTU-Tripler 获得本次比赛的亚军。本文将介绍这支队伍的设计解决方案。

2019 年 6 月 5 日,由自动化设计顶级会议 Design Automation Conference(DAC'2019, CCF A 类会议)主办的第二届「低功耗 目标检测 系统设计挑战赛」于美国拉斯维加斯落下帷幕。该比赛由 Xilinx、大疆和英伟达赞助,针对比赛方给定的无人机视角的 12 类训练数据集(93.52K 张分辨率为360x640 的图片,单目标标注)进行训练,在比赛方自有的 52.75K 张测试数据集上进行测试。最终检测精度 IoU (Intersection over Union) 高且能量消耗低者胜出。全球共有 58 支队伍注册了 FPGA 比赛任务,最终只有 11 支队伍提交了设计(完赛率 19%)。冠军是由 UIUC、IBM、Inspirit IoT 公司联合组队的 iSmart3(该队伍同时也是 GPU 赛道的冠军);亚军 XJTU-Tripler 来自西安交通大学人工智能与机器人研究所;季军来自 ETH Zurich 的 SystemsETHZ。

ayINJvN.jpg!web

图 1:58 家注册队伍的全球分布情况

2018 和 2019 年赛事对比

2019 年为该系列赛事的第二届比赛。与上一届相比,Xilinx 提供了 Ultra96 代替了去年的 PYNQ Z-1 FPGA 开发板,FPGA 芯片由 Zynq 7020 升级为 ZU3。Ultra96 是一款优秀的 Xilinx ZYNQ 开发板,针对低功耗 IoT 环境而设计。其 PS 侧搭载四核 ARM Cortex-A53 CPU,主频为 1.3GHz,搭载 2GB LPDDR4;PYNQ Z-1 是上一代 7 系列 FPGA,PS 侧搭载双核 ARM A9 CPU,主频为 866Mhz,搭载 512MB 的 DDR3。

EnmmQzq.jpg!web

图 2:2018 和 2019 年比赛使用的不同 FPGA 开发板及核心芯片资源对比。 Ultra96(左)PYNQ Z-1(右)

2019 年和 2018 年的前三设计对比如下表所示:

FzEvuyn.jpg!web

由此可见,2019 年的作品比 2018 年有了大幅提升,除了得益于 FPGA 平台本身的性能外,在设计层面也有比较明显的变化。

亚军 XJTU-Tripler 设计方案简介

HiPU 整体介绍

HiPU 是一款面向 深度神经网络 的通用加速器,完成了类似于英伟达的 NVDLA 与外部控制器的整合功能,并且在 FPGA 上的资源消耗与工作频率指标都有显著提升。由于西安交通大学人工智能与机器人研究所团队 (http://iair.xjtu.edu.cn) 主要面向专用集成电路 (AISC) 进行设计,其 FPGA 设计主要是进行功能的验证,因此,针对赛方提供的计算平台,我们需要对 HiPU 进行适当的裁剪,以适应 ZU3 的资源。图 3 所示为裁剪后的 HiPU 设计框图及其特性。在 Ultra96 板卡上,HiPU 可以在 233MHz 上运行,其峰值算力为 268Gops;采用 C/RISC-V 汇编作为编程接口,卷积效率平均在 80% 以上。

U7fiiau.jpg!web

图 3:HiPU 的结构框图与特性

  • HiPU 支持各种常见的 NN 运算,包括:CONV,FC、Dep-wise CONV、Pooling、Ele-wise Add/Mul 等运算。其中 FC 也可以做到接近 100% 的计算效率。

  • HiPU 支持 channel 方向的 shuffle、divide、concat 操作。当这些操作紧接在卷积运算之后时,它们可以在硬件上进行合并,不消耗额外的时间。

  • HiPU 可以在任何种类的 Xilinx FPGA 上运行,不受 Zynq 架构的限制。

HiPU 底层实现矩阵运算、向量运算,以及标量运算。在做好调度的情况下,它可以支持任意类型的并行计算。未来将实现稀疏矩阵运算的优化,从而支持高效率的 DeCONV 运算,feature map 稀疏优化。

下图为以 DAC19 系统设计竞赛为素材,采用 HiPU 的实时双路检测 Demo:

F3Evmqe.jpg!web

视频链接如下:https://www.bilibili.com/video/av55982436/

面向 DAC 比赛的优化

为了达到检测精度与能耗的平衡,XJTU-Triper 团队选择并优化了面向端侧的轻量级神经网络框架。并针对 ZU3 的资源限制,精简了团队正在设计的一个可以支持通用网络的 DNN 加速器 (HiPU),并将其部署在 ZU3 的 PL 侧。主要工作分为针对硬件平台的算法优化和架构设计优化两部分:

算法优化主要有:

  1. 选择 ShuffleNet V2 作为特征提取的主框架;

  2. 选择YOLO作为单目标位置的回归框架;

  3. 对神经网络进行 8bit 量化。

硬件优化主要有:

  1. 支持 CONV、FC、Dep-wise CONV、Pooling、Ele-wise Add/Mul 等操作;

  2. 支持 Channel shuffle、divide、concat 操作,且不消耗额外时间;

  3. 提供 C、RISC-V 汇编接口的 API,调度灵活;

  4. HiPU 完全由 PL 侧实现,不依赖 PS 侧。PS 主要工作负载为图片预处理和结果输出。

  • 单目标检测网络选择

为满足移动端的检测实时性,该团队最终选定了YOLO作为基础检测框架,并自行定制网络 ShuffleDet。将其中的特征提取网络替换为轻量级的 ShuffleNet V2,其参数规模略大于 1X。

如图 4 所示为定制的单目标检测网络。

qUN3Izz.jpg!web

图 4:ShuffleDet 的网络结构示意图

  • 神经网络的训练与量化

首先在 ImageNet 数据集上预训练一个标准的 ShuffleNet V2 分类网络。待模型收敛后,将其中的特征提取部分的参数迁移到 ShuffleDet 网络中。使用比赛方的训练集进行其他层的参数训练。为了适应 FPGA 的定点运算,待所有参数训练完成后,对所有参数进行量化操作。该团队将网络参数和 feature map 均量化为 8bit 定点。

量化过程主要分为以下几步:

1) 将 BN 层合并到参数中;

2) 将合并后的参数进行对称量化;

3) 量化后的参数如果直接使用,精度损失过于严重,因此量化后还需要对参数进行 fine tune。经过量化后,最终的 ShuffleDet 网络的卷积层数约为 74 层,权重约为 1.94MB,Bias 约为 78KB。

如图 5 所示为量化操作的示意图。

v2UJRvA.jpg!web

图 5:网络参数的量化流程

  • HiPU 优化分析通过层间级联减少所需的 DDR 带宽

HiPU 设计性能有两个重要的方面:一个方面是 MAC 运算单元的利用率;一个是数据传输网络是否可以匹配 MAC 所需的数据。其中数据传输网络的限制大多数来自 DDR 接口。本设计针对 DDR 接口进行专门的优化。

由于 HiPU 中 SRAM 的大小限制,无法将一层 feature map 的数据完全放在 HiPU 的 SRAM 中。采用平常的计算次序则需要将每一层的 feature map 计算结果返回到 DDR 中存储。这样一来每一层的 feature map 数据都需要一次 DDR 的访问,对 DDR 的带宽需求非常大,也会消耗额外的功耗。

团队通过层间级联的方式降低 DDR 的带宽需求。以 ShuffleNet 的 bottleneck 为分界,从每个 bottleneck 的输入处从 DDR 读取一行 feature map,依次计算完所有的层后,输出的一行 feature map 才写回到 DDR。依次计算完所有行。如图 6 所示为 Module C 的层间级联计算次序。

2U3Yf2Q.jpg!web

图 6:Module-C 采用层间级联计算方式

  • DSP 双倍频和单倍频的设计方案

在设计 HiPU 时,分别针对 Xilinx 中 DSP 模块工作在单倍频与双倍频进行设计。双倍频模式可以显著提升 Xilinx 中 DSP 的利用率,且基础工作频率与单倍频设计相当 (233MHz),是未来产品中以 FPGA 为交付版本的更好选择。

双倍频 DSP 方案的主要设计难点为:1)DSP 累加链在同相位不同时钟频率下的设计;2)双倍频时钟域下单倍频数据的选择信号生成;3)双倍频时钟域中的 LUT 需要进行物理约束以确保工作频率不受影响。仔细处理好上述 3 个难点,就可以得到更加高效的设计。

由于双倍频 DSP 方案消耗的 DSP 数目仅为单倍频方案的一半,当使用相同数目的 DSP 时,双倍频方案的峰值算力为单倍频的一倍,即可以达到 476Gops。然而本次竞赛由于时间关系,没有将双倍频 DSP 的规模做到极致,仅做到与单倍频峰值算力一致的程度。在这种情况下,双倍频方案由于工作频率较高,能耗比单倍频方案较高。最终团队提交了单倍频方案。

  • 系统优化设计

1) 图像解码与卷积神经网络计算并行化

由于 HiPU 仅仅依赖 Zynq 的 PL 侧资源进行设计,PS 侧的资源可以空出来做系统 IO 相关的工作。我们团队在处理当前图片的检测运算时,在 PS 侧预读并解码下一幅图片,提高处理的并行度,从而使整体检测帧率从 30.3Hz 提高到 50.9Hz。

如图 7 所示为图像解码与卷积神经网络并行化的示意图。

UBfIVzF.jpg!web

图 7:图像解码与卷积神经网络并行化的示意图

2)    使用门控时钟降低 PL 侧的能耗

为了降低系统的能量消耗,该团队设计了门控时钟策略。当 HiPU 计算完一张图片的时候自动关闭时钟,下一张图片开始计算的时候再激活时钟。设置这个策略主要基于以下两个原因:

首先,系统对 jpg 格式图片解算的时间不固定,当 SD 卡型号不固定的时候,其均值在 7ms-12ms 之间,部分图片解算时间最大值可以到达 100ms;

其次,系统的功耗测量进程和其他额外开销会占用一部分的 cpu 时间,并且 PS 和 PL 共享 DDR 带宽,这导致了 HiPU 在 166Mhz 的时帧率到达约 50hz,但是升高 HiPU 到 200Mhz 时,系统处理帧率仍然保持在 50hz 左右。

上述两个原因会导致 HiPU 处理时间和图片 jpeg 解算时间匹配变得不固定;当 HiPU 处理图像时间比图像解算时间短时,HiPU 会「空跑」浪费能量。另外,针对抢占 DDR 带宽的情况,还需继续优化。

3)输入图像格式转换以提升处理效率

HiPU 一次并行计算 8 个输入 channel。然而网络第一层输入图像仅有 RGB 这 3 个通道,导致 HiPU 计算效率仅为 3/8。因此,我们团队针对输入图像设计了一个转换模块。如果 Conv1 的 kernel 的 width 为 3,则将输入图像的通道从 3 扩展到 9。最终使得第一层的处理效率从 0.38 提升到了 0.56,其转换示意图如图 8 所示。

myaAziv.jpg!web

图 8:输入图像在行方向上的转换

4) 使用 C 代码加速 PS 侧原来的 Python 代码

使用 C 代码重构PS 侧比较耗时的操作,并在 Pynq 框架中采用 ctypes 接口调用重构的 C 代码: 1) 预先计算 PL 侧数据中置信度和 bbox 坐标的地址指针;2) 找到最大的置信度和对应的 BBox 的坐标,然后根据相对坐标计算出绝对坐标。

  • 小结

1)与 Nvidia TX2 实现的性能对比

团队将同样的 ShuffleDet 算法在 TX2 平台上也进行了部署,下表是两者的性能分析对比。可以看出 8bits 量化后造成了 0.056 的 IoU 损失(-8.3%),但 FPGA 上的设计实现带来了 28.87 的帧率提升(+131%)和 8309J 的能量减少(-46.56%)。

rmyiUrN.png!web

ShuffleDet 在 TX2 和 Ultra96 FPGA 平台上的性能比较

2)面向自主智能体的机载计算方案

团队围绕面向自主智能体的机载计算开展研究工作,目前已完成了基于无人机的目标捕获和定位,以及无人机/无人车空地协同等原型系统设计 (前期的研究主要采用 TX2 用于算法的快速迭代),之后将使用 FPGA 平台代替 TX2。

  • 无人机最终演示视频链接:https://www.bilibili.com/video/av55971956/

  • 空地协同快速通过迷宫视频链接:https://www.bilibili.com/video/av55966162/

  • 空地协同实景导航视频链接:https://www.bilibili.com/video/av55972226/

3)未来的工作

未来该团队的设计需要在以下几个方面继续加强:首先,轻量级算法设计与训练。团队将投入更多的精力去分析各个网络结构在量化后的优劣;其次,硬件设计需要继续迭代,下一版设计会提高灵活性以支持更多模型,同时精简运算逻辑以在 ZU3 上实现更高的峰值算力。除了继续提升和优化 FPGA 的设计外,我们还会进行原型芯片设计和流片。

本项目由西安交通大学人工智能与机器人研究所 任鹏举副教授所在的认知计算架构小组完成的设计,团队成员:赵博然、赵文哲、夏天、陈飞、樊珑、宗鹏陈负责硬件开发;魏亚东、涂志俊、赵之旭、董志伟负责算法优化 。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK