智慧图书馆用户画像图像处理算法模型设计与实现

2024-02-27 12:17杜文龙朱博文柴源
电子设计工程 2024年3期
关键词:浮点图像处理乘法

杜文龙,朱博文,柴源

(1.西安航空学院 图书馆,陕西 西安 710077;2.西安遇贤微电子有限公司,陕西 西安 710000)

随着大数据、人工智能、云计算和物联网等数字技术在图书馆智慧化转型过程中的应用,图像数据的价值逐渐凸显[1]。智慧图书馆运用物联网技术可以感知、识别传感网络中的空间、环境、物品和人物的画像或图像[2]。但如何对获取的图像数据进行计算和处理成为智慧图书馆实践者面临的困难,虽已出现图像变换、图像分割和边缘处理等图像预处理算法和检测算法,但是缺乏对图像内容特征的增强识别处理算法。该文设计出用以图书馆用户画像图像处理的算法模型,为深度揭示分析用户图像的表情特征、情绪变化和兴趣爱好规律提供算法基础。

1 画像图像处理算法模型设计

该文设计的算法模型采用点操作类型,点操作算法指的是对图像的每个像素都进行相同的点操作。点操作算法模型的计算需求为图像像素数据流的输入,点操作图像处理的运算内容为关系判断、算术操作、逻辑操作等[3]。适用于点操作类型算法模型的底层算法为灰度变换算法,可以实现图像在空间域中的增强处理效果。

点运算为点操作型算法模型图像处理的关键处理技术,其核心操作算子是灰度变换函数[4]。点运算是输出像元由对应输入像元的灰度值决定的运算方法,算法是灰度变换。灰度变换函数包含线性变换、分段线性变换、反比运算、幂次变换、对数变换等。灰度变换函数均需满足图像像素流水输入的格式要求,灰度变换系列函数的区别之处在于每个函数可能采用不同的计算单元,如乘法、加法、反比和对数,采用算法转换、近似计算等计算技术进行映射。

点操作型图像处理的核心算子为四则运算、正余弦函数、灰度变换函数等数学关系公式[5]。因此,可以通过使用等效转换、近似计算、增量更新、查找表、浮点计算等硬件技术转换算法来映射实现,从而完成点操作型算法模型核心算子IP 的设计与实现。

该文设计的图像处理点操作型算法模型如图1所示,图像数据从输入通道流水输入,经过所需求的计算单元后流水输出,算法模型架构简洁。算法模型中仅计算单元需要占用较多的内存资源、硬件资源和缓存空间,模型中其他组成部分所占的计算资源、硬件资源和缓存空间资源极少。模型中图像处理的流程为:将用户画像图像的每个像素值加上一个固定值后得到一幅新图像,设计的计算单元本身就是一个加法器,加法器的一个加数是流水输入的像素值,另一个加数是设定的固定值,加法的和就是流水的输出值。

图1 画像图像处理算法模型

2 图像算法模型IP设计与技术实现

该文设计的画像图像处理算法模型为点操作类型的处理逻辑。在智慧图书馆的物联网空间中,传感可视系统采集到的用户画像、用户图像数据具有实时化、多变化和动态化特征,因此对图像处理算法模型的计算效率和增强加速具有较高的技术要求。在图1 中,核心算子的实现主要依赖于算法转换、近似计算、增量更新、查找表和浮点计算等计算单元的加速设计处理,完成计算单元的加速设计处理之后,点操作模型核心算子的简单图像像素流水数据就能实时得到图像流水像素结果输出,通过以上设计和加速处理可以实现点操作类核心算子的IP 过程。

2.1 算法转换

2.1.1 定常数转换

在乘除法运算中,如遇到乘数、被乘数或分子与分母是常数的情况,可以直接调用乘法器或除法器解决这个问题[6],但是会消耗一定的DSP运算单元,而DSP 单元往往是FPGA 里面比较少的资源。对于定常数,可以通过一定的转换方法将其转换为移位和加法运算,从而减少乘法器和除法器的使用。对于乘法dout=din×255 转换为dout=din×(256-1)=(din≪8)-din,对于乘法例子dout=din×123 转换为dout=din×(64+32+16+8+2+1)=din×(26+25+24+23+22+21+20),对于除法例子dout=din/25 转换为=din×40.96×2-10≅din×(25+23+2-1+2-2+2-3+2-4+2-6+2-7)×2-10;对于小数的处理则需要先将其转换为整形进行处理。扩展的位宽也决定了最终计算的精度,这个位宽越大,精度越高,但是也会消耗相对多一点的资源,实际应用中根据精度需求进行选择[2]。

2.1.2 不等式等效转换

