图像处理硬件加速器的自动优化外文翻译资料

 2022-08-06 14:33:33

英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料


图像处理硬件加速器的自动优化

摘要:在图像处理领域,往往需要实时约束。特别是在安全关键应用中,如医学影像中的X射线计算机断层扫描或汽车领域的高级驾驶员辅助系统中,定时是最重要的。维护计算密集型应用程序实时性的一种常用方法是将这些计算分散到专用的加速器硬件上,例如现场可编程门阵列(FPGAs)。对于典型的特定于FPGA的设计标准:可实现的总体算法延迟和FPGA原语(BRAM、FF、LUT和DSP)的资源使用来说,编程这样的架构是一项具有挑战性的任务。高级综合(HLS)通过使用熟悉的高级语言(C/C )描述算法及其可由HLS工具实现的自动综合,极大地简化了此任务。然而,算法开发人员仍然需要有关目标体系结构的专家知识,以获得令人满意的结果。因此,在以前的工作中,我们已经证明,使用领域特定语言(DSL)将图像算法的描述提升到更高的抽象级别,可以显著降低为FPGAs设计此类算法的复杂性。为了让开发人员更好地控制常见的权衡、延迟和资源使用,我们将提供一个自动优化过程,分析这些标准并反馈给DSL编译器,以便生成更接近所需设计规范的代码。最后,我们生成立体块匹配算法的代码,并将其与手写实现进行比较,以量化结果的质量。

  1. 介绍和相关工作

实时图像处理是许多应用领域的一项重要任务。例如,自动驾驶或过程控制需要嵌入式设备,以满足计算设备的面积和能量限制。因此,传统的图像传感器只采集图像数据并将其传输到图像处理系统是不可行的。相反,数据必须在获取信息的地方进行处理,这意味着需要使用图像传感器。这就产生了一类新的设备,称为“艺术相机”。IEEE将这种智能传感器描述为“一种传感器,它提供的功能超出了产生一个被感测或控制量的正确表示所必需的功能。这一功能通常意味着将传感器集成到网络环境中的应用中。他们使用一个名叫“Trimedia”的CPU进行图像预处理。为了获得更高的帧速率,他们建议使用SIMD(单指令,多数据)指令。其他方法,如使用数字信号处理器(DSP)来实现非常高的计算能力。为了进一步提高性能,他们构建了一个可伸缩的系统,该系统由多达10个数字信号处理器用于并行处理的。

即使已经开发了更多定制的体系结构。例如:开发了一种专用的集成电路,以加快智能相机中的图像处理速度。随着FPGAs技术的不断发展,这些器件已迅速应用于智能相机系统的设计中。一个很大的优势是并行处理单元的数量,由于图像处理算法通常是可并行的,因此在过去几年中,在FPGAs的基础上创建了许多新的体系结构,这些并行处理单元可以在FPGAs中实例化为1D或2D阵列。虽然各个组件(如DSP、CPU、FPGA)是众所周知的,但是如何使用这种架构,特别是在图像处理领域,一个完整的设计流程仍然是一个悬而未决的问题。同样,利用体系结构特性的这些设备的组合称为异构系统,目前还没有完全解决。众所周知,特定于应用程序的硬件和软件将提供最高的性能和/或最低的资源利用率。另一方面,特定于应用程序的开发是一项耗时且容易出错的任务。因此,我们创建了其他方法来更抽象地描述图像处理算法并执行自动推导。Schmid等人提出了一种用于FPGAs靶场图像预处理的流水线设计。这里,使用HLS框架PARO设计了用于补偿传感器缺陷(例如噪声和像素缺陷)的多个滤波器,并在实验装置中进行了评价,由微软Kinect和XininxViReX-6 LX240T FPGA组成。鉴于我们考虑立体相机,作者主要集中在不同的传感器技术,如结构光和飞行时间。

HIPAcc框架采用了另一种方法来为FPGA HLS生成代码,HIPAcc是一个公开并且可获得的用于图像处理的自动代码生成图形处理单元(GPU)加速器算法的框架。HIPAcc从C 嵌入式DSL开始,为不同的目标体系结构提供尾码变体,显著提高了程序员的工作效率。最近,HIPAcc扩展到还能够为基于C的HLS工具Vivado HLS生成C 代码,甚至能够处理复杂的多分辨率应用程序。如图1所示方法的设计流程。

图1 Vivado HLS的HIPAcc设计流程

