APP下载

基于软硬件协同加速框架的遥感图像目标检测

2022-06-23谭金林范文童刘亚虎梁志锋

计算机与现代化 2022年6期
关键词:部署图像算法

谭金林,范文童,刘亚虎,梁志锋,王 梁,刘 斌,黄 斌

(1.西安电子科技大学,陕西 西安 710071; 2.陕西航天技术应用研究院有限公司,陕西 西安 710100)

0 引 言

遥感技术作为衡量国家技术水平和军事能力的重要指标之一,广泛应用于土地覆盖统计[1-2]、水质监测[3-4]、城市气象研究[5-6]以及军事运输[7-8]等领域。随着遥感技术的发展,遥感数据的空间、时间、光谱、辐射分辨率越来越高,数据量越来越大,遥感进入了大数据时代[9-11]。同时,对遥感图像实时传输的要求日益提高。传统方法是将遥感图像传回地面站服务器,受卫星与地面站之间通信带宽的限制,容易造成星地通信阻塞,其实时传输性能不佳。

为了解决上述问题,Yang[12]引入边缘计算方法,通过将遥感图像的处理过程从地面站转移到卫星上,可以有效解决星地通信阻塞问题。遥感图像在轨目标检测作为遥感图像处理任务之一,对部署到边缘设备上的目标检测算法提出了2个要求,即高精度和实时性[13]。传统的目标检测通过滑动窗口扫描整个图像,提取候选区域的特征进行识别和分类。2010年,Proia等人[14]将贝叶斯决策理论应用于光学遥感图像,并根据经验设计了滑窗尺寸和判别阈值,实现了海上船只的准确检测。然而,传统目标检测算法需要手工设计特征,效率低、通用性差。

近年来,随着深度学习技术的发展[15-17],尤其是以深度卷积神经网络(Deep Convolutional Neural Networks, DCNNs)为代表的一阶段、两阶段目标检测算法的涌现,基于DCNNs的遥感图像目标检测算法逐步成为主流。2016年,Ren等人[18]提出了Faster R-CNN网络,通过共享卷积层实现了17 fps的检测速度。2018年,Redmon等人[19]提出了YOLOv3网络,借鉴ResNet[20]的跨层连接机制和SPP-Net[21]的特征融合思想,结合多尺度特征图进行目标检测,其mAP达到了74.3%,检测速度高达35 fps。DCNNs算法以其良好的特征提取能力和泛化能力,开始在目标检测领域得到广泛应用。

然而,DCNNs的大尺度模型带来了严重的计算负担和高功耗,难以部署到卫星的边缘环境。鉴于FPGA具有逻辑资源丰富、并行度高、功耗低、开发周期短、可重构等优点,可将其作为图形处理单元(Graphics Processing Unit, GPU)的一种替代方案来加速边缘DCNNs的推理。例如,在2019年,丁立德等人[22]应用定点和矩阵压缩方法来优化CNN模型,并将其部署在FT-1500和FPGA协同加速平台上,结果显示其检测速度是FT-1500的40倍,而功耗仅为同等性能GPU的1/5。

本文提出一种基于FPGA实现深度神经网络推理加速的软硬件协同加速架构。以典型的深度神经网络YOLOv3为例,将YOLOv3网络部署在ARM+FPGA的平台上,其中FPGA用于构建并行硬件逻辑的深度神经网络加速器,ARM用于加速任务的调度和网络的预处理和后处理,在检测精度损失微小的前提下实现深度神经网络的边缘端部署,对卫星实现实时的高精度、低功耗的目标检测算法具有重要的研究意义。

1 基于FPGA的软硬件协同加速平台

本章介绍采用Vitis AI加速方案进行CNN模型的FPGA部署与加速的流程。首先介绍软硬件协同加速平台,其次详细阐述深度学习加速单元DPU的原理,最后说明如何在Vitis AI加速流程下联合网络模型和DPU在FPGA上部署网络模型。

1.1 软硬件开发平台

1.1.1 硬件开发平台

为了解决遥感图像目标检测领域复杂算法的边缘部署问题,本文采用ARM和FPGA相结合的软硬件协同加速平台Zynq SoC,实现YOLOv3的边缘部署。Zynq SoC由处理系统(Processing System, PS)与可编程逻辑(Programmable Logic, PL)这2个核心器件组成。

