『 RJIBI 』-基于FPGA的YOLO-V3物体识别计算套件

今日头条

1097人已加入

描述

1.   引言

基于RJIBI公司硬件开发套件的YOLO-V3物体识别检测算法的相应软、硬件实现。

本文主要阐述和规定了两大部分内容:(1)机器学习推理框架针对在MPSOC FPGA平台上的ARM核心的软件部署方法(2)针对MPSOC FPGA平台的YOLOV-V3算法和相关接口的硬件实现和部署流程。

主要指标

(1)FPGA硬件计算平台为 RJIBI FACE系列板卡套件

(2)深度学习训练框架:采用YOLO 原作者使用的 Darknet 训练框架

(3)深度学习推理框架:TensorFlow Lite、Caffe2

(4)支持目标检测网络模型:YOLO-V3,YOLO-V3-Tiny

(5)目标检测网络模型推理精度(mAP)在COCO数据集上:

YOLO-V3 ≥ 55%

YOLO-V3-Tiny ≥ 30%

(6)目标检测网络参数存储位宽要求:

YOLO-V3 采用IEEE 754 标准的32-bit浮点数

YOLO-V3-Tiny 采用16-bit定点数

(7)关键性能指标在416X416图片上的参数:

目标检测速率:

YOLO-V3 ≥ 10帧/秒

YOLO-V3-Tiny ≥ 60 帧/秒

系统设计功耗:

FPGA + ARM 异构处理器 ≤ 20W

系统峰值32-bit浮点计算能力:

FPGA + ARM 异构处理器 ≥ 100GFlops

(8)模块化、可重用、可配置的深度学习FPGA加速IP核:

卷积层、Batch Normalization 层、池化层

硬件资源评估:

(1)    ARM CPU:MPSOC异构芯片整合了ARM比较先进的64位双核Cortex-A53核心,其运行频率最高可达1.3GHz。这款CPU内核对于边缘计算的嵌入式设备来说已经是非常强大的通用计算核心,所以在这款CPU上搭载常用的64位Linux 操作系统(Ubuntu 16.04/18.04 LTS)。

(2)    ARM CPU 对应内存:板卡中为 ARM核配备的内存只有512MB,这个内存容量对于动辄内存占用GB级别的大型深度学习推理框架(TensorFlow、Pytorch)来说是明显不够的。因此拟采用针对嵌入式平台的深度学习推理框架(TensorFlow Lite、Caffe2)对YOLO-V3物体识别网络进行支持。

(3)    FPGA 硬件资源:MPSOC异构芯片的FPGA核心部分拥有600K以上系统逻辑单元(System Logic Cell)、32.1Mb片上存储资源、2520个数字信号处理单元(DSP Slice)和328个IO接口。其FPGA逻辑部分最高频率可到500MHz。

(4)    FPGA 核心对应内存:FACE板卡为FPGA核心配备了可以独立于CPU核心进行DMA操作的 4GB DDR4 64-bit SODIMM 内存,经过乙方的深度、详尽的测试,其峰值读写性能可达4GB/s。经过乙方的详细估算,其DMA访存的读写性能是可以满足甲方所提的YOLO-V3目标检测网络的关键性能指标。因此,乙方拟将参数模型和推理所用的数据集预先存储在FPGA核心对应的DDR4内存上,随后再进行推理操作,并测量YOLO-V3网络的具体性能指标。

软件概述

(1)       YOLO-V3 和 YOLO-V3-Tiny 网络的深度学习训练框架,采用YOLO原作者使用的Darknet框架,因为这个框架是开源框架中唯一能完美复现YOLO-V3和YOLO-V3-Tiny网络训练结果的框架。                                                                
   针对FPGA的深度学习网络加速器性能设计的关键是在具体的计算并行度和访存并行度之间进行一个最有的折中,因为任何计算平台都有其理论的计算和访存性能峰值。为此,针对计算平台的Roofline 性能寻优的具体算法和程序。该算法或程序的输入参数为:(1)需要加速的YOLO网络具体参数(格式可以常用的.cfg深度神经网络配置文件格式)(2)FPGA平台的FPGA核心硬件资源和对应片外访存的峰值性能指标。该算法对应的输出为,在不同访存/计算并行度条件下,位于最优的帕累托曲线上的硬件设计。其输入结果如下图所示。

硬件方案概述

硬件平台的具体形况分析,本软件方案简要概述如下:

(1)    ARM-FPGA片上AMBA总线接口如下图红色方框所示。在可编程逻辑(Programmable Logic)也就是FPGA和ARM核心之间是通过片上的AMBA高速总线进行信息交互的。因此为了使用CPU+FPGA的异构架构对YOLO目标检测网络进行硬件加速,乙方需要为ARM核心上的软件程序提供调用FPGA硬件深度学习IP硬件核心的软件调用方法和相应的硬件支持接口和协议。为此开发针对卷积、Batch Normalization和池化层的硬件调用接口。

(2)    FPGA核心DMA访存硬件接口。根据硬件开发平台和相应YOLO-V3网络算法的分析,将YOLO网络参数和推理所需的图片存储在FPGA核心对用的DDR4内存中。根据Roofline 模型,DMA访存带宽的大小直接决定了相应加速器的最终系统性能指标。因此针对YOLO-V3模型参数的读取、不同网络层中间结果缓存和识别结果的写入提供了灵活、模块化、和高度优化的DMA访存硬件模块设计。

(3)    FPGA硬件算子设计。YOLO目标检测网络主要由卷积层、Batch Normalization层和池化层这三种算子组成。接口均采用AXI总线的标准格式进行封装,并且采用模块化、可复用、易懂的代码风格进行编写。

(4)   YOLO 硬件加速器算子间流水线、缓存优化设计。在将YOLO网络的某一层映射到FPGA硬件的过程中,有非常多的优化参数需要确定,如每一个数据点的处理顺序、存储位置和并行处理单元的数量和实现算法,这些参数并不会改变神经网络原有的结构和运算的结果,但却是决定流水线性能、能耗和资源消耗的关键指标。为解决这个问题,需基于线性缓冲区的单层网络调度方案,降低流水线延迟和提高数据在FPGA片上的重用率。从性能和能效性考虑,将YOLO神经网络的不同层连接起来并实现层与层之间的流水线是最好的选择,但是在具体实现过程中有很多困难。首先,在神经网络的实际运行过程中,上一层的输出数据和下一层的输入数据的格式、速率和排布方式等并不相同,因此如何合理的实现不同层之间的数据互联是是一个亟待解决的问题。其次,FPGA的片上资源是有限的,如何将尽可能多的甚至整个神经网络层都映射到FPGA上并实现高效的流水线非常困难的,这
就需要一个跨层的流水线整体调度方案。

lw

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分