深度神经网络的压缩方法、芯片、电子设备及介质
技术领域
本公开涉及神经网络,更具体地涉及深度神经网络的压缩。
背景技术
深度神经网络(Deep Neural Networks,DNN)是人工智能技术的核心。目前,深度神经网络得到了广泛的研究和关注,被用在包括计算机视觉、语音识别、机器人、自动驾驶等诸多人工智能应用领域中。
深度神经网络由多个神经网络层构成,包括输入层、若干隐藏层(又称中间层)、以及输出层。当前深度神经网络的层级数量往往非常大,甚至多达上千层,每一层都具有数量庞大的节点。从而,整个深度神经网络可能包括数以百万计甚至千万计的参数,需要非常大的存储空间和内存带宽。这一方面增大了存储成本,另一方面影响了深度神经网络的性能。尤其是对于诸如视频监控、自动驾驶等实时应用,深度神经网络的存储问题正在成为其性能和硬件设计的瓶颈。
发明内容
根据本公开的一个方面,提供一种深度神经网络的压缩方法。深度神经网络包括多个层。方法包括,对于多个层中的除了输入层以外的至少一个层:从参数存储空间读取该层的参数;从特征图存储空间读取由上一层存储的第一特征图;基于所读取的参数和第一特征图生成第二特征图;对第二特征图进行压缩得到第三特征图;以及将第三特征图存储到特征图存储空间中。
根据本公开的另一个方面,提供一种芯片,包括:存储器以及深度神经网络引擎。存储器包括参数存储空间和特征图存储空间,参数存储空间用于存储深度神经网络的参数,特征图存储空间用于存储深度神经网络的特征图。深度神经网络引擎被配置为与存储器配合以执行根据本公开中的方法。
根据本公开的另一个方面,提供一种电子设备,包括:图像传感器以及前述的芯片。图像传感器被配置为捕获图像和/或视频数据。芯片被配置为利用深度神经网络处理所捕获的图像和/或视频数据以进行目标识别。
根据本公开的另一个方面,提供一种电子设备,包括:处理器;以及存储程序的存储器。程序包括指令,指令在由处理器执行时使电子设备执行本公开中的方法。
根据本公开的另一个方面,提供一种存储程序的计算机可读存储介质。程序包括指令,指令在由处理器执行时,使处理器执行本公开中的方法。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代相同的要素。
图1是示出根据本公开的示例性实施例的深度神经网络的示意图;
图2是示出根据本公开的示例性实施例的卷积神经网络(Convolutional Neural Network,CNN)的示意图;
图3是示出根据本公开的示例性实施例的对深度神经网络进行压缩的示例性方法的流程图;
图4是示出根据本公开的示例性实施例的对特征图进行压缩的示意性框图;
图5是示出根据本公开的示例性实施例的深度神经网络的推断过程的示意图;
图6是示出根据本公开的示例性实施例的深度神经网络的训练过程的示意图;
图7是示出根据本公开的示例性实施例的芯片的示意图;
图8是示出根据本公开的示例性实施例的电子设备的示意图;
图9是示出根据本公开的示例性实施例的另一种电子设备的示意图。
具体实施方式
在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
图1示出了一个示例性深度神经网络的示意图。深度神经网络是除了输入层和输出层以外,还包含至少一个隐藏层的神经网络。作为示例,图1示出的深度神经网络100包括一个输入层110、两个隐藏层120和130、以及一个输出层140。每层都包括若干节点(又称为神经 元)150。作为示例,图1的输入层110具有3个节点,隐藏层120具有4个节点,隐藏层130具有3个节点,输出层140具有2个节点。需要说明的是,图1仅为深度神经网络的简单示例,实际的深度神经网络的隐藏层的数量以及每层的节点数可以远大于此。
输入层110接收输入的数据,例如图片的像素,音频的振幅采样,或是系统状态的数字化表示等等。这些数据传播到隐藏层120。隐藏层120中的每个节点对接收到的数据进行计算,并将计算结果传播到下一个隐藏层130。类似地,隐藏层130中的每个节点对接收到的数据进行计算,并将计算结果传播到输出层140。输出层140对接收到的数据进行处理并输出结果,例如对特定对象的识别结果。
各层的节点之间可以是全连接的或部分连接的。对于全连接的情况,当前层(例如输出层140)中的任意一个节点都与上一层(例如隐藏层130)的全部节点相连。对于部分连接的情况,当前层(例如输出层140)中的一个或多个节点可能只连接到上一层(例如隐藏层130)中的部分节点而非全部节点。图1示出的神经网络中,各层之间均采用全连接的方式。然而可以理解的是,深度神经网络中的至少一些层之间也可以采用部分连接的方式。
通常,隐藏层120和130以及输出层140中的每个节点都对输入的各数据进行线性或非线性运算。假设节点150位于隐藏层130中,该节点150具有四个输入x
1,x
2,x
3和x
4,输出为y,那么
其中,w
i是节点150的输入x
i的权重(i=1,2,3,4,在有的神经网络中,权重也称为连接,即,用隐藏层120中的各个节点到隐藏层130中的节点150的连接来表示相应的权重),b是节点150的偏置,函数f()是节点150的激活函数,其通常为非线性函数,例如Sigmoid函数、双曲正切(tanh)函数、修正线性单元(ReLU)函数、Leaky ReLU函数等。可以理解的是,偏置b和激活函数f()都并非是必须的,有的节点可以仅具有权重w。
在神经网络中,各个节点计算时采用的权重w和偏置b通常是在训练过程中经不断学习而得到的,一般将其称之为神经网络的参数。
由于深度神经网络的层数和节点数通常都很大,其进行训练和推断时所需的参数数量是巨大的。例如,假设输入的数据为彩色图像,大小为100×100个像素,由于每个像素点具有R、G、B三个值,则输入层将具有3×10
4个节点,每个节点代表一个像素的一个颜色值。假设神经网络的第一个隐藏层具有1000个节点并且与输入层全连接,则第一个隐藏层的计算所需的参数(权重w和配置b)数量为3×10
7+1000。随着层数的增加,参数数量也会随之进一步增加。由于在神经网络的推断或训练过程中,每个层都需要从存储器(例如图形处理器的内存,其可以是各种随机存取存储 器或易失性存储器,诸如DRAM,SRAM,DDR RAM或其他随机存取固态存储器)中读取和/或存入相应的参数,给存储器的存储容量和内存带宽带来了较大的压力。
一种常见的深度神经网络是卷积神经网络,其隐藏层包含至少一个卷积层。相较于传统的深度神经网络,卷积神经网络在图像和语音识别等方面能够给出更优的结果,并且可以减少网络所需的参数数量。卷积神经网络最常见的应用是图像识别,下面的讨论将以输入数据为图像为例进行说明。但本领域技术人员应理解,卷积神经网络的应用不限于图像识别。
在一种典型的卷积神经网络中,输入一张图像,经过一系列卷积层,以及可选的池化(pooling)层和全连接层后,可输出相应的识别结果。图2示出了一个示例性卷积神经网络的示意图。需要说明的是,卷积神经网络具有多种形式,图2仅仅是一种简单的示例性表示,本公开的方案并不限制于此。
如图2所示,卷积神经网络200可以包括输入层210。输入层210可以用于接收输入数据,例如图像。可选地,输入层210可以对数据进行预处理,例如去均值、归一化、去相关、白化等,以便于后续处理。作为示例,图2中的输入图像为28×28个像素的灰度图像,即,输入图像的大小为28×28×1。每个像素可以相当于图1中的输入层110的一个节点。如果输入的是彩色图像,由于其具有R、G、B三个颜色通道,其大小将为28×28×3。
图2所示的卷积神经网络200还包括两个卷积层220和230。每个卷积层220和230可以利用一个或多个卷积核(也可称为滤波器)来对输入的图像进行特征提取。具体而言,每个卷积核是一个权重矩阵,其与输入到该卷积层的图像数据进行卷积以提取图像的特征。不同的卷积核可以提取不同的图像特征,例如垂直边缘、水平边缘、曲线、颜色等低级特征,或者是眼睛、鼻子、帽子等高级特征,这通常取决于卷积核所处的卷积层的位置。这种卷积操作的输出可以称为特征图(feature map)。对于输入层210,其特征图即输入的图像。需要说明的是,本文提到的“特征图”不限于基于图像提取的数据,也不限于卷积神经网络中的卷积层的输入输出数据。各种深度神经网络中的各层的输入输出数据都可以认为是特征图。
卷积层220具有32个卷积核,每个卷积核的大小为5×5×1。这是针对输入图像为灰度图像(深度为1)的情况。如果输入层210的图像为彩色图像,则卷积层220的各个卷积核的深度为3,即卷积核的大小为5×5×3。如上所述,卷积核是一个权重矩阵,其与输入的图像进行卷积,可以得到与该卷积核相对应的输出特征图。更具体而言,对于卷积层220,将5×5的卷积核与输入图像中的一个5×5像素块进行点乘(dot product),可以得到一个特征值。这样的点乘意味着卷积核里的各个权重分别与相应位置的像素相乘再求和,此外还可以加上偏置(如果有的话)。依次改变输入图像中的5×5像素块的位置(假定步长为1),例如从左至右,再 从上至下,将各个位置的5×5像素块与同一卷积核进行点乘,就可以得到一个由24×24个特征值组成的特征图,即该卷积核的输出特征图。对于彩色图像的情况,输入图像和卷积核的深度均为3,则将卷积核的每一层与输入图像的相应层进行卷积后,三者算术求和,即可得到该卷积核的输出特征图。对于每个卷积核,都可以生成一个大小为24×24的特征图。由于卷积层220具有32个卷积核,共生成32个24×24的特征图,或者说是一个大小为24×24×32的特征图。
类似地,卷积层230具有64个卷积核,每个卷积核的大小为3×3×32。每个卷积核与卷积层220输出的特征图进行卷积,生成一个22×22的特征图。从而,卷积层230共生成64个22×22的特征图,或者说是一个大小为22×22×64的特征图。
卷积神经网络200还可以包括全连接层240作为输出层,其可以类似于图1中的输出层140,这里不再赘述。尽管图2中仅仅示出了一个全连接层,但是本领域技术人员应理解,全连接层也可以有多个,而且每个全连接层的节点数量可以各不相同。
应当理解的是,图2仅仅是对卷积神经网络的简单示意,在实际的卷积神经网络中,卷积层的数量通常会更多。利用卷积核进行的操作也不限于点乘,而是可以更复杂,例如数字信号处理里常用的各种滤波操作,诸如高斯滤波器、拉普拉斯滤波器等。每个卷积层还可以包含激活函数,其可以类似于上文参照图1介绍的激活函数f()。对于每个特征图,还可以在特征图的外围进行补0操作,以使得输出特征图与输入特征图的二维大小一致。另外,卷积层之间还可以具有可选的池化层(未示出),其利用图像局部相关性的原理,对卷积层输出的特征图进行降采样,以减小后续层的计算量。
卷积神经网络的参数主要是卷积层和全连接层中的各个权重以及可能的偏置。类似于普通的深度神经网络,这些参数通过训练而不断优化,直至得到训练好的卷积神经网络。由于卷积神经网络的卷积层中的不同像素块可以共享相同的卷积核,而且卷积核的尺寸远小于特征图的尺寸(通常称为参数共享和局部感知),因此,与传统的深度神经网络相比,卷积神经网络可以有效地减少神经网络的参数数量。然而,由于卷积神经网络的层数和每层的卷积核数量较多,其参数仍然会占用较大的存储容量和内存带宽。
目前,已经有一些研究来试图解决或改善深度神经网络的存储问题。
一种思路是使用具有更大带宽的存储器,例如高带宽存储器(High Bandwidth Memory,HBM)。然而这种方式的成本高昂,硬件设计难度也很大。
另一种思路是对深度神经网络进行压缩。一类压缩方法是改变神经网络的规模。例如,通过减少神经网络的层数或卷积核的数量,或者去除神经网络中不重要的连接,来对神经网络进行裁剪;或者,利用矩阵或张量分解的思想,通过少量参数重构原始网络参数矩阵或参数张量,以达到减少 网络存储开销的目的。另一类压缩方法是对神经网络参数本身进行压缩。例如,可以对网络参数进行低比特量化,例如使用8位或16位的整型数来替代64位浮点数,以降低存储和计算开销。还可以对参数进行无损压缩,例如采用霍夫曼(Huffman)编码进行压缩。不过,无损压缩的压缩比较低,通常不超过2:1,而且效果不太稳定。
可以看到,当前的深度神经网络压缩方法大都着眼于神经网络参数的压缩。然而,发明人注意到,除了神经网络的参数以外,特征图的存取同样会占据较大的存储容量和内存带宽。具体而言,在深度神经网络的推断和训练过程中,每一层所生成的特征图都需要存入存储器(例如各种随机存取存储器或易失性存储器,诸如DRAM,SRAM,DDR RAM或其他随机存取固态存储器),供下一层读出并使用。在输入数据量较大(例如,输入图像的分辨率较高)的情况下,特征图的存取同样会耗费较大的存储空间和内存带宽,甚至比参数的存取更加耗费存储器资源。这对神经网络的应用,尤其是神经网络的实时应用是一个巨大的挑战。
为此,本公开提出了一种新的深度神经网络的压缩方法,相比于现有的神经网络压缩技术,其更适合于神经网络的大数据量实时应用。
图3是示出根据本公开的示例性实施例的对深度神经网络进行压缩的示例性方法300的流程图。方法300可以针对深度神经网络的除输入层以外的任何一个层执行。为方便描述,下面以第i层为例进行说明。
在框310,第i层从参数存储空间读取该层计算所需的参数。该参数可以是深度神经网络中的任何参数,例如结合图1所描述的各个节点所用的权重w和偏置b,或是结合图2所描述的各个卷积核的权重和偏置。
根据一个实施例,框310中从参数存储空间读取的参数可以是经压缩的参数。参数的压缩方式例如可以是无损压缩(例如霍夫曼编码),也可以是有损压缩。
在框320,第i层从特征图存储空间读取由第i-1层存储的第一特征图。第一特征图可以是神经网络的任何层输出的数据。例如,第一特征图可以是图1中的输入层110、隐藏层120或隐藏层130所输出的数据,或是图2中的输入层210、卷积层220、卷积层230所输出的数据,或是池化层、全连接层等所输出的数据。
根据一个实施例,第一特征图可以是经压缩的特征图。具体而言,第i-1层生成的特征图可以被压缩并存储到特征图存储空间中,从而,第i层读取的第一特征图是经压缩的特征图。根据另一个实施例,第一特征图也可以是未经压缩的特征图。例如,第i-1层对其生成的特征图不进行压缩,直接存储到特征图存储空间中。
在框330,第i层基于所读取的参数和第一特征图生成第二特征图。根据一个实施例,如果所读取的参数是经压缩的参数,则可以对参数进行解压缩,然后用于第i层的计算。根据另一个实施例,如果所读取的第一特征图是经压缩的特征图,则可以对第一特征图进行解压缩,然后用于第i层的计算。第i层基于第i-1层的特征图和相应的参数来生成第二特征图的示例可以参照例如结合图1所进行的描述,其中每个节点150都可以利用公式(1)来生成该节点的输出,每层的所有节点的输出汇总后就可得到该层所生成的特征图。第i层基于第i-1层的特征图和相应的参数来生成第二特征图的示例还可以参照例如结合图2所进行的描述,其中每层的卷积核与上一层的特征图进行卷积即可生成与该卷积核对应的特征图。如果该层有多个卷积核,则可以生成多个特征图,或者可以将这多个特征图联合作为一个高维特征图。可以理解的是,这些都仅仅是生成特征图的示例,框330中生成第二特征图的实施方式不限于此。
在框340,第i层对框330所生成的第二特征图进行压缩,得到第三特征图。对第二特征图的压缩可以是无损压缩,更优选地是有损压缩,下文将对此进行更详细的描述。
根据一个实施例,对第二特征图进行压缩可以包括:对第二特征图的不同区域以不同的压缩比进行压缩,其中,每个区域的压缩比取决于对该区域的感兴趣程度。在一个示例中,感兴趣程度高(例如,第一感兴趣程度)的区域的压缩比小于感兴趣程度低(例如,小于第一感兴趣程度的第二感兴趣程度)的区域的压缩比。例如,在神经网络的处理对象为图像或视频的情况下,对于图像中感兴趣的区域(即感兴趣程度高,例如人像),通常希望其在压缩和解压之后得到的图像与原图具有较高的相似度,为此可以采用较小的压缩比,以减小信息损失;而对于图像中不感兴趣的区域(即感兴趣程度低,例如天空),对其在压缩和解压之后得到的图像与原图相似度的要求则可以降低,为此可以采用较大的压缩比。相似度的度量参数例如可以是欧氏距离、峰值信噪比(PSNR)、结构相似性评价(SSIM)等。
在框350,第i层将框340得到的第三特征图存储到特征图存储空间中。参数存储空间和特征图存储空间可以位于分别的存储器中,也可以共享同一个存储器。作为示例,用于参数存储空间和特征图存储空间的存储器可以是高速随机存取存储器,诸如DRAM、SRAM、DDR RAM或其他随机存取固态存储器。
方法300既可应用于深度神经网络的推断过程,也可应用于深度神经网络的训练过程。后面将结合图5和图6对此进行更详细的说明。
利用方法300,对深度神经网络的至少一个层所生成的特征图压缩后进行存储,可以显著减小特征图所需的存储空间及其占用的内存带宽。这对于神经网络的实时应用尤为有用。例如,在视频监控的应用场景下,如果利用神经网络来实时识别视频图像中的目标,则需要对大量的视频帧进行 实时的处理。如果视频数据具有较高的分辨率(例如高于300×300像素,或者更高),这将给内存带宽带来巨大的挑战。通过在特征图存储前对其进行压缩,可以大幅减小将特征图存入存储器和从存储器读取时所占用的内存带宽,有助于实现神经网络的实时应用。此外,由于对所读取的经压缩特征图进行了解压缩以供计算(例如卷积),方法300对神经网络推断准确度的影响很小。方法300还可以与神经网络参数的压缩和相应的硬件设计相结合,进一步加速神经网络的运行,并节省存储器的功耗。
方法300可适用于任何深度神经网络。对于卷积神经网络,方法300可以针对至少一个卷积层来执行。可选地,方法300也可以针对池化层和全连接层来执行。对于卷积神经网络,可以对所有卷积层执行方法300,也可以选择性地针对部分卷积层执行方法300。通常,靠近输入侧的卷积层生成的特征图比靠近输出侧的卷积层生成的特征图更大,从而会占据更多的存储空间和内存带宽,因此,方法300可优先应用于靠近输入侧的一个或多个卷积层。
需要说明的是,除非逻辑上必须,否则方法300中的各个步骤的顺序并不限于所图示或描述的顺序,而是可以根据需要进行调换或并行执行,并且,不同步骤中的操作可以并行执行或交织执行。本公开对此不作任何限制。举例而言,框310和框320可以调换顺序或者并行执行,而不会影响本公开的实现。
下面以视频数据作为神经网络的输入为例,更详细地介绍特征图的压缩。对特征图的压缩可以用于神经网络的任何层,例如结合图3描述的第i-1层,第i层,或是所有各层。
图4示出了根据本公开的示例性实施例对特征图进行压缩的示意性框图。如图4所示,可以对于神经网络中的层所生成的特征图进行预测(框410)、变换(框420)、量化(框430)和熵编码(框440)等操作,以去除特征图中的空间冗余、时间冗余和编码冗余。下面将对图4中的这些操作进行逐一介绍。然而,可以理解的是,对于本公开而言,并非图4中的所有操作都是必须的,可以根据需要采用框410-440中的一个或多个来对特征图进行压缩。例如,如果对特征图进行无损压缩,则可以不对特征图进行量化430或者仅采用熵编码440。又例如,特征图的压缩可以不采用预测410,而仅进行变换420、量化430和熵编码440。
在框410,对输入的特征图进行预测编码。预测编码可以包括帧内预测和帧间预测之一或两者。其中,帧内编码可用于消除空间冗余,而帧间编码可用于消除时间冗余。可以将特征图划分成多个块,以块为单元进行编码。作为示例,MPEG、H.264、H.265等视频标准中采用的各种预测编码技术都可以用于框410中的特征图预测编码。
在框420,对特征图进行从空域到频域的变换,从而有效地去除信号的相关性,并使大部分能量集中到低频区域。基于变换的结果,可以在后续的量化步骤中丢弃高频区域的信号,或 者对低频区域采用较小的量化步长而对高频区域采用较大的量化步长,以在保持高图像质量的同时实现大的压缩比。作为示例,对特征图的变换可以采用离散傅里叶(DCT)变换、离散正弦变换(DST)、K-L变换、小波变换等各种变换技术。
在框430,对框420得到的变换系数进行量化。量化可以用相对较少的量化值来近似表示大量的变换系数。由于在原始变换系数和重构变换系数之间存在差异,即失真,因此,采用量化的特征图压缩是有损压缩。相对于无损压缩,有损压缩的算法选择更多,可调整的压缩参数也更多,而且可以通过控制压缩比来适应不同的需求。根据本公开的实施例,采用有损压缩可以实现较大的压缩比而对神经网络推断准确度的影响很小。例如,根据一个实施例,在有损压缩的压缩比大于10:1的情况下,神经网络的推断准确度的降低小于5%。此外,在训练过程中,对某个层的特征图进行有损压缩可相当于对该层的参数和特征图增加了一个扰动,从而可以防止训练陷入局部极小,进而也可以提高神经网络的推断能力。
在框440,对框430的量化结果进行熵编码,以去除经预测和和变换后仍存在的统计冗余信息。作为示例,熵编码可以采用变长编码(VLC)(例如,霍夫曼(Huffman)编码、指数哥伦布码(EGC)等)或算术编码。
上面结合图4简单介绍了特征图压缩的过程。本领域技术人员可以理解的是,这些描述仅仅是示例性的说明而非对本公开的限制。在具体实现中,对特征图的压缩可以采用各种已知的视频压缩方法,譬如基于MPEG、H.264、H.265等视频标准的压缩方法,也可以采用正在开发或将来开发出的各种视频压缩方法,本公开对此不作限制。
根据本公开的一个实施例,对特征图进行压缩(例如图3的框340所示的对第二特征图进行压缩)可以包括对特征图进行非均匀量化。根据一个实施例,对于特征图的不同区域可以采用不同的量化步长。可以考虑多方面的因素来确定每个区域的量化步长。
根据一个实施例,可以根据区域的图像复杂度来确定其量化步长。例如,为图像复杂度高的区域分配小的量化步长,以保留更多细节,而为图像复杂度低的区域分配大的量化步长。在一个示例中,图像复杂度的高低可以通过预设阈值来衡量,图像复杂度高可以指图像复杂度大于该预设阈值,图像复杂度低可以指图像复杂度小于等于该预设阈值。
根据另一个实施例,可以根据区域在特征图中的位置来确定其量化步长。例如,对于视频监控的应用,每个摄像头重点监控的区域可能在图像中具有相对固定的位置,可以为与这些位置相对应的特征图区域分配较小的量化步长。
根据另一个实施例,可以根据区域的重要度来确定其量化步长。例如,对于视频图像,可以预先确定图像中各个区域的重要程度,在量化时按照重要度的排序来分配不同的量化步长。
根据另一个实施例,可以根据区域中是否存在特定特征来确定其量化步长。该特定特征可以取决于神经网络的应用场景。根据一个实施例,特定特征可以是应用场景中的感兴趣的特征。例如,对于安防监控,特定特征可以是与人员或身份有关的特征;对于交通监控,特定特征可以是与车辆型号、车牌、交通灯等有关的特征;对于球赛直播,特定特征可以是与球员、球、裁判、球门等有关的特征。在一个示例中,如果区域中存在特定特征,则可以为该区域分配较小的量化步长(例如,第一量化步长),以保留较多的细节;而如果区域中不存在特定特征,则可以为该区域分配较大的量化步长(例如,大于第一量化步长的第二量化步长)。
根据另一个实施例,可以根据特定特征在区域中的数量来确定其量化步长。在一个示例中,如果特定特征在该区域中的数量较多(例如,大于预定阈值),则可以为该区域分配较小的量化步长(例如,第三量化步长),以保留较多的细节;而如果特定特征在该区域中的数量较少(例如,小于或等于该预定阈值),则可以为该区域分配较大的量化步长(例如,大于第三量化步长的第四量化步长)。与上一个实施例类似,该特定特征可以取决于应用场景,这里不再重复。
可以理解的是,上述这些因素可以单独或组合考虑,本公开对此不作限制。通过基于特征图中各个区域的特性为其分配不同的量化步长,可以在实现高压缩比的同时尽量保留特征图中对应用而言重要的细节,进而保持神经网络的推断准确度。
下面结合图5和图6介绍根据本公开的示例性实施例的神经网络的推断过程和训练过程。
图5是根据本公开的示例性实施例的深度神经网络的推断过程的示意图。神经网络的推断过程是将待处理的数据输入到训练好的神经网络中以得到推断结果的过程。如图5所示,深度神经网络包括输入层532、输出层538以及多个隐藏层。为简单起见,图5中仅示出了相邻的两层,第i层和第i+1层,分别用标号534和536表示。图5还示出了参数存储空间510和特征图存储空间520。在推断过程中,神经网络中的各个层对传入的数据依次执行处理,直至输出层538输出最终推断结果。下面以层534和536的处理为例进行说明。
如图5所示,第i层534从参数存储空间510读取层534计算所需的参数512。可选地,如果参数512是经过压缩的,则在框542对参数512进行解压缩。层534还从特征图存储空间520读取第i-1层存储的特征图522。可选地,如果特征图522是经过压缩的,则在框552对特征图522进行解压缩。基于参数512和特征图522的解压缩版本,生成层534的特征图。在对该特征图进行压缩(框554)后,存入特征图存储空间520,作为层534所存储的特征图524。
接下来,第i+1层536执行与第i层534类似的操作。从参数存储空间510和特征图存储空间520分别读取参数514和特征图524,并对其进行解压缩(如框544和556所示)。然后,基于参数514和特征图524的解压缩版本,生成层536的特征图。在对该特征图进行压缩(框558)后,存入特征图存储空间520,作为层536所存储的特征图526,供下一层使用。
依此类推,神经网络中的后续各层依次执行上述操作,直至输出层538输出最终推断结果。应当理解的是,尽管图5描述的是对每一层的参数和特征图都进行了压缩和解压缩,但是如前文提到过的,可以只对神经网络中的一部分层进行这样的压缩和解压缩操作,并且也可以只对特征图而不对参数进行压缩和解压缩操作。
图6是根据本公开的示例性实施例的深度神经网络的训练过程的示意图。神经网络的训练过程是基于已知的样本集来训练神经网络的参数的过程。神经网络的训练过程是不断迭代的,直至最终输出结果与目标值的误差小于预定阈值。每次迭代通常分为两个阶段,即正向传播阶段和反向传播阶段。正向传播阶段与推断过程类似,对于各个样本,各层依次进行计算得到最终输出值。接下来,在反向传播阶段,先求出输出值与目标值之间的误差,当误差大于预定阈值时,将误差从输出层回传到神经网络中并进行反向传播,依次求得各个层的误差,并根据求得的误差对各个层的参数进行更新。基于更新的参数,重新开始下一次迭代的正向传播阶段。
图6中,为了清楚起见,用虚线610将正向传播阶段和反向传播阶段分开。如图6上半部分所示,训练过程的正向传播阶段与图5相同,这里不再重复描述。图6的下半部分示出了训练过程的反向传播阶段。在反向传播阶段,正向传播阶段的最终输出值与目标值之间的误差从输出层538向输入层532依次回传。第i+1层536基于从第i+2层接收到的层536的误差计算出更新的参数514,并存入参数存储空间510。可选地,可以对更新的参数进行压缩(框648)之后再存入参数存储空间510。层536还计算出第i层534的误差并将其反向传播到层534。类似地,层534基于接收到的误差计算出更新的参数512,并存入参数存储空间510。可选地,可以对更新的参数进行压缩(框646)之后再存入参数存储空间510。如图6左侧的大箭头所示,当反向传播阶段在输入层532结束后,训练过程基于所有各层的更新的参数,重新开始下一次迭代的正向传播阶段。
需要说明的是,图5和图6示出的仅仅是示例性的神经网络推断过程和训练过程。本领域技术人员可以理解,基于神经网络的不同结构,可以采用其他相应的推断过程和训练过程。
图7是示出根据本公开的示例性实施例的芯片700的示意图。芯片700可以包括存储器710和深度神经网络引擎720。
存储器710可以包括参数存储空间和特征图存储空间。参数存储空间用于存储深度神经网络的参数,特征图存储空间用于存储深度神经网络的特征图。根据一个实施例,存储器710可以是各 种随机存取存储器或易失性存储器,诸如DRAM,SRAM,DDR RAM或其他随机存取固态存储器。
深度神经网络引擎720可以将深度神经网络应用于诸如图像数据之类的输入数据,以实现诸如图像检测、识别、分割等操作。深度神经网络引擎720可以与存储器710配合以执行如前面所述的本公开的各种实施例的方法。根据一个实施例,深度神经网络引擎720可以由硬件实现,例如采用专用集成电路(ASIC)来实现。
应当理解,深度神经网络引擎720的实现方式可以根据具体要求而进行各种变型。例如,其可以使用硬件、软件、固件、中间件、微代码,硬件描述语言或其任何组合来实现。例如,代替ASIC,也可以根据本公开的逻辑和算法,用汇编语言或硬件编程语言(诸如VERILOG,VHDL,C++)对硬件(例如可编程逻辑电路,包括现场可编程门阵列(FPGA)和/或可编程逻辑阵列(PLA))进行编程来实现深度神经网络引擎720。
根据一个实施例,芯片700可以是人工智能(AI)视觉芯片。另外,尽管图7未示出,芯片700还可以包括其他部件,例如,图像信号处理(ISP)单元,用于对图像信号(例如图像传感器输出的信号)进行处理;多媒体信号编解码器,用于对音频和视频信号进行编解码;等等。
图8是示出根据本公开的示例性实施例的电子设备800的示意图。电子设备800可以包括图7示出的芯片700和图像传感器830。图像传感器830可以用于捕获图像和/或视频数据。根据一个实施例,电子设备800可以是集成了AI视觉芯片的摄像头或照相机。这样的电子设备800可以应用于多种场合,例如,在安防监控中对人脸或其他特定目标进行自动检测和识别,在自动驾驶中对行人、机动车、交通标志等进行实时检测和识别,帮助机器人识别目标和避开障碍物等,等等。
图9是示出根据本公开的示例性实施例的另一种电子设备900的示意图。电子设备900可以是被配置为执行处理和/或计算的任何机器,可以是但不限于工作站、服务器、台式计算机、膝上型计算机、平板计算机、个人数字助理、智能电话、车载计算机或其任何组合。根据本公开的实施例的上述方法可以全部或至少部分地由电子设备900或类似设备或系统来实现。
电子设备900可以包括总线910、一个或多个处理器920、一个或多个存储器930、一个或多个输入设备940以及一个或多个输出设备950。一个或多个处理器920可以是任何类型的处理器,可以包括但不限于一个或多个通用处理器(例如中央处理单元(CPU))和/或一个或多个专用处理器(例如图形处理单元(GPU))。一个或多个 存储器930可以包括非易失性存储器(例如磁盘驱动器、光学存储设备、固态存储器、软盘、硬盘、磁带、只读存储器(ROM)等)和/或易失性存储器(例如随机存取存储器(RAM)、高速缓冲存储器(Cache)等)。存储器930可以存储用于实现根据本公开的实施例的方法的数据和/或程序。存储器930所存储的数据诸如是图5和图6中示出的参数存储空间和特征图存储空间中的数据。存储器930所存储的程序当由处理器920执行时,可使得电子设备900执行根据本公开的实施例的方法。
输入设备940可以是能向电子设备900输入信息的任何类型的设备,并且可以包括但不限于传感器(例如前文所述的图像传感器)、鼠标、键盘、触摸屏、麦克风和/或遥控器。输出设备950可以是能输出信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器、和/或各种输出接口等。
应该理解,电子设备900的一个或多个部件可以分布在网络上。例如,可以使用一个处理器执行一些处理,而同时可以由远离该一个处理器的另一个处理器执行其他处理。因而,电子设备900可以被解释为在多个位置执行处理的分布式计算系统。
此外,本公开的一个方面可包括存储程序的计算机可读存储介质,该程序包括指令,该指令在由处理器执行时,使处理器执行前述任何方法。
根据本公开的一些方面的示例性方法和产品的实施方案列于以下项目中:
1、一种深度神经网络的压缩方法,所述深度神经网络包括多个层,所述方法包括,对于所述多个层中的除了输入层以外的至少一个层:从参数存储空间读取该层的参数;从特征图存储空间读取由上一层存储的第一特征图;基于读取的所述参数和所述第一特征图生成第二特征图;对所述第二特征图进行压缩得到第三特征图;以及将所述第三特征图存储到所述特征图存储空间中。
2、根据项目1所述的方法,其中,对所述第二特征图进行的压缩包括有损压缩。
3、根据项目1所述的方法,其中,所述方法用于所述深度神经网络的训练过程中的正向传播阶段和所述深度神经网络的推断过程。
4、根据项目1所述的方法,其中,所述深度神经网络包括卷积神经网络,所述卷积神经网络包括多个卷积层,并且其中,所述方法针对至少一个所述卷积层执行。
5、根据项目1所述的方法,其中,所述第一特征图为经压缩的特征图;并且其中,基于读取的所述参数和所述第一特征图生成所述第二特征图包括:对所述第一特征图进行解压缩;以及基于读取的所述参数和解压缩后的所述第一特征图生成所述第二特征图。
6、根据项目1所述的方法,其中,从所述参数存储空间读取的所述参数为经压缩的参数,并且其中,基于读取的所述参数和所述第一特征图生成所述第二特征图包括:对读取的所述参数进行解压缩;以及基于解压缩后的所述参数和所述第一特征图生成所述第二特征图。
7、根据项目2所述的方法,其中,对所述第二特征图进行压缩包括:对所述第二特征图进行从空域到频域的变换,并且对变换系数进行量化。
8、根据项目2所述的方法,其中,对所述第二特征图进行压缩还包括:对所述第二特征图进行预测编码,其中所述预测编码包括帧内预测和/或帧间预测。
9、根据项目2所述的方法,其中,对所述第二特征图进行压缩包括:对所述第二特征图的不同区域以不同的压缩比进行压缩,其中,每个所述区域的压缩比取决于对该区域的感兴趣程度,并且其中,第一感兴趣程度的区域的压缩比小于第二感兴趣程度的区域的压缩比,其中,所述第一感兴趣程度高于所述第二感兴趣程度。
10、根据项目2所述的方法,其中,对所述第二特征图进行压缩包括:对所述第二特征图进行非均匀量化,其中,所述第二特征图的不同区域具有不同的量化步长。
11、根据项目10所述的方法,其中,所述第二特征图的每个所述区域的所述量化步长是基于以下至少之一确定的:该区域的图像复杂度;该区域在所述第二特征图中的位置;该区域的重要度;该区域中是否存在特定特征;以及所述特定特征在该区域中的数量。
12、根据项目11所述的方法,其中,所述特定特征包括所述深度神经网络的应用场景中的感兴趣的特征。
13、根据项目11所述的方法,其中,根据每个区域中是否存在所述特定特征来确定该区域的所述量化步长包括:响应于所述区域中存在所述特定特征,为该区域分配第一量化步长;响应于所述区域中不存在所述特定特征,为该区域分配第二量化步长,其中,所述第一量化步长小于所述第二量化步长。
14、根据项目11所述的方法,其中,根据所述特定特征在每个所述区域中的数量来确定该区域的所述量化步长包括:响应于所述特定特征在该区域中的数量大于预设阈值,为该区域分配第三量化步长;响应于所述特定特征在该区域中的数量小于或等于所述预定阈值,为该区域分配第四量化步长,其中,所述第三量化步长小于所述第四量化步长。
15、根据项目1所述的方法,其中,所述深度神经网络被用于处理视频数据以进行目标识别。
16、一种芯片,包括:存储器,所述存储器包括参数存储空间和特征图存储空间,所述参数存储空间用于存储深度神经网络的参数,所述特征图存储空间用于存储所述深度神经网络 的特征图;以及深度神经网络引擎,所述深度神经网络引擎被配置为与所述存储器配合以执行根据项目1-15中任一项所述的方法。
17、根据项目16所述的芯片,其中,所述存储器包括随机存取存储器。
18、根据项目16所述的芯片,其中,所述芯片包括人工智能视觉芯片。
19、根据项目18所述的芯片,其中,所述芯片还包括:图像信号处理(ISP)单元,用于对图像信号进行处理;以及多媒体信号编解码器,用于对音频和视频信号进行编解码。
20、一种电子设备,包括:图像传感器,所述图像传感器被配置为捕获图像和/或视频数据;以及如项目16-19中任一项所述的芯片,所述芯片被配置为利用深度神经网络处理所捕获的图像和/或视频数据以进行目标识别。
21、一种电子设备,包括:处理器;以及存储程序的存储器,所述程序包括指令,所述指令在由所述处理器执行时使所述电子设备执行根据项目1-15中任一项所述的方法。
22、一种存储程序的计算机可读存储介质,所述程序包括指令,所述指令在由处理器执行时,使所述处理器执行根据项目1-15中任一项所述的方法。
虽然已经参照附图描述了本公开的实施例或示例,但应理解,上述的方法、芯片和设备仅仅是示例性的实施例或示例,本公开的范围并不由这些实施例或示例限制,而是仅由授权后的权利要求书及其等同范围来限定。实施例或示例中的各种要素可以被省略或者可由其等同要素替代。此外,可以通过不同于本公开中描述的次序来执行各步骤。进一步地,可以以各种方式组合实施例或示例中的各种要素。重要的是随着技术的演进,在此描述的很多要素可以由本公开之后出现的等同要素进行替换。