一种用于卷积神经网络处理器的控制方法及装置与流程

文档序号:16037696发布日期:2018-11-24 10:12阅读:155来源:国知局

本发明涉及一种卷积神经网络处理器,尤其涉及针对卷积神经网络处理器的硬件加速方面的改进。

背景技术

人工智能技术在近些年来得到了迅猛的发展,在全世界范围内得到了广泛的关注,无论是工业界还是学术界都开展了人工智能技术的研究工作,将人工智能技术渗透至视觉感知、语音识别、辅助驾驶、智能家居、交通调度等各个领域。深度学习技术是人工智能技术发展的助推器。深度学习采用深度神经网络的拓扑结构进行训练、优化及推理等,深度神经网络白块卷积神经网络、深度置信网络、循环神经网络等,通过反复迭代、训练。以图像识别应用为例,深度学习算法通过深度神经网络可以自动地得到隐藏的图像的特征数据,并且产生优于传统的基于模式识别分析方法的效果。

然而,现有的深度学习技术的实现依赖于极大的计算量。在训练阶段,需要在海量数据中通过反复迭代计算得到神经网络中的权重数据;在推理阶段,同样需要采用神经网络在极短响应时间(通常为毫秒级)内完成对输入数据的运算处理,这需要所部署的神经网络运算电路(包括cpu、gpu、fpga和asic等)达到每秒千亿次甚至万亿次的计算能力。因而,对用于实现深度学习技术的硬件加速,例如对卷积神经网络处理器的硬件加速是非常有必要的。

通常认为实现硬件加速的方式可被大致分为两种,一种是采用更大规模的硬件并行地进行计算处理,另一种则是通过设计的专用硬件电路来提高处理速度或效率。

针对上述第二种方式,一些现有技术直接将神经网络映射为硬件电路,针对各个网络层分别采用不同的计算单元,使得针对各个网络层的计算以流水线的方式进行。例如,除第一个计算单元之外的各个计算单元以前一个计算单元的输出作为其输入,并且每个计算单元仅用于执行针对与其对应的网络层的计算,在流水线的不同的单位时间内,所述计算单元对所述网络层的不同的输入进行计算。这样的现有技术,通常针对的是需要连续处理不同的输入的场景,例如对包含多帧图像的视频文件进行处理。并且,这样的现有技术通常针对的是具有较少网络层的神经网络。这是由于,深度神经网络的网络层数和规模较大,直接将神经网络映射为硬件电路,其电路面积的代价非常之大,而功耗也会随着电路面积的增大而增加。此外,考虑到各个网络层彼此的运算时间也存在较大差异,为了实现流水线的功能,提供给各个流水线层级的运行时间需要被强制设置为彼此相等,即等于处理速度最慢的流水线层级的运算时间。对于具有大量网络层的深度神经网络而言,设计流水线需要考虑非常多的因素,以减少流水计算过程中处理速度相对较快的流水线层级所需等待的时间。

还有一些现有技术在参考了神经网络进行计算的规律的情况下,提出可以针对神经网络处理器中的计算单元进行“时分复用”以提高计算单元的复用率,其区别于上述流水线的方式,采用相同的计算单元依次对神经网络中的各个网络层进行计算。例如对输入层、第一隐藏层、第二隐藏层、…输出层逐一地进行计算,并在下一次迭代计算中重复上述过程。这样的现有技术可以针对具有较少网络层的神经网络,也可以针对深度神经网络,并且其尤其适合于硬件资源受限的应用场景。对于这样的应用场景,神经网络处理器在针对一个输入进行了网络层a的计算之后,可能很长时间都不需要再进行针对该网络层a的计算,若是每个网络层分别采用不同的硬件作为其计算单元则会导致对硬件的限制,使得硬件的复用率不高。绝大多数现有技术均是基于这样的考虑,采用不同的针对计算单元的“时分复用”的方式而对神经网络处理器的硬件进行了相应的改进。

然而,无论采用上述哪种现有技术来设计卷积神经网络处理器,仍然存在硬件利用率有待改进之处。



技术实现要素:

因此,本发明的目的在于克服上述现有技术的缺陷,提供一种用于卷积神经网络处理器的控制方法,所述卷积神经网络处理器具有3*3的卷积计算单元,所述控制方法包括:

1)确定需要执行的卷积运算的卷积核尺寸n*n;

