WO2024114505A1 - 一种通用、可配置的图像滤波计算多行输出系统和方法 - Google Patents

一种通用、可配置的图像滤波计算多行输出系统和方法 Download PDF

Info

Publication number
WO2024114505A1
WO2024114505A1 PCT/CN2023/133763 CN2023133763W WO2024114505A1 WO 2024114505 A1 WO2024114505 A1 WO 2024114505A1 CN 2023133763 W CN2023133763 W CN 2023133763W WO 2024114505 A1 WO2024114505 A1 WO 2024114505A1
Authority
WO
WIPO (PCT)
Prior art keywords
height
width
width direction
last
data
Prior art date
Application number
PCT/CN2023/133763
Other languages
English (en)
French (fr)
Inventor
黄明强
陈嘉豪
马文凌
Original Assignee
中国科学院深圳先进技术研究院
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 中国科学院深圳先进技术研究院 filed Critical 中国科学院深圳先进技术研究院
Publication of WO2024114505A1 publication Critical patent/WO2024114505A1/zh

Links

Abstract

本发明具体涉及一种通用、可配置的图像滤波计算多行输出系统和方法。该系统及方法中CPU将输入图像相关的控制参数,存储到参数配置模块;参数配置模块获取控制参数后利用控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;直接存储器访问模块按照参数配置模块发送的控制参数从片上缓存区中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片上缓存区,由片上缓存区对计算结果进行保存。解决了现有进行滤波计算时不可同时输出多行结果的技术问题。

Description