在本文中,我们考虑到给定的特定于FPGA的约束条件,对现有的图像处理框架提出了自动优化的新扩展。此外,还比较了一种手写应用程序专用体系结构的开发和一种图像处理框架在智能相机的FPGA目标中的应用。为了进行公平的比较,我们选择块匹配算法来计算立体相机系统中的三维图像。第二节讨论了所有的算法。在第三节中,我们提出了自动优化的框架和新的扩展,最后,我们评估了优化过程的结果,并将我们生成的HLS代码与第四节中高效的手写实现进行了比较。

II.立体摄像机的块匹配

立体视觉中最大的挑战之一是在一对立体图像中找到对应关系。通过这种方法,可以计算并保存在深度或视差图中捕获场景中对象的距离。在解决这一问题的众多技术中,立体块匹配由于其简单的过程而得到了广泛的应用。在立体块匹配中,一幅图像必须定义为参考图像,而另一幅图像必须确定为目标图像。假设参考图像局部区域内的每个对象都可以沿着目标中的公共极线找到,如图2所示。

图2. 块匹配原则。参考图像中的一个窗口(中心点为A参考(u,v))与目标图像中沿极线的几个子窗口进行比较。距离定义候选中心点(uminus;d,v)相对于极线上的ref(u,v)移动的距离。d与对象距离相关。

局部区域被定义为具有无定向像素范围(例如3times;3)的平方块或窗口。通过设置最大视差进一步限制了对对应关系的搜索,如图2的目标图像中的矩形块所示。评估参考块与目标图像的子窗口块的相似程度是通过代价函数完成的,该函数对每个比较的子窗口进行排序。常见的成本函数是绝对差异之和(SAD)和人口普查差异,如图3所示。

图3.成本函数的过程。左:SAD-计算遮罩像素位置值之间绝对差的和。在最后一步中,所有窗口值都被汇总。右:人口普查差异-每个像素设置为与参考和目标遮罩(红方块)的中间像素相关。可以从窗口形成一个二进制向量。应用异或运算后,可以确定汉明距离。

排名较低的子窗口块指示与参考块更接近的匹配。因此,在对目标窗口的每个子窗口进行比较之后,最低成本函数值必须被找到。对于最近的匹配,找到的距离与查看对象的距离相关。从图像视图到对象的指示距离的高值。需要对参考图像的每个像素重复此整个过程。

III.FPGAs的代码生成

  1. 异构图像处理加速框架

HIPAcc框架由嵌入C 的DLS图像处理和源到源编译器组成,利用该编译器,可以将用代码编写的图像滤波器描述翻译成多种目标语言,如计算机统一设备体系结构(CUDA),开放型计算语言(OpenCL)、Android上使用的渲染脚本和Vivado HLS可以进一步处理的代码。在下面,我们将以高斯模糊滤波器为例,简要地描述该磁盘的特性,并说明如何实现编码生成。

1)特定于域的语言:嵌入的DSL 代码是使用HipAcc框架提供的C 模板类编写的。用于编写二维图像处理DSL代码的最基本的模板类是:(a)一个图像,它表示像素值的数据存储;(b)一个迭代空间,它定义用于对输出进行操作的感兴趣区域(ROI)图像;(c)在输入和输出区域大小不匹配的情况下定义输入图像和启用滤波模式(如最近邻、双线性插值等)的处理器;(d)指定由多个线程执行的计算函数,每个线程生成一个迭代空间点;(e)一个域,它定义了每个窗口中滑动窗口的迭代空间;以及(f)一个掩模,它是域的一个更具体的版本,另外还为该窗口提供了滤波系数。内核描述中的图像访问是通过提供相对坐标来完成的。为了避免越界访问,可以进一步指示内核通过指定类边界条件的实例来实现特定的边界处理(例如,钳制、镜像、重复)。

为了描述高斯模糊滤波器的执行,我们需要定义屏蔽处理,并加载高斯系数,定义为常数,请参见清单1(第6-10行)。还需要创建输入和输出图像,用于存储像素数据并将初始图像数据加载到输入图像(第11-15行)。输入图像绑定到具有启用边界处理模式钳制(第18-19行)的处理器。定义迭代空间后,可以实例化内核(第25行)并执行(第28行)。

清单1.核大小为3times;3的高斯模糊滤波器的示例代码

清单2. 高斯模糊滤波器的核

实际的内核是通过从框架提供的Kernelbase类继承kernel的方法来实 现的。由于高斯模糊滤波器是执行标准卷积的运算符,因此可以使用卷积的方法描述内核。该方法有三个参数:(a)定义窗口大小和系数的掩码;(b)归约类型;(c)一个C lambda函数,描述每个操作中应用的计算步骤。除了卷积,HIPAcc为本地操作符提供了类似的语言构造,以处理一般的缩减和迭代。