2)根据需要执行的卷积运算的卷积核尺寸n*n,选择在m2个3*3的卷积计算单元中载入与所述尺寸对应的卷积核的数值,并将其余的各个数值填充为0,3m≥n;

3)根据需要执行的卷积运算的尺寸、以及需要执行卷积的输入特征图的尺寸,确定卷积计算过程所需的周期数;并且

4)根据所述周期数,在卷积计算过程中的各个周期,将相应的输入特征图的数值载入到所述m2个3*3的卷积计算单元中,所述输入特征图的数值在所述m2个3*3的卷积计算单元中的分布与所述卷积核的数值在所述m2个3*3的卷积计算单元中的分布保持一致;

控制载入了卷积核以及输入特征图的数值的所述m2个3*3的卷积计算单元执行与所述周期数对应的卷积计算;

5)对所述m2个3*3的卷积计算单元的卷积计算结果中对应的元素进行累加,以获得最终的卷积运算的输出特征图。

优选地,根据所述方法,其中步骤2)包括:

若是需要执行的卷积运算的尺寸小于或等于3*3,则在同一个3*3的卷积计算单元中载入与所述尺寸对应的卷积核的数值并将其余的各个数值填充为0;

若是需要执行的卷积运算的尺寸大于3*3,则在相应数量的3*3的卷积计算单元中载入与所述尺寸对应的卷积核的数值并将其余的各个数值填充为0。

优选地,根据所述方法,其中步骤4)包括:

在卷积计算过程中的各个周期中,若是需要载入的输入特征图的数值中包含所述输入特征图中左侧第一列的元素,则一次性将所述输入特征图中与需要执行的卷积运算的尺寸相匹配的多个元素载入到所述卷积计算单元的相应位置处并将其余的各个位置的数值填充为0,否则则将与前一周期中相同的元素作为一个整体向左移动一个单元,并且将输入特征图中与前一周期中不同的、且需要更新的多个元素载入到通过所述移动而空出的位置处。

优选地,根据所述方法,其中步骤4)包括:

在卷积计算过程中的各个周期中,控制所述3*3的卷积计算单元对其所载入的针对输入特征图以及针对卷积核的对应位置的元素执行乘法、并对乘法的结果进行累加,以获得输出特征图中相应位置的元素。

优选地,根据所述方法,其中步骤2)包括:

若是需要执行的卷积运算的尺寸为5*5,则在四个3*3的卷积计算单元中载入5*5的卷积核的数值并将其余的各个数值填充为0;

并且,步骤4)包括:

在执行卷积计算的全部周期的每一个周期,将相应的输入特征图的数值载入到所述四个3*3的卷积计算单元中,所述输入特征图的数值在所述四个3*3的卷积计算单元中的分布与所述5*5的卷积核的数值在所述四个3*3的卷积计算单元中的分布保持一致;

其中,在卷积计算过程中的各个周期中,若是需要载入的输入特征图的数值中包含所述输入特征图中左侧第一列的元素,则一次性将所述输入特征图中尺寸为5*5的25个元素载入到所述四个3*3的卷积计算单元的相应位置处并将其余的各个位置的数值填充为0,否则则将与前一周期中相同的元素作为一个整体向左移动一个单元,并且将输入特征图中与前一周期中不同的、且需要更新的元素载入到通过所述移动而空出的位置处。

优选地,根据所述方法,其中步骤4)包括:

在卷积计算过程中的各个周期中,控制所述四个3*3的卷积计算单元分别对其所载入的针对输入特征图以及针对卷积核的对应位置的元素执行乘法、并对乘法的结果进行累加,

并且步骤5)包括:对由全部所述四个3*3的卷积计算单元的计算结果进行累加,以获得输出特征图中相应位置的元素。

优选地,根据所述方法,其中步骤2)包括:

若是需要执行的卷积运算的尺寸为7*7,则在九个3*3的卷积计算单元中载入7*7的卷积核的数值并将其余的各个数值填充为0;

并且,步骤4)包括:

在执行卷积计算的全部周期的每一个周期,将相应的输入特征图的数值载入到所述九个3*3的卷积计算单元中,所述输入特征图的数值在所述九个3*3的卷积计算单元中的分布与所述7*7的卷积核的数值在所述九个3*3的卷积计算单元中的分布保持一致;

