了解更多开源请访问:51CTO开源基础软件社区https://ost.51cto.com【科技DNA】【智慧场景】***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************场景自动驾驶/AR语音信号流视频GPU渲染科学,云计算内存缩减科学应用医学影像数据库服务器人工智能图像文本传输GAN媒体压缩图像压缩文件同步数据库系统通用数据技术点云压缩稀疏快速傅里叶变换有损视频压缩网格压缩动态选择压缩离子算法框架无损压缩分层数据压缩医学图像压缩无损通用压缩人工智能图像压缩短字符串压缩GAN压缩在线多粒度蒸馏图像压缩文件传输压缩快速随机访问字符串压缩高吞吐量并行无损压缩开源ProjectDraco/基于深度学习算法/PCL/OctNetSFFTAV1/H.266编码/H.266解码/VP9MeshOpt/DracoAresLZ4HCompressDICOMBrotliRAISRAIMCSOMGDOpenJPEGrsyncFSSTndzip介绍近年来,为了让深度神经网络(DNNs)在复杂的机器学习任务中表现更好,DNNs的表现一直在不断扩展,这使得模型在内存方面越来越复杂,这不仅意味着更大的内存需求,而且很可能导致速度变慢运行时间和更多的能源消耗,因此需要对其进行有效压缩以满足各种要求。DeepCABAC是一种通用的DNN压缩算法,它基于应用于DNN参数的上下文自适应二进制算术编码器。(CABAC)。CABAC最初是为H.264/AVC视频编码标准设计的,在视频压缩的无损压缩部分已经成为state-of-the-art。DeepCABAC使用新的量化方案来最小化信息率失真函数,同时还考虑了量化对DNN性能的影响。深度神经网络的成功可归因于三个现象:(1)访问大量数据(2)研究人员设计新的优化算法和模型架构,允许训练非常深的神经网络(3)增加计算资源的可用性。在资源受限的设备(如移动可穿戴设备)和分布式学习场景(如联邦学习)上部署深度模型的需求也越来越大。这些方法在隐私、延迟和效率问题上具有立竿见影的优势。然而,这些模型所需的参数越来越多,这意味着模型在内存方面变得越来越复杂。高内存复杂性极大地增加了神经网络在用例中的适用性,特别是在联邦学习中,网络参数通过带宽有限的通信通道传输。导致模型压缩尤为重要:只留下解决任务所需的内存,减少通信和计算成本,压缩算法有利于产生更高的熵,因为它们使数据更紧凑。我们使用基础数据集并使用各种算法压缩每个文件。信源编码通常称为编码,更准确地说是“压缩”,即去除一些杂项信息,保留必要的信息,然后进行传输。因此,在传输之前需要进行各种处理。其中,为提高传输效率而进行的有效性编码称为信源编码。源代码是信息论的一个分支,研究所谓代码的属性。它通常由两部分组成:编码器和解码器。如图所示,首先,编码器将概率源P(w)的输入样本w通过两个过程映射为二进制表示b,对输入进行量化,并将其映射为整数i=Q(w)。然后通过二值化过程将该整数映射到其对应的二进制表示b=b(i)。解码器通过应用反函数B?1(B)=i将二进制表示类似地映射回其整数值,并为其分配一个重构值(或量化点)Q?1(i)=Q。我们强调Q-1不一定是Q的倒数。简而言之,源编码研究寻找最大限度地压缩一组输入样本的代码,同时在容错约束下保留输入值和重构值之间的误差。同时,我们还可以把编码分为两类,即所谓的无损编码和有损编码(在之前的文章中有介绍,有兴趣的可以复习一下,篇幅原因仅作简要说明)。无损编码无损编码又称熵编码或可逆编码:霍夫曼编码、算术编码、字典编码。有损编码有损编码也称为不可逆编码:标量量化、矢量量化、预测编码、变换编码、JPEG、子带编码、小波编码、JPEG2000、分析-合成编码。信道编码信道是指传输信号的信道。但是,在信号的传输过程中,由于各种原因,在传输过程中会出现误码。只要接收设备能区分1码和0码,信号就不会丢失。因此,散字信号传输中最重要的是防止误码,即尽可能降低误码率。因此,应该在信号源的原始数字序列中使用一些代码来实现自动纠错或检错。目的是信道编码或纠错编码。人类对信道编码的第一次突破发生在1949年。R.Hamming和M.Golay提出了第一个实用的差错控制编码方案——汉明码。H.264/AVC在CABACCABAC开发的早期就很流行。CABAC(上下文自适应二进制算术编码)是H.264/AVC和HEVC的一种熵编码形式。由视频编码联合协作小组(JCT-VC)开发的高效视频编码(HEVC)有望比H.264/AVC提高50%的效率。HEVC使用多种新工具来提高编码效率,包括更大的块和变换大小、额外的环路滤波器和高度自适应的熵编码。CABAC算术编码的优点是一种熵编码,可以通过有效地将符号(即语法元素)映射到具有非整数位数的码字来实现接近序列熵的压缩。在H.264/AVC中,CABAC比基于霍夫曼的CAVLC提高了9%到14%。在HEVC(HM-3.0)的早期测试模型中,CABAC比CAVLC提高了5%–9%。CABAC涉及三个主要功能CABAC涉及三个主要功能:二值化、上下文建模和算术编码。二值化二值化将语法元素映射到二进制符号(bin)。有七种二值化方案:一元。截断一元码(TU,TruncatedUnary)。kthorderExp-Golombcode(第k阶Exp-Golomb,EGk)。定长编码(FL,Fixed-Length)。mb_type和sub_mb_type特定的查找方法。4位FL和TU的联合二值化方案,截止值为2。TU和EGk(UEGk,一元/k阶Exp-Golomb)的联合二值化方案。上下文建模以JM中的上下文结构为例。//!上下文管理结构structbi_context_type{unsignedlongcount;字节状态;//uint16状态;//索引到状态表CPunsignedcharMPS;//最小概率符号0/1CP};上下文包含两个变量:MPS、pStateIdx(count只是为了计数)。在CABAC编码的过程中,会出现需要修改这两个值的情况(比如上面的状态改变),而这些修改是基于上下文的。算术编码过程可以分为五个步骤1.通过当前编码器范围R得到量化值ρ作为查表索引,然后利用状态索引pStateIdx和ρ查表得到概率区间大小RLPS。2、根据待编码符号是否为MPS更新算术编码中的概率区间起点L和区间范围R。3.pStateIdx==0表示当前LPS有0.5的概率在contextstate更新之前,所以此时输入LPS表示不再是LPS,所以需要在LPS和MPS之间进行转换。4.更新上下文模型概率状态。5.重新归一化并输出编码位。综上所述,编码器希望找到一个数据样本尽可能少的(本地)解决方案。提出了Deep-CABAC。Deep-CABACDeep-CABAC的编码程序Deep-CABAC按行长顺序扫描网络各层的权重参数。选择特定的超参数β将定义量化点集。将量化器应用于权重值,以最小化相应的加权率失真函数。通过应用CABAC的改编版本压缩量化参数。重构网络并测量网络的准确率。对不同的超参数β重复此过程,直到在精度和网络大小之间达到所需的平衡。对一组超参数β重复此过程,直到实现所需的精度与大小的权衡。Deep-CABACencoderDeep-CABAClosslessencoder第一个SigFlag判断权重元素是否为重要元素,即权重是否为0。然后根据其各自的上下文模型(颜色编码为灰色),使用二进制算术编码器对该bin进行编码。上下文模型最初设置为0.5(因此权重元素为0或不为0的概率为50%),但随着DeepCABAC对更多元素进行编码,会自动适应权重参数的局部统计。如果该元素不为零,则符号库或SignFlag将根据其各自的上下文模型进行类似编码。类比编码一个容器序列,判断一个元素是否大于1,2,...,n∈n。数字n成为编码器的超参数。余数使用指数-哥伦布编码代码,其中一元部分的每个bin也相对于它们的上下文模型进行编码。只有固定长度的代码部分未使用上下文模型进行编码(颜色编码为蓝色)。Deep-CABAC有损编码器找到量化器Q,将量化点(或聚类中心)最佳地分配给每个权重参数。量化点:因为为大量点找到正确的映射Q?1非常复杂,我们将它们约束为彼此等距,并具有特定的步长Δ。即每个点qk可以改写为qk=ΔIk,ik∈Z。这不仅极大地简化了问题,而且还鼓励定点表示,可以利用定点表示以较低的复杂度执行推理。分配:因此,量化器有两个可配置的超参数β=(Δ,λ),前者定义量化点集,后者定义量化强度。一旦给定一个特定的元组,量化器Qβ将通过最小化加权率失真函数将每个权重参数分配给相应的量化点qk。DeepCABAC-Version1(DC-v1):在DC-v1中,我们首先使用可扩展的贝叶斯技术估计FIM的对角线。获得每个参数的均值μj和标准偏差σj,其中前者可以解释为它的(新)值(即wi→μi),而后者是衡量它们对扰动的“稳健性”的量度。在估计fim对角线之后,我们定义了一组考虑如下的步骤:其中σmin是最小标准偏差,wmax是具有最大幅度值的参数。S然后是量化器的超参数,控制量化点的“粗糙度”。DeepCABAC-version2(DC-v2):因为version1需要估计FIM的对角线,所以成本还是比较高的。考虑直接尝试为整个网络找到一个好的候选集Δ∈{Δ0,...,Δm?1}。这是通过在应用最近邻量化方案(即λ=0)的同时应用第一轮网格搜索算法来实现的。在计算预算有限的情况下,这种方法的优点是我们可以直接搜索一组更好的步长Δ。试验将标量霍夫曼、csr-霍夫曼和bzip2无损编码算法应用于量化网络后获得的最佳压缩结果。括号内是结果的top-1精度,括号内是非零参数个数除以参数总数得到的稀疏比。深度压缩包括应用稀疏化技术,然后是k-Means算法,然后是CSR-Huffman熵编码器,最后通过将聚类中心微调到损失函数。相比之下,我们可以通过简单地应用DeepCABAC而无需任何量化点的后验微调来获得更高精度的压缩性能。Small-VGG网络使用三种不同的量化器进行量化,然后使用不同的通用无损编码器进行压缩。具体来说,我们使用DC-v2、加权Lloyd算法和最近邻量化器对模型进行量化。然后应用标量霍夫曼代码、CSR-霍夫曼代码、bzip2算法和DeepCABAC的cabac组件。此外,我们还计算了量化后网络的一阶熵,从而衡量了网络熵无损压缩得到的压缩比的差异。很容易看出,CABAC能够在Small-VGG16网络的所有量化版本中实现更高的压缩增益。使用CABAC的好处是其固有的灵活性,可以用来获取权重参数的先验统计。通过定义上述二值化过程,DeepCABAC可以快速捕捉到最大值接近于0的单峰分布和非对称分布的统计信息。另外,CABAC也可以方便地捕捉到一行中元素之间的相关性。这一点也很重要,因为CABAC的估计以自回归方式更新,因此其压缩性能也取决于扫描顺序。如上表所示,CABAC能够捕获权重参数之间的相关性,从而将它们压缩到参数分布的一阶熵之外。与之前提出的通用熵编码器(如scalarHuffman、CSR-Huffman)相比,由于其平均码长受一阶熵的限制,不可能获得比CABAC更低的码长,所以这个特点是更加突出其优越性。总结H.264/HEVC和H.265/HEVC视频编码标准中使用的最先进的通用无损编码器——上下文自适应二进制算术编码器(CABAC),提出了一种新的深度神经网络论文压缩算法DeepCABAC,代码长度更短更灵活,减少训练次数和访问大量数据。技术代代更新,后浪汹涌。前方的浪潮不是沉船,不是病树,而是巨人的肩膀,引领年轻一代走向更加神秘的新世界。了解更多开源信息,请访问:51CTO开源基础软件社区https://ost.51cto.com。