一种通用、可配置的图像滤波计算多行输出系统和方法 技术领域
本发明涉及图像滤波领域,具体而言,涉及一种通用、可配置的图像滤波计算多行输出系统和方法。
背景技术
滤波操作是图像处理过程中的常见操作,主要的作用是将图像当中特定频率的波段滤除的操作,这样的滤波有利于降低或者消除环境噪声或者信号提取过程中所产生的噪声对于图像的影响,可以提高图像的质量,并且为之后的图像处理操作提供便利,将保留的频率波段的图像信息进行之后的处理。根据不同的滤除波段可以将滤波分成一下两种作用:(1)降低图像当中的噪声影响。这一功能一般是通过低通滤波来实现的,因为噪声相对于图像一般是高频信号。(2)提取图像当中的关键信息。
目前已有的相似方案是对输入图像使用单一尺寸大小的滤波核进行滤波操作。已有的图像滤波方案中数据读取地址频繁跳动,没有使用高效的突发传输,缺少高效性以及灵活的数据流,而且滤波使用的是固定的5*5滤波核,无法对多个种类得图像进行滤波,缺少通用性,滤波方案在忆阻器阵列中实现时,忆阻器的利用率较低。
技术问题
本发明实施例提供了一种通用、可配置的图像滤波计算多行输出系统和方法,以至少解决现有进行滤波计算时不可同时输出多行结果的技术问题。
技术解决方案
根据本发明的一实施例,提供了一种通用、可配置的图像滤波计算多行输出系统,包括:直接存储器访问模块、参数配置模块、片上缓存区、线性滤波计算模块;其中:
CPU将输入图像相关的控制参数,存储到参数配置模块;参数配置模块获取控制参数后利用控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;
直接存储器访问模块按照参数配置模块发送的控制参数从片上缓存区中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片上缓存区,由片上缓存区对计算结果进行保存。
进一步地,CPU将输入图像相关的控制参数,通过AXI-lite总线存储到参数配置模块;参数配置模块从CPU获取控制参数后,利用控制参数控制直接存储器访问模块的存取操作,以及控制线性滤波计算模块的卷积计算;直接存储器访问模块按照参数配置模块发送的控制参数,通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片外存储器DDR,由片外存储器DDR对计算结果进行保存。
进一步地,线性滤波计算模块包括缓冲区、控制单元、计算单元;缓冲区接收从片外存储器DDR提取输入数据,并将输入数据发送给计算单元;计算单元接收缓冲区的输入数据,生成计算后的输出结果,并将计算后的输出结果通过直接存储器访问模块发送给片外存储器DDR进行存储。
进一步地,参数配置模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度Wout、输出特征的高度Hout、输入通道数CHout等。
根据本发明的另一实施例,提供了一种通用、可配置的图像滤波计算多行输出方法,包括以下步骤:
CPU将输入图像相关的控制参数,存储到参数配置模块;参数配置模块获取控制参数后利用控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;
直接存储器访问模块按照参数配置模块发送的控制参数从片上缓存区中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片上缓存区,由片上缓存区对计算结果进行保存。
进一步地,计算单行、多行输出宽度方向参数包括:
步骤一、输入一次突发传输的长度BURST_LEN;
步骤二、宽度方向深度X_DEPTH=突发长度BURST_LEN;
步骤三、计算宽度方向输出的个数width_out_test;
步骤四、将width_out_test与Wout进行比较,如果width_out_test比Wout小,则需要右则填充的个数;
步骤五、计算宽度方向输入的个数width_in_test;
步骤六、判断宽度方向输入的个数是否不大于宽度方向深度,如果大于,则继续步骤七,如果不大于,则宽度方向需要突发传输的次数split_w_num=1,第一次宽度方向输出个数first_width_out、最后一次宽度方向输出个数last_width_out均等于Wout,第一次宽度方向输入个数first_width_in、最后一次宽度方向输入个数last_width_in均等于width_in_test;
步骤七、宽度方向输入的个数若大于宽度方向深度,确定第一次宽度方向输入个数first_width_in、剩余宽度方向输入个数res_width_in、第一次宽度方向输出个数first_width_out、剩余宽度方向输出个数res_width_out;
步骤八、判断剩余宽度方向输入个数res_width_in是否不大于宽度方向深度X_DEPTH,如果大于,则继续步骤九,如果不大于,则宽度方向需要突发传输的次数split_w_num=2,最后一次宽度方向输入个数last_width_in=剩余宽度方向输入个数res_width_in,最后一次宽度方向输出个数last_width_out=剩余宽度方向输出个数res_width_out;
步骤九、确定宽度方向一次突发传输的最大输出个数max_out_width,确定宽度方向需要突发传输的次数split_w_num;
步骤十、中间传输宽度方向输出个数middle_width_out=突发传输最大输出个数max_out_width,确定中间传输宽度方向输入个数middle_width_in;
步骤十一、最大输出个数Wout-第一次宽度方向输出个数first_width_out能否被中间传输宽度方向输出个数Middle_Width_out整除,如果能,继续步骤十二;如果不能,则确定最后一次突发传输的个数,转入步骤十三;
步骤十二、最后一次宽度方向输出个数last_width_out=中间传输宽度方向输出的个数middle_width_out;
步骤十三、确定宽度方向最后一次突发传输的特征值输入的个数last_width_in。
进一步地,计算多行输出高度方向参数包括:
步骤一、输入一次突发传输的长度BURST_LEN;
步骤二、高度方向深度Y_DEPTH=7;
步骤三、计算高度方向输出的个数height_out_test;
步骤四、将height_out_test与Hout进行比较,如果height_out_test比Wout小,则需要下则填充的个数;
步骤五、计算高度方向输入的个数height_in_test;
步骤六、判断高度方向输入的个数是否不大于高度方向深度,如果大于,则继续步骤七,如果不大于,则高度方向需要突发传输的次数split_h_num=1,第一次高度方向输出个数first_height_out、最后一次高度方向输出个数last_height_out均等于Hout, 第一次高度方向输入个数first_height_in、最后一次高度方向输入个数last_height_in均等于height_in_test;
步骤七、高度方向输入的个数若大于高度方向深度,确定第一次高度方向输入个数first_height_in、剩余高度方向输入个数res_width_in、第一次高度方向输出个数first_height_out、剩余高度方向输出个数res_height_out;
步骤八、判断剩余高度方向输入个数res_height_in是否不大于高度方向深度Y_DEPTH,如果大于,则继续步骤九,如果不大于,则高度方向需要突发传输的次数split_h_num=2,最后一次高度方向输入个数last_height_in=剩余高度方向输入个数res_height_in,最后一次高度方向输出个数last_height_out=剩余高度方向输出个数res_height_out;
步骤九、确定高度方向一次突发传输的最大输出个数max_out_height,确定高度方向需要突发传输的次数split_h_num;
步骤十、中间传输高度方向输出个数middle_height_out=突发传输最大输出个数max_out_height,确定中间传输高度方向输入个数middle_height_in;
步骤十一、最大输出个数Hout-第一次宽度方向输出个数first_height_out能否被中间传输高度方向输出个数middle_height_out整除,如果能,继续步骤十二;如果不能,则确定最后一次突发传输的个数,转入步骤十三;
步骤十二、最后一次高度方向输出个数last_height_out =中间传输高度方向输出的个数middle_height_out;
步骤十三、确定高度方向最后一次突发传输的特征值输入的个数last_height_in。
进一步地,片上缓存空间的大小取决于突发传输的长度。
进一步地,传输进入硬件的特征数据进行并行转化,将若干数量不同通道的特征值拼接在一起之后构成新的特征矩阵,然后再进行数据的传输;
并行之后的图像数据通过与同一个线性滤波核进行滤波计算,得出相应的输出图像数据。
进一步地,图像数据传输到片上缓存当中时,根据提取数据的顺序,包含了五种循环:
第一层循环是AXI总线的突发传输长度循环;数据从第一个输入通道的第一行的前若干个数据开始传输的;
第二层循环是Ky方向上的循环;
第三层循环是输入图像宽度方向上的循环;
第四层循环是输入图像高度方向上的循环,通过这两层循环将一个通道的图像完全遍历;
最后一层是并行之后的通道方向上的循环,通过这层循环将整个图像完全遍历。
进一步地,buffer用来存储来自DDR的图像数据,首先输入的数据为Ky方向的1/24/47/70/93/116/139,接着输入的数据为第二列的数据2/25/48/71/94/117/140,接着继续往宽度方向扩展,以此类推;
Ky方向一次最多可以输入7个数据,当数据向宽度方向扩展3次时,同时算出Hout方向6个输出结果,当遍历完宽度方向所有数据之后,实现多行输出的要求。
进一步地,线性滤波计算模块的卷积计算有三个阶段,分别是初始化阶段、写数据阶段、读数据阶段:
第一阶段为set阶段,忆阻器的初始化阶段;初始化的具体步骤是,向忆阻器阵列施加外部正向大电压;
第二阶段为wirte阶段,在阵列当中,用忆阻器的阻值作为卷积核的数据进行运算,首先,根据想要卷积核的数据,再一次给忆阻器阵列施加负的大电压;
第三阶段为read阶段,为卷积计算过程实现的阶段,首先外部图像数据通过数字转模拟模块DAC,转成正向小电压输入阵列当中,与上一阶段写入的电导值进行运算,得出的电流值再通过模拟转数字模块ADC,输出的结果为经过滤波之后的图像。
一种存储介质,存储介质存储有能够实现上述任意一项通用、可配置的图像滤波计算多行输出方法的程序文件。
一种处理器,处理器用于运行程序,其中,程序运行时执行上述任意一项的通用、可配置的图像滤波计算多行输出方法。
有益效果
本发明实施例中的通用、可配置的图像滤波计算多行输出系统和方法,CPU将输入图像相关的控制参数,存储到参数配置模块;参数配置模块获取控制参数后利用控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;直接存储器访问模块按照参数配置模块发送的控制参数从片上缓存区中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片上缓存区,由片上缓存区对计算结果进行保存。本发明使用了突发传输,以及可支持2-7尺寸大小的滤波核进行滤波,大大增强了方案的通用性,另外本发明的一个突出优点是,在进行滤波计算时,可以同时输出多行的结果,提高了访存的效率。
附图说明
图1为本发明通用、可配置的图像滤波计算多行输出系统框图;
图2为本发明滤波过程分析框图;
其中,图2(a)图为特征特征参数列表;图2(b)图为滤波前后的特征数据,其中,Loop1_Loop5代表DMA的5重循环传输策略;
图3为本发明滤波计算单行输出宽度方向参数配置流程图;
图4为本发明滤波计算多行输出高度方向参数配置流程图;
图5为本发明的数据流图;
图6为本发明数据对比图。
本发明的实施方式
实施例1
本发明为解决图像滤波无法同时多行输出结果的技术问题,提出一种通用、可配置的图像滤波计算多行输出系统和方法,系统包括直接存储器访问模块、参数配置模块、片上缓存区、线性滤波计算模块;本发明当中,使用了突发传输,以及可支持2-7尺寸大小的滤波核进行滤波,大大增强了方案的通用性,另外本发明的一个突出优点是,在进行滤波计算时,可以同时输出多行的结果,提高了访存的效率。
参见图1-2,一种通用、可配置的图像滤波计算多行输出系统,包括直接存储器访问模块、参数配置模块、片上缓存区(优选为片外存储器DDR)、线性滤波计算模块;CPU将输入图像相关的控制参数,通过AXI-lite总线存储到参数配置模块,参数配置模块从CPU获取数据后,存储这些提前计算好的控制参数,并利用这些提前计算好的控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;直接存储器访问模块按照参数配置模块发送的控制参数,通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片外存储器DDR,由片外存储器DDR对计算结果进行保存。
线性滤波计算模块包括缓冲区、控制单元、计算单元;缓冲区接收从片外存储器DDR提取输入数据,并将输入数据发送给计算单元;计算单元接收缓冲区的输入数据,生成计算后的输出结果,并将计算后的输出结果通过直接存储器访问模块发送给片外存储器DDR进行存储。
上位机的参数配置模块计算的控制参数包括涉及片上缓存空间的若干参数,该若干参数包括输出特征的宽度Wout、输出特征的高度Hout、输入通道数CHout等。
片上缓存空间的大小取决于突发传输的长度。
本发明设计了一种通用、可配置的图像滤波计算多行输出方法。
一种通用、可配置的图像滤波计算多行输出系统和方法如图3、4所示。计算单行、多行输出宽度方向参数包括:
步骤一、输入一次突发传输的长度BURST_LEN;
步骤二、宽度方向深度X_DEPTH=突发长度BURST_LEN;
步骤三、计算宽度方向输出的个数width_out_test;
步骤四、将width_out_test与Wout进行比较,如果width_out_test比Wout小,则需要右则填充的个数;
步骤五、计算宽度方向输入的个数width_in_test;
步骤六、判断宽度方向输入的个数是否不大于宽度方向深度,如果大于,则继续步骤七,如果不大于,则宽度方向需要突发传输的次数split_w_num=1,第一次宽度方向输出个数first_width_out、最后一次宽度方向输出个数last_width_out均等于Wout,第一次宽度方向输入个数first_width_in、最后一次宽度方向输入个数last_width_in均等于width_in_test;
步骤七、宽度方向输入的个数若大于宽度方向深度,确定第一次宽度方向输入个数first_width_in、剩余宽度方向输入个数res_width_in、第一次宽度方向输出个数first_width_out、剩余宽度方向输出个数res_width_out;
步骤八、判断剩余宽度方向输入个数res_width_in是否不大于宽度方向深度X_DEPTH,如果大于,则继续步骤九,如果不大于,则宽度方向需要突发传输的次数split_w_num=2,最后一次宽度方向输入个数last_width_in=剩余宽度方向输入个数res_width_in,最后一次宽度方向输出个数last_width_out=剩余宽度方向输出个数res_width_out;
步骤九、确定宽度方向一次突发传输的最大输出个数max_out_width,确定宽度方向需要突发传输的次数split_w_num;
步骤十、中间传输宽度方向输出个数middle_width_out=突发传输最大输出个数max_out_width,确定中间传输宽度方向输入个数middle_width_in;
步骤十一、最大输出个数Wout-第一次宽度方向输出个数first_width_out能否被中间传输宽度方向输出个数Middle_Width_out整除,如果能,继续步骤十二;如果不能,则确定最后一次突发传输的个数,转入步骤十三;
步骤十二、最后一次宽度方向输出个数last_width_out=中间传输宽度方向输出的个数middle_width_out;
步骤十三、确定宽度方向最后一次突发传输的特征值输入的个数last_width_in。
计算多行输出高度方向参数包括:
步骤一、输入一次突发传输的长度BURST_LEN;
步骤二、高度方向深度Y_DEPTH=7;
步骤三、计算高度方向输出的个数height_out_test;
步骤四、将height_out_test与Hout进行比较,如果height_out_test比Wout小,则需要下则填充的个数;
步骤五、计算高度方向输入的个数height_in_test;
步骤六、判断高度方向输入的个数是否不大于高度方向深度,如果大于,则继续步骤七,如果不大于,则高度方向需要突发传输的次数split_h_num=1,第一次高度方向输出个数first_height_out、最后一次高度方向输出个数last_height_out均等于Hout, 第一次高度方向输入个数first_height_in、最后一次高度方向输入个数last_height_in均等于height_in_test;
步骤七、高度方向输入的个数若大于高度方向深度,确定第一次高度方向输入个数first_height_in、剩余高度方向输入个数res_width_in、第一次高度方向输出个数first_height_out、剩余高度方向输出个数res_height_out;
步骤八、判断剩余高度方向输入个数res_height_in是否不大于高度方向深度Y_DEPTH,如果大于,则继续步骤九,如果不大于,则高度方向需要突发传输的次数split_h_num=2,最后一次高度方向输入个数last_height_in=剩余高度方向输入个数res_height_in,最后一次高度方向输出个数last_height_out=剩余高度方向输出个数res_height_out;
步骤九、确定高度方向一次突发传输的最大输出个数max_out_height,确定高度方向需要突发传输的次数split_h_num;
步骤十、中间传输高度方向输出个数middle_height_out=突发传输最大输出个数max_out_height,确定中间传输高度方向输入个数middle_height_in;
步骤十一、最大输出个数Hout-第一次宽度方向输出个数first_height_out能否被中间传输高度方向输出个数middle_height_out整除,如果能,继续步骤十二;如果不能,则确定最后一次突发传输的个数,转入步骤十三;
步骤十二、最后一次高度方向输出个数last_height_out =中间传输高度方向输出的个数middle_height_out;
步骤十三、确定高度方向最后一次突发传输的特征值输入的个数last_height_in。
一、图像滤波分析
如图2所示,图像滤波的目标是对输入特征(CNN网络中的图像或隐藏层的输出矩阵)进行下采样,同时降低输入特征的维度。
如图可见滤波前后的特征数据,为了实现卷积滤波计算的加速,传输进入硬件的特征数据需要进行并行转化,将一定数量Tin(称为并行度)的不同通道的特征值拼接在一起之后构成新的特征矩阵Feature[输入图像通道数/并行度][输入图像高度][输入图像宽度][并行度],然后再进行数据的传输。如图2所示,并行之后的图像数据通过与同一个线性滤波核进行滤波计算,得出相应的输出图像数据,就是整个硬件设计实现的功能。其中DMA模块负责将DDR中的图像数据传输到片上缓存当中,本图也展示了提取数据的顺序,包含了五种循环。
第一层循环是AXI总线的突发传输长度循环。因为数据从片外存储单元存入到片上存储器当中时是通过AXI总线进行传输的,也就是一次性会传输进来若干个并行数据包(等于突发传输长度),所以是从第一个输入通道的第一行的前若干个数据开始传输的。
第二层循环是Ky方向上的循环。这是为了能够完成高度方向的多行计算,从而得出输出结果传输出去。
第三层循环是输入图像宽度方向上的循环,第四层循环是输入图像高度方向上的循环,通过这两层循环可以将一个通道的图像完全遍历。最后一层是并行之后的通道方向上的循环,通过这层循环可以将整个图像完全遍历。
如图5所示,输入图像参数为:Win=23,Hin=24,Chin=3,Ky=2,Kx=3,Sx=2,Sy=1,Px=2,Py=1。首先搬运的数据,是first_height_in的数据,首先是宽度方向是1/2/3/4/5/6/7,高度方向则是1/24/47/70/93/116/139,一共七行七列的数据,接着往宽度方向延伸,第二次搬运的数据为宽度方向7/8/9/10/11/12/13,与高度方向7/30/53/76/99/122/145围成的七行七列数据,宽度方向以此类推first_width_in/middle_width_in/last_width_in,直到把宽度方向的数据传输完毕;接着往高度方向延伸,到了middle_height_in的数据,在此阶段再把宽度方向的first_width_in/middle_width_in/last_width_in遍历一遍;最后把last_height_in上的first_width_in/middle_width_in/last_width_in数据遍历完就完成了整个输入图像的遍历。
二、线性滤波计算模块
buffer用来存储来自DDR的图像数据,为了实现计算数据的多行输出,本发明的计算在Ky方向进行,如图5(a),该图为图5(b)输入的第一部分数据,此时卷积核尺寸Ky=2,Kx=3,Ky方向步长Sy=1,Kx方向步长Sx=2。在计算时,首先输入的数据为Ky方向的1/24/47/70/93/116/139,即第一列的所有数据,接着输入的数据为第二列的数据2/25/48/71/94/117/140,接着继续往宽度方向扩展,以此类推。Ky方向一次最多可以输入7个数据,当数据向宽度方向扩展3次时,即输入7x3的数据之后,可同时算出Hout方向6个输出结果,当遍历完宽度方向所有数据之后,即可实现多行输出的要求。
三、在忆阻器中实现滤波计算
本发明的计算单元由忆阻器阵列负责完成。
忆阻器在工作的过程中,一共有三个阶段,分别是初始化阶段、写数据阶段、读数据阶段。
第一阶段,set阶段,也就是忆阻器的初始化阶段。忆阻器在工作之前,必须经过初始化,唤醒器件,初始化的具体步骤是,向忆阻器阵列施加外部正向大电压,此时忆阻器的阻值最低,电导值最高,此阶段过后忆阻器可正常工作。
第二阶段,wirte阶段,也就是写入数据阶段,在阵列当中,本发明用忆阻器的阻值作为卷积核的数据进行运算,首先,根据想要卷积核的数据,再一次给忆阻器阵列施加负的大电压,此时忆阻器中的电导值就是卷积核参数的大小。
第三阶段,read阶段,本阶段是卷积计算过程实现的阶段,首先本发明的外部图像数据通过数字转模拟模块DAC,转成正向小电压输入阵列当中,与上一阶段写入的电导值进行运算,得出的电流值再通过模拟转数字模块ADC,输出的结果就是经过滤波之后的图像。
与现有技术相比,本发明的有益效果为:
为了实现减少电路面积的目的,本发明运用了多行输出的方法,多行输出是指计算单元返回给外部DDR最终结果中包括了多行。本发明中多行输出的参数设置,第一考虑到的是缓冲单元的最大深度等于7,这是因为目前滤波运算中使用的大小范围由2至7的卷积核,所以,本发明中,设置高度方向的存储深度为7,缓冲单元的深度决定了输出的最大行数,从而再确定输入的行数。
与传统的卷积多行输出相比,本发明的创新点在于一次能够传输多行数据。传统的卷积多行输出方法,是根据卷积核高度方向的大小Ky,来决定输入图像高度方向每一次搬运的行数,而当卷积核高度方向的大小Ky与高度方向的步长Sy不相等时,会产生高度方向的数据重叠,即overlap_y,也就是说同一行数据出现了多次搬运的情况。
如图5所示,图5是一个大小为23x24的输入图像,各个参数分别是:Win=23,Hin=24,Chin=3,Ky=2,Kx=3,Sx=2,Sy=1,Px=2,Py=1。则此时overlap_y=2-1=1,也就是说每一次搬运2行数据,其中都有一行数据与上一次重复。图5中,为了算出输出图像的第一个像素点,需要搬运两行数据,分别是1/2/3和24/25/26;当要算出Ky方向的下一个像素点时,需要搬运的数据是24/25/26和47/48/49。此时可以看出,24/25/26这一行数据被重复搬运了一次。当输入图像的参数确定下来时,本发明可以算出输出图像的高度Hout。图5的例子中输出图像的Hout=25,则传统方式的多行输出需要搬运数据的行数为25x2=50。
而本发明实现的多行输出,关键点在于,数据传输时无需关注卷积核的大小,而是多行数据直接搬运,然后在计算模块通过Ky方向的运算实现多行输出。如图5所示为输入图像,传统的多行输出需要搬运的数据行数为50行,而本发明的方法则只需要搬运Hin=24行数据。
图6表格列出了多种尺寸的输入图像传统多行输出需要搬运的数据行数与本发明搬运数据行数的对比。由表格中示例1、示例4图像数据可知,当卷积核高度方向大小Ky与高度方向步长Sy相同,即overlap_y为0时,两种方法需要搬运的数据相同。而当输入图像存在overlap_y,从图像示例2、示例3、示例5数据可以看出本发明的方法对比传统方法,需要搬运的数据大大减少。由此可知,本发明的多行输出方法,与以往方法相比,减少了数据的重复搬运,提高了访存的效率。
本发明经过模拟证明可行,结果证明对比原有方案,效率有较大的提高。可将本发明扩展为以图像的输入通道作为滤波计算的并行度。
实施例2
一种存储介质,存储介质存储有能够实现上述任意一项通用、可配置的图像滤波计算多行输出方法的程序文件。
实施例3
一种处理器,处理器用于运行程序,其中,程序运行时执行上述任意一项的通用、可配置的图像滤波计算多行输出方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的系统实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

  1. 一种通用、可配置的图像滤波计算多行输出系统,其特征在于,包括:直接存储器访问模块、参数配置模块、片上缓存区、线性滤波计算模块;其中:
    CPU将输入图像相关的控制参数,存储到参数配置模块;参数配置模块获取控制参数后利用控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;
    直接存储器访问模块按照参数配置模块发送的控制参数从片上缓存区中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片上缓存区,由片上缓存区对计算结果进行保存。
  2. 根据权利要求1所述的通用、可配置的图像滤波计算多行输出系统,其特征在于,CPU将输入图像相关的控制参数,通过AXI-lite总线存储到参数配置模块;参数配置模块从CPU获取控制参数后,利用控制参数控制直接存储器访问模块的存取操作,以及控制线性滤波计算模块的卷积计算;直接存储器访问模块按照参数配置模块发送的控制参数,通过AXI4总线从片外存储器DDR中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片外存储器DDR,由片外存储器DDR对计算结果进行保存。
  3. 根据权利要求1所述的通用、可配置的图像滤波计算多行输出系统,其特征在于,线性滤波计算模块包括缓冲区、控制单元、计算单元;缓冲区接收从片外存储器DDR提取输入数据,并将输入数据发送给计算单元;计算单元接收缓冲区的输入数据,生成计算后的输出结果,并将计算后的输出结果通过直接存储器访问模块发送给片外存储器DDR进行存储。
  4. 一种通用、可配置的图像滤波计算多行输出方法,其特征在于,包括以下步骤:
    CPU将输入图像相关的控制参数,存储到参数配置模块;参数配置模块获取控制参数后利用控制参数控制直接存储器访问模块的存取操作以及控制线性滤波计算模块的卷积计算;
    直接存储器访问模块按照参数配置模块发送的控制参数从片上缓存区中获取与控制参数相匹配的图像输入数据,并将该输入数据发送给线性滤波计算模块;线性滤波计算模块按照参数配置模块发送的控制参数,进行与控制参数相匹配的卷积计算,并将计算结果通过直接存储器访问模块发送到片上缓存区,由片上缓存区对计算结果进行保存。
  5. 根据权利要求4所述的通用、可配置的图像滤波计算多行输出方法,其特征在于,计算单行、多行输出宽度方向参数包括:
    步骤一、输入一次突发传输的长度BURST_LEN;
    步骤二、宽度方向深度X_DEPTH=突发长度BURST_LEN;
    步骤三、计算宽度方向输出的个数width_out_test;
    步骤四、将width_out_test与Wout进行比较,如果width_out_test比Wout小,则需要右则填充的个数;
    步骤五、计算宽度方向输入的个数width_in_test;
    步骤六、判断宽度方向输入的个数是否不大于宽度方向深度,如果大于,则继续步骤七,如果不大于,则宽度方向需要突发传输的次数split_w_num=1,第一次宽度方向输出个数first_width_out、最后一次宽度方向输出个数last_width_out均等于Wout,第一次宽度方向输入个数first_width_in、最后一次宽度方向输入个数last_width_in均等于width_in_test;
    步骤七、宽度方向输入的个数若大于宽度方向深度,确定第一次宽度方向输入个数first_width_in、剩余宽度方向输入个数res_width_in、第一次宽度方向输出个数first_width_out、剩余宽度方向输出个数res_width_out;
    步骤八、判断剩余宽度方向输入个数res_width_in是否不大于宽度方向深度X_DEPTH,如果大于,则继续步骤九,如果不大于,则宽度方向需要突发传输的次数split_w_num=2,最后一次宽度方向输入个数last_width_in=剩余宽度方向输入个数res_width_in,最后一次宽度方向输出个数last_width_out=剩余宽度方向输出个数res_width_out;
    步骤九、确定宽度方向一次突发传输的最大输出个数max_out_width,确定宽度方向需要突发传输的次数split_w_num;
    步骤十、中间传输宽度方向输出个数middle_width_out=突发传输最大输出个数max_out_width,确定中间传输宽度方向输入个数middle_width_in;
    步骤十一、最大输出个数Wout-第一次宽度方向输出个数first_width_out能否被中间传输宽度方向输出个数Middle_Width_out整除,如果能,继续步骤十二;如果不能,则确定最后一次突发传输的个数,转入步骤十三;
    步骤十二、最后一次宽度方向输出个数last_width_out=中间传输宽度方向输出的个数middle_width_out;
    步骤十三、确定宽度方向最后一次突发传输的特征值输入的个数last_width_in。
  6. 根据权利要求4所述的通用、可配置的图像滤波计算多行输出方法,其特征在于,计算多行输出高度方向参数包括:
    步骤一、输入一次突发传输的长度BURST_LEN;
    步骤二、高度方向深度Y_DEPTH=7;
    步骤三、计算高度方向输出的个数height_out_test;
    步骤四、将height_out_test与Hout进行比较,如果height_out_test比Wout小,则需要下则填充的个数;
    步骤五、计算高度方向输入的个数height_in_test;
    步骤六、判断高度方向输入的个数是否不大于高度方向深度,如果大于,则继续步骤七,如果不大于,则高度方向需要突发传输的次数split_h_num=1,第一次高度方向输出个数first_height_out、最后一次高度方向输出个数last_height_out均等于Hout, 第一次高度方向输入个数first_height_in、最后一次高度方向输入个数last_height_in均等于height_in_test;
    步骤七、高度方向输入的个数若大于高度方向深度,确定第一次高度方向输入个数first_height_in、剩余高度方向输入个数res_width_in、第一次高度方向输出个数first_height_out、剩余高度方向输出个数res_height_out;
    步骤八、判断剩余高度方向输入个数res_height_in是否不大于高度方向深度Y_DEPTH,如果大于,则继续步骤九,如果不大于,则高度方向需要突发传输的次数split_h_num=2,最后一次高度方向输入个数last_height_in=剩余高度方向输入个数res_height_in,最后一次高度方向输出个数last_height_out=剩余高度方向输出个数res_height_out;
    步骤九、确定高度方向一次突发传输的最大输出个数max_out_height,确定高度方向需要突发传输的次数split_h_num;
    步骤十、中间传输高度方向输出个数middle_height_out=突发传输最大输出个数max_out_height,确定中间传输高度方向输入个数middle_height_in;
    步骤十一、最大输出个数Hout-第一次宽度方向输出个数first_height_out能否被中间传输高度方向输出个数middle_height_out整除,如果能,继续步骤十二;如果不能,则确定最后一次突发传输的个数,转入步骤十三;
    步骤十二、最后一次高度方向输出个数last_height_out =中间传输高度方向输出的个数middle_height_out;
    步骤十三、确定高度方向最后一次突发传输的特征值输入的个数last_height_in。
  7. 根据权利要求4所述的通用、可配置的图像滤波计算多行输出方法,其特征在于,传输进入硬件的特征数据进行并行转化,将若干数量不同通道的特征值拼接在一起之后构成新的特征矩阵,然后再进行数据的传输;
    并行之后的图像数据通过与同一个线性滤波核进行滤波计算,得出相应的输出图像数据。
  8. 根据权利要求7所述的通用、可配置的图像滤波计算多行输出方法,其特征在于,图像数据传输到片上缓存当中时,根据提取数据的顺序,包含了五种循环:
    第一层循环是AXI总线的突发传输长度循环;数据从第一个输入通道的第一行的前若干个数据开始传输的;
    第二层循环是Ky方向上的循环;
    第三层循环是输入图像宽度方向上的循环;
    第四层循环是输入图像高度方向上的循环,通过这两层循环将一个通道的图像完全遍历;
    最后一层是并行之后的通道方向上的循环,通过这层循环将整个图像完全遍历。
  9. 根据权利要求4所述的通用、可配置的图像滤波计算多行输出方法,其特征在于,buffer用来存储来自DDR的图像数据,首先输入的数据为Ky方向的1/24/47/70/93/116/139,接着输入的数据为第二列的数据2/25/48/71/94/117/140,接着继续往宽度方向扩展,以此类推;
    Ky方向一次最多可以输入7个数据,当数据向宽度方向扩展3次时,同时算出Hout方向6个输出结果,当遍历完宽度方向所有数据之后,实现多行输出的要求。
  10. 根据权利要求4所述的通用、可配置的图像滤波计算多行输出方法,其特征在于,线性滤波计算模块的卷积计算有三个阶段,分别是初始化阶段、写数据阶段、读数据阶段:
    第一阶段为set阶段,忆阻器的初始化阶段;初始化的具体步骤是,向忆阻器阵列施加外部正向大电压;
    第二阶段为wirte阶段,在阵列当中,用忆阻器的阻值作为卷积核的数据进行运算,首先,根据想要卷积核的数据,再一次给忆阻器阵列施加负的大电压;
    第三阶段为read阶段,为卷积计算过程实现的阶段,首先外部图像数据通过数字转模拟模块DAC,转成正向小电压输入阵列当中,与上一阶段写入的电导值进行运算,得出的电流值再通过模拟转数字模块ADC,输出的结果为经过滤波之后的图像。