2)为Vivado HLS生成代码:将Vivado HLS视为代码生成的目标需要克服许多挑战。对于FPGAs和硬件加速器,在 DSL代码提供的卷积掩模必须翻译成更合适的版本(整数运算)。这同样适用于需要包装成整数流缓冲区以用于流水线的DSL矢量类型。特别是,缓冲区执行模型(内核一个接一个地发出)必须转换为流缓冲区以进行流水线。因此,根据内核的线性执行顺序推断出流水线结构描述。这主要是通过实例化右边的构建块来完成的,这些构建块封装在一个库中,该库随生成的代码一起发布。

B、 优化反馈回路

在FPGA设计中,通常不止一个算法必须放在同一个FPGA上。例如,块匹配可以受益于高斯模糊预处理步骤以增加正匹配的可能性,以及用于后处理的媒体过滤以消除盐和胡椒噪声。因此,通常可以定义一些约束条件,比如资源限制,以确保所有算法都适合一个FPGA设备的可用资源。

为了保持在给定的资源预算内或确保一定的约束,在这项工作中,我们引入了一个优化反馈循环,它利用了HIPAcc编译程序和Vivado HLS。在此,对合成结果进行分析并反馈到HIPAcc编译程序中,以便生成更适合的版本。这个反馈循环主要考虑三个优化目标:II,时钟频率,这两个目标基本上都表示可实现的吞吐量和资源使用。对于两个目标,可以将上限定义为约束。第三个约束目标将作为变量参数,由优化循环迭代修改。早期的研究结果表明,探索不同的目标II并不是一个可行的方法。对于合成,总是尽可能低的II值。否则,时钟频率的可实现增益在大多数情况下无法跟上增加的II,这导致整体吞吐量降低。

优化反馈回路尝试分两个阶段搜索合适的版本,如算法1所示。最初,需要定义约束以及计算变量参数的目标类型。在第一阶段(第4-8行),该变量参数连续翻倍,直到满足所有约束。由此,确定第二阶段的搜索间隔的上界。在第二阶段(第9-18行),进行实际优化。应用对分法求出了搜索区间。也就是说,在每次迭代中,间隔中心被选为轴心元素,并表示下一次迭代的上下间隔边界,这取决于是否满足约束条件。

算法1

C.位计数问题

在人口普查差异块匹配的比较步骤中,需要评估汉明距离。使用清单3所示的Brian Kernighan算法,软件可以相当高效地完成各种数据类型中的计数位。循环迭代次数正好表示要计数的集合位数。HIPAcc支持使用标准的C 代码,软件开发人员可能倾向于使用该算法实现位计数。不幸的是,Vivado HLS不能处理可变循环边界,并且不能成功地分析最大迭代次数仅取决于给定数据类型的位宽度。因此,展开无法应用,管道连接失败,无法确定II。

清单3.Brian-Kernighan算法

每当回到标准代码时,若不强制使用DSL构造,高效的目标特定代码生成可能会受到极大的限制。这也适用于上面的例子,它将产生非流水线的合成结果,但是,使用DSL结构实现相同的算法,考虑到它们的局限性,迫使开发人员引入固定的迭代次数上限。清单4中显示了一个可能的实现。因此,早期跳转(第3行)是为非常幸运的情况而维护的,代码生成可以更适合于特定于Vivado HLS特征的目标。迭代被直接映射到具有静态边界的循环,并插入了额外的HLS编译指示。通过这种实现,可以实现流水线,因此可以获得有效的合成结果。

清单4.DSL码中的Brian-Kernighan算法

清单5.生成的Brian Kernighan算法

IV.评估与结果

我们的立体匹配算法的结果没有在Zynq平台上得到评估。这些算法已经在DSL代码中实现,也可以不费吹灰之力地针对完全不同的体系结构,比如GPU,Vivado HLS用于合成的代码是用HIPAcc生成的。为了评估结果的质量,我们将其和手写实现进行了比较。此外,我们将介绍通过应用优化反馈环所能获得的结果。

  1. 实验环境

Xilinx Zynq 7100是一个片上系统(SoC),它紧密集成了ARM Cortex-A9双核CPU和Kintex的FPGA,包括277400个查找表(LUTs)、554800个触发器、3020kb的片上存储器(BRAM)和2020片数字信号处理器。Xilinx Vivado HLS是一个专门针对Xilinx FPGAs的高级合成工具。它允许在C/C或System C中输入设计,并为可合成的IP核提供HDL代码(VHDL、Verilog和System C)。在我们的实验中,我们使用最新版本的Vivado

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[246730],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。