CN111897579B - 图像数据处理方法、装置、计算机设备和存储介质 - Google Patents
图像数据处理方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111897579B CN111897579B CN202010829873.9A CN202010829873A CN111897579B CN 111897579 B CN111897579 B CN 111897579B CN 202010829873 A CN202010829873 A CN 202010829873A CN 111897579 B CN111897579 B CN 111897579B
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- channel data
- image
- unit
- Prior art date
- Legal status (The legal status 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 status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Image Processing (AREA)
Abstract
本申请涉及一种图像数据处理方法,包括:获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C份图像通道数据;将图像数据存储至本地内存的C个存储区中,每个存储区中N个存储单元分别存储N张待处理图像的一份图像通道数据;当发生数据读取指令时,根据数据读取指令携带的当前地址确定历史地址,从而基于存储地址从本地内存中读取目标图像通道数据;将读取的目标图像通道数据按二维矩阵的形式进行排布,对应相同通道的数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的数据分布在相邻的两个矩阵列中;将按二维矩阵形式排布的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果。采用本方法能够提高数据处理效率。
Description
技术领域
本申请涉及计算机技术技术领域,特别是涉及一种图像数据处理方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,出现了机器学习技术,基于机器学习技术的各种机器学习模型可以通过大量的计算来提高模型处理精度。在实际处理过程中,对于涉及到机器学习模型的卷积计算,常常可通过基于图形处理器(Graphics Processing Unit,GPU)的多线程SIMD模块进行并行处理以提高计算效率。其中,SIMD(Single Instruction MultipleData,单指令多数据)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。
传统方案中,基于GPU多线程SIMD的处理器中可包括多个流式多处理器(SM)。每个SM有16个load/store(内存)模块,一个时钟周期允许16个线程同时计算源地址和目的地址,并且,每个SM可处理48个warp(线程束)共计1536个线程,这样以实现批量数据的并行处理。而对于涉及到深度学习计算中的矩阵乘法和多维卷积时,SIMD模块常常会碰到数据存取的速度大大低于数据处理的速度。因此当执行矩阵乘法或多维卷积等计算密集型任务时,会存在数据处理效率低的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种对大量数据进行批量处理时能够提高处理效率的图像数据处理方法、装置、计算机设备和存储介质。
一种图像数据处理方法,所述方法包括:
获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数;
将所述图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据;
当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址;所述预设数量根据C除以N的商确定;
基于所述当前地址和所述历史地址,从所述本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据;
将读取到的所述目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中;
将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;所述脉动阵列的宽度与通道数相对应。
一种图像数据处理装置,所述装置包括:
获取模块,用于获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数;
存储模块,用于将所述图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据;
确定模块,用于当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址;所述预设数量根据C除以N的商确定;
数据读取模块,用于基于所述当前地址和所述历史地址,从所述本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据;
排布模块,用于将读取到的所述目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中;
运算模块,用于将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;所述脉动阵列的宽度与通道数相对应。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数;
将所述图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据;
当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址;所述预设数量根据C除以N的商确定;
基于所述当前地址和所述历史地址,从所述本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据;
将读取到的所述目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中;
将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;所述脉动阵列的宽度与通道数相对应。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数;
将所述图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据;
当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址;所述预设数量根据C除以N的商确定;
基于所述当前地址和所述历史地址,从所述本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据;
将读取到的所述目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中;
将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;所述脉动阵列的宽度与通道数相对应。
上述图像数据处理方法、装置、计算机设备和存储介质,获取N张待处理图像的图像数据,其中,每张待处理图像的图像数据均包括C个通道的图像通道数据。将上述批量的图像通道数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据。当发生数据读取指令时,根据数据读取指令中携带的当前地址获取预设数量的历史地址,并基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。进而将读取到的目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。当需要进行批量运算时,可直接将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果。这样,通过当前地址和历史地址来实现合理的数据寻址,进而通过脉动阵列来实现数据运算,既能实现单指令多数据流并行处理,又可避免由于数据存取与处理的速度不匹配所造成的卡顿现象,实现合理的内存交互和高效灵活的协同控制,大大提高了数据处理效率和处理性能,并且通过流水线式的数据并行处理还能大大降低能耗。
附图说明
图1为一个实施例中图像数据处理方法的应用环境图;
图2为一个实施例中执行本申请的图像数据处理方法的系统整体架构示意图;
图3为一个实施例中SIMD单元的结构示意图;
图4(A)为一个实施例中脉动阵列的结构示意图;
图4(B)为一个实施例中脉动阵列中的处理单元的结构示意图;
图4(C)为一个实施例中矩阵乘法的示意图;
图4(D)为一个实施例中脉动阵列的计算原理图;
图5为一个实施例中图像数据处理方法的流程示意图;
图6为一个实施例中图像数据处理的原理架构图;
图7(A)为一个实施例中卷积计算的原理示意图;
图7(B)为一个实施例中对卷积核拆分示意图;
图8为一个实施例中将卷积计算转化成矩阵乘法计算的原理示意图;
图9为一个具体实施例中图像数据处理方法的流程图;
图10为一个实施例中图像数据处理装置的结构框图;
图11为另一个实施例中图像数据处理装置的结构框图;
图12为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的图像数据处理方法,可以应用于如图1所示的应用环境中。其中,用户终端110通过网络与计算机设备120进行通信。用户终端110采集多于一张的待处理图像,并以每N张待处理图像为一个处理批次传输至计算机设备120中。计算机设备120获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数。计算机设备120将图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据.当发生数据读取指令时,计算机设备120确定数据读取指令中携带的当前地址,并根据当前地址获取预设数量的历史地址,预设数量为C除以N的商。计算机设备120基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。计算机设备120将读取到的目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。计算机设备120将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果,其中,脉动阵列的宽度与通道数相对应。
其中,用户终端110可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。计算机设备120具体可以是终端或服务器,其中,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
本申请涉及人工智能领域,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
而本申请各实施例所提供的图像数据处理方法具体涉及到人工智能领域中的机器学习技术。其中,机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。
本申请的其中一个具体的应用场景,就是在通过机器学习模型对待处理图像进行处理的具体场景,在这个场景中,可通过本申请各实施例所提供的图像数据处理方法,可以大大提高机器学习模型在计算机设备上进行卷积运算的处理效率,进而提高机器学习模型的处理效率。
在对本申请的技术方案进行详细说明之前,先对本申请的系统架构进行说明。用于实现本申请的系统架构主要包括SIMD模块和脉动阵列模块。参考图2,图2为一个实施例中执行本申请的图像数据处理方法的系统整体架构示意图。如图2所示,计算机设备的内部系统架构中部署有SIMD模块和SA(Systolic Array,脉动阵列)模块。其中,SIMD模块中包括有全局控制模块(Global SIMD Control Unit)和至少C个SIMD lane(SIMD单元)。每个SIMD单元中包括有内存区(Memory)、寄存器(REG)、运算器(ALU)和控制子单元(Control)。SIMD模块可通过与片下存储(HBM)进行交互以获取待处理图像的图像数据。脉动阵列(SA)是一种由多个同构的具有计算能力的处理单元或节点组合而成的同质性的网络。每个处理单元(PE,Process Element)可以独立的进行计算,并将计算结果传递给周围的处理单元。脉动阵列的结构特性使它能够在消耗较小的内存带宽的基础上实现较高的运算吞吐量。而神经网络计算中使用了大量的卷积和矩阵乘的计算,采用脉动阵列来辅助进行运算将大大提高数据处理效率。其中,在本申请各实施例中的脉动阵列具体可包括C*C个处理单元(PE,Process Element)。
继续参考图3,图3为一个实施例中SIMD单元的结构示意图。如图3所示,SIMD单元主要分为以下几部分:片上数据存储(VMEM)、通用SIMD计算单元以及SIMD控制单元。SIMD单元是一个two-level(2层)的SIMD架构。如图3所示,片上数据存储VMEM具体可由C个(比如128个)SIMD Lane中的SRAM组成,一共有C*N个存储单元(bank),比如一共有128*8个bank,实现片上的数据的存储。并且通过crossbar实现与片下数据以及寄存器的交互。当VMEM中的片上数据需要进行通用SIMD计算时,通过X-bar可将数据载入寄存器(比如图3中示出的32bit的Reg,也就是32位寄存器),然后在SIMD单元的ALU中完成SIMD通用计算。
而如果在SIMD单元中进行计算时,常常会存在数据存取的速度大大低于数据处理的速度。因此当执行矩阵乘法、或多维卷积等计算密集型任务时,SIMD单元性能会受到限制。而本申请就基于此进行了改进,将载入到寄存器中的数据传输至脉动阵列,在脉动阵列中实现矩阵乘法计算,再通过脉动阵列再将计算结果写回SIMD单元,从而完成脉动阵列计算的执行流程。脉动阵列的边长大小与SIMD Lane的数目相同,均为C个(比如128个)。每个SIMD Lane负责脉动阵列一行数据读入与一列数据写出的数据处理。其中,SIMD单元将数据传入脉动阵列以及从脉动阵列中回传数据至SIMD单元,可通过serializer/deserializer(序列化器和反序列化器)实现。其中,序列化器和反序列化器是一种进行串行数据和并行数据相互转换的收发集成电路。
可以理解,SIMD模块的每次进行数据读写,对应脉动阵列处理多个时钟周期内的数据交互,此处的多个实际上对应的是待处理图像的数量N。比如,SIMD模块每次进行数据读取的规模是C*N格式的二维矩阵,那么相应的一次数据读取,对应脉动阵列执行N次的数据交互。脉动阵列的具体执行方式以及SIMD与脉动阵列具体的数据交互方式在下面的实施例中会进行更加详细的介绍。
参考图4(A),图4(A)为一个实施例中脉动阵列的结构示意图。如图4(A)所示,脉动阵列由许多独立的Process Element(PE)组成。PE的示意图如图4(B)所示,每个PE内部都有自己的ALU和Buffer(缓冲器)。每个PE可以完成独立的计算,并且通过与相邻的PE进行通信,从而在数据不断复用的情况下,实现高效节能的计算。脉动阵列有许多不同的控制方式,在本申请的设计中,将采用权值固定的设计方式实现整体的计算流程。
继续参考图4(B),PE在每个时钟周期内,从左侧获取输入数据(Input Data),与内部预先载入至权值缓冲器(比如Weight Buffer1和Weight Buffer2)中的权值参数(WeightData)进行乘法计算,然后与从相邻PE处获得的Partial-Sum数据(也可称作中间结果)相加,从而得到当前PE的中间结果并将中间结果保存在当前PE的Output Buffer(输出缓存)中,以便将当前PE的中间结果传输至其他相邻的PE处,以实现累加运算。通过对脉动阵列中所有的PE进行统一的控制,就可以实现从脉动阵列的左侧流入数据,通过PE内部的计算以及PE之间的通信,从而通过脉动的方式完成整个矩阵乘法计算。
下面以一个矩阵乘法的计算流程为例,来具体介绍通过脉动阵列实现矩阵乘法时候的每个时钟周期(cycle)的计算细节。如图4(C)所示,图4(C)为一个实施例中矩阵乘法的示意图,矩阵X(2*3)与矩阵W(3*2)相乘得到矩阵Y(2*2)。其中,矩阵X的第一行元素为(X1, 1X1,2X1,3),矩阵X的第二行元素为(X2,1X2,2X2,3)。矩阵W的第一行元素为(W1,1W1,2),矩阵W的第二行元素为(W2,1W2,2),矩阵W的第三行元素为(W3,1W3,2)。当矩阵X和矩阵W相乘后所得到的矩阵Y的第一行元素为(Y1,1Y1,2),矩阵Y的第二行元素为(Y2,1Y2,2)。
继续参考图4(D),图4(D)为一个实施例中脉动阵列的计算原理图。图4(D)中展示了计算过程两个矩阵的数据时空图,其中矩阵W需预取并固定在每个PE的weight buffer(权值缓冲器)中,在计算过程中W值不进行传输。对于矩阵X,在不同时钟周期内将不同的数值传入PE阵列中,计算过程中矩阵X的数值会自上到下流过PE阵列。以下为每个时钟周期所执行的操作:
Cycle 0:W预取到PE阵列之中。X1,1传入PE1,1,PE1,1计算X1,1*W1,1。
Cycle 1:X2,1,X1,2分别传入PE1,1,PE1,2,X1,1由PE1,1向下传入PE2,1。Cycle0的计算结果X1,1*W1,1由向右传入PE1,2。PE1,1计算X2,1*W1,1,PE1,2计算X1,2*W2,1+X1,1*W1,1,PE2,1计算X1,1*W1,2。
Cycle 2:类似的,矩阵X在PE阵列中向下传输,计算结果由左侧PE传入右侧PE。Y1,1的结果由PE阵列的右侧流出阵列。
Cycle 3:经过四个周期,PE阵列输出两个结果Y1,2,Y2,1。
Cycle 4:经过五个周期,输出结果Y2,2,矩阵乘法计算完成。
可以理解,上述图4(C)和图4(D)中脉动阵列进行矩阵乘法的运算为示意性的说明,不用于限定本申请。在其他的实施例中,特别是当进行大量数据的矩阵乘法或多维卷积时,需要参与计算的矩阵元素会大大多于上述示例,脉动阵列中参与运算的处理单元的数量也将大大多于上述示意中的数量,输出运算结果所需要的时钟周期也会大大多于上述5个时钟周期。可以理解,虽然当脉动阵列进行运算的数据量会增加,但其进行矩阵乘法的运算原理与上述图4(D)中的原理示意图是相似的。
下面再结合本申请的各个实施例来详细说明本方案:
在一个实施例中,如图5所示,提供了一种图像数据处理方法,以该方法应用于图1中的计算机设备120为例进行说明,该图像数据处理方法包括以下步骤:
步骤S502,获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数。
其中,待处理图像是与当前目标任务相对应的图像,具体可以是自然图像、人脸图像或其他种类的图像等,本申请实施例对此不作限定。可以理解,对于很多需要使用机器学习模型来进行处理的业务场景中,通常都是同时对一个批次的待处理图像进行并行处理,得到对应的处理结果。本申请实施例中的N张待处理图像中的N就可以认为是当前处理的批次数,也称作mini-batch。
图像数据是与该待处理图像对应的数据,图像数据具体可以是待处理图像的像素值,也可以是待处理图像经过某些预设处理后的处理数据。比如,待处理图像的图像数据具体可以是待处理图像的像素值,或者是待处理图像经过了机器学习模型的某些卷积层后输出的图像特征数据等,本申请实施例对此不作限定。
可以理解,在机器学习模型处理图像数据的过程中,为了保障处理精度,通常都是以通道为维度来进行处理的,也就是说,一张待处理图像所对应的图像数据,具体可以包括有多于一个通道的图像通道数据。
具体的,计算机设备可从本地或其他计算机设备处获取当前批次的N张待处理图像,并确定每张待处理图像的C个通道的图像通道数据。在一个实施例中,计算机设备可先获取到一系列的原始图像,通过对这一系列的原始图像进行预处理,得到当前批次的N张待处理图像。预处理比如,计算机设备可对原始图像进行图像缩放或裁减处理等,以得到预设格式大小的待处理图像等。
可以理解,基于计算机设备的硬件设备的配置,计算机设备可一次并行处理C个通道的图像通道数据,而往往在实际处理过程中,一张待处理图像所对应的通道数量可能是少于C个,或刚好C个,还或者多于C个,那么在这种情况下,就需要对数据进行拆分或填充。比如,每张待处理图像所对应的通道数量为Q个,当Q小于C时,计算机设备可通过数据填充的方式获取将(C-Q)个通道的图像通道数据进行填充,以获得与该待处理图像对应的图像数据。其中,进行数据填充,具体可以是采用预设数值,比如数值0进行填充。当Q等于C时,则计算机设备可刚好获取每张待处理图像所对应的C个通道的图像通道数据。当Q大于C时,计算机设备可对矩阵进行分割,将Q个通道的图像通道数据进行拆分,每C个为当前执行的一组,对于划分出的不足C个的则采用预设数值填充至C个通道。对于每一组都采用相同的方式执行本申请各实施例所提供的图像数据处理,再讲每组各自对应的运算结果进行合并,即可得到最终的运算结果。
可以理解,在N维度上同样如此,对于与目标任务对应的多张待处理图像,计算机设备可每次获取N张作为当前批次进行并行处理。对于不足N张的组合计算机设备可直接对不足N张的待处理图像进行处理,也可采用预设数据进行填充,比如填充全黑或全白的图像等,本申请实施例对此不做限定。
步骤S504,将图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据。
具体的,计算机设备可将N张待处理图像的图像数据按通道存储至本地内存的C个存储区中,每个存储区对应其中一个通道的图像通道数据。其中,每个存储区中包括有至少N个存储单元,每个存储单元中存储一张待处理图像的其中一个通道的图像通道数据。
在一个实施例中,计算机设备可预先将本地存储空间划分成C*N的排布形式,其中,C对应通道数,N对应待处理图像的个数。也就是说,计算机设备内可部署有至少C个的存储区,每个存储区包括有至少N个存储单元。其中,存储区的数量与通道数量的相匹配的,而一个存储区中的存储单元的数量与一个批次中的待处理图像的数量是相匹配的。
在一个实施例中,计算机设备可将图像数据存储至SIMD模块中。该SMID模块包括有C个SMID lane,每个SMID lane中的SRAM作为一个存储区。一个SRAM中包括有N个bank,一个bank作为一个存储单元。也就是说,计算机设备可将图像数据存储到不同的bank中,在读取数据时就可避免不同bank间的读写竞争。
在一个实施例中,每张待处理图像中的每份图像通道数据均包括I个单元通道数据,每份图像通道数据中的I个单元通道数据分别存储在一个存储单元的I个存储位中,且不同存储位对应不同的存储地址;当前地址为其中一个存储位所对应的存储地址;I为大于等于1的正整数。
可以理解,每份图像通道数据是对应于一张图而言的,而在实际处理的过程中,通常都是会将一张图划分成多个单元来并行处理的。也就是说,一份图像通道数据具体可包括有I个单元通道数据。其中,I具体可以是预设的数值,也可以是输出矩阵中的元素个数。而I份单元通道数据共同构成一份图像通道数据。这样,就可实现对待处理图像的图像数据进行矩阵乘法运算后,得到预设大小的输出矩阵。
参考图6,图6为一个实施例中图像数据处理的原理架构图。以C为128,N为8为例进行说明,如图6中的601部分所示,每个VMEM lane中对应存储8张待处理图像的其中一个通道的图像通道数据。一个lane中的一个bank对应存储一张待处理图像的一个通道的图像通道数据,而一个bank中包括有I个存储位,每个存储位中存储有一个单元通道数据。比如图6中的VMEM lane 0中的(0,0,0)、(0,0,1)……(0,0,I-1)共I个存储位,构成了一个存储单元。这个存储单元中存储有某张待处理图像的某个通道的图像通道数据。
可以理解,每个存储位对应一个存储地址,计算机设备可基于存储地址获取该存储位中存储的单元通道数据。这样,将每张待处理图像的图像数据划分成多个通道所对应的图像通道数据,并将每份图像通道数据划分成I个单元通道数据,便于以单元通道数据为基准实现卷积运算。
步骤S506,当发生数据读取指令时,确定数据读取指令中携带的当前地址,并根据当前地址获取预设数量的历史地址;预设数量根据C除以N的商确定。
具体地,计算机设备可按一定周期触发数据读取指令,在各个数据读取周期内所触发的数据读取指令中都携带有当前待访问数据所对应的地址。计算机设备可根据当前地址往前查找,获取预设数量个的历史触发的数据读取指令所携带的历史地址。其中,预设数量具体可以是通道数C除以N的商,或者是C除以N的商的向上取整的值,也就是当C除以N未除尽存在余数的情况下可以是商的值加一。
在一个实施例中,计算机设备可按预先设定的规则获取每次需要进行数据读取时所对应的存储地址。进而在每个数据读取周期到来时就可基于当前数据读取周期所对应的存储地址(也就是当前地址)生成当次的数据读取指令。可以理解,由于计算机设备每次在进行数据读取时是会遵循一定规律的,比如在每个时间读取周期内,都会从首个存储区的首个存储单元中的第i个存储位开始读取,那么在随着数据读取周期的递增,相应的当前地址也具有一定的规律,比如是首个存储区的首个存储单元中的第i个存储位,其中i随着数据读取周期递增而递增。
在一个实施例中,步骤S506,也就是当发生数据读取指令时,确定数据读取指令中携带的当前地址,并根据当前地址获取预设数量的历史地址的步骤,具体包括:当发生数据读取指令时,确定数据读取指令中携带的当前地址;将当前地址输入至串入并出形式的移位寄存器中,通过移位寄存器输出历史输入过的预设数量的历史地址。
其中,移位寄存器是一种在若干相同时间脉冲下工作的以触发器级联为基础的器件。串入并出形式的移位寄存器,可以将输入的串行数据以并行格式输出。串行通信要求的数据完成输入之后,就可以在输出端的各位同时读出并行数据。具体地,计算机设备可将当前数据读取周期所对应的当前地址输入至串入并出形式的移位寄存器中,通过移位寄存器输出历史输入过的预设数量的历史地址。其中,当前数据读取周期也就是当次所发起的数据读取指令所对应的周期。
在一个实施例中,为了实现脉动阵列的时空模式寻址,可预先在该SIMD模块的全局控制模块中部署一个SIPO的移位寄存器。因此每次进行脉动阵列的寻址时,计算机设备可将当前的地址数据进行输入,同时读出之前输入的预设数量的历史地址,从而实现了地址数据的记录控制。
上述实施例中,通过串入并出形式的移位寄存器可获取与当前数据读取周期所对应的全部的存储地址,进而可基于获取的存储地址查找到目标图像通道数据。
步骤S508,基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。
具体地,计算机设备可基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。其中,预设偏移方式具体可以是对于不同通道的目标图像数据进行读取时,在后的通道会相较于前一个通道进行一个存储单元偏移的方式。也就是对于每个存储区中的目标图像通道数据的读取时,会基于前一个存储区所读取的数据进行一个存储单元的偏移后再读取。
在一个实施例中,计算机设备可基于当前地址和各历史地址,按预设偏移方式读取与当前数据读取周期对应的目标图像通道数据,进而将读取的目标图像通道数据载入至当前数据读取周期所对应的寄存器中并按二维矩阵的形式排布。对于二维矩阵中空缺的元素则可以预设数值,比如数值0进行填充。
在一个实施例中,该当前地址为首个存储区中的首个存储单元的第i个存储位的存储地址,i小于等于I;基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据,包括:在当前数据读取周期内,基于当前地址,确定首个存储区中包括首个存储单元的连续N个存储单元中每个存储单元的第i个存储位的存储地址,并基于确定的存储地址获取对应的单元通道数据;对于首个存储区之后的N-1个存储区中的每个存储区,基于当前地址,均按照相较于上一个存储区进行一个存储单元偏移的方式从相应存储区中对应第i个存储位处,获取对应的单元通道数据;对于当前地址之前的各历史地址,分别基于相应历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据;其中,当前数据读取周期内所读取的单元通道数据用于构成C*N格式的二维矩阵。
可以理解,脉动阵列在进行运算时,每个时钟周期需要的数据对应在内存区中的存储并不是连续的。如图4(D)所示,每个时钟周期脉动阵列获取的目标图像通道数据的存储地址,既与当前数据读取周期所对应的当前地址相关,也与之前若干个时刻的历史地址有关。这种脉动阵列的特点叫做脉动阵列寻址的时空特性。因此在实现SIMD模块与脉动阵列模块的混合架构时,需要合理的设计实现这两者之间的数据通信和控制模块,以使得数据的读取与处理可以实现流水线工作,从而大大提高数据处理效率。
在一个实施例中,计算机设备可在当前数据读取周期内,基于当前所对应的首个存储区中包括首个存储单元的连续N个存储单元中每个存储单元的第i个存储位的存储地址开始,进行数据寻址,并基于确定的存储地址获取对应的单元通道数据。对于首个存储区之后的N-1个存储区中的每个存储区,基于当前地址,均按照相较于上一个存储区进行一个存储单元偏移的方式从相应存储区中对应第i个存储位处,获取对应的单元通道数据。而对于该当前地址之前的各历史地址,分别基于相应历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据。这些基于当前地址和历史地址所读取的各目标图像通道数据,用于构成C*N格式的二维矩阵。
举例说明,对于假设当前数据读取周期为第j个数据读取周期,其相对应的当前地址为Zj。在第j个数据读取周期之前的16个数据读取周期各自所对应的历史地址分别为Zj-1,Zj-2,Zj-3,……,Zj-16。计算机设备可基于Zj至Zj-16这17个存储地址来获取第j个数据读取周期所对应的目标图像通道数据,已构成C*N形式的二维矩阵。
可以理解,在下一个数据读取周期j+1到来时,Zj将作为第j+1个数据读取周期所对应的其中一个历史地址。计算机设备会基于存储地址Zj在第j个数据读取周期内所读取的数据往下,按预设读取规则继续读取第j+1个数据读取周期所对应的单元通道数据。同样的,对于第Zj-1至Zj-15个历史地址,计算机设备也会基于各个历史地址在第j个数据读取周期内所读取的数据往下,按预设读取规则继续读取第j+1个数据读取周期所对应的单元通道数据。
上述实施例中,对于每一个数据读取周期,都可基于当前数据读取周期所对应的当前地址和历史地址,按预设偏移方式来获取满足脉动阵列进行矩阵乘法运算所需的数据,实现了单指令多数据流与脉动阵列互相协作以完成矩阵乘法运算,进而大大提高了对于大量数据进行批量处理时的处理效率。
在一个实施例中,对于当前地址之前的各历史地址,分别基于相应历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据,包括:确定前一个数据读取周期内通过各历史地址分别读取的单元通道数据;根据在前一个数据读取周期内所读取的单元通道数据,按预设读取规则获取与各存储区分别对应、且与当前数据读取周期对应的单元通道数据;其中,预设读取规则包括:对于同一个存储区的单元通道数据的读取,均按照存储位从低至高依次递增的顺序进行读取,且对于同一个存储区内不同存储单元中对应相同存储位的单元通道数据的读取,均按照存储单元从低至高依次递增的顺序进行读取。
具体的,计算机设备可确定前一个数据读取周期内通过各历史地址分别读取的单元通道数据,进而根据在前一个数据读取周期内所读取的单元通道数据,按预设读取规则获取与各存储区分别对应、且与当前数据读取周期对应的单元通道数据。计算机设备在进行数据读取时,会遵循以下预设读取规则:对于同一个存储区的单元通道数据的读取,均按照存储位从低至高依次递增的顺序进行读取,且对于同一个存储区内不同存储单元中对应相同存储位的单元通道数据的读取,均按照存储单元从低至高依次递增的顺序进行读取。
可以理解,每一个历史地址,在其相应的历史数据读取周期内,都是作为当前地址进行数据读取的。在相应的历史数据读取周期内,其对应的数据读取方式,都是按照从首个存储区中包括首个存储单元的连续N个存储单元中每个存储单元的第i个存储位进行读取,然后,对于首个存储区之后的N-1个存储区中的每个存储区,均按照相较于上一个存储区进行一个存储单元偏移的方式从相应存储区中对应第i个存储位处,获取对应的单元通道数据。
下面结合图6对数据读取和排布进行一个详细的说明:参考图6,在矩阵乘法计算中,N张待处理图像所对应的图像数据存储在C个Lane的VMEM中。由于脉动阵列的寻址存在上述时空特性,因此每一次VMEM到REG的C*N个数据(比如128*8个数据)的寻址都基于下述的寻址原则:如图6所示,以C=128,N=8为例进行说明,VMEM Lane 0对应的数据寻址为连续空间的8个数据,VMEM Lane 1对应的数据寻址为连续空间的7个数据,和前一次寻址中由于脉动阵列的时空特性被延迟读取一个数据,VMEM Lane 2对应的数据寻址为连续空间的6个数据等等。即每个SIMD Lane对应的寻址比它的上一个SIMD Lane的寻址会产生一个存储单元对应的偏移。而基于这样的预设偏移方式可以看到,128个SIMD Lane一共可以按照连续8个Lane一组的规律进行寻址,每次需要访问的数据地址,除了当前访问申请的当前地址外,还需要记录之前进行访问的128/8=16个地址,从而完成一次完整的从VMEM到REG的结合脉动阵列的时空特性的寻址任务。
可以理解,当在一次数据读取周期内,对于某个存储区,在进行数据读取时,已经读取完与当前第i个存储位对应的各存储单元中的单元通道数据时,将会按照存储位递增的顺序,继续读取各存储单元中第i+1个存储位中的单元通道数据。
上述实施例中,基于每个存储地址在进行数据读取时,都会遵循预设读取规则按顺序进行读取,这样,就可通过当前地址和历史地址,顺利且准确快捷的读取到与当前数据读取周期对应的单元通道数据。
步骤S510,将读取到的目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。
具体地,计算机设备可将读取到的目标图像通道数据按二维矩阵的形式进行排布并载入至寄存器中。在一个数据读取周期内读取的目标图像通道数据将被载入至同一个寄存器中。其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。这样,当按照时间周期向脉动阵列中传输数据时,即可实现脉动阵列寻址的时空特性,从而可实现高效率的矩阵乘法运算。
继续参考图6,图6中示出了寄存器0和寄存器1中目标图像通道数据的排布方式。当计算机设备从存储区中读取了与当前数据读取周期对应的目标图像通道数据后,将读取的目标图像通道数据按二维矩阵的方式载入到寄存器中。二维矩阵中的数据排布满足以下规律:对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。
这样按照预设偏移方式来排布不同通道对应的目标图像数据,可使得同一张待处理图像中对应相同位置处的各个通道的单元通道数据,可以在不同的时钟周期内依次传输至脉动阵列中相应的处理单元中,从而依据脉动阵列的运算特点实现矩阵乘法的运算。
步骤S512,将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;脉动阵列的宽度与通道数相对应。
具体地,计算机设备可按时钟周期触发数据发射指令,并响应于每个时钟周期的数据发射指令,将当前寄存器中按二维矩阵形式排布的目标图像通道数据中的各列数据,按不同时钟周期的时序依次传输至脉动阵列中。其中,脉动阵列的宽度与通道数相对应。可以理解,每列目标图像通道数据在传入至脉动阵列中时,每列目标图像通道数据中的每一个目标图像数据将按时钟周期依次传入至相应行所对应的处理单元。当目标图像数据在脉动阵列中进行传输的过程中,脉动阵列会基于自身预先载入的权值矩阵进行矩阵乘法运算,直至得到对应的运算结果。
可以理解,通过一个数据读取周期所读取的数据所构成的二维阵列具有N列数据,那么相应的,这N列数据将会分成N个时钟周期依次传输至脉动阵列中,以进行相应的处理。
在一个实施例中,脉动阵列包括C*C个处理单元,脉动阵列中按处理单元的排布预先载入有权值矩阵;将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果,包括:将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时钟周期的时序依次传输至脉动阵列;基于脉动阵列中预先载入的权值矩阵,各处理单元协同对依次传入的目标图像通道数据进行矩阵乘法运算,从脉动阵列中对应最后一个通道的一行处理单元中输出运算结果。
具体的,计算机设备可预先将权值矩阵载入至脉动阵列中,也就是脉动阵列中的每个处理单元的weight buffer(权值缓冲器)中预先载入有权值矩阵中的某个权值参数。进而,当按二维矩阵形式排布的目标图像通道数据中的各列数据,被不断的传输至脉动阵列中时,脉动阵列中各处理单元将基于预先载入的对应的权值参数进行运算,整个脉动阵列的数据流动将实现对目标图像通道数据的矩阵乘法运算,直至从脉动阵列中对应最后一个通道的一行处理单元中输出运算结果,该运算结果是N张待处理图像分别与权值矩阵进行矩阵乘法后所得到的运算结果。
上述实施例中,通过将单指令多数据流与脉动阵列的运算方式相结合,可实现流水线式不卡顿的数据并行处理,大大提高了对批量数据进行矩阵乘法运算的运算效率。
在一个实施例中,基于脉动阵列中预先载入的权值矩阵,各处理单元协同对依次传入的目标图像通道数据进行矩阵乘法运算,从脉动阵列中对应最后一个通道的一行处理单元中输出运算结果,包括:脉动阵列中的每个处理单元依次执行以下操作,直至从脉动阵列中对应最后一个通道的一行处理单元中输出运算结果:对于脉动阵列中的处理单元PEc,m,依据处理单元PEc,m中的权值参数对当前时钟周期所传入的目标图像通道数据进行乘法运算,得到相应的乘积,并且处理单元PEc,m根据处理单元PEc-1,m所传入的第一中间结果和乘积确定与处理单元PEc,m对应的第二中间结果;其中,c和m均小于等于C,且c对应通道维度;及当下一个时钟周期到来时,处理单元PEc,m将当前时钟周期传入的目标图像通道数据传输至处理单元PEc,m+1,并将当前时钟周期计算得到的第二中间结果作为下一个时钟周期的第一中间结果传输至处理单元PEc+1,m。
在一个实施例中,对于首次传输至脉动阵列的第一列目标图像通道数据,脉动阵列中的首列处理单元中的每个处理单元,都会基于各自的权值参数与相应传入的目标图像数据进行乘积运算。然后该列的处理单元会将接收到的目标图像通道数据对应传输至下一列脉动阵列。并且,该列的处理单元中从首行所对应的处理单元开始,会将自己计算得到的乘积结果传递至下一行的处理单元,以便于下一行的处理单元进行累加运算。
继续参考图6,寄存器中的每列数据将会按时钟周期依次传输至脉动阵列中的第一列处理单元中,已经传入至脉动阵列的第一列处理单元中的数据,将会在下一个时钟周期到来时继续传入至脉动阵列的第二列处理单元中,这样不断的传输,直至传输至脉动阵列的最后一列处理单元。而对于每一列接收到当前传入的数据的处理单元而言,会将传入的数据与自身缓存的权值参数进行乘积运算,并且与该列的上一个处理单元所传输的中间结果进行求和,得到的中间结果将在下一个时钟周期传入至该处理单元在该列的下一个处理单元。这样,不断的进行数据的运算和传输,直至通过脉动阵列中与最后一个通道对应的一行处理单元输出运算结果。
上述实施例中,在脉动阵列进行数据的流动传输,通过每个PE完成独立的计算,并且通过与相邻的PE进行通信,从而在数据不断复用的情况下,实现高效节能的计算。
在一个实施例中,该图像处理还包括将权值矩阵导入至脉动阵列的步骤,该步骤具体包括:获取与待处理图像对应的卷积核;卷积核的格式为R*S*C*M,其中,R*S对应卷积核的面积,C对应卷积核的通道维度,M对应卷积核的数量维度;将卷积核拆分成R*S个C*M格式的卷积核单元;将R*S个卷积核单元中的其中一个目标卷积核单元的各权值参数构成权值矩阵,并将相应的权值矩阵导入至脉动阵列中。
在具体的应用场景中,当通过机器学习模型对待处理图像进行处理时,常常存在大量的卷积计算。卷积计算的原理示意图参考图7(A),如图7(A)所示,卷积核是一组平行的特征图(feature map),它通过在输入图像上滑动不同的卷积核并进行一定的运算而组成。如图7(A)所示,卷积核大小为R*S,对应有C个通道,对应有M个。对于一张待处理图像H*W*C,通过卷积核对待处理图像进行卷积计算后,得到输出特征图E*F*M。相应地,当待处理图像有N个时,相应的输出特征图也对应有N张。
为了实现在SIMD和Systolic Array混合架构下高效节能的进行卷积计算,本申请提出了一种叫做streaming convolution(流卷积)的计算方法。如图7(B)所示,计算机设备将每个大小为R*S的Filter平面数据矩阵,拆分成R*S个大小为1*1的矩阵,也就是将格式为R*S*C*M的卷积核,拆分成R*S个C*M的卷积核单元。参考图7(B),图7(B)为一个实施例中对卷积核拆分示意图。如图7(B)所示,计算机设备可将每个大小为R*S的卷积核拆分成R*S个1*1的卷积核单元。
在实现卷积核的拆分之后,可以将每个对应的卷积核单元的卷积计算,转化成矩阵乘法计算。基于此,计算机设备可将R*S个卷积核单元中的其中一个目标卷积核单元的各权值参数构成权值矩阵,并将相应的权值矩阵导入至脉动阵列中。
进一步的,通过SIMD模块和脉动阵列模块的混合架构,进行卷积计算时需要进行的数据调度的实现可参考前述实施例中矩阵乘法过程中的调度控制。每次进行控制粒度为C*N的寻址时,C对应的是待处理图像的通道维度,N对应的是待处理图像的mini-batch维度,从而可通过脉动阵列计算得到与一个卷积核单元对应的运算结果。
参考图8,图8为一个实施例中将卷积计算转化成矩阵乘法计算的原理示意图。如图8所示,从原理上来看,对于卷积计算而言,其输入的是N张待处理图像,每张待处理图像包括N个通道的通道图像,每张通道图像的大小为H*W。卷积核单元的大小为1*1,对应有C个通道,数量为M个。通过卷积核单元对待处理图像进行卷积运算后得到的输出图像的大小变成了N张E*F*M。可以理解,这个卷积的过程可以转换成矩阵乘法来实现。参考图9的下部分,输入的是N张待处理图像可以整理成长度为E*F*N,宽度为C的输入矩阵;卷积核单元可以整理成长度为C,宽度为M的权值矩阵;输出图像就可以为输入矩阵与权值矩阵的矩阵乘积表示,也就是长度为E*F*N,宽度为M的输出矩阵。
上述实施例中,通过将卷积核拆分成卷积核单元,然后将卷积核与待处理图像间的多维卷积计算,转换成多个卷积核单元分别与待处理图像间的矩阵乘法运算,可大大提高多维卷积计算的处理效率。
在一个实施例中,该图像数据处理方法还包括基于多个卷积核单元分别进行运算的步骤,该步骤具体包括:将与目标卷积核单元对应的运算结果回传至本地内存并存储;确定R*S个卷积核单元中未参与运算的卷积核单元,并将其中一个未参与运算的卷积核单元最为下一个目标卷积核单元;将下一个目标卷积核单元重新导入至脉动阵列中以参与下一轮的运算,得到相应的运算结果,并返回将与目标卷积核单元对应的运算结果回传至本地内存并存储的步骤继续执行,直至R*S个卷积核单元全部参与运算,得到与各个卷积核单元分别对应的运算结果为止。
具体地,计算机设备可将与目标卷积核单元对应的运算结果回传至本地内存并存储。然后再从R*S个卷积核单元中选中未参与运算的其中一个卷积核单元为下一个目标卷积核单元,并将下一个目标卷积核单元重新导入至脉动阵列中以参与下一轮的运算,得到相应的运算结果。这样不断的循环反复,直至R*S个卷积核单元全部参与运算,得到与各个卷积核单元分别对应的运算结果为止。
在一个实施例中,计算机设备还可根据本地内存中存储的与R*S个卷积核单元分别对应的运算结果,确定对待处理图像进行卷积运算所得到的卷积特征图。具体地,计算机设备可对R*S个卷积核单元分别对应的运算结果进行合并或矩阵加法运算等,以得到对待处理图像进行卷积运算所得到的卷积特征图。
上述实施例中,通过将卷积核拆分成卷积核单元,然后将卷积核与待处理图像间的多维卷积计算,转换成多个卷积核单元分别与待处理图像间的矩阵乘法运算,基于每个卷积核单元所对应的运算结果得到卷积特征图,可大大提高多维卷积计算的处理效率。
在一个具体的实施例中,将图像数据按通道存储至本地内存中的C个存储区中的步骤具体包括:获取通过编程接口传入的任务代码;根据任务代码中的软件参数,将图像数据按通道存储至本地内存中的C个存储区中。该图像数据处理方法还包括:对任务代码进行编译,得到对应的可执行程序;通过执行可执行程序,以执行从当发生数据查找指令时,确定数据查找指令中携带的当前地址,并根据当前地址获取预设数量的历史地址的步骤,至将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果的步骤。
参考图9,图9为一个实施例中图像数据处理方法的流程图。如图10所示,计算机设备可提供编程接口,用户可按照要求通过编程接口编写与目标任务相关的任务代码。计算机设备可分析任务代码中的程序参数,以通过调用动态链接库的库函数来实现对本申请实施所需的硬件模块的启用。其中,此处的动态链接库的库函数主要是指执行接口,比如gemm或conv接口等,通过这些执行接口来使用相应的硬件模块。
进而再执行任务代码时,计算机设备可基于任务代码中的软件参数调用N张待处理图像的图像数据,并基于软件参数对图像数据按预设格式进行置零、扩充、拆分或对齐等操作,以将图像数据按通道存储至本地内存中的C个存储区中。其中,软件参数具体包括数据排布格式。比如,C=128,N=8时,计算机设备可按128*8的格式来对图像数据进行排布,不到128行的图像数据进行置零扩充,超过128行的图像数据进行拆分。
接下来,计算机设备可对任务代码进行编译,得到对应的可执行程序。若编译成功,则由用户决定是否执行;如果编译失败,则返回用户错误信息,直到用户完成任务代码修正并再次进入编译流程。计算机设备通过执行与目标任务对应的可执行程序,根据软件系统传递的接口,判断是否需要调用脉动阵列。如果需要则执行本申请各实施例所提供的图像数据处理方法,如果不需要调用脉动阵列则可直接通过SIMD模块实现普适性的计算。
对于需要调用脉动阵列的方案,计算机设备可通过在执行可执行程序的过程中,通过SIMD模块中的全局控制模块,对整体SIMD脉动阵列混合架构的指令和数据控制,从而实现SIMD模块与脉动阵列模块之间的数据交互的协调控制。也就是,通过SIMD模块中的全局控制模块定期触发数据读取指令,然后通过全局控制模块将当前的数据读取指令中携带的当前地址输入至SIPO的移位寄存器中,以读出之前输入的预设数量的历史地址,从而基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。计算机设备可将读取到的目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。接下来计算机设备则将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行矩阵乘法运算得到运算结果。
本申请提供了一种单指令流多数据流和脉动阵列结合的混合系统架构,针对脉动阵列的数据需求和单指令多数据流的控制模式,实现了一个合理的内存交互设计,从而在脉动阵列能够高效进行计算的同时最大程度降低针对神经网络特殊应用的访存能耗,实现高效节能的架构设计。本申请的成果可以构建具有商业意义的、基于SIMD和脉动阵列的混合系统架构,面向用户提供高效节能的计算服务,大大提高了对大量数据进行批量处理的处理效率。
本申请还提供一种应用场景,该应用场景应用上述的图像数据处理方法。具体地,该图像数据处理方法在该应用场景的应用如下:当计算机设备需要通过机器学习模型对一批待处理图像进行处理时,比如,该机器学习模型具体可以是图像分类模型,相应的待处理图像具体可以是待进行分类的原始图像。计算机设备可预先将待进行分类的原始图像划分成一批次一批次的待处理图像,每一批次的待处理图像的数量为N个。
计算机设备可提供编程接口,用户可按照要求通过编程接口编写与分类任务相关的任务代码。计算机设备可分析任务代码中的程序参数,以通过调用动态链接库的库函数来实现对本申请实施所需的硬件模块的启用。进而再执行任务代码时,计算机设备可基于任务代码中的软件参数调用N张待处理图像的图像数据,并基于软件参数对图像数据按预设格式进行置零、扩充、拆分或对齐等操作,以将图像数据按通道存储至本地内存中的C个存储区中。
接下来,计算机设备可对任务代码进行编译,得到对应的可执行程序。计算机设备通过执行与分类任务对应的可执行程序,以执行本申请各实施例所提供的图像数据处理方法,实现SIMD模块与脉动阵列模块的数据协调处理,实现基于图像分类模型的卷积核对待处理图像进行卷积处理,输出卷积特征图。进而通过图像分类模型中的分类层基于卷积特征图进行分类处理,以输出与各待处理图像分别对应的分类类别。
可以理解,在其他的应用场景中,该机器学习模块还可以是其他类型的模型,比如目标分割模型、人脸识别模型或目标预测模型等,其相对应的目标任务是与机器学习模型相匹配的,上述的应用场景仅用于示意性的说明本申请,并不用于限定本申请的实施场景。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图10所示,提供了一种图像数据处理装置1000,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:获取模块1001、存储模块1002、确定模块1003、数据读取模块1004、排布模块1005和运算模块1006,其中:
获取模块1001,用于获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数。
存储模块1002,用于将图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据。
确定模块1003,用于当发生数据读取指令时,确定数据读取指令中携带的当前地址,并根据当前地址获取预设数量的历史地址;预设数量根据C除以N的商确定。
数据读取模块1004,用于基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。
排布模块1005,用于将读取到的目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。
运算模块1006,用于将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;脉动阵列的宽度与通道数相对应。
在其中一个实施例中,确定模块1003还用于当发生数据读取指令时,确定数据读取指令中携带的当前地址;将当前地址输入至串入并出形式的移位寄存器中,通过移位寄存器输出历史输入过的预设数量的历史地址。
在其中一个实施例中,每张待处理图像中的每份图像通道数据均包括I个单元通道数据,每份图像通道数据中的I个单元通道数据分别存储在一个存储单元的I个存储位中,且不同存储位对应不同的存储地址;当前地址为其中一个存储位所对应的存储地址;I为大于等于1的正整数。
在其中一个实施例中,当前地址为首个存储区中的首个存储单元的第i个存储位的存储地址,i小于等于I;数据读取模块1004还用于在当前数据读取周期内,基于当前地址,确定首个存储区中包括首个存储单元的连续N个存储单元中每个存储单元的第i个存储位的存储地址,并基于确定的存储地址获取对应的单元通道数据;对于首个存储区之后的N-1个存储区中的每个存储区,基于当前地址,均按照相较于上一个存储区进行一个存储单元偏移的方式从相应存储区中对应第i个存储位处,获取对应的单元通道数据;对于当前地址之前的各历史地址,分别基于相应历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据;其中,当前数据读取周期内所读取的单元通道数据用于构成C*N格式的二维矩阵。
在其中一个实施例中,数据读取模块1004还用于确定前一个数据读取周期内通过各历史地址分别读取的单元通道数据;根据在前一个数据读取周期内所读取的单元通道数据,按预设读取规则获取与各存储区分别对应、且与当前数据读取周期对应的单元通道数据;其中,预设读取规则包括:对于同一个存储区的单元通道数据的读取,均按照存储位从低至高依次递增的顺序进行读取,且对于同一个存储区内不同存储单元中对应相同存储位的单元通道数据的读取,均按照存储单元从低至高依次递增的顺序进行读取。
在其中一个实施例中,脉动阵列包括C*C个处理单元,脉动阵列中按处理单元的排布预先载入有权值矩阵;运算模块1006还用于将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时钟周期的时序依次传输至脉动阵列;基于脉动阵列中预先载入的权值矩阵,各处理单元协同对依次传入的目标图像通道数据进行矩阵乘法运算,从脉动阵列中对应最后一个通道的一行处理单元中输出运算结果。
在其中一个实施例中,运算模块1006还用于脉动阵列中的每个处理单元依次执行以下操作,直至从脉动阵列中对应最后一个通道的一行处理单元中输出运算结果:对于脉动阵列中的处理单元PEc,m,依据处理单元PEc,m中的权值参数对当前时钟周期所传入的目标图像通道数据进行乘法运算,得到相应的乘积,并且处理单元PEc,m根据处理单元PEc-1,m所传入的第一中间结果和乘积确定与处理单元PEc,m对应的第二中间结果;其中,c和m均小于等于C,且c对应通道维度;及当下一个时钟周期到来时,处理单元PEc,m将当前时钟周期传入的目标图像通道数据传输至处理单元PEc,m+1,并将当前时钟周期计算得到的第二中间结果作为下一个时钟周期的第一中间结果传输至处理单元PEc+1,m。
在其中一个实施例中,该图像数据处理方法还包括权值导入模块1007,该权值导入模块1007,用于获取与待处理图像对应的卷积核;卷积核的格式为R*S*C*M,其中,R*S对应卷积核的面积,C对应卷积核的通道维度,M对应卷积核的数量维度;将卷积核拆分成R*S个C*M的卷积核单元;将R*S个卷积核单元中的其中一个目标卷积核单元的各权值参数构成权值矩阵,并将相应的权值矩阵导入至脉动阵列中。
参考图11,在其中一个实施例中,该图像数据处理方法还包括重复执行模块1008,其中:
存储模块1002,还用于将与目标卷积核单元对应的运算结果回传至本地内存并存储;
确定模块1003还用于确定R*S个卷积核单元中未参与运算的卷积核单元,并将其中一个未参与运算的卷积核单元作为下一个目标卷积核单元;
重复执行模块1008,用于将下一个目标卷积核单元重新导入至脉动阵列中以参与下一轮的运算,得到相应的运算结果,并返回将与目标卷积核单元对应的运算结果回传至本地内存并存储的步骤继续执行,直至R*S个卷积核单元全部参与运算,得到与各个卷积核单元分别对应的运算结果为止。
在其中一个实施例中,确定模块1003还用于根据本地内存中存储的与R*S个卷积核单元分别对应的运算结果,确定对待处理图像进行卷积运算所得到的卷积特征图。
在其中一个实施例中,存储模块1002还用于获取通过编程接口传入的任务代码;根据任务代码中的软件参数,将图像数据按通道存储至本地内存中的C个存储区中。该图像数据处理装置还包括代码执行模块1008,用于对任务代码进行编译,得到对应的可执行程序,可执行程序用于在执行时实现从当发生数据查找指令时,确定数据查找指令中携带的当前地址,并根据当前地址获取预设数量的历史地址的步骤,至将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果的步骤。
上述图像数据处理装置,获取N张待处理图像的图像数据,其中,每张待处理图像的图像数据均包括C个通道的图像通道数据。将上述批量的图像通道数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据。当发生数据读取指令时,根据数据读取指令中携带的当前地址获取预设数量的历史地址,并基于当前地址和历史地址,从本地内存中按预设偏移方式读取与不同待处理图像对应的、且与不同通道对应的目标图像通道数据。进而将读取到的目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中。当需要进行批量运算时,可直接将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果。这样,通过当前地址和历史地址来实现合理的数据寻址,进而通过脉动阵列来实现数据运算,既能实现单指令多数据流并行处理,又可避免由于数据存取与处理的速度不匹配所造成的卡顿现象,实现合理的内存交互和高效灵活的协同控制,大大提高了数据处理效率和处理性能,并且通过流水线式的数据并行处理还能大大降低能耗。关于图像数据处理装置的具体限定可以参见上文中对于图像数据处理方法的限定,在此不再赘述。上述图像数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端或服务器,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种图像数据处理方法。
本领域技术人员可以理解,图12中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (24)
1.一种图像数据处理方法,其特征在于,所述方法包括:
获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数;
将所述图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据;
当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址;所述预设数量根据C除以N的商确定;所述历史地址为历史触发的数据读取指令所携带的地址;
基于所述当前地址,从所述本地内存中按预设偏移方式读取与当前数据读取周期对应的单元通道数据,并分别基于各历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据,以得到与不同待处理图像对应的、且与不同通道对应的目标图像通道数据;所述预设偏移方式指对于不同通道的目标图像数据进行读取时,在后的通道会相较于前一个通道进行一个存储单元偏移的方式;
将读取到的所述目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中;
将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;所述脉动阵列的宽度与通道数相对应。
2.根据权利要求1所述的方法,其特征在于,所述当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址,包括:
当发生数据读取指令时,确定所述数据读取指令中携带的当前地址;
将所述当前地址输入至串入并出形式的移位寄存器中,通过所述移位寄存器输出历史输入过的预设数量的历史地址。
3.根据权利要求1所述的方法,其特征在于,每张待处理图像中的每份图像通道数据均包括I个单元通道数据,每份图像通道数据中的I个单元通道数据分别存储在一个存储单元的I个存储位中,且不同存储位对应不同的存储地址;所述当前地址为其中一个存储位所对应的存储地址;I为大于等于1的正整数。
4.根据权利要求3所述的方法,其特征在于,所述当前地址为首个存储区中的首个存储单元的第i个存储位的存储地址,i小于等于I;所述基于所述当前地址,从所述本地内存中按预设偏移方式读取与当前数据读取周期对应的单元通道数据,包括:
在当前数据读取周期内,基于所述当前地址,确定首个存储区中包括首个存储单元的连续N个存储单元中每个存储单元的第i个存储位的存储地址,并基于确定的存储地址获取对应的单元通道数据;
对于首个存储区之后的N-1个存储区中的每个存储区,基于所述当前地址,均按照相较于上一个存储区进行一个存储单元偏移的方式从相应存储区中对应第i个存储位处,获取对应的单元通道数据。
5.根据权利要求1所述的方法,其特征在于,所述分别基于各历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据,包括:
确定前一个数据读取周期内通过各所述历史地址分别读取的单元通道数据;
根据在前一个数据读取周期内所读取的单元通道数据,按预设读取规则获取与各存储区分别对应、且与当前数据读取周期对应的单元通道数据;
其中,所述预设读取规则包括:对于同一个存储区的单元通道数据的读取,均按照存储位从低至高依次递增的顺序进行读取,且对于同一个存储区内不同存储单元中对应相同存储位的单元通道数据的读取,均按照存储单元从低至高依次递增的顺序进行读取。
6.根据权利要求1所述的方法,其特征在于,所述脉动阵列包括C*C个处理单元,所述脉动阵列中按处理单元的排布预先载入有权值矩阵;所述将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果,包括:
将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时钟周期的时序依次传输至脉动阵列;
基于所述脉动阵列中预先载入的权值矩阵,各处理单元协同对依次传入的目标图像通道数据进行矩阵乘法运算,从所述脉动阵列中对应最后一个通道的一行处理单元中输出运算结果。
7.根据权利要求6所述的方法,其特征在于,所述基于所述脉动阵列中预先载入的权值矩阵,各处理单元协同对依次传入的目标图像通道数据进行矩阵乘法运算,从所述脉动阵列中对应最后一个通道的一行处理单元中输出运算结果,包括:
所述脉动阵列中的每个处理单元依次执行以下操作,直至从所述脉动阵列中对应最后一个通道的一行处理单元中输出运算结果:
对于所述脉动阵列中的处理单元PEc,m,依据处理单元PEc,m中的权值参数对当前时钟周期所传入的目标图像通道数据进行乘法运算,得到相应的乘积,并且处理单元PEc,m根据处理单元PEc-1,m所传入的第一中间结果和所述乘积确定与所述处理单元PEc,m对应的第二中间结果;其中,c和m均小于等于C,且c对应通道维度;及
当下一个时钟周期到来时,所述处理单元PEc,m将当前时钟周期传入的目标图像通道数据传输至处理单元PEc,m+1,并将当前时钟周期计算得到的第二中间结果作为所述下一个时钟周期的第一中间结果传输至处理单元PEc+1,m。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
获取与所述待处理图像对应的卷积核;所述卷积核的格式为R*S*C*M,其中,R*S对应卷积核的面积,C对应所述卷积核的通道维度,M对应所述卷积核的数量维度;
将所述卷积核拆分成R*S个C*M格式的卷积核单元;
将所述R*S个卷积核单元中的其中一个目标卷积核单元的各权值参数构成权值矩阵,并将相应的权值矩阵导入至所述脉动阵列中。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
将与所述目标卷积核单元对应的运算结果回传至所述本地内存并存储;
确定所述R*S个卷积核单元中未参与运算的卷积核单元,并将其中一个未参与运算的卷积核单元作为下一个目标卷积核单元;
将下一个目标卷积核单元重新导入至所述脉动阵列中以参与下一轮的运算,得到相应的运算结果,并返回所述将与所述目标卷积核单元对应的运算结果回传至所述本地内存并存储的步骤继续执行,直至所述R*S个卷积核单元全部参与运算,得到与各个卷积核单元分别对应的运算结果为止。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
根据本地内存中存储的与R*S个卷积核单元分别对应的运算结果,确定对所述待处理图像进行卷积运算所得到的卷积特征图。
11.根据权利要求1至10任一项所述的方法,其特征在于,所述将所述图像数据按通道存储至本地内存中的C个存储区中,包括:
获取通过编程接口传入的任务代码;
根据所述任务代码中的软件参数,将所述图像数据按通道存储至本地内存中的C个存储区中;
所述方法还包括:
对所述任务代码进行编译,得到对应的可执行程序;
通过执行所述可执行程序,以执行从所述当发生数据查找指令时,确定所述数据查找指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址的步骤,至所述将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果的步骤。
12.一种图像数据处理装置,其特征在于,所述装置包括:
获取模块,用于获取N张待处理图像的图像数据,每张待处理图像的图像数据包括C个通道的图像通道数据;其中,N为大于等于1的正整数,C为大于1的正整数;
存储模块,用于将所述图像数据按通道存储至本地内存的C个存储区中,每个存储区中的N个存储单元分别存储N张待处理图像的其中一个通道的图像通道数据;
确定模块,用于当发生数据读取指令时,确定所述数据读取指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址;所述预设数量根据C除以N的商确定;所述历史地址为历史触发的数据读取指令所携带的地址;
数据读取模块,用于基于所述当前地址,从所述本地内存中按预设偏移方式读取与当前数据读取周期对应的单元通道数据,并分别基于各历史地址在历史数据读取周期内所读取的数据,按预设偏移方式从各存储区中确定与当前数据读取周期对应的单元通道数据,以得到与不同待处理图像对应的、且与不同通道对应的目标图像通道数据;所述预设偏移方式指对于不同通道的目标图像数据进行读取时,在后的通道会相较于前一个通道进行一个存储单元偏移的方式;
排布模块,用于将读取到的所述目标图像通道数据按二维矩阵的形式进行排布,其中,对应相同通道的目标图像通道数据在同一个矩阵行中,且相邻矩阵行中对应同一个待处理图像的目标图像通道数据分布在相邻的两个矩阵列中;
运算模块,用于将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果;所述脉动阵列的宽度与通道数相对应。
13.根据权利要求12所述的装置,其特征在于,所述确定模块还用于当发生数据读取指令时,确定所述数据读取指令中携带的当前地址;将所述当前地址输入至串入并出形式的移位寄存器中,通过所述移位寄存器输出历史输入过的预设数量的历史地址。
14.根据权利要求12所述的装置,其特征在于,每张待处理图像中的每份图像通道数据均包括I个单元通道数据,每份图像通道数据中的I个单元通道数据分别存储在一个存储单元的I个存储位中,且不同存储位对应不同的存储地址;所述当前地址为其中一个存储位所对应的存储地址;I为大于等于1的正整数。
15.根据权利要求14所述的装置,其特征在于,所述当前地址为首个存储区中的首个存储单元的第i个存储位的存储地址,i小于等于I;所述基于所述当前地址,从所述本地内存中按预设偏移方式读取与当前数据读取周期对应的单元通道数据,包括:
在当前数据读取周期内,基于所述当前地址,确定首个存储区中包括首个存储单元的连续N个存储单元中每个存储单元的第i个存储位的存储地址,并基于确定的存储地址获取对应的单元通道数据;
对于首个存储区之后的N-1个存储区中的每个存储区,基于所述当前地址,均按照相较于上一个存储区进行一个存储单元偏移的方式从相应存储区中对应第i个存储位处,获取对应的单元通道数据。
16.根据权利要求12所述的装置,其特征在于,所述数据读取模块,还用于:
确定前一个数据读取周期内通过各所述历史地址分别读取的单元通道数据;
根据在前一个数据读取周期内所读取的单元通道数据,按预设读取规则获取与各存储区分别对应、且与当前数据读取周期对应的单元通道数据;
其中,所述预设读取规则包括:对于同一个存储区的单元通道数据的读取,均按照存储位从低至高依次递增的顺序进行读取,且对于同一个存储区内不同存储单元中对应相同存储位的单元通道数据的读取,均按照存储单元从低至高依次递增的顺序进行读取。
17.根据权利要求12所述的装置,其特征在于,所述脉动阵列包括C*C个处理单元,所述脉动阵列中按处理单元的排布预先载入有权值矩阵;所述运算模块,具体用于:
将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时钟周期的时序依次传输至脉动阵列;
基于所述脉动阵列中预先载入的权值矩阵,各处理单元协同对依次传入的目标图像通道数据进行矩阵乘法运算,从所述脉动阵列中对应最后一个通道的一行处理单元中输出运算结果。
18.根据权利要求17所述的装置,其特征在于,所述运算模块,具体用于:
所述脉动阵列中的每个处理单元依次执行以下操作,直至从所述脉动阵列中对应最后一个通道的一行处理单元中输出运算结果:
对于所述脉动阵列中的处理单元PEc,m,依据处理单元PEc,m中的权值参数对当前时钟周期所传入的目标图像通道数据进行乘法运算,得到相应的乘积,并且处理单元PEc,m根据处理单元PEc-1,m所传入的第一中间结果和所述乘积确定与所述处理单元PEc,m对应的第二中间结果;其中,c和m均小于等于C,且c对应通道维度;及
当下一个时钟周期到来时,所述处理单元PEc,m将当前时钟周期传入的目标图像通道数据传输至处理单元PEc,m+1,并将当前时钟周期计算得到的第二中间结果作为所述下一个时钟周期的第一中间结果传输至处理单元PEc+1,m。
19.根据权利要求17所述的装置,其特征在于,所述装置还包括权值导入模块,用于:
获取与所述待处理图像对应的卷积核;所述卷积核的格式为R*S*C*M,其中,R*S对应卷积核的面积,C对应所述卷积核的通道维度,M对应所述卷积核的数量维度;
将所述卷积核拆分成R*S个C*M格式的卷积核单元;
将所述R*S个卷积核单元中的其中一个目标卷积核单元的各权值参数构成权值矩阵,并将相应的权值矩阵导入至所述脉动阵列中。
20.根据权利要求19所述的装置,其特征在于,所述装置还包括重复执行模块,其中:
存储模块,还用于将与所述目标卷积核单元对应的运算结果回传至所述本地内存并存储;
确定模块,还用于确定所述R*S个卷积核单元中未参与运算的卷积核单元,并将其中一个未参与运算的卷积核单元作为下一个目标卷积核单元;
重复执行模块,用于将下一个目标卷积核单元重新导入至所述脉动阵列中以参与下一轮的运算,得到相应的运算结果,并返回所述将与所述目标卷积核单元对应的运算结果回传至所述本地内存并存储的步骤继续执行,直至所述R*S个卷积核单元全部参与运算,得到与各个卷积核单元分别对应的运算结果为止。
21.根据权利要求20所述的装置,其特征在于,所述确定模块,还用于根据本地内存中存储的与R*S个卷积核单元分别对应的运算结果,确定对所述待处理图像进行卷积运算所得到的卷积特征图。
22.根据权利要求12至21任一项所述的装置,其特征在于,所述装置还包括代码执行模块,其中:
所述存储模块,还用于获取通过编程接口传入的任务代码;根据所述任务代码中的软件参数,将所述图像数据按通道存储至本地内存中的C个存储区中;
所述代码执行模块,用于对所述任务代码进行编译,得到对应的可执行程序;通过执行所述可执行程序,以执行从所述当发生数据查找指令时,确定所述数据查找指令中携带的当前地址,并根据所述当前地址获取预设数量的历史地址的步骤,至所述将按二维矩阵形式排布的目标图像通道数据中的各列数据,按时序依次传输至脉动阵列中进行运算得到运算结果的步骤。
23.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
24.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010829873.9A CN111897579B (zh) | 2020-08-18 | 2020-08-18 | 图像数据处理方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010829873.9A CN111897579B (zh) | 2020-08-18 | 2020-08-18 | 图像数据处理方法、装置、计算机设备和存储介质 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN111897579A CN111897579A (zh) | 2020-11-06 |
| CN111897579B true CN111897579B (zh) | 2024-01-30 |
Family
ID=73229760
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202010829873.9A Active CN111897579B (zh) | 2020-08-18 | 2020-08-18 | 图像数据处理方法、装置、计算机设备和存储介质 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN111897579B (zh) |
Families Citing this family (23)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112488296B (zh) * | 2020-11-25 | 2022-12-02 | 苏州浪潮智能科技有限公司 | 基于硬件环境的数据操作方法、装置、设备及存储介质 |
| CN112395092B (zh) * | 2020-11-30 | 2023-06-02 | 清华大学 | 数据处理方法及人工智能处理器 |
| CN114580607B (zh) * | 2020-12-02 | 2025-07-22 | 中科寒武纪科技股份有限公司 | 数据处理方法、装置和存储介质 |
| CN112614040B (zh) * | 2020-12-16 | 2021-09-21 | 上海壁仞智能科技有限公司 | 用于卷积计算的方法、计算设备和计算机可读存储介质 |
| CN113535349B (zh) * | 2021-01-06 | 2025-08-08 | 腾讯科技(深圳)有限公司 | 数据批量处理方法、装置和存储介质 |
| CN112967211B (zh) * | 2021-01-31 | 2024-09-13 | 成都商汤科技有限公司 | 一种图像处理方法、装置、计算机设备及存储介质 |
| CN112966729B (zh) * | 2021-02-26 | 2023-01-31 | 成都商汤科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
| CN112967172B (zh) * | 2021-02-26 | 2024-09-17 | 成都商汤科技有限公司 | 一种数据处理装置、方法、计算机设备及存储介质 |
| CN113870091B (zh) * | 2021-08-27 | 2024-12-20 | 深圳云天励飞技术股份有限公司 | 卷积计算方法、系统、设备及存储介质 |
| CN113688069B (zh) * | 2021-09-10 | 2022-08-02 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备及介质 |
| CN116128031A (zh) * | 2021-11-10 | 2023-05-16 | Oppo广东移动通信有限公司 | 数据处理芯片、模组、终端、数据处理方法和装置 |
| CN114090956B (zh) * | 2021-11-18 | 2024-05-10 | 深圳市比昂芯科技有限公司 | 一种矩阵数据处理方法、装置、设备及存储介质 |
| CN113870273B (zh) * | 2021-12-02 | 2022-03-25 | 之江实验室 | 一种基于脉动阵列的神经网络加速器特征图分割方法 |
| CN114283314B (zh) * | 2021-12-06 | 2025-09-09 | 广州小鹏自动驾驶科技有限公司 | 图像数据处理方法及装置 |
| CN115017452B (zh) * | 2022-05-09 | 2025-04-11 | 深圳市国微电子有限公司 | 一种基于二维脉动阵列的数据处理方法及装置 |
| CN114925820B (zh) * | 2022-05-31 | 2025-08-22 | 上海阵量智能科技有限公司 | 数据处理装置、方法、芯片、板卡、电子设备及存储介质 |
| CN114895964B (zh) * | 2022-05-31 | 2025-01-07 | 上海阵量智能科技有限公司 | 数据处理装置、方法、芯片、板卡、电子设备及存储介质 |
| CN116719559B (zh) * | 2022-07-20 | 2024-06-11 | 广州众远智慧科技有限公司 | 红外扫描的方法以及其装置 |
| CN115456858B (zh) * | 2022-09-16 | 2023-07-18 | 深圳思谋信息科技有限公司 | 图像处理方法、装置、计算机设备及计算机可读存储介质 |
| CN115469826B (zh) * | 2022-09-16 | 2023-04-07 | 深圳思谋信息科技有限公司 | 数据处理方法、装置、计算机设备及计算机可读存储介质 |
| CN116360858B (zh) * | 2023-05-26 | 2023-08-29 | 摩尔线程智能科技(北京)有限责任公司 | 数据的处理方法、图形处理器、电子设备及存储介质 |
| CN116797444B (zh) * | 2023-06-16 | 2025-05-06 | 格兰菲智能科技股份有限公司 | 图像数据处理方法、装置、计算机设备和存储介质 |
| CN117785031B (zh) * | 2023-11-27 | 2025-08-05 | 北京凌川科技有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Citations (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
| CN108628799A (zh) * | 2018-04-17 | 2018-10-09 | 上海交通大学 | 可重构的单指令多数据脉动阵列结构、处理器及电子终端 |
| CN108765247A (zh) * | 2018-05-15 | 2018-11-06 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、存储介质及设备 |
| CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
| CN108805262A (zh) * | 2017-04-27 | 2018-11-13 | 美国飞通计算解决方案有限公司 | 用于根据高级程序进行脉动阵列设计的系统及方法 |
| CN108920413A (zh) * | 2018-06-28 | 2018-11-30 | 中国人民解放军国防科技大学 | 面向gpdsp的卷积神经网络多核并行计算方法 |
| CN109934339A (zh) * | 2019-03-06 | 2019-06-25 | 东南大学 | 一种基于一维脉动阵列的通用卷积神经网络加速器 |
| CN109992541A (zh) * | 2017-12-29 | 2019-07-09 | 深圳云天励飞技术有限公司 | 一种数据搬运方法、相关产品及计算机存储介质 |
| CN110674927A (zh) * | 2019-09-09 | 2020-01-10 | 之江实验室 | 一种用于脉动阵列结构的数据重组方法 |
| CN111008040A (zh) * | 2019-11-27 | 2020-04-14 | 厦门星宸科技有限公司 | 缓存装置及缓存方法、计算装置及计算方法 |
| CN111401510A (zh) * | 2019-09-24 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
Family Cites Families (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10438117B1 (en) * | 2015-05-21 | 2019-10-08 | Google Llc | Computing convolutions using a neural network processor |
-
2020
- 2020-08-18 CN CN202010829873.9A patent/CN111897579B/zh active Active
Patent Citations (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108805262A (zh) * | 2017-04-27 | 2018-11-13 | 美国飞通计算解决方案有限公司 | 用于根据高级程序进行脉动阵列设计的系统及方法 |
| CN109992541A (zh) * | 2017-12-29 | 2019-07-09 | 深圳云天励飞技术有限公司 | 一种数据搬运方法、相关产品及计算机存储介质 |
| CN108182471A (zh) * | 2018-01-24 | 2018-06-19 | 上海岳芯电子科技有限公司 | 一种卷积神经网络推理加速器及方法 |
| CN108628799A (zh) * | 2018-04-17 | 2018-10-09 | 上海交通大学 | 可重构的单指令多数据脉动阵列结构、处理器及电子终端 |
| CN108765247A (zh) * | 2018-05-15 | 2018-11-06 | 腾讯科技(深圳)有限公司 | 图像处理方法、装置、存储介质及设备 |
| CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
| CN108920413A (zh) * | 2018-06-28 | 2018-11-30 | 中国人民解放军国防科技大学 | 面向gpdsp的卷积神经网络多核并行计算方法 |
| CN109934339A (zh) * | 2019-03-06 | 2019-06-25 | 东南大学 | 一种基于一维脉动阵列的通用卷积神经网络加速器 |
| CN110674927A (zh) * | 2019-09-09 | 2020-01-10 | 之江实验室 | 一种用于脉动阵列结构的数据重组方法 |
| CN111401510A (zh) * | 2019-09-24 | 2020-07-10 | 上海寒武纪信息科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
| CN111008040A (zh) * | 2019-11-27 | 2020-04-14 | 厦门星宸科技有限公司 | 缓存装置及缓存方法、计算装置及计算方法 |
Non-Patent Citations (3)
| Title |
|---|
| M. Baklouti.FPGA-based many-core System-on-Chip design.Microprocessors and Microsystems.2015,第39卷(第4-5期),全文. * |
| 郑文佳 ; 王春鸿 ; 姜文汉 ; 李梅 ; 唐端午 ; .自适应光学波前控制算法的脉动阵列结构.数据采集与处理.2008,(第04期),全文. * |
| 钱艺 ; 李昂 ; 王沁 ; 李占才 ; .一种高速实现BP网络的SIMD处理器.数据采集与处理.2008,(第02期),全文. * |
Also Published As
| Publication number | Publication date |
|---|---|
| CN111897579A (zh) | 2020-11-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111897579B (zh) | 图像数据处理方法、装置、计算机设备和存储介质 | |
| CN113076521B (zh) | 一种基于gpgpu可重构架构的方法及计算系统 | |
| US12306901B2 (en) | Operation accelerator, processing method, and related device | |
| US11734006B2 (en) | Deep vision processor | |
| CN111898733B (zh) | 一种深度可分离卷积神经网络加速器架构 | |
| CN108765247B (zh) | 图像处理方法、装置、存储介质及设备 | |
| US8442927B2 (en) | Dynamically configurable, multi-ported co-processor for convolutional neural networks | |
| US12307350B2 (en) | Systems and methods for hardware-based pooling | |
| CN110738308B (zh) | 一种神经网络加速器 | |
| CN113392959B (zh) | 一种在计算系统中重构架构的方法及计算系统 | |
| CN108628799B (zh) | 可重构的单指令多数据脉动阵列结构、处理器及电子终端 | |
| KR102610842B1 (ko) | 뉴럴 네트워크에서의 프로세싱 엘리먼트 및 그 동작 방법 | |
| CN114429214B (zh) | 运算单元、相关装置和方法 | |
| CN110766127B (zh) | 神经网络计算专用电路及其相关计算平台与实现方法 | |
| CN113762480B (zh) | 一种基于一维卷积神经网络的时间序列处理加速器 | |
| CN115803754A (zh) | 用于在神经网络中处理数据的硬件架构 | |
| CN110765413B (zh) | 矩阵求和结构及神经网络计算平台 | |
| CN110688616B (zh) | 一种基于乒乓ram的条带阵列的卷积模块及其运算方法 | |
| CN115719088B (zh) | 一种支持存内cnn的中间缓存调度电路装置 | |
| Wang et al. | Reboc: Accelerating block-circulant neural networks in reram | |
| KR20240025827A (ko) | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 | |
| CN114169512B (zh) | 神经网络推理芯片、神经网络推理方法及终端 | |
| KR20240007745A (ko) | 신경 프로세싱 유닛 및 이의 동작 방법 | |
| RU239197U1 (ru) | Устройство организации памяти для хранения моделей нейронов и параметров нейронной сети в нейроморфных микросхемах | |
| CN113988280B (zh) | 一种基于二值化神经网络的阵列计算加速器架构 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |