一种量化RoiAlign算子的方法与流程

文档序号:27832036发布日期:2021-12-07 22:32阅读:341来源:国知局
一种量化RoiAlign算子的方法与流程
一种量化roialign算子的方法
技术领域
1.本发明涉及神经网络加速技术领域,特别涉及一种量化roialign算子的方法。


背景技术:

2.近年来,随着科技的飞速发展,大数据时代已经到来。深度学习以深度神经网络(dnn)作为模型,在许多人工智能的关键领域取得了十分显著的成果,如图像识别、增强学习、语义分析等。卷积神经网络(cnn)作为一种典型的dnn结构,能有效提取出图像的隐层特征,并对图像进行准确分类,在近几年的图像识别和检测领域得到了广泛的应用。
3.特别地,目标检测网络roialign算子:roialign是在论文《mask-rcnn》(作者kaiming he,georgia gkioxari,piotr doll
á
r,ross girshick,可参见https://arxiv.org/abs/1703.06870)里提出的一种区域特征聚集方式,根据候选框region proposal映射产生固定大小的featuremap时提出。
4.然而,现有技术中对于这个算子采用的是浮点运算,对于量化后的模型,遇到roialign算子需要先将输入的量化后的数据转化为浮点数然后再进行运算,这样后降低整个量化模型的运行效率和对带宽的需求。
5.此外,现有技术中的常用术语如下:
6.卷积神经网络(convolutional neural networks,cnn):是一类包含卷积计算且具有深度结构的前馈神经网络。
7.量化:量化指将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。
8.低比特:将数据量化为位宽为8bit,4bit或者2bit的数据。


技术实现要素:

9.为了解决上述技术问题,本技术提出了一种量化roialign算子的方法,旨在克服上述现有技术中存在的缺陷,提出一种加速模型推理效率和减少带宽需求的方法,解决现有低比特模型在推理过程中需要将输入转化为浮点数的问题。
10.本发明方法会对roialign算子做量化处理,即对于输入为量化后的数据,直接进行运算而不需要转化为浮点数再进行相应的运算。本方法中roialign直接对低比特数据进行处理,而不需要转化成全精度在进行处理。
11.具体地,本发明提供一种量化roialign算子的方法,所述方法包括以下步骤:
12.s1,输入featuremap并量化数据,得到低比特的数据;
13.s2,根据输入的roi计算坐标和权重并量化权重,获取最终输出featuremap的位置索引和相应的权重值,在量化后的数据上进行roialign操作,其中,在计算权重时,由于roi的坐标是浮点的,相应的权重也为浮点数所以在计算权重时会对权重进行定点化;
14.s3,根据以上步骤获得索引和权重计算出最终的结果并对每个单元多avgpooling操作获得poolheight
×
poolwidth
×
channel的输出。
15.所述步骤s1,数据量化:对于待量化的数据按公式(1)所示的公式进行量化,得到低比特的数据,
16.公式(1)
17.变量说明:w
f
为全精度数据是一个数组,w
q
为量化后的数据,max
w
18.全精度数据w
f
中最大值,min
w
全精度数据w
f
中最小值,b为量化后的位宽。
19.所述的步骤s2中计算坐标和权重并量化权重进一步包括:
20.s2.1,设立结构体point,包含xmin,ymin,rwidth,rheight四个成员,其中xmin为参数x最小值,ymin为参数y最小值,rwidth为参数r宽度,rheight为参数r高度;此处的结构体point表示目标检测的目标框,xmin,ymin,rwidth,rheight分别表示目标框在特征图上的左上角坐标和长宽;
21.s2.2,对poolheight,poolwidth,binsize,downsample,fixedwidth,width,height取整;其中,
22.poolheight表示将roi固定后特征图的长度;
23.poolwidth表示将roi固定后特征图的宽度;
24.binsize表示每个区域的采样点数;
25.downsample表示该层feature是从原图中采样n倍得到的,n为正整数;
26.fixedwidth表示坐标小数部分量化的位宽;
27.s2.3,结构列表:roi
28.将getnum(roi)赋值给roinum;
29.将1左移fixedwidth再赋值给fixedscale;
30.s2.4,从0到roinum依次赋值给tag做以下操作:
31.将roi(tag)赋值给xmin,xmax,ymin,ymax;
32.将rheight/poolheight赋值给roibinh;
33.将rwidth/poolwidth赋值给roibinw;
34.其中,从0到poolheight依次赋值给ph做以下操作:
35.其中,用于从0到poolwidth依次赋值给pw做以下操作:
36.其中,用于从0到binsize依次赋值给bh做以下操作:
37.将ymin+ph*binsize+(bh+0.5)*binsize/roibinh赋值给y;
38.其中,用于从0到binsize依次赋值给bw做以下操作:
39.将xmin+pw*binsize+(bw+0.5)*binsize/roibinw赋值给x;
40.将int(x)赋值给xlow,将int(y)赋值给ylow;
41.将xlow+1赋值给xhigh,将ylow+1赋值给yhigh;
42.将(y-ylow)*fixedscale赋值给ly,将(x-xlow)*fixedscale赋值给lx;
43.将fixedscale-ly赋值给hy,将fixedscale-lx赋值给hx;
44.将hy*hx赋值给w1,将hy*lx赋值给w2,将ly*hx赋值给w3,将ly*lx赋值给w4;
45.将ylow*width+xlow赋值给pos1,将ylow*width+xhigh赋值给pos2;
46.将vhigh*width+xlow赋值给pos3,将yhigh*width+xhigh赋值给pos4;
47.将tag+(ph*poolheight+pw)*channel赋值给index;
48.计算calroialign(index,pos1,pos2,pos3,pos4,w1,w2,w3,w4)。
49.所述的步骤s3中根据位置索引和权重计算最终输出进一步包括:s3.1,featuremap:(featuremap是个多维数据,维度为{height,width,channel})
50.s3.2,outfeaturemap:(outfeaturemap,维度为{roinum,poolheight,poolwidth channel});
51.s3.3,fixedwidth取整;
52.s3.4,计算function calroialign(index,pos1,pos2,pos3,pos4,w1,w2,w3,w4),此函数实现为双线性插值的过程,pos1,pos2,pos3,pos4,为待求像素点的四周像素点的位置w1,w2,w3,w4为计算时四周像素点的权重;
53.s3.5,将featuremap[pos1*channel]赋值给datapos1;
[0054]
将featuremap[pos2*channel]赋值给datapos2;
[0055]
将featuremap[pos3*channel]赋值给datapos3;
[0056]
将featuremap[pos4*channel]赋值给datapos4;
[0057]
s3.6,从0到channel依次赋值给tag做以下操作:
[0058]
将赋值给tmpvalue;
[0059]
datapos1++,datapos2++,datapos3++,datapos4++
[0060]
rightshift

fixedwidth+fixedwidth+binsize*binsize/2
[0061]
将fixedwidth+fixedwidth+binsize*binsize/2赋值给rightshift;
[0062]
将tmpvalue右移rightshift再赋值给outfeaturemap[index+tag]。
[0063]
由此,本技术的优势在于:
[0064]
(1)对于roialign算子,输入为量化后的数据,不需要在转化为全精度后载进行运行,可以直接在量化后的数据上进行roialign操作;
[0065]
(2)优化了低比特模型的推理过程和速度,降低了对带宽和内存的要求。
附图说明
[0066]
此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。
[0067]
图1是现有技术中roialign算子流程的示意图。
[0068]
图2是本发明量化roialign算子流程的示意图。
[0069]
图3是本发明方法的流程示意图。
[0070]
图4是实现本发明方法中计算坐标和权重并量化权重的代码化方法的流程示意图。
[0071]
图5是实现本发明方法中根据位置索引和权重计算最终输出的代码化方法的流程示意图。
具体实施方式
[0072]
为了能够更清楚地理解本发明的技术内容及优点,现结合附图对本发明进行进一
步的详细说明。
[0073]
如图3所示,本发明的一种量化roialign算子的方法,所述方法包括以下步骤:
[0074]
s1,输入featuremap并量化数据,得到低比特的数据;
[0075]
s2,根据输入的roi计算坐标和权重并量化权重,获取最终输出featuremap的位置索引和相应的权重值,在量化后的数据上进行roialign操作,其中,在计算权重时,由于roi的坐标是浮点的,相应的权重也为浮点数所以在计算权重时会对权重进行定点化;
[0076]
s3,根据以上步骤获得索引和权重计算出最终的结果并对每个单元多avgpooling操作获得poolheight
×
poolwidth
×
channel的输出。
[0077]
具体地,本发明也可以解释为以下内容:
[0078]
现有技术中roialign算子的实现主要分为2步,1、根据输入的roi获取最终输出feature map的位置索引和相应的权重值。2、根据第一步获得索引和权重计算出最终的结果并对每个单元多avgpooling操作获得roinum
×
poolheight
×
poolwidth
×
channel的输出。流程图如图1所示。
[0079]
本发明涉及的量化后的roialign算子的实现也分为2步,1、根据输入的roi获取最终输出feature map的位置索引和相应的权重值,不过在计算权重时,由于roi的坐标是浮点的,相应的权重也为浮点数所以在计算权重时会对他进行定点化。2、根据第一步获得索引和权重计算出最终的结果并对每个单元多avgpooling操作获得poolheight
×
poolwidth
×
channel的输出。流程图如图2所示。
[0080]
其中,计算坐标和权重并量化权重的方法,代码化如图4所示:
[0081]
01:设立结构体point,包含xmin,ymin,rwidth,rheight四个成员,其中xmin为参数x最小值,ymin为参数y最小值,rwidth为参数r宽度,rheight为参数r高度;此处的结构体point表示目标检测的目标框,所以xmin,ymin,rwidth,rheight分别表示目标框在特征图上的左上角坐标和长宽;
[0082]
02:对poolheight,poolwidth,binsize,downsample,fixedwidth,width,height取整;其中,
[0083]
poolheight表示将roi固定后特征图的长度;
[0084]
poolwidth表示将roi固定后特征图的宽度;
[0085]
binsize表示每个区域的采样点数;
[0086]
downsample表示该层feature是从原图中采样多少倍得到的;
[0087]
fixedwidth表示坐标小数部分量化的位宽;
[0088]
03:结构列表:roi
[0089]
04:将getnum(roi)赋值给roinum;
[0090]
05:将1左移fixedwidth再赋值给fixedscale;
[0091]
06:用于从0到roinum依次赋值给tag做以下操作:
[0092]
07:将roi(tag)赋值给xmin,xmax,ymin,ymax;
[0093]
08:将rheight/poolheight赋值给roibinh;
[0094]
09:将rwidth/poolwidth赋值给roibinw;
[0095]
10:其中,用于从0到poolheight依次赋值给ph做以下操作:
[0096]
11:其中,用于从0到poolwidth依次赋值给pw做以下操作:
[0097]
12:其中,用于从0到binsize依次赋值给bh做以下操作:
[0098]
13:将ymin+ph*binsize+(bh+0.5)*binsize/roibinh赋值给y;
[0099]
14:其中,用于从0到binsize依次赋值给bw做以下操作:
[0100]
15:将xmin+pw*binsize+(bw+0.5)*binsize/roibinw赋值给x;
[0101]
16:将int(x)赋值给xlow,将int(y)赋值给ylow;
[0102]
17:将xlow+1赋值给xhigh,将ylow+1赋值给yhigh;
[0103]
18:将(y-ylow)*fixedscale赋值给ly,将(x-xlow)*fixedscale赋值给lx;
[0104]
19:将fixedscale-ly赋值给hy,将fixedscale-lx赋值给hx;
[0105]
20:将hy*hx赋值给w1,将hy*lx赋值给w2,将ly*hx赋值给w3,将ly*lx赋值给w4;
[0106]
21:将ylow*width+xlow赋值给pos1,将ylow*width+xhigh赋值给pos2;
[0107]
22:将yhigh*width+xlow赋值给pos3,将yhigh*width+xhigh赋值给pos4;
[0108]
23:将tag+(ph*poolheight+pw)*channel赋值给index;
[0109]
24:计算calroialign(index,pos1,pos2,pos3,pos4,w1,w2,w3,w4),此函数实现为双线性插值的过程,pos1,pos2,pos3,pos4,为待求像素点的四周像素点的位置w1,w2,w3,w4为计算时四周像素点的权重;
[0110]
其中,根据位置索引和权重计算最终输出的方法,代码化如图5所示:
[0111]
01:featuremap:(featuremap是个多维数据,维度为{height,width,channel});
[0112]
02:outfeaturemap:(outfeaturemap,维度为{roinum,poolheight,poolwidth channel});
[0113]
02:fixedwidth取整;
[0114]
04:计算function calroialign(index,pos1,pos2,pos3,pos4,w1,w2,w3,w4);
[0115]
04:将featuremap[pos1*channel]赋值给datapos1;
[0116]
05:将featuremap[pos2*channel]赋值给datapos2;
[0117]
06:将featuremap[pos3*channel]赋值给datapos3;
[0118]
07:将featuremap[pos4*channel]赋值给datapos4;
[0119]
08:用于从0到channel依次赋值给tag做以下操作:
[0120]
09:将赋值给tmpvalue;
[0121]
10:datapos1++,datapos2++,datapos3++,datapos4++
[0122]
11:rightshift

fixedwidth+fixedwidth+binsize*binsize/2
[0123]
12:将fixedwidth+fixedwidth+binsize*binsize/2赋值给rightshift;13:将tmpvalue右移rightshift再赋值给outfeaturemap[index+tag]。
[0124]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1