以ZCU104评估板上的Zynq MPSoC系列芯片为例,其内部模块结构如图1所示[23]。在进行复杂算法的开发时,将难以用RTL级语言实现的算法通过C/C++语言部署在Zynq的PS端,PS端根据需求将大吞吐量的计算任务通过AXI4协议高速总线分配给PL端的FPGA,利用FPGA的高速并行计算能力完成计算任务并回传结果。整个硬件系统以PS端的ARM处理器运行主进程和任务调度,以PL端FPGA为核心硬件加速器件,既弥补了ARM处理器实时运算能力的不足,又提升了FPGA有限的算法实现能力。

图1 Zynq MPSoC内部模块结构

此外,在Zynq MPSoC系列芯片上还集成了与多种外设互联的接口协议,如USB 3.0、SATA 3.1、串口(UART)、SPI、千兆以太网(GigE)等,大大增加了Zynq在不同嵌入式环境的泛用性。

1.1.2 软件开发平台

本文采用的软件开发平台是Xilinx公司推出的Vitis开发平台,支持云端和边缘端2类场景的应用开发。Vitis开发平台包含用于FPGA模块化开发的Vivado开发工具、用于Zynq片上系统开发的Petalinux工具、专用于AI加速应用的Vitis AI开发套件、提供多种语言函数的开源Vitis加速库和辅助主机与FPGA间数据通信的XRT库等。在Vitis开发平台上进行边缘设备应用开发的流程如图2所示。

图2 Vitis平台边缘应用开发流程图

1)在Vivado工具上进行PL端FPGA硬件开发,通过时序逻辑编程和模块化设计搭建包含深度学习处理器单元(Deep-Learning Processing Unit, DPU)的底层硬件工程,对整个硬件工程进行综合和布局布线得到比特流文件,之后导出包含比特流的XSA文件用于Zynq SoC的嵌入式开发。

2)在Vitis平台中读入XSA文件并转换为Platform工程。PS端应用程序的构建和调试都基于Platform工程进行,Platform工程中除了包含比特流文件,还包含相应Xilinx评估板的主芯片资源量、外设种类和管脚连接等信息。利用Platform配合Petalinux开发工具构建片上系统的内核镜像,可以在PS端搭建一个或多个片上操作系统,如Android、Linux、VxWorks系统等,这些操作系统称为域。用Vitis平台在Domain中进行PS端应用程序的编写和调试。在进行AI模型的部署和加速开发时,通过在Vitis平台导入编译后的网络模型参数,在应用程序中调度FPGA加速任务的执行。

3)对整个嵌入式工程进行系统级调试,将整个工程包装成Zynq SoC的启动镜像Image文件,在芯片上电时引导域的启动,在域中运行相应的应用程序可执行文件。

1.2 DPU IP核

Zynq SoC对于FPGA实现算法能力的提升让深度学习网络的边缘环境部署成为可能。然而深度学习网络的规模之大,如多达252层的YOLOv3网络,如何高效地给FPGA分配计算任务是个难点,在ARM上编写程序实施任务调度也是一项极为繁杂的工作。

为了快速实现深度学习网络的硬件部署,Xilinx公司整合了北京深鉴科技公司研发的深度学习工具包DNNDK,并将DPU结构转化为FPGA上的IP核供用户进行自定义开发。网络模型经过DNNDK工具的量化、剪枝、混合编译等处理得到二进制指令流文件,然后部署至DPU芯片进行硬件加速。

DPU IP核内部可以根据Zynq SoC的逻辑资源量设置1~4个并行的DPU内核。以设置单个DPU内核为例,DPU IP核的实例化模块如图3所示[24]。

图3 DPUIP核实例化模块

IP核的S_AXI接口用于接收PS端发送的AXI4协议数据,向IP核寄存器地址内写入配置数据以实现不同工作模式和功能,如复位控制、中断控制、指令地址等。M_AXI接口用于以直接存储器访问(Direct Memory Access, DMA)方式从PS端的DDR(Double Data Rate SDRAM, 双倍速率SDRAM)内存中读写数据,为了读写操作的高效执行,其中M_AXI_DATA0和M_AXI_DATA1分别用于网络参数的读取和写入,M_AXI_INSTR用于读取指令信息。S_AXI与M_AXI端口的参考时钟与复位输入分别为s_axi_、m_axi_前缀输入接口,由dpu_interrupt接口向主机设备提供中断信号。此外,DPU中的数字信号处理器(Digital Signal Processor, DSP)模块还采用了DDR技术来提升运算性能,即采用参考时钟的双边沿作为时钟基准使运算速度提升为2倍,IP核的dpu_2x_clk输入时钟即是DSP模块的参考时钟,需保持为m_axi_dpu_aclk时钟的同相二倍频。