不等式等效转换是利用不等式,将复杂的算法转换为较为简单的等效不等式[7]。这对去除根号和除法等FPGA 难以处理的算法十分有用。对于开根号不等式例子转换为a2≥b,转换后,将开根号转换成乘法运算,直接调用FPGA 内部的乘法器即可实现;对于除法不等式例子(b>0,d>0) 转换为a×d>b×c。触发器是FPGA 里面比较昂贵的资源,上述转换将其化为乘法运算,减少了不等式计算对于触发器的消耗[8]。

2.2 近似计算

直接计算函数的一种替代方法是在感兴趣的作用域内,用另外一个较为简单的能得到相似结果的函数进行近似[9]。与算法转换不同的是,算法转换不会带来任何原理的误差,而近似则会带来一定的计算误差。通常情况下,在误差允许的范围内,采用近似计算带来的明显优势是计算复杂度的降低及资源消耗的降低[10]。

2.2.1 截断

用位数较少的近似值来代替位数较多或无限位数时,要有一定的取舍法则。在数值计算中,为了适应各种不同的情况,须采用不同的截取方法。经常使用的截断方法就是四舍五入。四舍五入通常应用在需要对中间输出结果进行截断时,一般情况下,会在前面的计算步骤中预留一定的计算精度。四舍五入的基本原则:若舍去部分小于保留部分最后一位的一个单位的二分之一时,则采用去尾法处理,使所保留的数不变。实际上FPGA 主要处理二进制数据。因此,在小数位的第一位的值是0还是1 决定了是否对结果进行进位。四舍五入的简单例子如:

式中,?泛指小数位,DW的1~4 为整数位,3~0 为小数位。

2.2.2 泰勒近似

如果函数曲线足够平滑,在已知函数在某一点的各阶导数值的情况下,那么泰勒公式可以用这些导数值作为系数构建一个多项式来近似函数在这一点的邻域中的值[11],泰勒公式也给出了这个多项式和实际的函数值之间的偏差。泰勒公式定义如下:对于正整数n,若函数f(x)在闭区间[a,b]上n阶连续可导,且在(a,b)上n+1 阶可导。任取x∈[a,b],它是一定点,则对任意x∈[a,b]成立下式:

式中,f n(a)表示f(a)的n阶导数;Rn(x)表示泰勒公式的余项。

当高阶项的数量级相对于低阶较小时,可以把高阶项去掉作为函数的近似。泰勒近似也称为多项式逼近。使用泰勒公式展开的一个要点是如何选取截断阶数。这往往是由事先规定的计算误差决定的。以下用一个泰勒展开进行近似计算实例:对除以3 的运算用泰勒近似进行计算,即,若要求计算误差不大于10-4,则取前5 阶段即可达到要求,展开如下:,则其计算误差为

2.2.3 浮点转换

如果不采用拥有内部浮点硬核的FPGA,那么用FPGA 作为浮点运算的计算成本较高,因为这会消耗巨大的逻辑资源。在计算精度能满足一定要求的情况下,通常会选择将浮点运算转换成定点运算。

2.3 增量更新

增量更新是指在进行操作时,只更新需要改变的地方,已更新或者无需更新的增强则被忽略,增量更新与完全更新为处理逻辑不同的相对关系。增量更新在流水线处理中特别是二维卷积处理中作用明显。这是由于在两个连续的卷积窗口中存在大量的相同元素,如图2 所示,假定要计算连续5 个数据流的和值,在上一个时刻,5 个待计算的数值是a1′、a1、a2、a3、a4,在该时刻,这5 个待计算的数值是a1、a2、a3、a4、a5,中间4 个计算值均为恒定值,此时如调用4 个加法器进行5 个数的加法存在浪费内存资源的问题。正确的做法为取上一个时刻的计算和值加上首尾的差值。这种增量更新的方法对于较大尺寸的计算带来的优势更加明显。

图2 增量更新示意

2.4 查找表

2.4.1 查找表的定义

在计算机科学中,查找表为用简单的查询操作替换运行时计算的数组或者associate array 的数据结构。相较于复杂的计算过程,从内存中提取数值计算速度更快、速度提升效果更加显著。

2.4.2 查找表的构建

使用查找表的首要问题就是输入表的构建。输入表的构建需要首先得到输入函数的有效定义域,其次是将输入的定义域进行等分。这时需考虑等分步长,须在计算精度和表的大小之间做出最佳权衡。通常情况下,待求函数通常通过实数表示,首先将其转化为整形,这个过程也会带来一定的舍入误差。

虽然查找表在精度方面很有效,但随着输入宽度的增加,表的尺寸呈指数倍增长,实用的查找表尺寸需要减小输入的精度。一个简单的方法是通过删除最低位来实现,没有必要对输入进行舍入,因为表的内容可以根据作用域中函数的适当值设置来获得最好的结果。另一个减小输入尺寸的方式是考虑对称性,例如对于对称的正余弦函数,对于有效定义域0~2π,只要考虑第一象限范围[0~],在输入进行查找表之前首先进行象限判断,并保存其象限信息,同时将其转换到第一象限,查表后根据象限信息恢复实际计算值,这样就将查找表的输入范围减小到原来的四分之一[12]。

