一种双线性插值的硬件实现方法与流程

文档序号:33407817发布日期:2023-03-10 21:12阅读:30来源:国知局
一种双线性插值的硬件实现方法与流程

1.本发明涉及集成电路硬件设计技术领域,特别涉及一种双线性插值的硬件实现方法。


背景技术:

2.现有技术中,经常会听到的人脸识别、车牌识别、口罩识别等都是图像识别的范畴。图像识别是人工智能技术使用最为成熟的方向之一。图像在进入神经网络进行识别之前,需要对图像进行处理,以降低识别的代价、提高识别的精度。仿射变换、透视变换、图像缩放是常用的前处理算法,而插值是图像算法中必不可少的步骤,如图1所示。
3.其中,双线性插值是一种常用的、硬件实现代价较小的图像插值方法。在集成电路硬件实现双线性插值时,需要计算公式中的乘积以及计算和,在硬件频率较高时,容易导致时序较差和资源较多等不好的结果。并且,对于多分量图像的插值实现方式,硬件资源相对较多,性能相对较低。
4.此外,现有技术中的常用术语如下:
5.1)仿射变换(affine transformation):又称仿射映射,是在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间;
6.2)透视变换(perspective transformation):是利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换;
7.3)图像缩放(image scale):在计算机图像处理和计算机图形学中,图像缩放(image scaling)是指对数字图像的大小进行调整的过程;
8.4)缩放(scale):对图像按任意比例放大或缩小;
9.5)图像识别前处理:在神经网络中,再进入其中一层网络前对图像做一些预处理操作,例如将识别出来的人脸全部缩放到同一个尺寸,或者将歪的人脸旋转正。经过预处理后,再将图像送入到后级网络中,以此来实现硬件加速。
10.6)双线性插值(bilinear interpolation):又称为双线性内插,在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值,双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。
11.7)华莱士树(wallace tree):用多个保留进位加法器组成树形结构以实现快速乘法的一种结构;华莱士树加法器(wallace tree compressor,wta),该模块是synopsys公司实现的一个华莱士树加法器模块。
12.8)集成电路硬件设计(ic硬件设计,integrated circuit design):也称之为超大规模集成电路设计(vlsi design),是指以集成电路、超大规模集成电路为目标的设计流程。集成电路设计涉及对电子器件(例如晶体管、电阻器、电容器等)、器件间互连线模型的建立。所有的器件和互连线都需安置在一块半导体衬底材料之上,这些组件通过半导体器
件制造工艺(例如光刻等)安置在单一的硅衬底上,从而形成电路。


技术实现要素:

13.为了解决上述问题,本方法的目的在于:实现一种面积小、资源少,时序好,频率很高的硬件实现方式。
14.具体地,本发明提供一种双线性插值的硬件实现方法,现有双线性插值的图像插值算法的计算公式表示如下:
15.da=(d0*wx0+d1*wx1)*wy0+(d2*wx0+d3*wx1)*wy1
ꢀꢀꢀꢀ
公式1
16.其中,
17.wx0=1

wx1;
18.wy0=1