基于Zynq SoC平台进行DPU内核的开发,采用亚里士多德架构进行CNN模型的部署。亚里士多德架构是深鉴科技公司提出的用于连接DPU内核与其它外设的底层架构,主要应用于目标检测、人脸识别等图像处理任务,如图4所示。

图4 亚里士多德架构

亚里士多德架构为Zynq SoC的PS端提供了一套用于映射深度学习网络的可编程指令集,其中包含网络模型的运行控制、中断控制、可用内存地址等信息,该指令集在网络的编译过程中产生,由ARM中的应用处理单元进行指令集的管理。PL端的DPU获得指令后进行解码和任务调度,分配FPGA中的计算资源组成大规模数据运算的混合计算阵列,其中包含多个用于卷积运算的处理引擎(Processing Engine,PE)模块,由FPGA中的乘法器、累加器等细粒度计算模块构建而成。DPU通过AXI4高速数据总线访问板上的DDR内存,与ARM共用同一块内存空间进行数据存取,有益于诸如深度学习网络这样大吞吐量的算法的参数存取。

1.3 Vitis AI加速方案

本文采用Xilinx公司提供的Vitis AI加速方案,实现硬件平台上遥感图像目标检测模型的部署工作。在Vitis AI加速方案的基础上,自定义网络模型(即YOLOv3)开发,待YOLOv3在服务器上训练完成后,经Vitis AI开发工具部署至FPGA上,与DPU联合运行实现网络推理的硬件加速。

网络模型的部署可分为以下3个主要步骤:网络压缩、网络编译和网络部署。

1.3.1 网络压缩

深度学习网络可以拟合复杂抽象的算法,同时也带来了庞大的计算负担,消耗了更长的计算时间。尤其对于实时性高的应用环境,参数量过大、检测时间过长的网络模型难以实施部署。另一方面,为了提高算法的拟合程度,神经网络的参数普遍存储为32位浮点型数据,而FPGA只适合定点型数据的运算,难以提供浮点数据计算时需要的大量存储空间。

应对上述2个问题,需要对训练后网络模型进行参数压缩,主要分为参数剪枝和参数量化2步。使用Vitis AI工具进行参数压缩的流程如图5所示。

图5 网络压缩流程图

通常未经过压缩的CNN模型各神经元之间采用紧密型连接,其中包含大量权重值非常小的连接,它们占有大量的存储空间和运算资源,但是对于网络的性能影响微乎其微。采用参数剪枝的方法可以删去其中权重很小的连接,减少网络参数量,在每2轮剪枝之间进行一次微调,即进行几轮重训练以防止精度损失过大,如此反复,直到在精度损失可接受的范围内将网络参数量压缩到最小,获得最佳的运行速度。在Vitis AI套件中,AI优化器提供了先进的网络剪枝方案,最佳效果可以实现5倍以上的压缩率,不过其剪枝性能与网络模型相关,不同的网络剪枝效果不一。

对于剪枝后的网络模型,其参数类型仍然是FP32浮点数据,需要转换为INT8定点数据后送入FPGA进行运算,这个转换过程称为参数量化。例如8位定点量化是对32位浮点数取最接近的8位整数进行替代,则参数信息被压缩至1/4,该过程必定会造成精度损失。在Vitis AI套件中,AI量化器提供了一套用于CNN模型的量化方法:对原始网络进行冻结(freeze)得到序列图GraphDef,选取一小组无标记的数据集图像对GraphDef进行量化校准(quantize calibration),然后对网络中的卷积层、池化层等FP32浮点型参数进行量化得到INT8定点型参数。此外,在量化步骤的最后加入量化微调(quantize finetuning)步骤,通过小批次的重训练让定点参数进一步收敛,从而避免过大的精度损失。网络剪枝和量化过程用到的微调方法涉及网络训练的操作,采用GPU加速可以有效缩短网络压缩的时间。

1.3.2 网络编译

经过压缩处理输出的网络模型是稀疏的定点模型,然后需要经过编译映射为高度优化的DPU指令流,在FPGA上调度DPU内核实现硬件加速。Vitis AI套件中的AI编译器可以执行量化后网络的编译操作,其中包含3个组件:解析器(Parser)、优化器(Optimizer)和代码生成器(Code-generator)。网络编译的流程如图6所示。

图6 网络编译流程图

首先定点网络模型经过解析器得到其拓扑结构(topology),结合模型所用框架创建一个内部计算图(computational graph)作为中间表示(Intermediate Representation, IR)。然后优化器基于计算图IR进行编译与优化过程,包括融合计算图中各节点之间的运算、高效调度控制指令、充分复用DPU内核的计算数据等。最后代码生成器将优化后的计算图IR映射为DPU指令流。