2.5 浮点计算

在映射为FPGA 逻辑时,如果把浮点运算转换为定点运算将提升计算工作量[13]。在某些应用中,定点算法是不可行的,要求使用浮点算法的一个常见的例子是矩阵求逆运算[14]。下面将阐述如何实现浮点运算以减少移植的工作量。

2.5.1 IEEE754标准

浮点数(float)是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体来说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,如图3 所示,这种表示方法类似于基数为10 的科学计数法。

图3 浮点数组织结构

IEEE754 规定了4 种表示浮点数值的方式:单精确度(32 位)、双精确度(64 位)、延伸单精确度(43 比特以上,很少使用)与延伸双精确度(79 比特以上,通常以80 位实现)。只有32 位模式有强制要求,其他都是选择性的。

2.5.2 用FPGA实现浮点运算

FPGA 实现图像处理计算时,可根据计算精度的需求调整尾数和指数的大小,减少对硬件的需求[15]。计算结果与基于IEEE 标准在软件中执行同样算法存在差异性。与定点数相同,这需要对近似误差进行仔细的分析,确保结果是有意义的。

对于浮点数来说,乘法和除法是相对比较简单的操作。对于乘法运算,位数相乘及指数相加,若位数结果大于2,则需要重新规范化,将其右移一位并且增加指数。由于乘积的位数可能会比表示位多,因此,需要进行舍位处理。两个指数的和包括两个偏移量,因此必须减掉一个。输出值的符号位是输入符号位的异或。需要附加的逻辑来检测下溢出、上移除及处理其他的错误情况,如处理无穷大和非数。除法与乘法类似,只是尾数相除,指数相减并且在重新规范化时可能包含左移。

加法和减法的实现更加复杂。与原码表示相同,实际操作的执行取决于输入的符号。指数须相同,数须对齐。根据指数位的差值,将较小的指数右移相应的位数。在FPGA 上实现时,一个这样的移位或者较慢(用一些较小的移位器实现)或者价格比较昂贵(用许多宽的多路复用器实现)。有必要为移位的数保留一个额外的位来减少操作引起的误差。然后根据操作对尾数进行加法或减法运算并对齐进行重新规范化。如两个非常相近的数相减,许多高有效位可能会消失,因此需要确定最左边的1 的位置,将其移动到最高位来重新规范化,并对指数进行相应的调整。

2.5.3 Altera的浮点IP核

Altera 增加的硬核浮点为DSP 模块提供了IEEE754 单精度浮点乘法器及加法器,可实现单精度的乘法、乘加、乘减、累加、支持浮点矢量运算、卷积、点乘和其他线性算术函数,以及使用快速傅里叶变换的复数乘法等。硬浮点模块的出现大幅降低浮点运算的资源消耗,可减轻设计人员对复杂耗时算法的转换工作量。浮点IP 内核包括加减乘除运算、倒数、指数、三角函数、平方根与逆平方根、矩阵乘法与求逆、快速傅里叶变换、定点与浮点转换等。可例化几个浮点IP 核sin、cos、sqrt、exp,调用的IP 核是 ALTFP_CONVERT、ALTFP_SINCOS、ALTFP_SQRT、ALTFP_EXP。

浮点运算需消耗过多的逻辑资源,可根据实际情况灵活选用浮点运算或定点计算[16]。余弦函数相较于正弦函数,消耗的计算资源较少,如使用浮点三角运算,可将正弦函数转换成余弦函数后执行计算过程,如此可以节约一定的硬件资源和计算资源。

3 结束语

语音智能识别、自然语言处理、面部情感识别和图像处理俨然已经成为智慧图书馆领域的研究前沿。感知、挖掘、计算和处理智慧图书馆物联网感知系统中的用户画像图像数据具有现实意义,如运用图像处理算法计算用户的动态性面部表情图像数据,得出用户身体心理状态和情感状态分析结论,为图书馆的安全应急管理和用户管理提供技术手段和决策数据支撑。该文设计的图像处理算法充分考虑映射加速和误差精度控制,以满足感知系统中对图像处理的灵活性、实时性的技术要求。提高图像处理算法精确度和运行速度的理想方案为设计与实现数据吞吐率高、计算并行的算法加速器体系架构,该文研究和设计的图像算法模型IP 设计与技术实现为图像处理算法加速器体系架构奠定了基础。

猜你喜欢
浮点图像处理乘法
算乘法
LEO星座增强GNSS PPP模糊度浮点解与固定解性能评估
我们一起来学习“乘法的初步认识”
《整式的乘法与因式分解》巩固练习
基于浮点DSP的铁路FSK信号检测
把加法变成乘法
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
基于图像处理的定位器坡度计算
基于FPGA的浮点FIR滤波器设计