PCT/CN2023/133763 2022-11-29 2023-11-23 一种通用、可配置的图像滤波计算多行输出系统和方法 WO2024114505A1 (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211506014.1 2022-11-29

Publications (1)

Publication Number Publication Date
WO2024114505A1 true WO2024114505A1 (zh) 2024-06-06

Family

ID=

Similar Documents

Publication Publication Date Title
JP6767660B2 (ja) プロセッサ、情報処理装置及びプロセッサの動作方法
US10936937B2 (en) Convolution operation device and convolution operation method
US20210158068A1 (en) Operation Circuit of Convolutional Neural Network
CN108573305B (zh) 一种数据处理方法、设备及装置
JP2018067154A (ja) 演算処理回路および認識システム
US8904069B2 (en) Data processing apparatus and image processing apparatus
CN111242277A (zh) 一种基于fpga设计的支持稀疏剪枝的卷积神经网络加速器
CN109564545A (zh) 用于压缩地址的方法和设备
US9104526B2 (en) Transaction splitting apparatus and method
EP4156079A1 (en) Image data storage method, image data processing method and system, and related apparatus
CN110958362A (zh) 基于分块查表的图像校正系统及其方法
EP3844610B1 (en) Method and system for performing parallel computation
US20220004840A1 (en) Convolutional neural network-based data processing method and device
CN111626405A (zh) 一种cnn加速方法、加速装置及计算机可读存储介质
US20210241070A1 (en) Hybrid convolution operation
WO2024114505A1 (zh) 一种通用、可配置的图像滤波计算多行输出系统和方法
JP6970827B2 (ja) 演算処理装置
WO2024093396A1 (zh) 一种图像处理方法、装置及电子设备和非易失性可读存储介质
WO2021037042A1 (zh) 一种池化处理方法及装置、存储介质
CN109948787B (zh) 用于神经网络卷积层的运算装置、芯片及方法
CN106909320A (zh) 一种多维数据扩充传输的方法、装置以及系统
WO2020093968A1 (zh) 卷积处理引擎及控制方法和相应的卷积神经网络加速器
CN109215001B (zh) 基于fpga的高温差自适应平台直方图均衡实现方法
CN116166185A (zh) 缓存方法、图像传输方法、电子设备及存储介质
US11210105B1 (en) Data transmission between memory and on chip memory of inference engine for machine learning via a single data gathering instruction