其中,在卷积计算过程中的各个周期中,若是需要载入的输入特征图的数值中包含所述输入特征图中左侧第一列的元素,则一次性将所述输入特征图中尺寸为7*7的49个元素载入到所述九个3*3的卷积计算单元的相应位置处并将其余的各个位置的数值填充为0,否则则将与前一周期中相同的元素作为一个整体向左移动一个单元,并且将输入特征图中与前一周期中不同的、且需要更新的元素载入到通过所述移动而空出的位置处。

优选地,根据所述方法,其中步骤4)包括:

在卷积计算过程中的各个周期中,控制所述九个7*7的卷积计算单元分别对其所载入的针对输入特征图以及针对卷积核的对应位置的元素执行乘法、并对乘法的结果进行累加,

并且步骤5)包括:对由全部所述九个7*7的卷积计算单元的计算结果进行累加,以获得输出特征图中相应位置的元素。

以及,一种控制单元,其用于实现上述任意一项所述的控制方法。

以及,一种卷积神经网络处理器,包括:7*7的卷积计算单元、以及控制单元,所述控制单元用于实现上述任意一项所述方法。

与现有技术相比,本发明的优点在于:

改善了用于执行卷积的计算单元的复用率,达到减少必须设置在卷积神经网络处理器中的硬件计算单元的效果。卷积神经网络处理器不必为了针对需要采用不同尺寸的卷积核的不同的卷积层而设置大量的具有不同尺寸的硬件计算单元。在执行针对一个卷积层的计算时,可以采用与该卷基层的卷积核的尺寸不匹配的其他计算单元来进行计算,由此提高了卷积神经网络处理器中硬件计算单元的利用率。

附图说明

以下参照附图对本发明实施例作进一步说明,其中:

图1是现有技术中采用m种卷积核对输入图层进行卷积计算以获得输出图层的示意图,其中每个卷积核具有n个通道;

图2是现有技术以及本发明利用一个3*3的计算单元实现3*3的卷积运算的示意图;

图3a是根据本发明的一个实施例利用四个3*3的计算单元进行5*5卷积运算时由计算单元载入输入特征图的示意图;

图3b是根据本发明的一个实施例利用四个3*3的计算单元实现5*5的卷积运算的示意图;

图4是根据本发明的一个实施例采用3*3的计算单元进行3*3卷积运算时由计算单元载入输入特征图的示意图;

图5是根据本发明的一个实施例利用九个3*3的计算单元实现7*7的卷积运算的示意图。

具体实施方式

下面结合附图和具体实施方式对本发明作详细说明。

发明人在研究现有技术的过程中发现,现有的各种经典神经网络,例如alexnet、googlenet、vgg、resnet等,这些神经网络均包含有不同数量的卷积层,而不同的卷积层所采用的卷积核大小也有所差别。例如alexnet,该网络的第一层为卷积核大小为11*11的卷积层,该网络的第二层为卷积核大小为5*5的卷积层,该网络第三层为卷积核大小为3*3的卷积层等等。

然而,在现有的各种神经网络处理器中,均是针对不同大小的卷积核设置不同的计算单元。这就造成了,当执行某一个卷积层的计算时,与该卷基层的卷积核的尺寸不匹配的其他计算单元均处于闲置状态。

例如,如图1所示出地,神经网络处理器可以提供m种不同的卷积核,记作卷积核0至卷积核m-1,每个卷积核具有n个通道,分别用于针对输入图层的n个通道进行卷积计算,每一个卷积核与一个输入图层进行卷积运算后可以得到一个输出图层。针对一个输入图层,利用全部m种卷积核可以计算得到m-1个输出图层。若是某一个输入图层需要执行采用卷积核1的卷积运算,此时除与卷积核1对应的计算单元以外的其他计算单元均处于闲置状态。

对此,本发明提出了一种对计算单元的复用方案,其通过控制来调整计算单元实际载入的数据(对于同一个计算单元而言,其既需要载入卷积核的数值,也需要载入输入特征图中的数值),从而实现以3*3规模的计算单元实现针对多种尺寸的卷积运算,以减少进行卷积运算所必须采用的硬件计算单元的规模。

本发明所采用的神经网络处理器系统架构可以包括以下五个部分,输入数据存储单元、控制单元、输出数据存储单元、权重存储单元、计算单元。