wy1;
19.da为d0,d1,d2,d3计算得到的点,wx1,wy1为权重信息;
20.d0,d1,d2,d3为整像素点,要利用该四个整数点插值计算出da像素值;
21.所述方法包括以下步骤:
22.s1,首先将公式1进行变形得到:
23.da=d0*w0+d1*w1+d2*w2+d3*w3
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
公式2
24.其中,
25.w0=wx0*wy0,
26.w1=wx1*wy0,
27.w2=wx0*wy1,
28.w3=wx1*wy1;
29.s2,对硬件资源占用情况进行优化:针对多分量图像即图像的每一个像素值是由多个分量构成的,每个分量的对应点的权重是一致的,则提前计算好w0,w1,w2,w3给每个分量复用;
30.s3,根据步骤s2每一个分量都共用相同的权重信息,在使用公式2计算每一个分量的插值结果时,由于一个像素的分量越多,引入的乘法器就会越多,为了节省面积且能让硬件逻辑跑在高频率下,做乘法运算时,不是直接采用d0*w0的方式,而是使用部分积与全加器来计算最终结果da。
31.所述步骤s2进一步包括:
32.s2.1,所述多分量图像,一帧图像在内存中存储,是以像素pixel为单位进行存储,每一个pixel,针对不同的数据格式又会被划分为不同的数据形态;在神经网络中,图像经过其中一级网络之后,其输出的数据格式,往往不只四个分量,经过不同网络后,一个pixel会有多个分量,但是所述分量有一个共同点就是每个分量对应的权重是一致的;
33.s2.2,由于权重一致,提前设计好对应的计算公式,通过计算能够获得源图像的位置信息以及权重信息;
34.s2.3,至此,每一个分量都能够共用上述对应的计算公式获得的位置及权重信息即计算好w0,w1,w2,w3给每个分量复用,而不用给每一个分量分别计算权重。
35.所述步骤s2.1中,所述被划分为不同的数据形态:包括bgra格式的图像,每一个像素有四个分量,每一个分量有8bits。
36.所述步骤s2.2中,如果是图像缩放,所述对应的计算公式即计算权重信息的过程如下:
37.sx=scale_x*dx+trans_x;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
公式3
38.sy=scale_y*dy+trans_y;
39.其中,(dx,dy)表示目标图像x,y方向的位置,(sx,sy)表示源图像x,y方向的位置;scale_x为x方向上的缩放比例,scale_y为y方向上的缩放比例,trans_x为x方向上平移量,trans_y为y方向上平移量;利用所述公式3能够获得源图像的位置信息即整数部分,以及权重信息即为小数部分。
40.所述步骤s3进一步包括:
41.s3.1,获得部分积:
42.其中,d0*w0的部分积:设d0有效位宽为8bits,w0有效位宽为4bits,则d0*w0的部分积是
43.{{12{d0[0]}&{8’d0,w0}},12{d0[1]}&{7’d0,w0,1’d0},12{d0[2]}&{6’d0,w0,2’d0},12{d0[3]}&{5’d0,w0,3’d0},12{d0[4]}&{4’d0,w0,3’d0},12{d0[5]}&{3’d0,w0,4’d0},12{d0[6]}&{2’d0,w0,5’d0},12{d0[7]}&{1’d0,w0,6’d0}};
[0044]
将该部分积的结果输入到对应的华莱士树加法器模块记为tree_x,
[0045]
从华莱士树加法器模块输出得到两个部分和p0,p1;
[0046]
同理,计算出d1*w1,d2*w2,d3*w3的部分积,将各自部分积结果输入到各自的tree_x中,输出得到各自两个部分和p2、p3,p4、p5,p6、p7;再将(p0,p1,p2,p3)与(p4,p5,p6,p7)输入到各自对应的华莱士树加法器模块记为tree_y中,其中,tree_y的输入就是部分和,没有部分积运算;s3.2,最终使用一个全加器,基于华莱士树的乘法结果,获得最终的插值结果da。
[0047]
由此,本技术的优势在于:利用了不同分量共享权重的方式,避免了在运算过程权重的重复计算。利用了部分积的方式,避免了在运算过程中过多且位宽较大的加法运算。使用本技术的插值过程,大大复用了硬件的资源,减少硬件的开销,减少了硬件实现面积,且可在较高的频率下实现。
附图说明
[0048]
此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。
[0049]
图1是现有技术的流程示意图。
[0050]
图2是现有技术中实现双线性插值da的示意图。
[0051]
图3是本发明方法实现双线性插值的示意图。
具体实施方式
[0052]
为了能够更清楚地理解本发明的技术内容及优点,现结合附图对本发明进行进一步的详细说明。
[0053]
具体地,本发明的实施例如下描述:
[0054]
如图2所示,d0,d1,d2,d3为整像素点,要利用该四个整数点插值计算出da像素值。
现有双线性插值的图像插值算法的计算公式表示如下:
[0055]
da=(d0*wx0+d1*wx1)*wy0+(d2*wx0+d3*wx1)*wy1
ꢀꢀꢀꢀ
公式1
[0056]
其中,
[0057]
wx0=1

wx1;
[0058]
wy0=1