1.3.3 网络部署

网络模型经过剪枝、量化和编译处理映射成DPU可用的指令流文件,同时在FPGA上搭建基于DPU内核的模块化硬件工程,最后一步就是调度DPU指令流,驱动DPU内核分担网络推理过程的参数计算,实现网络模型的推理加速。

Zynq SoC的PS端主机通常使用C或C++语言进行应用程序(application, APP)的编程,新一代Vitis AI 1.2版本也支持Python语言的APP。网络模型的部署流程如图7所示。

图7 网络部署流程图

XRT库提供了多个C++语言和Python语言的DPU专用调度函数,使用便捷的应用程序接口(Application Programming Interface, API)实现DPU计算任务的执行或DPU节点和张量信息的获取。每一个DPU任务对应一项具体的计算工作,且各任务分配的内存空间相互独立,支持多线程运行程序来提高主机端和DPU之间的数据吞吐量。应用程序在GCC编译工具编译下输出ARM端可用的指令集,再经过汇编器编译得到标准elf二进制文件;而DPU指令流文件在DNNAS集成编译工具的编译下得到硬件的elf文件。对DPU和ARM的elf文件在Vitis开发平台执行交叉编译(cross compile),最后得到可以在PS端的片上系统内运行的可执行文件,实现深度学习网络在FPGA上的快捷部署。

1.4 边缘部署总体方案

本文采用FPGA上的DPU内核作为加速AI网络推理的目标部署硬件,在主机上编写应用程序调度DPU内核执行加速任务。

边缘部署总体方案流程如图8所示。首先,基于TensorFlow框架搭建YOLOv3网络模型,并利用DIOR数据集对YOLOv3网络进行训练。其次,对YOLOv3训练后的网络参数进行处理,包括网络参数冻结、网络参数量化以及网络参数编译,从而得到二进制格式(即elf)的DPU指令流文件。同时,采用Vivado工具进行PL端设计,搭建以DPU单元为核心的FPGA模块化工程,并将整个硬件设计导出为XSA文件,在Vitis统一开发平台中转化为Platform工程。然后,基于Platform工程和DPU指令流中的网络结构信息,采用C++语言编写PS端应用程序,经过GCC/G++等编译器输出应用程序的elf二进制文件。最后,在Vitis平台进行包装和混合编译,分别导出包含Linux域的启动镜像和DPU可执行文件,在Zynq SoC上使用DIOR测试集图像执行网络推理的测试,调度DPU加速推理过程。

图8 模型边缘部署流程图

2 实验结果与讨论

2.1 实验准备

1)部署模型。鉴于YOLOv3模型具备较好的检测精度和实时性,并且其规模适中,因此本文采用YOLOv3进行实验。本文基于TensorFlow框架搭建YOLOv3模型,并且在光学遥感图像目标检测数据集DIOR[25]进行模型训练。

2)图像预处理。首先,将图像从800×800转换为YOLOv3所需的416×416分辨率,采用双线性插值法对图像进行尺度变换,尽可能准确地保留原图像信息。然后,采用去均值方法对所有图像减去数据集的像素均值RGB_mean=(100.28,102.83,93.05),滤除遥感图像中比例过高的绿光,突显目标特征。最后,采用归一化对所有像素除以全部像素的标准差,将像素值映射到更小的范围内,减小奇异样本的干扰。

3)模型训练。本文在Ubuntu 18.04系统下基于Python 3.6和TensorFlow r1.15开发库进行YOLOv3的搭建和训练,训练过程采用NVIDIA公司的GeForce RTX 2080 GPU进行硬件加速。设计了尺度变换、去均值和归一化等算法对数据集图像进行预处理,采用K-means算法对训练集边框坐标进行聚类,得到9组先验锚框:(10,5)、(6,11)、(20,9)、(10,21)、(35,17)、(21,40)、(51,70)、(103,101)、(215,240),采用GIoU函数作为损失函数来衡量网络的检测性能。训练后YOLOv3的最佳检测精度如图9所示。

图9 YOLOv3在DIOR数据集上的最佳检测精度

由图9可以看出,与Li等人[25]获得的57.1%的mAP相比,本文获得的检测精度略有提高。

4)网络参数处理。训练完成的网络参数先进行冻结处理,再送入AI量化器和AI编译器,量化结果和编译结果分别如图10和图11所示。

图10 网络参数量化结果

图11 网络参数编译结果