输入数据存储单元用于存储参与计算的数据;输出数据存储单元存储计算得到的神经元响应值;权重存储单元用于存储已经训练好的神经网络权重;

控制单元分别与输出数据存储单元、权重存储单元、计算单元相连,控制单元可根据解析得到的控制信号控制计算单元进行神经网络计算。

计算单元用于根据控制单元产生的控制信号来执行相应的神经网络计算。计算单元完成神经网络算法中的大部分运算,即向量乘加操作等。

根据本发明的对计算单元的复用可以由上述控制单元对计算单元进行控制而实现,下面将通过几个实施例来进行具体的介绍。下面,首先介绍一下传统的现有技术是如何利用3*3的计算单元来实现3*3的卷积运算的。参考图2中所给出了一个实例,对于现有技术而言,3*3规模的计算单元以如下方式来实现卷积运算:

在第一周期,将输入特征图中第1-3行、1-3列中的每个元素(这里将其称作为是针对输入特征图的滑动窗口)与卷积核中对应位置的每个元素分别相乘所得的结果的累加之和作为输出特征图中的第1行第1列的元素,即(3×2)+(2×(-8))=-10。

在第二周期,将输入特征图中第1-3行、2-4列中的每个元素(即针对当前周期滑动窗口中的数值)与卷积核中对应位置的每个元素分别相乘所得的结果的累加之和作为输出特征图中的第1行第2列元素(未在图2中示出)。

以此类推,通过向右、或向下移动尺寸为3*3的滑动窗口共24次,以获得尺寸为5*5的输出特征图。

本发明不排斥采用上述方式来利用3*3的计算单元实现3*3的卷积运算。并且,进一步地,在本发明中,还可以通过控制使得3*3规模的计算单元实现针对除3*3以外的其他的尺寸的卷积核的运算,例如5*5、7*7、9*9的卷积运算。

如前文中所介绍地,在传统的现有技术中,计算单元仅能够用于执行与其尺寸相等的卷积运算。现有技术并没有给出关于如何采用3*3的计算单元实现诸如5*5、7*7、9*9的卷积运算的教导。一方面计算单元并不知道如何载入卷积核以及输入特征图。另一方面在现有技术中,输出特征图的尺寸取决于滑动窗口的移动次数,例如,针对7*7的输入特征图进行3*3的卷积运算,滑动窗口的横向移动范围以及纵向移动范围均为5个单元,通过多个周期的计算可以获得5*5的输出特征图,这使得采用3*3的计算单元来实现其他尺寸的卷积运算是非常困难的。可以理解,在沿用现有技术的情况下,采用3*3的计算单元针对7*7的输入特征图进行卷积计算只能得到尺寸为5*5的输出特征图(例如在图2中所示出地),计算单元以及处理器并不知道如何移动滑动窗口才能够利用3*3的计算单元以获得诸如5*5的卷积运算。

对此,本发明提出了一种相应的控制方法,通过调度载入到计算单元中的输入特征图、卷积核,并控制执行乘法、加法运算,实现以四个3*3的计算单元执行5*5的卷积运算。

根据本发明的一个实施例,参考图3a,可以分为四个3*3的计算单元共同载入5*5的卷积核的数值、以及输入特征图的数值,所述四个计算单元以虚线所示出。例如,在图3a中,以位于左上的计算单元载入9个数值、由右上的计算单元载入6个数值、由左下的计算单元载入6个数值、由右下的计算单元载入4个数值。

图3b示出了与图3a对应的具体的控制方法,所述控制方法如下:

输入特征图的尺寸为7*7,需要执行的卷积运算的尺寸为5*5,因此可以确定卷积计算需要执行总共3×3=9个周期。

判断出5>3,因而需要由不止一个3*3的计算单元来共同完成尺寸为5*5的卷积运算。这里可以选择恰好可以用于载入尺寸为5*5的数据的k个3*3的计算单元。这里针对k的选择为:k=m2,3m可以选择大于或等于n的最小正整数。当然,也可以选择比上述数量更多的3*3的计算单元来执行5*5的卷积运算。对于图3b所示出的实例,这里选择k=4个计算单元。

在计算单元进行卷积计算时,控制在每个周期分别将相应的卷积核的值以及相应的输入特征图的值载入到该四个3*3的计算单元中。

