本发明涉及图像处理,特别是涉及一种基于向量处理器的半精度反卷积方法及相关组件。
背景技术:
1、反卷积(deconvolution)是神经网络的核心操作之一,其概念广泛用于信号处理和图像处理技术等场合中,其中,deconv4×4是反卷积运算中常见的规格。目前,在通用平台中进行deconv4×4计算时,效率往往都偏低,因此deconv4×4的优化计算有着重要的意义。
2、综上所述,如何有效地提高deconv4×4的执行效率,是目前本领域技术人员急需解决的技术问题。
技术实现思路
1、本发明的目的是提供一种基于向量处理器的半精度反卷积方法及相关组件,以有效地提高deconv4×4的执行效率。
2、为解决上述技术问题,本发明提供如下技术方案:
3、一种基于向量处理器的半精度反卷积方法,包括:
4、将半精度输入特征图加载到片上标量存储器中,并将半精度滤波器数据加载到片上阵列存储器中;
5、从所述片上标量存储器中加载1个输入特征图子块fbsm,并基于反卷积计算的变换原理,确定出当前加载的所述输入特征图子块fbsm在反卷积变换后的有效值分布特征;
6、基于所述有效值分布特征,将所述输入特征图子块fbsm中相应位置的有效数据,与从所述片上阵列存储器中加载的相应位置的所述半精度滤波器数据,进行向量化反卷积deconv4×4计算,得到对应于当前加载的所述输入特征图子块fbsm的计算结果;
7、返回执行从所述片上标量存储器中加载1个输入特征图子块fbsm的操作,依次加载各个所述输入特征图子块fbsm,直至得到各个所述输入特征图子块fbsm的计算结果,作为确定出的对应于所述半精度输入特征图的输出特征图结果,并将所述输出特征图结果传输至片外存储空间;
8、其中,所述输入特征图子块fbsm的数据格式为[incb,2,inw,n],incb为输入通道维度的子块大小,inw为所述半精度输入特征图的宽度,n为向量处理器中单个寄存器可计算的半精度数据数量。
9、在一种实施方式中,所述将半精度输入特征图加载到片上标量存储器中,并将半精度滤波器数据加载到片上阵列存储器中,包括:
10、将半精度输入特征图f划分为nincb个输入子块fb,分批次依次将各个输入特征图子块fbsm加载到片上标量存储器中;
11、将半精度滤波器数据q划分为noutcb×nincb个滤波器数据子块qb,分noutcb×nincb次依次将各个所述滤波器数据子块qb加载到片上阵列存储器中;
12、其中,所述半精度输入特征图f的数据格式为[inc,inh,inw,n],inc为输入通道数,inh为所述半精度输入特征图的高度,inw为所述半精度输入特征图的宽度,n为向量处理器中单个寄存器可计算的半精度数据数量;
13、所述半精度滤波器数据q的数据格式为[inc,outc,fs,fs,b],inc为输入通道数,outc为输出通道数,fs为滤波器边长,b为所述半精度滤波器数据在计算中需要扩展复制得到的大小;
14、outcb为输出通道维度的子块大小,noutcb为输出通道维度的分块数量且incb为输入通道维度的子块大小,nincb为输入通道维度的分块数量且
15、所述输入子块fb的数据格式为[incb,inh,inw,n],所述输入特征图子块fbsm的数据格式为[incb,2,inw,n],所述滤波器数据子块qb的数据格式为[fs,fs,incb,outcb,b]。
16、在一种实施方式中,从所述片上标量存储器中加载1个输入特征图子块fbsm,并基于反卷积计算的变换原理,确定出当前加载的所述输入特征图子块fbsm在反卷积变换后的有效值分布特征,包括:
17、初始化ph=0;ph为输入特征图子块fbsm:[incb,2,inw,n]的初始位置在半精度输入特征图f的inh维度上的索引;
18、初始化pic=0;pic为输入特征图子块fbsm:[incb,2,inw,n]在输入特征图f做分块后nincb维度上的块索引;
19、初始化poc=0;poc为滤波器数据子块qb在滤波器数据q做分块后noutcb维度上的块索引;
20、从所述片上标量存储器中加载相应的输入特征图子块fbsm:[incb,2,inw,n],从所述片上阵列存储器中加载相应的滤波器数据子块qb:[fs,fs,incb,outcb,b];
21、初始化pw=0;pw为输入特征图子块fbsm的初始位置在半精度输入特征图f的inw维度上的索引;
22、从当前加载的所述输入特征图子块fbsm中,读取incb×2×2×n个数据到寄存器中,作为当前读取的数据块frg,基于反卷积计算的变换原理,模拟当前加载的所述输入特征图子块fbsm做反卷积变换后的数据排布情况,判断首地址为frg(incb,0,pw,n)的2×2特征图转换成4×4像素窗口后所属的排布图类型,且载入边界信息flag_a、flag_b、flag_c以及flag_d;
23、其中,flag_a表示的是转换成4×4像素窗口后是否为首行的判断结果,flag_b表示的是转换成4×4像素窗口后是否为首列的判断结果,flag_c表示的是转换成4×4像素窗口后是否为末行的判断结果,flag_b表示的是转换成4×4像素窗口后是否为末列的判断结果;
24、排布图类型包括设定的排布类型a至d,且排布类型a表示的是转换成4×4像素窗口后,在第1行,第3行,第1列以及第3列中存在有效值;排布类型b表示的是转换成4×4像素窗口后,在第1行,第3行,第2列以及第4列中存在有效值;排布类型c表示的是转换成4×4像素窗口后,在第2行,第4行,第1列以及第3列中存在有效值;排布类型d表示的是转换成4×4像素窗口后,在第2行,第4行,第2列以及第4列中存在有效值。
25、在一种实施方式中,基于所述有效值分布特征,将所述输入特征图子块fbsm中相应位置的有效数据,与从所述片上阵列存储器中加载的相应位置的所述半精度滤波器数据,进行向量化反卷积deconv4×4计算,得到对应于当前加载的所述输入特征图子块fbsm的计算结果;返回执行从所述片上标量存储器中加载1个输入特征图子块fbsm的操作,依次加载各个所述输入特征图子块fbsm,直至得到各个所述输入特征图子块fbsm的计算结果,作为确定出的对应于所述半精度输入特征图的输出特征图结果,并将所述输出特征图结果传输至片外存储空间,具体包括:
26、初始化pk=0;pk为数据块frg在incb维度上的索引;
27、初始化i=0;i为数据块frg在inh维度上的索引;
28、初始化j=0,j为数据块frg在inw维度上的索引;
29、对存储输出数据的各个向量寄存器进行初始化;
30、判断pic是否为0,若pic不为0,则将暂存在所述片上阵列存储器中的deconv4×4中间乘积结果加载到各个所述向量寄存器中;
31、若pic为0,则使用粒度为n×2字节的标量加载指令,单次读取数据块frg上n个半精度数据至标量寄存器中,并且用广播指令将所述标量寄存器中的数据由标量转换成一组相同的向量数据并存储至相应的1个向量寄存器中;
32、根据确定出的4×4像素窗口的排布图类型,确定出滤波器数据子块qb上对应数据的位置,令计算过程中读取的滤波器数据块为qrg,将qrg上outcb维度的所有数据加载到p个向量寄存器中;其中,计算过程中读取的滤波器数据块qrg的数据格式为[fs,fs,pk,outcb,b],p表示所述向量处理器中向量运算单元部件的数量;
33、将数据块向量化后的数据分别与数据做点乘操作,点乘结果再与各个所述向量寄存器中相应数值进行累加,且s个向量处理部件同步并行运算,得到的中间计算结果依次存储在各个所述向量寄存器中;
34、令j=j+1;
35、判断j是否小于2,若j小于2,则返回执行所述使用粒度为n×2字节的标量加载指令的操作;
36、若j不小于2,则令i=i+1;
37、判断i是否小于2,若i小于2,则返回执行所述使用粒度为n×2字节的标量加载指令的操作;
38、若i不小于2,则令pk=pk+1;
39、判断pk是否小于incb,若pk小于incb,则返回执行所述初始化i=0的操作,若pk不小于incb,则对于frg在qrg上完成incb个输入通道的反卷积计算,得到2×2×outcb×n个中间结果数据;
40、基于所载入的边界信息flag_a、flag_b、flag_c以及flag_d,进行数据清零处理;其中,当flag_a所表示的判断结果为是时,则进行首行数据清零,当flag_b所表示的判断结果为是时,则进行末行数据清零,当flag_c所表示的判断结果为是时,则进行首列数据清零,当flag_d所表示的判断结果为是时,则进行末列数据清零;
41、将同一输出通道上的中间结果累加,得到反卷积的最终结果,保存至各个所述向量寄存器中;
42、在完成了数据块frg和滤波器数据子块qb上对应位置数据的deconv4×4计算之后,将保存至各个所述向量寄存器中的反卷积结果储存至所述片上阵列存储器中;
43、在计算完排布类型b的像素图或者计算完排布类型d的像素图后,则返回执行所述使用粒度为n×2字节的标量加载指令的操作;
44、在计算完排布类型a的像素图或者计算完排布类型c的像素图后,则令pw=pw+1;
45、判断pw是否小于inw,若pw小于inw,将返回执行所述从当前加载的所述输入特征图子块fbsm中,读取incb×2×2×n个数据到寄存器中,作为当前读取的数据块frg的操作;
46、若pw不小于inw,则令pic=pic+1;
47、判断pic是否小于nincb,若pic小于nincb,则返回所述从所述片上标量存储器中加载相应的输入特征图子块fbsm:[incb,2,inw,n]的操作;
48、若pic不小于nincb,则确定出反卷积计算中所有输入通道遍历完成,且在所述片上阵列存储器上分配一块大小为noutcb×inw×2×outcb×b的空间amtemp,以将储存在各个所述向量寄存器中的反卷积结果存入空间amtemp中,并且令poc=poc+1;
49、判断poc是否小于noutcb,若poc小于noutcb,则返回所述从所述片上标量存储器中加载相应的输入特征图子块fbsm:[incb,2,inw,n]的操作;
50、若poc不小于noutcb,则确定出反卷积计算中所有输出通道遍历完成,得到noutcb×inw×2×outcb×b大小的输出结果;
51、将空间amtemp中数据格式为[noutcb,inw×2,outcb,n]的反卷积结果进行转置操作,得到[noutcb,outcb,inw×2,n]格式的结果并保存至空间amtemp中;
52、将空间amtemp中储存的输出特征图结果存储至设定的第一存储器中的指定位置;
53、令ph=ph+1;
54、判断ph是否小于inh×2,若ph小于inh×2,则返回执行所述初始化pic=0的操作;
55、若ph不小于inh×2,则确定出所述半精度输入特征图f与所述半精度滤波器数据q的deconv4×4计算完成,得到对应于所述半精度输入特征图f的输出特征图结果,并将所述输出特征图结果传输至片外存储空间。
56、一种基于向量处理器的半精度反卷积系统,包括:
57、载入模块,用于将半精度输入特征图加载到片上标量存储器中,并将半精度滤波器数据加载到片上阵列存储器中;
58、有效值分布特征确定模块,用于从所述片上标量存储器中加载1个输入特征图子块fbsm,并基于反卷积计算的变换原理,确定出当前加载的所述输入特征图子块fbsm在反卷积变换后的有效值分布特征;
59、计算模块,用于基于所述有效值分布特征,将所述输入特征图子块fbsm中相应位置的有效数据,与从所述片上阵列存储器中加载的相应位置的所述半精度滤波器数据,进行向量化反卷积deconv4×4计算,得到对应于当前加载的所述输入特征图子块fbsm的计算结果;
60、输出特征图结果确定模块,用于触发所述有效值分布特征确定模块,直至得到各个所述输入特征图子块fbsm的计算结果,作为确定出的对应于所述半精度输入特征图的输出特征图结果,并将所述输出特征图结果传输至片外存储空间;
61、其中,所述输入特征图子块fbsm的数据格式为[incb,2,inw,n],incb为输入通道维度的子块大小,inw为所述半精度输入特征图的宽度,n为向量处理器中单个寄存器可计算的半精度数据数量。
62、在一种实施方式中,所述载入模块,具体用于:
63、将半精度输入特征图f划分为nincb个输入子块fb,分批次依次将各个输入特征图子块fbsm加载到片上标量存储器中;
64、将半精度滤波器数据q划分为noutcb×nincb个滤波器数据子块qb,分noutcb×nincb次依次将各个所述滤波器数据子块qb加载到片上阵列存储器中;
65、其中,所述半精度输入特征图f的数据格式为[inc,inh,inw,n],inc为输入通道数,inh为所述半精度输入特征图的高度,inw为所述半精度输入特征图的宽度,n为向量处理器中单个寄存器可计算的半精度数据数量;
66、所述半精度滤波器数据q的数据格式为[inc,outc,fs,fs,b],inc为输入通道数,outc为输出通道数,fs为滤波器边长,b为所述半精度滤波器数据在计算中需要扩展复制得到的大小;
67、outcb为输出通道维度的子块大小,noutcb为输出通道维度的分块数量且incb为输入通道维度的子块大小,nincb为输入通道维度的分块数量且
68、所述输入子块fb的数据格式为[incb,inh,inw,n],所述输入特征图子块fbsm的数据格式为[incb,2,inw,n],所述滤波器数据子块qb的数据格式为[fs,fs,incb,outcb,b]。
69、在一种实施方式中,所述有效值分布特征确定模块,具体用于:
70、初始化ph=0;ph为输入特征图子块fbsm:[incb,2,inw,n]的初始位置在半精度输入特征图f的inh维度上的索引;
71、初始化pic=0;pic为输入特征图子块fbsm:[incb,2,inw,n]在输入特征图f做分块后nincb维度上的块索引;
72、初始化poc=0;poc为滤波器数据子块qb在滤波器数据q做分块后noutcb维度上的块索引;
73、从所述片上标量存储器中加载相应的输入特征图子块fbsm:[incb,2,inw,n],从所述片上阵列存储器中加载相应的滤波器数据子块qb:[fs,fs,incb,outcb,b];
74、初始化pw=0;pw为输入特征图子块fbsm的初始位置在半精度输入特征图f的inw维度上的索引;
75、从当前加载的所述输入特征图子块fbsm中,读取incb×2×2×n个数据到寄存器中,作为当前读取的数据块frg,基于反卷积计算的变换原理,模拟当前加载的所述输入特征图子块fbsm做反卷积变换后的数据排布情况,判断首地址为frg(incb,0,pw,n)的2×2特征图转换成4×4像素窗口后所属的排布图类型,且载入边界信息flag_a、flag_b、flag_c以及flag_d;
76、其中,flag_a表示的是转换成4×4像素窗口后是否为首行的判断结果,flag_b表示的是转换成4×4像素窗口后是否为首列的判断结果,flag_c表示的是转换成4×4像素窗口后是否为末行的判断结果,flag_b表示的是转换成4×4像素窗口后是否为末列的判断结果;
77、排布图类型包括设定的排布类型a至d,且排布类型a表示的是转换成4×4像素窗口后,在第1行,第3行,第1列以及第3列中存在有效值;排布类型b表示的是转换成4×4像素窗口后,在第1行,第3行,第2列以及第4列中存在有效值;排布类型c表示的是转换成4×4像素窗口后,在第2行,第4行,第1列以及第3列中存在有效值;排布类型d表示的是转换成4×4像素窗口后,在第2行,第4行,第2列以及第4列中存在有效值。
78、在一种实施方式中,所述计算模块和所述输出特征图结果确定模块,具体用于:
79、初始化pk=0;pk为数据块frg在incb维度上的索引;
80、初始化i=0;i为数据块frg在inh维度上的索引;
81、初始化j=0,j为数据块frg在inw维度上的索引;
82、对存储输出数据的各个向量寄存器进行初始化;
83、判断pic是否为0,若pic不为0,则将暂存在所述片上阵列存储器中的deconv4×4中间乘积结果加载到各个所述向量寄存器中;
84、若pic为0,则使用粒度为n×2字节的标量加载指令,单次读取数据块frg上n个半精度数据至标量寄存器中,并且用广播指令将所述标量寄存器中的数据由标量转换成一组相同的向量数据并存储至相应的1个向量寄存器中;
85、根据确定出的4×4像素窗口的排布图类型,确定出滤波器数据子块qb上对应数据的位置,令计算过程中读取的滤波器数据块为qrg,将qrg上outcb维度的所有数据加载到p个向量寄存器中;其中,计算过程中读取的滤波器数据块qrg的数据格式为[fs,fs,pk,outcb,b],p表示所述向量处理器中向量运算单元部件的数量;
86、将数据块frg(pk,i,j,n)向量化后的数据分别与qrg(fs,fs,pk,outcb,b)数据做点乘操作,点乘结果再与各个所述向量寄存器中相应数值进行累加,且s个向量处理部件同步并行运算,得到的中间计算结果依次存储在各个所述向量寄存器中;
87、令j=j+1;
88、判断j是否小于2,若j小于2,则返回执行所述使用粒度为n×2字节的标量加载指令的操作;
89、若j不小于2,则令i=i+1;
90、判断i是否小于2,若i小于2,则返回执行所述使用粒度为n×2字节的标量加载指令的操作;
91、若i不小于2,则令pk=pk+1;
92、判断pk是否小于incb,若pk小于incb,则返回执行所述初始化i=0的操作,若pk不小于incb,则对于frg在qrg上完成incb个输入通道的反卷积计算,得到2×2×outcb×n个中间结果数据;
93、基于所载入的边界信息flag_a、flag_b、flag_c以及flag_d,进行数据清零处理;其中,当flag_a所表示的判断结果为是时,则进行首行数据清零,当flag_b所表示的判断结果为是时,则进行末行数据清零,当flag_c所表示的判断结果为是时,则进行首列数据清零,当flag_d所表示的判断结果为是时,则进行末列数据清零;
94、将同一输出通道上的中间结果累加,得到反卷积的最终结果,保存至各个所述向量寄存器中;
95、在完成了数据块frg和滤波器数据子块qb上对应位置数据的deconv4×4计算之后,将保存至各个所述向量寄存器中的反卷积结果储存至所述片上阵列存储器中;
96、在计算完排布类型b的像素图或者计算完排布类型d的像素图后,则返回执行所述使用粒度为n×2字节的标量加载指令的操作;
97、在计算完排布类型a的像素图或者计算完排布类型c的像素图后,则令pw=pw+1;
98、判断pw是否小于inw,若pw小于inw,将返回执行所述从当前加载的所述输入特征图子块fbsm中,读取incb×2×2×n个数据到寄存器中,作为当前读取的数据块frg的操作;
99、若pw不小于inw,则令pic=pic+1;
100、判断pic是否小于nincb,若pic小于nincb,则返回所述从所述片上标量存储器中加载相应的输入特征图子块fbsm:[incb,2,inw,n]的操作;
101、若pic不小于nincb,则确定出反卷积计算中所有输入通道遍历完成,且在所述片上阵列存储器上分配一块大小为noutcb×inw×2×outcb×b的空间amtemp,以将储存在各个所述向量寄存器中的反卷积结果存入空间amtemp中,并且令poc=poc+1;
102、判断poc是否小于noutcb,若poc小于noutcb,则返回所述从所述片上标量存储器中加载相应的输入特征图子块fbsm:[incb,2,inw,n]的操作;
103、若poc不小于noutcb,则确定出反卷积计算中所有输出通道遍历完成,得到noutcb×inw×2×outcb×b大小的输出结果;
104、将空间amtemp中数据格式为[noutcb,inw×2,outcb,n]的反卷积结果进行转置操作,得到[noutcb,outcb,inw×2,n]格式的结果并保存至空间amtemp中;
105、将空间amtemp中储存的输出特征图结果存储至设定的第一存储器中的指定位置;
106、令ph=ph+1;
107、判断ph是否小于inh×2,若ph小于inh×2,则返回执行所述初始化pic=0的操作;
108、若ph不小于inh×2,则确定出所述半精度输入特征图f与所述半精度滤波器数据q的deconv4×4计算完成,得到对应于所述半精度输入特征图f的输出特征图结果,并将所述输出特征图结果传输至片外存储空间。
109、一种基于向量处理器的半精度反卷积设备,包括:
110、存储器,用于存储计算机程序;
111、处理器,用于执行所述计算机程序以实现如上述所述的基于向量处理器的半精度反卷积方法的步骤。
112、一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述的基于向量处理器的半精度反卷积方法的步骤。
113、应用本发明实施例所提供的技术方案,考虑到可以基于向量处理器来实现半精度反卷积的计算,并且由于本技术的方案中在计算时提取的是变换后的数据输入特征图中的非零值的位置,即提取有效数据,并且将非零值与滤波器中对应位置的数据做卷积计算,使得实际计算量比反卷积的理论计算量大幅降低。
114、具体的,将半精度输入特征图加载到片上标量存储器中,并将半精度滤波器数据加载到片上阵列存储器中,之后,可以从片上标量存储器中加载1个输入特征图子块fbsm。基于反卷积计算的原理,在4×4特征图中,有两行为填充后的零,因此实际上只需加载2行原输入数据,即单次加载的fbsm的数据格式为[incb,2,inw,n],incb为输入通道维度的子块大小,inw为半精度输入特征图的宽度,n为向量处理器中单个寄存器可计算的半精度数据数量。并且,基于反卷积计算的变换原理,确定出当前加载的输入特征图子块fbsm在反卷积变换后的有效值分布特征,可以理解的是,有效值分布特征反映的是非零值的位置,因此,可以基于有效值分布特征,将输入特征图子块fbsm中相应位置的有效数据,与从片上阵列存储器中加载的相应位置的半精度滤波器数据,进行向量化反卷积deconv4×4计算,得到对应于当前加载的输入特征图子块fbsm的计算结果,使得相较于反卷积的理论计算量,本技术方案的计算量会降低3/4。得到了各个输入特征图子块fbsm的计算结果之后,便可以确定出半精度输入特征图的输出特征图结果。