网络的输入张量为H×W×C格式(高×宽×深度),3个输出节点分别为第59、67、75层卷积层的输出。YOLOv3浮点型参数大小约248 MB,经过了量化、编译的网络参数为58.75 MB,量化过程实现了4倍的压缩率。

5)部署平台。本文在Xilinx Zynq MPSoC平台上进行部署实验,选择XCZU7EV芯片作为ARM和FPGA的协同加速平台,上面集成了4核Arm CortexTM-A53处理器和Ultrascale系列FPGA,再连接片外的4 GB DDR4 SDRAM作为系统内存,用于存储编译后的网络模型和测试数据集。

6)FPGA工程。本文构建FPGA的Vivado工程,并采用Vitis Analyzer工具分析布局布线后的Zynq芯片的运行功耗,如图12所示。

图12 Zynq运行功耗

2.2 性能分析

在ARM的Linux系统中执行应用程序,将DIOR测试集图像送入YOLOv3网络进行推理测试,设置程序线程数为最高值16,调度FPGA中的深度神经网络加速器加速网络推理过程,其检测速率如图13所示。

图13 Zynq MPSoC上的YOLOv3检测速率

本文的软硬件协同加速架构获得了26.8 fps的检测速率,高于人眼视觉暂留的24 fps,达到了实时检测的标准。对检测结果进行评估,其检测精度如图14所示。

图14 YOLOv3在DIOR测试集上的推理精度

本文的软硬件协同加速架构上运行的YOLOv3推理结果比部署前的推理结果略有下降,由于量化、编译过程造成了2.06%的精度损失,而部署后的YOLOv3对DIOR数据集中不同类别的实例检测效果基本一致,检测准确率越高的类别,部署后的检测准确率越稳定。

YOLOv3部署前与部署后的图像对比如图15所示,可见二者的检测效果大致相同,部署后网络对少部分目标实例存在漏检或误检现象。

(a) 部署前检测效果

(b) 部署后检测效果

2.3 与CPU和GPU的对比

为了进一步说明软硬件协同加速框架的性能,分别在CPU和GPU上进行了推理实验。通过对三者在检测精度、检测速度和功耗方面的比较,说明了本框架的优缺点。

本文在Ubuntu18.04系统上进行实验,CPU选择Intel®CoreTMi7-870@3.2 GHz,并配置32 GB的DDR4内存,GPU选择GeForce RTX 2080和GeForce GTX 1060。采用同一YOLOv3网络训练后的网络参数和DIOR测试集进行推理实验,并采用htop和nvidia-smi工具监测CPU和GPU的运行功耗,计算推理时间。各平台的加速性能对比如表1所示,其中fpW表示每瓦特帧数。

表1 CPU与GPU的推理性能比较

由表1可见,本文加速架构运行功耗仅为Intel i7-8700的1/4,检测速率则达到了其5倍,能效比约为其20倍。与GPU相比,本文加速架构的检测速率达到了GeForce RTX 2080的2/3左右,稍高于GeForce GTX 1060,而运行功耗则远低于2个GPU,能效比为GeForce RTX 2080的4.7倍和GeForce GTX 1060的6.2倍。此外,本文加速架构基于ZYNQ MPSoC构建,其体积小重量轻,比GPU更适合装配到尺寸有限、供能有限的卫星边缘设备中。

3 结束语

本文提出了一种协同软硬件加速框架来加速DCNNs的推理。首先,采用TensorFlow框架搭建YOLOv3模型,并在DIOR数据集上进行训练。训练后的权值用Vitis-AI加速方案进行量化和编译,将网络规模压缩了4倍。其次,在FPGA上构建了一个以DPU为核心的DCNN加速器,并根据FPGA逻辑资源合理配置DPU参数。同时,以FPGA加速任务的调度为核心构建ARM应用程序,通过Vitis工具交叉编译为可执行文件。最后,采用Xilinx ZynqMPSoC作为软硬件协同加速平台部署YOLOv3网络。实验结果表明,该框架的平均吞吐率为1.75 TOPs(26.8 fps),在DIOR上的mAP为56.72%,满足实时检测系统的要求。通过在CPU和GPU上的性能比较,该框架的效率是Intel i7-8700的20倍,是GeForce RTX 2080的4.7倍,适合在卫星边缘设备上部署。

猜你喜欢

部署图像算法
哪种算法简便
一种基于Kubernetes的Web应用部署与配置系统
晋城:安排部署 统防统治
浅析p-V图像中的两个疑难问题
巧用图像中的点、线、面解题
有趣的图像诗
部署
Travellng thg World Full—time for Rree
进位加法的两种算法
部署“萨德”意欲何为?