在第一周期,将输入特征图中第1-3行、第1-3列的元素载入到图3b中位于左上的3*3的计算单元中,将输入特征图中第1-3行、第4-5列的元素载入到图3b中位于右上的3*3的计算单元中,将输入特征图中第4-5行、第1-3列的元素载入到图3b中位于左下的3*3的计算单元中,将输入特征图中第4-5行、第4-5列的元素载入到图3b中位于右下的3*3的计算单元中,并将剩余的第6行、第6列的元素填充为“0”;并且,以类似的方式在所述四个3*3的计算单元中载入5*5的卷积核,即将卷积核中第1-3行、第4-5列的元素载入到图3b中位于右上的3*3的计算单元中,将卷积核中第4-5行、第1-3列的元素载入到图3b中位于左下的3*3的计算单元中,将卷积核中第4-5行、第4-5列的元素载入到图3b中位于右下的3*3的计算单元中,并将剩余的第6行、第6列的元素填充为“0”。由此在四个3*3的计算单元中载入了输入特征图和卷积核的值。控制该四个3*3的计算单元分别对其所载入的输入特征图以及卷积核中对应位置的元素执行乘法、累加,并且将全部四个3*3的计算单元的计算结果中对应位置的元素累加,以获得输出特征图中第1行第1列的元素。由于计算单元中除去原本3*3的卷积核的数值以外的各个元素均为0,因此计算的结果与实际采用3*3的计算单元进行卷积计算的结果完全一致。

在第二周期,将图3b中输入输入特征图中第1-5行、第2-6列的全部元素(即“0,0,2,0,-3;0,3,-2,5,0;0,0,0,2,0;0,0,0,3,0;0,0,0,0,0”)载入到该计算单元中以作为第1-5行、第1-5列的新的元素。控制计算单元针对其所载入的元素执行乘法、和累加运算,以获得输出特征图中第1行第2列的元素。

根据本发明的一个优选的实施例,还可以在第二周期中对上述在四个3*3的计算单元中载入输入特征图的数据的方式进行改进,以提高载入效率。即,将图3b中位于左上的3*3的计算单元中第1-3行、第2-3列的全部元素(即“0,0;0,3;0,0”)整体向左移动1个单位以作为第1-3行、第1-2列的新的元素,并且将输入特征图中第1-3行、第3列的元素(即“2;-2;0”)载入到该计算单元中以作为第1-3行、第3列的新的元素;类似地,将图3b中位于右上的3*3的计算单元中第1-3行、第2列的全部元素(即“0;5;2”)整体向左移动1个单位以作为第1-3行、第1列的新的元素,并且将输入特征图中第1-3行、第4列的元素(即“-3;0;0”)载入到该计算单元中以作为第1-3行、第2列的新的元素;将图3b中位于左下的3*3的计算单元中第1-2行、第2-3列的全部元素(即“0,0;0,0”)整体向左移动1个单位以作为第1-2行、第1-2列的新的元素,并且将输入特征图中第1-2行、第3列的元素(即“0;0”)载入到该计算单元中以作为第1-2行、第3列的新的元素;将图3b中位于右下的3*3的计算单元中第1-2行、第2列的全部元素(即“3;0”)整体向左移动1个单位以作为第1-2行、第1列的新的元素,并且将输入特征图中第1-2行、第4列的元素(即“0;0”)载入到该计算单元中以作为第1-2行、第2列的新的元素。由此对该5*5的计算单元中所载入的输入特征图的值进行了更新,达到了与传统方案中采用滑动窗口类似的效果。并且类似地控制计算单元针对其所载入的元素执行乘法、和累加运算,以获得输出特征图中第1行第2列的元素。

以此类推,完成第三周期。

在第四周期,将输入特征图中第2-6行、第1-5列的元素以与前文中类似的方式载入到该四个3*3的计算单元中,并且控制计算单元针对其所载入的元素执行乘法、和累加运算,以获得输出特征图中第2行第1列的元素。并且在随后的第五到第六周期,采用与前述第二到第三周期类似的方式在该计算单元中载入相应的输入特征图的元素。以此类推,直到完成了全部九个周期,获得了3*3的输出特征图。