wy1;
[0059]
da为d0,d1,d2,d3计算得到的点,wx1,wy1为权重信息;
[0060]
d0,d1,d2,d3为整像素点,要利用该四个整数点插值计算出da像素值;所述方法包括以下步骤:
[0061]
s1,首先将公式1进行变形得到:
[0062]
da=d0*w0+d1*w1+d2*w2+d3*w3
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
公式2
[0063]
其中,
[0064]
w0=wx0*wy0,
[0065]
w1=wx1*wy0,
[0066]
w2=wx0*wy1,
[0067]
w3=wx1*wy1;
[0068]
s2,对硬件资源占用情况进行优化:针对多分量图像即图像的每一个像素值是由多个分量构成的,每个分量的对应点的权重是一致的,则提前计算好w0,w1,w2,w3给每个分量复用;
[0069]
s3,根据步骤s2每一个分量都共用相同的权重信息,在使用公式2计算每一个分量的插值结果时,由于一个像素的分量越多,引入的乘法器就会越多,为了节省面积且能让硬件逻辑跑在高频率下,做乘法运算时,不是直接采用d0*w0的方式,而是使用部分积与全加器来计算最终结果da。
[0070]
所述步骤s2进一步包括:
[0071]
s2.1,所述多分量图像,一帧图像在内存中存储,是以像素pixel为单位进行存储,每一个pixel,针对不同的数据格式又会被划分为不同的数据形态,例如bgra格式的图像,每一个像素有四个分量,每一个分量有8bits;在神经网络中,图像经过其中一级网络之后,其输出的数据格式,往往不只四个分量,经过不同网络后,一个pixel会有多个分量,但是所述分量有一个共同点就是每个分量对应的权重是一致的;
[0072]
s2.2,由于权重一致,提前设计好对应的计算公式,通过计算能够获得源图像的位置信息以及权重信息;
[0073]
以图像缩放为例,所述对应的计算公式即计算权重信息的过程如下:
[0074]
sx=scale_x*dx+trans_x;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
公式3
[0075]
sy=scale_y*dy+trans_y;
[0076]
其中,(dx,dy)表示目标图像x,y方向的位置,(sx,sy)表示源图像x,y方向的位置;scale_x为x方向上的缩放比例,scale_y为y方向上的缩放比例,trans_x为x方向上平移量,trans_y为y方向上平移量;利用所述公式3能够获得源图像的位置信息即整数部分,以及权重信息即为小数部分。
[0077]
s2.3,至此,每一个分量都能够共用上述对应的计算公式获得的位置及权重信息即计算好w0,w1,w2,w3给每个分量复用,而不用给每一个分量分别计算权重。
[0078]
所述步骤s3进一步包括:
[0079]
s3.1,获得部分积:
[0080]
其中,d0*w0的部分积:设d0有效位宽为8bits,w0有效位宽为4bits,则d0*w0的部分积是
[0081]
{{12{d0[0]}&{8’d0,w0}},12{d0[1]}&{7’d0,w0,1’d0},12{d0[2]}&{6’d0,w0,2’d0},12{d0[3]}&{5’d0,w0,3’d0},12{d0[4]}&{4’d0,w0,3’d0},12{d0[5]}&{3’d0,w0,4’d0},12{d0[6]}&{2’d0,w0,5’d0},12{d0[7]}&{1’d0,w0,6’d0}};
[0082]
将该部分积的结果输入到对应的华莱士树加法器模块记为tree_x,
[0083]
从华莱士树加法器模块输出得到两个部分和p0,p1;
[0084]
同理,计算出d1*w1,d2*w2,d3*w3的部分积,将各自部分积结果输入到各自的tree_x中,输出得到各自两个部分和p2、p3,p4、p5,p6、p7;再将(p0,p1,p2,p3)与(p4,p5,p6,p7)输入到各自对应的华莱士树加法器模块记为tree_y中,其中,tree_y的输入就是部分和,没有部分积运算;s3.2,最终使用一个全加器,基于华莱士树的乘法结果,获得最终的插值结果da。
[0085]
使用如图3所示的插值过程,本技术侧重点是针对于多分量图像,在神经网络中有某些层的数据格式,其像素分量非常多,以pixel为单位来表示,其下可能包括512个通道,每一个通道是2bit,4bit或者8bit。而这些分量有一个共同点,其权重信息是共用的,这样就可以实现权重信息的资源复用。如上所述,每一个通道都会参与插值运算,这样就会引入大量的乘法器和加法器,会增加大量的资源面积,采用本技术描述的部分积、部分和的方式,利用synopsys公司的华莱士加法器,构建树形结构,可以大大减少资源面积。经过综合结果比对分析,大概会使面积降低30%。大大复用了硬件的资源,减少硬件的开销,减少了硬件实现面积,且可在较高的频率下实现。
[0086]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1