可以看出,通过上述控制方法,在第一周期时向计算单元中一次性载入了输入特征图中5*5的25个数值。类似地,第四、七周期也一次性载入了输入特征图中的25个数值。而相应地,在第二至三周期中,每次仅需载入输入特征图的3个数值,并且将在前一周期中也使用的多个数值向左移动,对于计算单元中已载入的针对卷积核的数值则不做修改。类似地,第五至六、第八至九周期也采用了与第二至三周期相似的方式来载入输入特征图中的元素。

由此,可以确保在处于各个周期时,计算单元中,输入特征图的每个元素的位置与与其进行乘法运算的卷积核中的相应元素的位置是一一对应的。并且,对于除去用于实现本发明的控制方法的单元之外的其他单元,例如计算单元本身、或者处理器而言,它们并不会意识到该四个3*3的卷积单元实际上实施的是5*5的卷积运算。此外,通过上述控制方法,使得在各个周期内计算单元所载入的输入特征图的数值并不直接取决于滑动窗口。一方面体现在载入到各个计算单元中的输入特征图的数值的排列并不取决于尺寸为5*5的滑动窗口中各个数值实际的排列方式,另一方面还体现在计算的周期数也不取决于尺寸与计算单元尺寸相等的3*3的滑动窗口的移动次数,输出结果的数量和尺寸可以通过本发明的控制方法来控制,由此可以利用四个3*3的计算单元针对7*7的输入特征图进行5*5的卷积运算并从而得到3*3的输出结果。

当然,在本发明中也可以在采用3*3的计算单元执行3*3的卷积运算时,将输入特征图中与前一周期中相同的部分向左移动一个单元、并且将新的输入特征图的相应的3个元素填充到经过所述移动而空出的位置处,例如在图4中所示出地。

可以理解,本发明还可以利用3*3的计算单元实施小于3*3的卷积运算,即在同一个计算单元中载入相应尺寸的卷积核的数值、输入特征图的数值,并将其余部分填充为“0”。在具体实施时,可以根据输入特征图的尺寸、所执行的卷积运算的尺寸来确定所需的周期,并且采用与上述实施例类似的方式进行控制。

根据本发明的一个实施例,提供了一种控制方法,实现以多个3*3的计算单元执行7*7的卷积运算,参考图5,具体的控制方法如下:

判断出7>3,选择在k个3*3的计算单元中载入尺寸为5*5的数据:k=m2,3m选择大于或等于n的最小正整数,这里选择k=9个计算单元。

控制将所使用的卷积核的数值分为九部分分别载入到九个3*3的计算单元中,将其余部分填充为“0”;并且,在各个周期,控制将输入特征图中相应的数据分为四部分分别载入到所述九个3*3的计算单元中,将其余部分填充为“0”。这里在该九个3*3的计算单元中,卷积核的数值的分布方式与输入特征图的数值的分布方式保持一致。

并且,控制每个计算单元针对其所载入的元素执行乘法、和累加运算,通过将全部九个计算单元的计算结果中对应的计算结果进行累加,从而获得相应的输出特征图的数值。

在该实施例中也可以采用与图3b中类似的方式来载入输入特征图。

类似地,还可以采用九个3*3的计算单元实现诸如9*9的卷积运算。

在本发明中,可以针对上述控制方法设置相应的控制单元,这样的控制单元可以适应于一个现有的卷积神经网络处理器,通过实施上述控制方法的方式来对用于卷积的计算单元进行复用,也可以基于这样的控制单元所需要的硬件资源来设计配套的卷积神经网络处理器,例如在满足上述复用方案的情况下采用最少数量的硬件资源。

本发明所提供的方案涉及改善用于执行卷积的计算单元的复用率,以减少必须设置在卷积神经网络处理器中的硬件计算单元,卷积神经网络处理器不必为了针对需要采用不同尺寸的卷积核的不同的卷积层而设置大量的具有不同尺寸的硬件计算单元。在执行针对一个卷积层的计算时,可以采用同一尺寸的计算单元实现针对不同卷积层的卷积计算,由此提高了卷积神经网络处理器中硬件计算单元的利用率。

可以理解,本发明并不排斥如背景技术中所介绍的采用更大规模的硬件并行地进行计算处理、以及通过“时分复用”的方式来提高计算单元的复用率。

并且,需要说明的是,上述实施例中介绍的各个步骤并非都是必须的,本领域技术人员可以根据实际需要进行适当的取舍、替换、修改等。

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管上文参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1