一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

神经图像压缩中的分块内容自适应在线训练的制作方法

2023-01-06 03:29:46 来源:中国专利 TAG:

神经图像压缩中的分块内容自适应在线训练
1.援引并入
2.本技术要求2022年4月26日提交的题为“block-wise content-adaptive online training in neural image”的美国专利申请号17/729,978的优先权,该申请要求2021年4月30日提交的题为“block-wise content-adaptive online training in neural image compression”的美国临时申请号63/182,366的优先权。在先申请的公开内容全部通过引用结合于此。
技术领域
3.本公开描述了总体上涉及视频编码的实施例。


背景技术:

4.本文提供的背景描述是为了总体呈现本公开的上下文。在该背景技术部分中描述的程度上,目前署名的发明人的工作以及该描述的在提交时可能不符合现有技术的方面既不能明确地也不能隐含地被认为是本公开的现有技术。
5.可以使用具有运动补偿的帧间图片预测来执行视频编码和解码。未压缩的数字图像和/或视频可以包括一系列图片,每个图片具有例如1920
×
1080亮度样本和相关色度样本的空间维度。该系列图片可以具有固定或可变的图像速率(非正式地也称为帧率),例如,每秒60幅图片或60hz。未压缩的图像和/或视频有特定的比特率要求。例如,每样本8比特的1080p60 4:2:0视频(60hz帧率的1920
×
1080亮度样本分辨率)需要接近1.5gbit/s的带宽。一小时这样的视频需要超过600g字节(gbytes)的存储空间。
6.视频编码和解码的一个目的是通过压缩减少输入图像和/或视频信号中的冗余。压缩有助于降低上述带宽和/或存储空间需求,在某些情况下可降低两个数量级或更多。尽管本文的描述使用视频编码/解码,作为说明性示例,但是在不脱离本公开的精神的情况下,相同的技术可以以类似的方式应用于图像编码/解码。可以采用无损压缩和有损压缩及其组合。无损压缩是指可以从压缩的原始信号中重构原始信号的精确副本的技术。当使用有损压缩时,重构信号可能与原始信号不相同,但是原始信号和重构信号之间的失真足够小,使得重构信号对预期应用有用。在视频的情况下,广泛采用有损压缩。容许的失真量取决于应用;例如,某些消费者流应用的用户可能比电视分发应用的用户容忍更高的失真。可实现的压缩比可以反映出:更高的容许/可容忍失真可以产生更高的压缩比。
7.视频编码器和解码器可以利用几大类技术,包括例如运动补偿、变换、量化和熵编码。
8.视频编解码器技术可以包括称为帧内编码的技术。在帧内编码中,样本值是在不参考来自先前重构的参考图片的样本或其他数据的情况下表示的。在某些视频编解码器中,图片在空间上被细分为样本块。当所有样本块都以帧内模式编码时,该图片可以是帧内图片。帧内图片及其派生图片(例如,独立的解码器刷新图片)可以用于重置解码器状态,因此可以用作编码视频比特流和视频会话中的第一个图片,或者用作静止图像。可以对帧内
块的样本进行变换,并且可以在熵编码之前对变换系数进行量化。帧内预测可以是一种在预变换域中最小化样本值的技术。在一些情况下,变换后的dc值越小,ac系数越小,在给定量化步长下表示熵编码后的块所需的比特就越少。
9.例如,从mpeg-2代编码技术中已知的传统帧内编码不使用帧内预测。然而,一些较新的视频压缩技术包括从例如在空间上相邻的并且在解码顺序上在前的数据块的编码和/或解码期间获得的周围样本数据和/或元数据中尝试的技术。这种技术此后被称为“帧内预测”技术。注意,至少在一些情况下,帧内预测仅使用来自重构中的当前图片的参考数据,而不使用来自参考图片的参考数据。
10.可以有许多不同形式的帧内预测。当在给定的视频编码技术中可以使用多于一种这样的技术时,所使用的技术可以在帧内预测模式中被编码。在某些情况下,模式可以有子模式和/或参数,这些子模式和/或参数可以单独编码或包含在模式码字中。对于给定的模式、子模式和/或参数组合,使用哪个码字会对通过帧内预测对编码效率增益产生影响,因此,用于将码字转换成比特流的熵编码技术也会产生影响。
11.h.264引入了特定的帧内预测模式,在h.265中进行了改进,并在更新的编码技术中进一步改进,例如,共同探索模型(jem)、通用视频编码(vvc)和基准集(bms)。可以使用属于已经可用样本的相邻样本值来形成预测块。根据方向将相邻样本的样本值复制到预测块中。对使用中的方向的参考可以在比特流中编码,或者本身可以预测。
12.参考图1a,右下方描绘了从h.265的33个可能的预测方向(对应于35个帧内模式的33个角度模式)中已知的9个预测方向的子集。箭头会聚的点(101)表示被预测的样本。箭头表示预测样本的方向。例如,箭头(102)指示样本(101)是基于右上方、与水平线成45
°
角的一个或多个样本预测的。类似地,箭头(103)指示样本(101)是基于样本(101)的左下方、与水平线成22.5
°
角的一个或多个样本预测的。
13.仍然参考图1a,在左上方描绘了4
×
4样本的正方形块(104)(由粗虚线表示)。正方形块(104)包括16个样本,每个样本标有“s”,其在y维度上的位置(例如,行索引)和其在x维度上的位置(例如,列索引)。例如,样本s21是y维度中的第二个样本(从顶部算起)和x维度中的第一个样本(从左侧算起)。类似地,样本s44在y和x维度上都是块(104)中的第四个样本。由于该块的大小为4
×
4个样本,所以s44位于右下角。还显示了遵循类似编号方案的参考样本。参考样本用r、其相对于块(104)的y位置(例如,行索引)和x位置(列索引)来标记(104)。在h.264和h.265中,预测样本与重构中的块相邻;因此,不需要使用负值。
14.帧内图片预测可以通过从相邻样本中复制参考样本值来工作,通过信号的预测方向(signaled prediction direction)是合适的。例如,假设经编码的视频比特流包含信号,其针对此块指示与箭头(102)一致的预测方向——即,基于右上方、与水平成45
°
角的一个或多个预测样本来预测多个样本。在这种情况下,基于相同的参考样本r05预测样本s41、s32、s23和s14。然后基于参考样本r08预测样本s44。
15.在某些情况下,多个参考样本的值可以组合,例如,通过插值,以便计算参考样本;尤其是当方向不能被45
°
整除时。
16.随着视频编码技术的发展,可能的方向的数量已经增加。在h.264(2003年)中,可以表示九个不同方向。这在h.265(2013年)中增加到33个,而jem/vvc/bms在披露时可以支持多达65个方向。已经进行了实验来识别最可能的方向,并且熵编码中的某些技术被用于
以少量比特来表示那些可能的方向,对于不太可能的方向接受一定的惩罚。此外,方向本身有时可以从相邻的已经解码的块中使用的相邻方向来预测。
17.图1b示出了示意图(110),描绘了根据jem的65个帧内预测方向,以说明预测方向的数量随着时间的推移而增加。
18.编码视频比特流中表示方向的帧内预测方向比特的映射可以根据视频编码技术的不同而不同;并且上述映射可以包括例如一些简单直接的映射,比如从预测方向到帧内预测模式的映射,从预测方向到码字的映射,上述映射还可以包括涉及最可能模式的复杂自适应方案,以及类似的技术。然而,在所有情况下,与某些其他方向相比,某些方向在统计上不太可能出现在视频内容中。由于视频压缩的目标是减少冗余,在工作良好的视频编码技术中,那些不太可能的方向将由比更可能的方向更多的比特来表示。
19.运动补偿可以是有损压缩技术,并且可以涉及以下技术,在该技术中,来自先前重构的图片或其一部分(参考图片)的样本数据块在由运动矢量(此后称为mv)指示的方向上进行空间移位之后,用于预测新重构的图片或图片部分。在某些情况下,参考图片可以与当前正在重构的图片相同。mv可以具有两个维度x和y,或者三个维度,第三个维度是使用中的参考图片的指示(后者间接可以是时间维度)。
20.在一些视频压缩技术中,可应用于样本数据的某个区域的mv可以基于其他mv预测,例如,基于与空间上邻近正在重构的区域的并且在解码顺序上在该mv之前的样本数据的另一个区域相关的mv预测。这样做可以大大减少编码mv所需的数据量,从而消除冗余并提高压缩率。mv预测可以有效地工作,例如,是因为当对从相机导出的输入视频信号(称为自然视频(natural video))进行编码时,统计上存在以下可能性,即比单个mv可应用的区域大的多个区域在相似的方向上移动,因此,在某些情况下,可以使用基于相邻区域的多个mv得到的相似mv(motion vector,运动矢量)来预测。这导致对于给定区域发现的mv与基于周围mv预测的mv相似或相同,并且在熵编码之后,这又可以用比直接编码mv时所使用的更少的比特数来表示。在某些情况下,mv预测可以是基于原始信号(即:样本流)得到的信号(即:mv)的无损压缩的示例。在其他情况下,例如,当从几个周围的mv计算预测值时,由于舍入误差,mv预测本身可能是有损耗的。
21.在h.265/hevc(itu-trec.h.265,“high efficiency video coding”,2016年12月)中描述各种mv预测机制。在h.265提供的许多mv预测机制之外,此处描述了一种此后被称为“空间合并”的技术。
22.参考图2,当前块(201)包括编码器在运动搜索过程中发现的样本,以便可基于已经空间移位的相同大小的先前块预测。并非直接编码该mv,可以使用与五个周围样本(表示为a0、a1和b0、b1、b2(分别为202至206))中的任一个相关联的mv,基于与一个或多个参考图片相关联的元数据得到该mv,例如,基于最近的(按照解码顺序)参考图片得到。在h.265中,mv预测可以使用多个预测器,这些预测器基于相邻块正在使用的相同参考图片进行预测。


技术实现要素:

23.本公开的各方面提供了视频编码和解码方法和设备。在一些示例中,一种视频解码设备包括处理电路。该处理电路被配置为对编码比特流中的第一神经网络更新信息进行解码,上述第一神经网络更新信息用于视频解码器中的第一神经网络。第一神经网络配置
有第一组预训练参数。第一神经网络更新信息对应于要重构的图像中的第一块,并且指示与第一组预训练参数中的第一预训练参数对应的第一替换参数。处理电路可以基于第一替换参数更新视频解码器中的第一神经网络,并且基于更新后的第一神经网络解码第一块,上述更新后的第一神经网络用于第一块。
24.在一个实施例中,第一神经网络更新信息还指示一个或多个替换参数,上述一个或多个替换参数用于视频解码器中的一个或多个剩余神经网络(remaining neural network)。处理电路可以基于一个或多个替换参数更新一个或多个剩余神经网络。
25.在一个实施例中,处理电路对编码比特流中的第二神经网络更新信息进行解码,上述第二神经网络更新信息用于视频解码器中的第二神经网络。第二神经网络配置有第二组预训练参数。第二神经网络更新信息对应于要重构的图像中的第二块,并且指示与第二组预训练参数中的第二预训练参数对应的第二替换参数。在一个示例中,第二神经网络不同于第一神经网络。处理电路可以基于第二替换参数来更新视频解码器中的第二神经网络,并且基于更新后的第二神经网络解码第二块,上述更新后的第二神经网络用于第二块。
26.在一个实施例中,第一预训练参数是预训练权重系数和预训练偏置项中的一个。
27.在一个实施例中,第二预训练参数是预训练权重系数和预训练偏置项中的另一个。
28.在一个实施例中,处理电路基于更新后的第一神经网络对编码比特流中的第二块进行解码,上述更新后的第一神经网络用于第一块。
29.在一个实施例中,第一神经网络更新信息指示第一替换参数和第一预训练参数之间的差异。处理电路根据差异和第一预训练参数的和来确定第一替换参数。
30.在一个实施例中,处理电路基于lempel-ziv-markov链算法的变体(variation)(lzma2)和bzip2算法中的一个解码第一神经网络更新信息。
31.在一个示例中,处理电路基于lzma2和bzip2算法中的另一个解码第二神经网络更新信息。
32.本公开的各方面还提供了一种非暂时性计算机可读存储介质,所述介质存储可由至少一个处理器执行的程序,以执行视频解码方法。
附图说明
33.从以下详细描述和附图中,所公开主题的进一步特征、性质和各种优点将变得更加明显,其中:
34.图1a是帧内预测模式的示例性子集的示意图;
35.图1b是示例性帧内预测方向的图示;
36.图2示出了根据一个实施例的当前块(201)和周围样本;
37.图3是根据一个实施例的通信系统(300)的简化框图的示意图;
38.图4是根据一个实施例的通信系统(400)的简化框图的示意图;
39.图5是根据一个实施例的解码器的简化框图的示意图;
40.图6是根据一个实施例的编码器的简化框图的示意图;
41.图7示出了根据另一实施例的编码器的框图;
42.图8示出了根据另一实施例的解码器的框图;
43.图9a示出了根据本公开实施例的分块图像编码的示例;
44.图9b示出了根据本公开实施例的示例性nic框架;
45.图10示出了根据本公开实施例的主编码器网络的示例性卷积神经网络(cnn);
46.图11示出了根据本公开实施例的主解码器网络的示例性cnn;
47.图12示出了根据本公开实施例的超级编码器(hyper encoder)的示例性cnn;
48.图13示出了根据本公开实施例的超级解码器(hyper decoder)的示例性cnn;
49.图14示出了根据本公开实施例的上下文模型网络的示例性cnn;
50.图15示出了根据本公开实施例的熵参数网络的示例性cnn;
51.图16a示出了根据本公开实施例的示例性视频编码器;
52.图16b示出了根据本公开实施例的示例性视频解码器;
53.图17示出了根据本公开实施例的示例性视频编码器;
54.图18示出了根据本公开实施例的示例性视频解码器;
55.图19示出了概述根据本公开实施例的过程的流程图;
56.图20示出了概述根据本公开实施例的过程的流程图;
57.图21是根据一个实施例的计算机系统的示意图。
具体实施方式
58.图3示出了根据本公开实施例的通信系统(300)的简化框图。通信系统(300)包括能够经由例如网络(350)相互通信的多个终端装置。例如,通信系统(300)包括经由网络(350)互连的第一对终端装置(310)和(320)。在图3的示例中,第一对终端装置(310)和(320)执行数据的单向传输。例如,终端装置(310)可以对视频数据(例如,由终端装置(310)捕捉的视频图片流)进行编码,以便经由网络(350)传输到另一个终端装置(320)。编码视频数据可以以一个或多个编码视频比特流的形式传输。终端装置(320)可以从网络(350)接收编码的视频数据,解码经编码的视频数据,以恢复视频图片,并根据恢复的视频数据显示视频图片。单向数据传输在媒体服务应用等中是常见的。
59.在另一个示例中,通信系统(300)包括第二对终端装置(330)和(340),其执行例如在视频会议期间可能发生的编码视频数据的双向传输。对于数据的双向传输,在一个示例中,终端装置(330)和(340)的每个终端装置可以对视频数据(例如,由终端装置捕捉的视频图片流)进行编码,以便经由网络(350)传输到终端装置(330)和(340)的另一个终端装置。终端装置(330)和(340)的每个终端装置还可以接收由终端装置(330)和(340)的另一个终端装置传输的编码视频数据,并且可以解码经编码的视频数据,以恢复视频图片,并且可以根据恢复的视频数据在可访问的显示装置上显示视频图片。
60.在图3的示例中,终端装置(310)、(320)、(330)和(340)可以被示为服务器、个人计算机和智能电话,但是本公开的原理可以不限于此。本公开的实施例适用于膝上型计算机、平板计算机、媒体播放器和/或专用视频会议设备。网络(350)表示在终端装置(310)、(320)、(330)和(340)之间传送编码视频数据的任意数量的网络,包括例如线路(有线)和/或无线通信网络。通信网络(350)可以在电路交换和/或分组交换信道中交换数据。代表性的网络包括电信网络、局域网、广域网和/或互联网。出于当前讨论的目的,网络(350)的架构和拓扑对于本公开的操作可能是不重要的,除非在下文中解释。
61.作为所公开的主题的应用的示例,图4示出了视频编码器和视频解码器在流环境中的放置。所公开的主题同样可应用于其他支持视频的应用,包括例如视频会议、数字电视、在包括cd、dvd、记忆棒等的数字媒体上存储压缩视频等。
62.流式传输系统可以包括:捕捉子系统(413),其可以包括视频源(401),例如,数码相机;创建例如未压缩的视频图片流(402)。在一个示例中,视频图片流(402)包括由数码相机拍摄的样本。当与编码视频数据(404)(或编码视频比特流)相比时,视频图片流(402)被描绘为强调高数据量的粗线,可以由包括耦合到视频源(401)的视频编码器(403)的电子装置(420)来处理。视频编码器(403)可以包括硬件、软件或其组合,以实现或实施如下面更详细描述的所公开的主题的各方面。编码的视频数据(404)(或编码的视频比特流(404))被描绘为细线,以强调当与视频图片流(402)相比时较低的数据量,可以存储在流服务器(405)上,以供将来使用。一个或多个流客户端子系统(例如,图4中的客户端子系统(406)和(408))可以访问流服务器(405),以检索编码视频数据(404)的副本(407)和(409)。客户端子系统(406)可以包括例如电子装置(430)中的视频解码器(410)。视频解码器(410)对编码视频数据的输入副本(407)进行解码,并创建可以在显示器(412)(例如,显示屏)或其他呈现装置(未示出)上呈现的输出视频图片流(411)。在一些流系统中,编码的视频数据(404)、(407)和(409)(例如,视频比特流)可以根据某些视频编码/压缩标准来编码。这些标准的示例包括itu-t建议h.265。在一个示例中,正在开发的视频编码标准被非正式地称为通用视频编码(vvc)。所公开的主题可以在vvc的环境中使用。
63.注意,电子装置(420)和(430)可以包括其他组件(未示出)。例如,电子装置(420)可以包括视频解码器(未示出),并且电子装置(430)也可以包括视频编码器(未示出)。
64.图5示出了根据本公开实施例的视频解码器(510)的框图。视频解码器(510)可以包括在电子装置(530)中。电子装置(530)可以包括接收机(531)(例如,接收电路)。视频解码器(510)可以用来代替图4示例中的视频解码器(410)。
65.接收机(531)可以接收将由视频解码器(510)解码的一个或多个编码视频序列;在同一个或另一个实施例中,一次一个编码视频序列,其中,每个编码视频序列的解码独立于其他编码视频序列。可以从信道(501)接收编码视频序列,该信道可以是到存储编码视频数据的存储装置的硬件/软件链接。接收机(531)可以接收编码的视频数据和其他数据,例如,编码的音频数据和/或辅助数据流,这些数据可以被转发到其相应的使用实体(未示出)。接收机(531)可以将编码的视频序列与其他数据分离。为了对抗网络抖动,缓冲存储器(515)可以耦合在接收机(531)和熵解码器/解析器(520)(以下称为“解析器(520)”)之间。在某些应用中,缓冲存储器(515)是视频解码器(510)的一部分。在其他情况下,可以在视频解码器(510)之外(未示出)。在其他情况下,在视频解码器(510)之外可以有缓冲存储器(未示出),例如,用于对抗网络抖动,此外,在视频解码器(510)内部可以有另一个缓冲存储器(515),例如,用于处理播放定时。当接收机(531)从具有足够带宽和可控性的存储/转发装置或者从等同步网络接收数据时,缓冲存储器(515)可以是不需要的,或者可以是小的。为了在诸如因特网之类的尽力而为的分组网络上使用,可能需要缓冲存储器(515),该缓冲存储器可以相对较大,并且可以有利地具有自适应大小,并且可以至少部分地在视频解码器(510)外部的操作系统或类似元件(未示出)中实现。
66.视频解码器(510)可以包括解析器(520),以从编码的视频序列中重构符号(521)。
这些符号的类别包括用于管理视频解码器(510)的操作的信息以及潜在地控制诸如呈现装置(512)(例如,显示屏)等呈现装置的信息,该呈现装置不是电子装置(530)的组成部分,但是可以耦合到电子装置(530),如图5所示。用于呈现装置的控制信息可以是补充增强信息(sei消息)或视频可用性信息(vui)参数集片段(未示出)的形式。解析器(520)可以对接收到的编码视频序列进行解析/熵解码。编码视频序列的编码可以根据视频编码技术或标准,并且可以遵循各种原理,包括可变长度编码、huffman编码、具有或不具有上下文敏感性的算术编码等。解析器(520)可以基于对应于该组的至少一个参数,从编码视频序列中提取视频解码器中的至少一个像素子组的一组子组参数。子组可以包括图片组(gop)、图片、瓦片、切片、宏块、编码单元(cu)、块、变换单元(tu)、预测单元(pu)等。解析器(520)还可以从编码的视频序列中提取信息,例如,变换系数、量化器参数值、运动矢量等。
67.解析器(520)可以对从缓冲存储器(515)接收的视频序列执行熵解码/解析操作,以便创建符号(521)。
68.根据编码视频图片或其部分的类型(例如:帧间和帧内图片、帧间和帧内块)以及其他因素,符号(521)的重构可以涉及多个不同的单元。可以通过由解析器(520)从编码视频序列中解析的子组控制信息来控制涉及哪些单元以及如何涉及。为了清楚起见,没有描述解析器(520)和下面的多个单元之间的这种子组控制信息流。
69.除了已经提到的功能块之外,视频解码器(510)可以在概念上细分成如下所述的多个功能单元。在商业限制下操作的实际实现中,许多这些单元彼此紧密交互,并且可以至少部分地彼此集成。然而,为了描述所公开的主题,在概念上细分成以下功能单元是合适的。
70.第一单元是定标器/逆变换单元(551)。定标器/逆变换单元(551)接收量化的变换系数以及控制信息,包括使用哪个变换、块大小、量化因子、量化缩放矩阵等,作为来自解析器(520)的符号(521)。定标器/逆变换单元(551)可以输出包括样本值的块,这些块可以被输入到聚集器(555)中。
71.在一些情况下,定标器/逆变换(551)的输出样本可以属于帧内编码块;即:没有使用来自先前重构图像的预测信息,但是可以使用来自当前图片的先前重构部分的预测信息的块。这种预测信息可以由帧内图片预测单元(552)提供。在一些情况下,帧内图片预测单元(552)使用从当前图片缓冲器(558)获取的周围已经重构的信息,生成与重构中的块具有相同大小和形状的块。当前图片缓冲器(558)缓冲例如部分重构的当前图片和/或完全重构的当前图片。在一些情况下,聚集器(555)基于每个样本将帧内预测单元(552)已经生成的预测信息添加到由定标器/逆变换单元(551)提供的输出样本信息。
72.在其他情况下,定标器/逆变换单元(551)的输出样本可以属于帧间编码的并且可能是运动补偿的块。在这种情况下,运动补偿预测单元(553)可以访问参考图片存储器(557),以获取用于预测的样本。在根据与该块有关的符号(521)对提取的样本进行运动补偿之后,这些样本可以由聚集器(555)添加到定标器/逆变换单元(551)的输出(在这种情况下称为残差样本或残差信号),以便生成输出样本信息。运动补偿预测单元(553)从中获取预测样本的参考图片存储器(557)内的地址可以由运动向量来控制,运动补偿预测单元(553)可以符号(521)的形式获得这些地址,这些符号可以具有例如x、y和参考图片组件。当使用子采样精确运动矢量时,运动补偿还可以包括从参考图片存储器(557)获取的采样值
的插值、运动矢量预测机制等。
73.聚集器(555)的输出样本可以在环路滤波器单元(556)中经受各种环路滤波技术。视频压缩技术可以包括环路滤波技术,这些技术由编码视频序列(也称为编码视频比特流)中包含的参数控制,并且作为来自解析器(520)的符号(521)可用于环路滤波单元(556),但是也可以响应于在编码图像或编码视频序列的先前(按照解码顺序)部分的解码期间获得的元信息以及响应于先前重构的和环路滤波的样本值。
74.环路滤波器单元(556)的输出可以是样本流,该样本流可以输出到呈现装置(512)以及存储在参考图片存储器(557)中,以用于将来的帧间图片预测。
75.一旦完全重构,某些编码图像可以用作未来预测的参考图片。例如,一旦完全重构对应于当前图片的编码图像,并且该编码的图片已经被识别为参考图片(例如,通过解析器(520)),则当前图片缓冲器(558)可以成为参考图片存储器(557)的一部分,并且在开始下一个编码图像的重构之前,可以重新分配新的当前图片缓冲器。
76.视频解码器(510)可以根据诸如itu-t rec.h.265等标准中的预定视频压缩技术来执行解码操作。在编码视频序列符合视频压缩技术或标准的语法以及视频压缩技术或标准中记载的简档的意义上,编码视频序列可以符合由所使用的视频压缩技术或标准规定的语法。具体地,简档可以从视频压缩技术或标准中可用的所有工具中选择某些工具,作为在该简档下可用的唯一工具。符合标准还需要编码视频序列的复杂度在视频压缩技术或标准的水平所定义的范围内。在某些情况下,级别限制了最大图像尺寸、最大帧速率、最大重构采样率(例如,以每秒兆样本为单位测量)、最大参考图片尺寸等。在某些情况下,由级别设置的限制可以通过假设参考解码器(hrd)规范和编码视频序列中信令的hrd缓冲器管理的元数据来进一步限制。
77.在一个实施例中,接收机(531)可以接收具有编码视频的额外(冗余)数据。可以包括额外数据,作为编码视频序列的一部分。视频解码器(510)可以使用额外数据来正确解码数据和/或更准确地重构原始视频数据。额外数据可以是例如时间、空间或信噪比(snr)增强层、冗余切片、冗余图片、前向纠错码等形式。
78.图6示出了根据本公开实施例的视频编码器(603)的框图。视频编码器(603)包括在电子装置(620)中。电子装置(620)包括发射机(640)(例如,发射电路)。视频编码器(603)可以用来代替图4示例中的视频编码器(403)。
79.视频编码器(603)可以从视频源(601)(其不是图6示例中的电子装置(620)的一部分)接收视频样本,该视频源可以捕捉要由视频编码器(603)编码的视频图片。在另一个示例中,视频源(601)是电子装置(620)的一部分。
80.视频源(601)可以以数字视频样本流的形式提供要由视频编码器(603)编码的源视频序列,该数字视频样本流可以具有任何合适的比特深度(例如:8比特、10比特、12比特、

)、任何颜色空间(例如,bt.601y crcb、rgb、

)和任何合适的采样结构(例如,y crcb 4:2:0、y crcb 4:4:4)。在媒体服务系统中,视频源(601)可以是存储先前准备的视频的存储装置。在视频会议系统中,视频源(601)可以是捕捉本地图像信息作为视频序列的相机。可以提供视频数据,作为多个单独的图片,当按顺序观看时,这些图片赋予运动。图片本身可以被组织为像素的空间阵列,其中,每个像素可以包括一个或多个样本,这取决于使用中的采样结构、颜色空间等。本领域技术人员可以容易地理解像素和样本之间的关系。下面的
描述集中在样本上。
81.根据一个实施例,视频编码器(603)可以实时地或者在应用所需的任何其他时间约束下,将源视频序列的图片编码和压缩成编码的视频序列(643)。实施适当的编码速度是控制器(650)的一个功能。在一些实施例中,控制器(650)控制如下所述的其他功能单元,并且在功能上耦合到其他功能单元。为了清楚起见,没有描述耦合。控制器(650)设置的参数可以包括速率控制相关参数(图片跳过、量化器、率失真优化技术的λ值、

)、图片大小、图片组(gop)布局、最大运动矢量搜索范围等。控制器(650)可以被配置为具有针对特定系统设计而优化的与视频编码器(603)相关的其他合适的功能。
82.在一些实施例中,视频编码器(603)被配置为在编码循环中操作。作为过于简化的描述,在一个示例中,编码环路可以包括源编码器(630)(例如,负责基于要编码的输入图片和参考图片来创建符号,例如,符号流)以及嵌入在视频编码器(603)中的(本地)解码器(633)。解码器(633)以类似于(远程)解码器也将创建的方式重构符号,以创建样本数据(因为在所公开的主题中考虑的视频压缩技术中,符号和编码视频比特流之间的任何压缩都是无损的)。重构的样本流(样本数据)被输入到参考图片存储器(634)。由于符号流的解码导致独立于解码器位置(本地或远程)的位精确结果,所以参考图片存储器(634)中的内容在本地编码器和远程编码器之间也是位精确的。换言之,当在解码期间使用预测时,编码器的预测部分作为参考图片样本“看到”与解码器“看到”的样本值完全相同的样本值。也在一些相关技术中使用参考图片同步性(以及由此产生的漂移,如果不能保持同步性,例如,由于信道误差)的该基本原理。
[0083]“本地”解码器(633)的操作可以与诸如视频解码器(510)之类的“远程”解码器的操作相同,上面已经结合图5对其进行了详细描述。然而,简要地参考图5,由于符号是可用的,并且熵编码器(645)和解析器(520)对编码视频序列的符号编码/解码可以是无损的,所以可以不完全在本地解码器(633)中实现视频解码器(510)的熵解码部分,包括缓冲存储器(515)和解析器(520)。
[0084]
在一个实施例中,除了解码器中存在的解析/熵解码之外,解码器技术以相同或基本相同的功能形式存在于相应的编码器中。因此,所公开的主题集中于解码器操作。编码器技术的描述可以简化,因为这些技术是全面描述的解码器技术的逆。在某些领域,下面提供了更详细的描述。
[0085]
在操作期间,在一些示例中,源编码器(630)可以执行运动补偿预测编码,其参考来自视频序列的被指定为“参考图片”的一个或多个先前编码的图片来预测性地编码输入图片。以这种方式,编码引擎(632)对输入图片的像素块和可被选为输入图片的预测参考的参考图片的像素块之间的差异进行编码。
[0086]
本地视频解码器(633)可以基于由源编码器(630)创建的符号,对可以被指定为参考图片的图片的编码视频数据进行解码。编码引擎(632)的操作可以有利地是有损过程。当编码的视频数据可以在视频解码器(图6中未示出)处被解码时,重构的视频序列通常可以是具有一些误差的源视频序列的副本。本地视频解码器(633)复制可以由视频解码器对参考图片执行的解码过程,并且可以使得重构的参考图片存储在参考图片缓存(634)中。以这种方式,视频编码器(603)可以本地存储重构的参考图片的副本,这些副本具有与将由远端视频解码器获得的重构的参考图片相同的内容(不存在传输误差)。
[0087]
预测器(635)可以对编码引擎(632)执行预测搜索。也就是说,对于要编码的新图片,预测器(635)可以在参考图片存储器(634)中搜索样本数据(作为候选参考像素块)或某些元数据,例如,参考图片运动矢量、块形状等,其可以用作新图片的适当预测参考。预测器(635)可以在逐个样本块-像素块的基础上操作,以找到合适的预测参考。在一些情况下,如由预测器(635)获得的搜索结果所确定的,输入图片可以具有从存储在参考图片存储器(634)中的多个参考图片中提取的预测参考。
[0088]
控制器(650)可以管理源编码器(630)的编码操作,包括例如用于编码视频数据的参数和子组参数的设置。
[0089]
所有前述功能单元的输出可以在熵编码器中经历熵编码(645)。熵编码器(645)通过根据诸如huffman编码、可变长度编码、算术编码等技术无损压缩符号,将由各种功能单元生成的符号转换成编码的视频序列。
[0090]
发射机(640)可以缓冲由熵编码器(645)创建的编码视频序列,以准备经由通信信道(660)传输,通信信道可以是到将存储编码视频数据的存储装置的硬件/软件链接。发射机(640)可以将来自视频编码器(603)的编码视频数据与要传输的其他数据合并,例如,编码音频数据和/或辅助数据流(源未示出)。
[0091]
控制器(650)可以管理视频编码器(603)的操作。在编码期间,控制器(650)可以向每个编码图片分配特定的编码图片类型,这可以影响可以应用于相应图片的编码技术。例如,图片通常可以被指定为以下图片类型之一:
[0092]
帧内图片(i图片)可以是不使用序列中的任何其他图片作为预测源而被编码和解码的图片。一些视频编解码器允许不同类型的帧内图片,包括例如独立解码器刷新(“idr”)图片。本领域技术人员知道i图片的那些变体以及其相应的应用和特征。
[0093]
预测图片(p图片)可以是使用最多一个运动矢量和参考索引来预测每个块的样本值,使用帧内预测或帧间预测来编码和解码的图片。
[0094]
双向预测图片(b图片)可以是使用最多两个运动矢量和参考索引来预测每个块的样本值,使用帧内预测或帧间预测来编码和解码的图片。类似地,多预测图片可以使用两个以上的参考图片和相关元数据来重构单个块。
[0095]
源图片通常可以在空间上被细分成多个样本块(例如,每个样本块为4
×
4、8
×
8、4
×
8或16
×
16个样本块),并且在分块的基础上编码。可以参考由应用于块的相应图片的编码分配所确定的其他(已经编码的)块来预测性地编码块。例如,i图片的块可以被非预测性地编码,或者可以参考同一图片的已经编码的块被预测性地编码(空间预测或帧内预测)。参考一个先前编码的参考图片,经由空间预测或经由时间预测,p图片的像素块可以预测性地编码。参考一个或两个先前编码的参考图片,经由空间预测或经由时间预测,可以预测性地编码b图片的块。
[0096]
视频编码器(603)可以根据预定的视频编码技术或标准(例如,itu-t rec.h.265)来执行编码操作。在其操作中,视频编码器(603)可以执行各种压缩操作,包括利用输入视频序列中的时间和空间冗余的预测编码操作。因此,编码的视频数据可以符合由正在使用的视频编码技术或标准指定的语法。
[0097]
在一个实施例中,发射机(640)可以与编码视频一起传输额外数据。源编码器(630)可以包括这样的数据,作为编码视频序列的一部分。额外数据可以包括时间/空间/
snr增强层、其他形式的冗余数据(例如,冗余图片和切片)、sei消息、vui参数集片段等。
[0098]
可以捕捉视频,作为时间序列中的多个源图片(视频图片)。帧内图片预测(通常缩写为帧内预测)利用给定图片中的空间相关性,而帧间图片预测利用图片之间的(时间或其他)相关性。在一个示例中,被称为当前图片的编码/解码中的特定图片被分割成块。在当前图片中的块类似于视频中先前编码且仍被缓冲的参考图片中的参考块时,当前图片中的块可以通过称为运动矢量的矢量来编码。在使用多个参考图片的情况下,运动矢量指向参考图片中的参考块,并且可以具有识别参考图片的第三维。
[0099]
在一些实施例中,可以在帧间图片预测中使用双向预测技术。根据双向预测技术,使用两个参考图片,例如,第一参考图片和第二参考图片,这两个参考图片在解码顺序上都在视频中的当前图片之前(但是在显示顺序上可以分别在过去和未来)。当前图片中的块可由指向第一参考图片中的第一参考块的第一运动向量和指向第二参考图片中的第二参考块的第二运动向量来编码。可以通过第一参考块和第二参考块的组合来预测该块。
[0100]
此外,可以在帧间图片预测中使用合并模式技术来提高编码效率。
[0101]
根据本公开的一些实施例,以块为单位执行预测,例如,帧间图片预测和帧内图片预测。例如,根据hevc标准,视频图片序列中的图片被分割成编码树单元(ctu),用于压缩,图片中的ctu具有相同的大小,例如,64
×
64像素、32
×
32像素或16
×
16像素。通常,ctu包括三个编码树块(ctb),即一个亮度ctb和两个色度ctb。每个ctu可以被递归地四叉树分割成一个或多个编码单元(cu)。例如,64
×
64像素的ctu可以被分割成一个64
×
64像素的cu,或者4个32
×
32像素的cu,或者16个16
×
16像素的cu。在一示例中,分析每个cu,以确定cu的预测类型,例如,帧间预测类型或帧内预测类型。根据时间和/或空间可预测性,cu被分成一个或多个预测单元(pu)。通常,每个pu包括一个亮度预测块(pb)和两个色度pb。在实施例中,以预测块为单位执行编码(编码/解码)中的预测操作。使用亮度预测块作为预测块的示例,预测块包含像素的值(例如,亮度值)的矩阵,例如,8
×
8像素、16
×
16像素、8
×
16像素、16
×
8像素等。
[0102]
图7示出了根据本公开的另一实施例的视频编码器(703)的示图。视频编码器(703)被配置为接收视频图片序列中的当前视频图片内的样本值的处理块(例如,预测块),并将该处理块编码成作为编码视频序列的一部分的编码图像。在一个示例中,视频编码器(703)用于代替图4示例中的视频编码器(403)。
[0103]
在hevc示例中,视频编码器(703)接收处理块的样本值矩阵,例如,8
×
8样本的预测块等。视频编码器(703)确定使用帧内模式、帧间模式还是使用例如率失真优化的双向预测模式对处理块进行最佳编码。当要以帧内模式对处理块进行编码时,视频编码器(703)可以使用帧内预测技术将处理块编码成编码图片;并且当要以帧间模式或双向预测模式对处理块进行编码时,视频编码器(703)可以分别使用帧间预测或双向预测技术来将处理块编码成编码图片。在某些视频编码技术中,合并模式可以是帧间图片预测子模式,其中,从一个或多个运动向量预测器中导出运动向量,而不受益于预测器之外的编码运动向量组件。在某些其他视频编码技术中,可能存在适用于对象块的运动矢量组件。在一个示例中,视频编码器(703)包括其他组件,例如,用于确定处理块的模式的模式判定模块(未示出)。
[0104]
在图7的示例中,视频编码器(703)包括如图7所示耦合在一起的帧间编码器(730)、帧内编码器(722)、残差计算器(723)、开关(726)、残差编码器(724)、通用控制器
(721)和熵编码器(725)。
[0105]
帧间编码器(730)被配置为接收当前块(例如,处理块)的样本,将该块与参考图片中的一个或多个参考块(例如,先前图片和后续图片中的块)进行比较,生成帧间预测信息(例如,根据帧间编码技术的冗余信息的描述、运动向量、合并模式信息),并且使用任何合适的技术基于帧间预测信息来计算帧间预测结果(例如,预测块)。在一些示例中,参考图片是基于编码视频信息解码的解码参考图片。
[0106]
帧内编码器(722)被配置为接收当前块(例如,处理块)的样本,在一些情况下,将该块与已经在同一图片中编码的块进行比较,在变换后生成量化系数,并且在一些情况下,还生成帧内预测信息(例如,根据一种或多种帧内编码技术的帧内预测方向信息)。在一个示例中,帧内编码器(722)还基于同一图片中的帧内预测信息和参考块来计算帧内预测结果(例如,预测块)。
[0107]
通用控制器(721)被配置为确定通用控制数据并基于通用控制数据控制视频编码器(703)的其他组件。在一个示例中,通用控制器(721)确定块的模式,并基于该模式向开关(726)提供控制信号。例如,当模式是帧内模式时,通用控制器(721)控制开关(726)选择帧内模式结果供残差计算器(723)使用,并控制熵编码器(725)选择帧内预测信息并将帧内预测信息包括在比特流中;当模式是帧间模式时,通用控制器(721)控制开关(726)选择帧间预测结果供残差计算器(723)使用,并控制熵编码器(725)选择帧间预测信息并将帧间预测信息包括在比特流中。
[0108]
残差计算器(723)被配置为计算接收的块和从帧内编码器(722)或帧间编码器(730)选择的预测结果之间的差(残差数据)。残差编码器(724)被配置为基于残差数据进行操作,以编码残差数据,来生成变换系数。在一个示例中,残差编码器(724)被配置为将残差数据从空间域转换到频域,并生成变换系数。然后对变换系数进行量化处理,以获得量化的变换系数。在各种实施例中,视频编码器(703)还包括残差解码器(728)。残差解码器(728)被配置为执行逆变换,并生成解码后的残差数据。解码的残差数据可以被帧内编码器(722)和帧间编码器(730)适当地使用。例如,帧间编码器(730)可基于解码的残差数据和帧间预测信息生成解码的块,帧内编码器(722)可基于解码的残差数据和帧内预测信息生成解码的块。适当地处理经解码的块,以生成经解码的图片,并且经解码的图片可以缓存在存储器电路(未示出)中,并且在一些示例中用作参考图片。
[0109]
熵编码器(725)被配置为格式化比特流,以包括编码块。熵编码器(725)被配置为根据合适的标准,例如,hevc标准,包括各种信息。在一个示例中,熵编码器(725)被配置为包括通用控制数据、所选预测信息(例如,帧内预测信息或帧间预测信息)、残差信息和比特流中的其他合适的信息。注意,根据所公开的主题,当在帧间模式或双向预测模式的合并子模式中对块进行编码时,没有残差信息。
[0110]
图8示出了根据本公开的另一实施例的视频解码器(810)的示图。视频解码器(810)被配置为接收作为编码视频序列的一部分的编码图片,并对编码图片进行解码,以生成重构图片。在一个示例中,视频解码器(810)用于代替图4示例中的视频解码器(410)。
[0111]
在图8的示例中,视频解码器(810)包括如图8所示耦合在一起的熵解码器(871)、帧间解码器(880)、残差解码器(873)、重构模块(874)和帧内解码器(872)。
[0112]
熵解码器(871)可以被配置为从编码图像中重构表示组成编码图像的语法元素的
某些符号。这种符号可以包括例如对块进行编码的模式(例如,帧内模式、帧间模式、双向预测模式、合并子模式或另一子模式中的后两种模式)、可以识别分别由帧内解码器(872)或帧间解码器(880)用于预测的特定样本或元数据的预测信息(例如,帧内预测信息或帧间预测信息)、例如量化变换系数形式的残差信息等。在一个示例中,当预测模式是帧间或双向预测模式时,帧间预测信息被提供给帧间解码器(880);并且当预测类型是帧内预测类型时,帧内预测信息被提供给帧内解码器(872)。残差信息可以经历逆量化,并被提供给残差解码器(873)。
[0113]
帧间解码器(880)被配置为接收帧间预测信息,并基于帧间预测信息生成帧间预测结果。
[0114]
帧内解码器(872)被配置为接收帧内预测信息,并基于帧内预测信息生成预测结果。
[0115]
残差解码器(873)被配置为执行逆量化,以提取去量化的变换系数,并处理去量化的变换系数,以将残差从频域转换到空间域。残差解码器(873)还可能需要某些控制信息(以包括量化器参数(qp)),并且该信息可以由熵解码器(871)提供(数据路径未示出,因为这可能只是少量控制信息)。
[0116]
重构模块(874)被配置为在空间域中组合由残差解码器(873)输出的残差和预测结果(由帧间或帧内预测模块输出,视情况而定),以形成重构块,该重构块可以是重构图片的一部分,该重构图片又可以是重构视频的一部分。注意,可以执行诸如去块操作等其他合适的操作来提高视觉质量。
[0117]
注意,视频编码器(403)、(603)和(703)以及视频解码器(410)、(510)和(810)可以使用任何合适的技术来实现。在一个实施例中,视频编码器(403)、(603)和(703)以及视频解码器(410)、(510)和(810)可以使用一个或多个集成电路来实现。在另一个实施例中,视频编码器(403)、(603)和(603)以及视频解码器(410)、(510)和(810)可以使用执行软件指令的一个或多个处理器来实现。
[0118]
本公开描述了与神经图像压缩技术和/或神经视频压缩技术相关的视频编码技术,例如,基于人工智能(ai)的神经图像压缩(nic)。本公开的方面包括nic中的内容自适应在线训练,例如,用于基于神经网络的端到端(e2e)优化图像编码框架的分块内容自适应在线训练nic方法。神经网络(nn)可以包括人工神经网络(ann),例如,深度神经网络(dnn)、卷积神经网络(cnn)等。
[0119]
在一个实施例中,相关的混合视频编解码器很难被整体优化。例如,混合视频编解码器中单个模块(例如,编码器)的改进可能不会导致整体性能的编码增益。在基于nn的视频编码框架中,可以通过执行学习过程或训练过程(例如,机器学习过程)来从输入到输出共同优化不同的模块,以改善最终目标(例如,率失真性能,例如,本公开中描述的率失真损耗l),并因此产生e2e优化的nic。
[0120]
可以如下描述示例性nic框架或系统。nic框架可以使用输入块x作为神经网络编码器(例如,基于神经网络(例如,dnn)的编码器)的输入,以计算压缩表示(例如,紧凑表示)该压缩表示可以是紧凑的,例如,用于存储和传输目的。神经网络解码器(例如,基于神经网络(例如,dnn)的解码器)可以使用压缩表示作为输入来重构输出块(也称为重构块)在各种实施例中,输入块x和重构块在空间域中,压缩表示在不同于空间域的域中。
在一些示例中,压缩表示被量化和熵编码。
[0121]
在一些示例中,nic框架可以使用可变自动编码器(vae)结构。在vae结构中,神经网络编码器可以直接使用整个输入块x作为神经网络编码器的输入。整个输入块x可以穿过一组作为黑盒工作的神经网络层,来计算压缩表示压缩表示是神经网络编码器的输出。神经网络解码器可以将整个压缩表示作为输入。压缩表示可以穿过另一组作为另一个黑盒工作的神经网络层,来计算重构块率失真(r-d)损耗可以被优化,以利用折衷超参数λ实现重构块的失真损耗和紧凑表示的比特消耗r之间的折衷。
[0122][0123]
神经网络(例如,ann)可以从示例中学习执行任务,而无需特定于任务的编程。ann可以配置有连接的节点或人工神经元。节点之间的连接可以将信号从第一节点传输到第二节点(例如,接收节点),并且该信号可以通过权重来修改,该权重可以由该连接的权重系数来指示。接收节点可以处理来自向接收节点发送信号的节点的信号(即,接收节点的输入信号),然后通过对输入信号应用函数来生成输出信号。该函数可以是线性函数。在一个示例中,输出信号是输入信号的加权和。在一个示例中,输出信号被可以由偏置项指示的偏置进一步修改,因此输出信号是偏置和输入信号的加权和的和。该函数可以包括例如对输入信号的加权和或偏置和加权和的和的非线性运算。输出信号可以被发送到连接到接收节点的节点(下游节点)。ann可以由参数(例如,连接和/或偏置的权重)来表示或配置。可以通过用可以迭代调整权重和/或偏置的示例训练ann来获得权重和/或偏置。配置有所确定的权重和/或所确定的偏置的经训练的ann可用于执行任务。
[0124]
ann中的节点可以用任何合适的架构来组织。在各种实施例中,ann中的节点被组织成层,包括接收到ann的输入信号的输入层和从ann输出输出信号的输出层。在一个实施例中,ann还包括输入层和输出层之间的层,例如,隐藏层。不同层可以对不同层的相应输入执行不同种类的变换。信号可以从输入层传输到输出层。
[0125]
在输入层和输出层之间具有多层的ann可以被称为dnn。在一个实施例中,dnn是前馈网络,其中,数据从输入层流向输出层,而没有环回。在一个示例中,dnn是全连接网络,其中,一层中的每个节点都连接到下一层中的所有节点。在一个实施例中,dnn是递归神经网络(rnn),其中,数据可以向任何方向流动。在一个实施例中,dnn是cnn。
[0126]
cnn可以包括输入层、输出层以及输入层和输出层之间的隐藏层。隐藏层可以包括执行卷积(例如,二维(2d)卷积)的卷积层(例如,用在编码器中)。在一个实施例中,在卷积层中执行的2d卷积是在卷积核(也称为滤波器或信道,例如,5
×
5矩阵)和卷积层的输入信号(例如,2d矩阵,例如,2d块,256
×
256矩阵)之间。在各种示例中,卷积核的维度(例如,5
×
5)小于输入信号的维度(例如,256
×
256)。因此,输入信号(例如,256
×
256矩阵)中被卷积核覆盖的部分(例如,5
×
5区域)小于输入信号的区域(例如,256
×
256区域),因此可以被称为下一层中相应节点中的感受野。
[0127]
在卷积期间,计算卷积核和输入信号中相应感受野的点积。因此,卷积核的每个元素是应用于感受野中相应样本的权重,因此卷积核包括权重。例如,由5
×
5矩阵表示的卷积核具有25个权重。在一些示例中,向卷积层的输出信号施加偏置,并且输出信号基于点积和
偏置的和。
[0128]
卷积核可以沿着输入信号(例如,2d矩阵)移动被称为步幅的大小,因此卷积运算生成特征图或激活图(例如,另一个2d矩阵),这又有助于cnn中下一层的输入。例如,输入信号是具有256
×
256个样本的2d块,步幅是2个样本(例如,步幅为2)。对于步幅2,卷积核沿着x方向(例如,水平方向)和/或y方向(例如,垂直方向)移动2个样本。
[0129]
多个卷积核可以在相同的卷积层中应用于输入信号,以分别生成多个特征图,其中,每个特征图可以表示输入信号的特定特征。一般来说,具有n个信道(即,n个卷积核)的卷积层(每个卷积核具有m
×
m个样本和步幅s)可以被指定为conv:mxm cn ss。例如,具有192个信道的卷积层(每个卷积核具有5
×
5个样本,并且步幅为2)被指定为conv:5x5 c192 s2。隐藏层可以包括执行去卷积(例如,2d去卷积)的去卷积层(例如,用在解码器中)。去卷积是卷积的逆运算。具有192个信道的去卷积层(每个去卷积核具有5
×
5个样本,并且步幅为2)被指定为deconv:5x5 c192 s2。
[0130]
在各种实施例中,cnn具有以下好处。cnn中的多个可学习参数(即,待训练的参数)可以显著小于dnn(例如,前馈dnn)中的多个可学习参数。在cnn中,相对大量的节点可以共享相同的滤波器(例如,相同的权重)和相同的偏置(如果使用偏置的话),因此可以减少存储器占用,因为可以在共享相同滤波器的所有感受野上使用单个偏置和单个权重向量。例如,对于具有100
×
100个样本的输入信号,具有5
×
5个样本的卷积核的卷积层具有25个可学习的参数(例如,权重)。如果使用偏置,则一个信道使用26个可学习参数(例如,25个权重和一个偏置)。如果卷积层具有n个信道,则总的可学习参数为26xn。另一方面,对于dnn中全连接层,100x100(即10000)个权重用于下一层中的每个节点。如果下一层有l个节点,则总的可学习参数是10000xl。
[0131]
cnn还可以包括一个或多个其他层,例如,池化层、可以将一层中的每个节点连接到另一层中的每个节点的全连接层、标准化层等。cnn中的层可以以任何合适的顺序和任何合适的架构(例如,前馈架构、递归架构)排列。在一个示例中,卷积层之后是其他层,例如,池化层、全连接层、标准化层等。
[0132]
通过将来自一层的多个节点的输出组合到下一层的单个节点中,可以使用池化层来减少数据的维度。下面描述了将特征图作为输入的池化层的池化操作。该描述可以适当地适用于其他输入信号。特征图可以被分成子区域(例如,矩形子区域),并且相应子区域中的特征可以被独立地下采样(或池化)为单个值,例如,通过在平均池化中取平均值或在最大池化中取最大值。
[0133]
池化层可以执行池化,例如,本地池化、全局池化、最大池化、平均池化等。池化是非线性下采样的一种形式。本地池化组合特征图中的少量节点(例如,本地节点集群,例如,2
×
2节点)。例如,全局池化可以组合特征图的所有节点。
[0134]
池化层可以减少表示的大小,从而减少cnn中的参数数量、内存占用和计算量。在一个示例中,在cnn中的连续卷积层之间插入一个池化层。在一个示例中,池化层之后是激活函数,例如,校正线性单元(relu)层。在一个示例中,在cnn中的连续卷积层之间省略了池化层。
[0135]
归一化层可以是relu、泄漏relu、广义除法归一化(gdn)、逆gdn(igdn)等。relu可以应用非饱和激活函数,通过将负值设置为零来从输入信号(例如,特征图)中去除负值。对
于负值,泄漏relu可以具有小斜率(例如,0.01),而不是平坦的斜率(例如,0)。因此,如果值x大于0,则来自泄漏relu的输出是x。否则,来自泄漏relu的输出是值x乘以小斜率(例如,0.01)。在一个示例中,斜率是在训练之前确定的,因此在训练期间不学习。
[0136]
在基于nn的图像压缩方法中,例如,基于dnn或基于cnn的图像压缩方法,不是直接编码整个图像,而是基于块或分块编码机制可以有效地压缩基于dnn的视频编码标准(例如,fvc)中的图像。整个图像可以被分割成大小相同(或不同)的块,并且可以单独压缩这些块。在一个实施例中,图像可以被分成大小相等或不相等的块。可以压缩分割的块而不是图像。图9a示出了根据本公开实施例的分块图像编码的示例。图像(980)可以被分割成块,例如,块(981)-(996)。例如,可以根据扫描顺序来压缩块(981)-(996)。在图9a所示的示例中,已经压缩块(981)-(989),并且将压缩块(990)-(996)。
[0137]
图像可以被视为一个块。在一个实施例中,压缩图像,而没有被分成块。整个图像可以是e2e nic框架的输入。
[0138]
图9b示出了根据本公开实施例的示例性nic框架(900)(例如,nic系统)。nic框架(900)可以基于神经网络,例如,dnn和/或cnn。nic框架(900)可用于压缩(例如,编码)块和解压缩(例如,解码或重构)压缩块(例如,编码块)。nic框架(900)可以包括使用神经网络来实现的两个子神经网络,即第一子神经网络(951)和第二子nn(952)。
[0139]
第一子nn(951)可以类似于自动编码器,并且可以被训练,以生成输入块x的压缩块并且解压缩压缩块以获得重构块第一子nn(951)可以包括多个组件(或模块),例如,主编码器神经网络(或主编码器网络)(911)、量化器(912)、熵编码器(913)、熵解码器(914)和主解码器神经网络(或主编码器网络)(915)。参考图9,主编码器网络(911)可以从输入块x(例如,要压缩或编码的块)生成潜在或潜在表示y。在一个示例中,主编码器网络(911)使用cnn来实现。潜潜在表示y和输入块x之间的关系可以使用等式2来描述。
[0140]
y=f1(x;θ1)
ꢀꢀꢀꢀꢀꢀꢀꢀ
等式2
[0141]
其中,参数θ1表示参数,例如,主编码器网络(911)中卷积核中使用的权重和偏置(如果在主编码器网络(911)中使用偏置)。
[0142]
可以使用量化器(912)量化潜在表示y,以生成量化的潜在可以压缩量化的潜在例如,熵编码器(913)使用无损压缩,来生成压缩块(例如,编码块)(931),该图像是输入块x的压缩表示熵编码器(913)可以使用熵编码技术,例如,huffman编码、算术编码等。在一个示例中,熵编码器(913)使用算术编码,并且是算术编码器。在一个示例中,在编码比特流中传输编码块(931)。
[0143]
编码块(931)可以由熵解码器(914)解压缩(例如,熵解码),以生成输出。熵解码器(914)可以使用与熵编码器(913)中使用的熵编码技术对应的熵编码技术,例如,huffman编码、算术编码等。在一个示例中,熵解码器(914)使用算术解码,并且是算术解码器。在一个示例中,在熵编码器(913)中使用无损压缩,在熵解码器(914)中使用无损解压缩,并且可以忽略诸如由于编码块(931)的传输而产生的噪声,来自熵解码器(914)的输出是量化的潜在
[0144]
主解码器网络(915)可以解码量化的潜在以生成重构块在一个示例中,主解
码器网络(915)使用cnn来实现。重构块(即,主解码器网络(915)的输出)和量化的潜在(即,主解码器网络(915)的输入)之间的关系可以使用等式3来描述。
[0145][0146]
其中,参数θ2表示参数,例如,在主解码器网络(915)中的卷积核中使用的权重和偏置(如果在主解码器网络(915)中使用偏置)。因此,第一子nn(951)可以压缩(例如,编码)输入块x,以获得编码块(931)并且解压缩(例如,解码)编码块(931),以获得重构块由于量化器(912)引入的量化损耗,重构块x能不同于输入块x。
[0147]
第二子nn(952)可以在用于熵编码的量化潜在上学习熵模型(例如,先验概率模型)。因此,熵模型可以是条件熵模型,例如,高斯混合模型(gmm)、取决于输入块x的高斯尺度模型(gsm)。第二子nn(952)可以包括上下文模型nn(916)、熵参数nn(917)、超级编码器(921)、量化器(922)、熵编码器(923)、熵解码器(924)和超级解码器(925)。在上下文模型nn(916)中使用的熵模型可以是潜像的(例如,量化的潜在)自回归模型。在一个示例中,超级编码器(921)、量化器(922)、熵编码器(923)、熵解码器(924)和超级解码器(925)形成超级神经网络(例如,超级nn)。超级神经网络可以表示对校正基于上下文的预测有用的信息。来自上下文模型nn(916)和超级神经网络的数据可以通过熵参数nn(917)来组合。熵参数nn(917)可以生成参数,例如,用于诸如条件高斯熵模型(例如,gmm)等熵模型的均值和尺度参数。
[0148]
参考图9b,在编码器侧,来自量化器(912)的量化的潜在被馈入上下文模型nn(916)。在解码器侧,来自熵解码器(914)的量化的潜在被馈入上下文模型nn(916)。上下文模型nn(916)可以使用诸如cnn之类的神经网络来实现。上下文模型nn(916)可以基于上下文生成输出o
cm,i
,该输出是对上下文模型nn(916)可用的量化的潜在上下文可以包括编码器侧的先前量化潜像或解码器侧的先前熵解码的量化潜像。上下文模型nn(916)的输出o
cm,i
和输入(例如,)之间的关系可以使用等式4来描述。
[0149][0150]
其中,参数θ3表示参数,例如,在上下文模型nn(916)中的卷积核中使用的权重和偏置(如果在上下文模型nn(916)中使用偏置)。
[0151]
来自上下文模型nn(916)的输出o
cm,i
和来自超级解码器(925)的输出o
hc
被馈入熵参数nn(917),以生成输出o
ep
。熵参数nn(917)可以使用诸如cnn之类的神经网络来实现。熵参数nn(917)的输出o
ep
和输入(例如,o
cm,i
和o
hc
)之间的关系可以使用等式5来描述。
[0152]oep
=f4(o
cm,i
,o
hc
;θ4)
ꢀꢀꢀꢀꢀꢀꢀꢀ
等式5
[0153]
其中,参数θ4表示参数,例如,熵参数nn(917)中卷积核中使用的权重和偏置(如果在熵参数nn(917)中使用偏置)。熵参数nn(917)的输出o
ep
可以用于确定(例如,调节)熵模型,并且因此经调节的熵模型可以取决于输入块x,例如,经由来自超级解码器(925)的输出o
hc
。在一个示例中,输出o
ep
包括用于调节熵模型(例如,gmm)的参数,例如,均值和尺度参数。参考图9b,熵编码器(913)和熵解码器(914)可以分别在熵编码和熵解码中使用熵模型
(例如,条件熵模型)。
[0154]
可以如下描述第二子nn(952)。潜在y可以被馈送到超级编码器(921)中,以生成超级潜在z。在一个示例中,超级编码器(921)是使用诸如cnn之类的神经网络来实现的。超级潜在z和潜在y之间的关系可以使用等式6来描述。
[0155]
z=f5(y;θ5)
ꢀꢀꢀꢀꢀꢀꢀꢀ
等式6
[0156]
其中,参数θ5表示参数,例如,超级编码器(921)中卷积核中使用的权重和偏置(如果在超级编码器(921)中使用了偏置)。
[0157]
量化器(922)对超级潜在z进行量化,以生成量化的潜在可以压缩量化的潜在例如,通过熵编码器(923)使用无损压缩,来生成边信息,例如,来自超级神经网络的编码比特(932)。熵编码器(923)可以使用熵编码技术,例如,huffman编码、算术编码等。在一个示例中,熵编码器(923)使用算术编码,并且是算术编码器。在一个示例中,诸如编码比特(932)之类的边信息可以在编码比特流中例如与编码块(931)一起传输。
[0158]
诸如编码比特(932)的边信息可以由熵解码器(924)解压缩(例如,熵解码),以生成输出。熵解码器(924)可以使用熵编码技术,例如,huffman编码、算术编码等。在一个示例中,熵解码器(924)使用算术解码,并且是算术解码器。在一个示例中,在熵编码器(923)中使用无损压缩,在熵解码器(924)中使用无损解压缩,并且可以忽略诸如由于边信息的传输而导致的噪声,来自熵解码器(924)的输出可以是量化的潜在超级解码器(925)可以解码量化的潜在以生成输出to
hc
。输出to
hc
和量化的潜在之间的关系可以使用等式7来描述。
[0159][0160]
其中,参数θ6表示参数,例如,超级解码器(925)中卷积核中使用的权重和偏置(如果在超级解码器(925)中使用偏置)。
[0161]
如上所述,压缩或编码的比特(932)可以作为边信息被添加到编码的比特流,这使得熵解码器(914)能够使用条件熵模型。因此,熵模型可以是块相关的和空间自适应的,因此可以比固定熵模型更精确。
[0162]
可以适当地修改nic框架(900),例如,省略图9中所示的一个或多个组件,修改图9中所示的一个或多个组件,和/或包括图9中未示出的一个或多个组件。在一个示例中,使用固定熵模型的nic框架包括第一子nn(951),并且不包括第二子nn(952)。在一个示例中,nic框架包括nic框架(900)中除熵编码器(923)和熵解码器(924)之外的组件。
[0163]
在一个实施例中,图9所示的nic框架(900)中的一个或多个组件使用神经网络(例如,cnn)来实现。nic框架(例如,nic框架(900))中的每个基于nn的组件(例如,主编码器网络(911)、主解码器网络(915)、上下文模型nn(916)、熵参数nn(917)、超级编码器(921)或超级解码器(925))可以包括任何合适的架构(例如,具有任何合适的层组合)、包括任何合适类型的参数(例如,权重、偏置、权重和偏置的组合和/或诸如此类),并且包括任何合适数量的参数。
[0164]
在一个实施例中,主编码器网络(911)、主解码器网络(915)、上下文模型nn(916)、熵参数nn(917)、超级编码器(921)和超级解码器(925)使用相应的cnn来实现。
[0165]
图10示出了根据本公开实施例的主编码器网络(911)的示例性cnn。例如,主编码器网络(911)包括四组层,其中,每组层包括一个卷积层5x5 c192 s2,其后是一个gdn层。可以修改和/或省略图10中所示的一层或多层。可以将额外层添加到主编码器网络(911)。
[0166]
图11示出了根据本公开实施例的主解码器网络(915)的示例性cnn。例如,主解码器网络(915)包括三组层,其中,每组层包括去卷积层5x5 c192 s2,随后是igdn层。此外,三组层之后是去卷积层5x5 c3 s2,之后是igdn层。可以修改和/或省略图11中所示的一层或多层。可以将额外层添加到主解码器网络(915)。
[0167]
图12示出了根据本公开实施例的超级编码器(921)的示例性cnn。例如,超级编码器(921)包括卷积层3x3 c192 s1,随后是泄漏relu,卷积层5x5 c192 s2,随后是泄漏relu,以及卷积层5x5 c192 s2。可以修改和/或省略图12中所示的一层或多层。可以将额外层添加到超级编码器(921)。
[0168]
图13示出了根据本公开实施例的超级解码器(925)的示例性cnn。例如,超级解码器(925)包括去卷积层5x5 c192 s2,随后是泄漏relu,卷积层5x5 c288 s2,随后是泄漏relu,以及卷积层3x3 c384 s1。可以修改和/或省略图13中所示的一层或多层。可以将额外层添加到超级编码器(925)。
[0169]
图14示出了根据本公开实施例的上下文模型nn(916)的示例性cnn。例如,上下文模型nn(916)包括用于上下文预测的掩蔽卷积5x5 c384 s1,因此等式4中的上下文包括有限的上下文(例如,5
×
5卷积核)。可以修改图14中的卷积层。可以将额外层添加到上下文模型nn(916)。
[0170]
图15示出了根据本公开实施例的熵参数nn(917)的示例性cnn。例如,熵参数nn(917)包括卷积层1x1 c640 s1,随后是泄漏relu,卷积层1x1 c512 s1,随后是泄漏relu,以及卷积层1x1 c384 s1。可以修改和/或省略图15中所示的一层或多层。可以将额外层添加到熵参数nn(917)。
[0171]
nic框架(900)可以使用cnn来实现,如参考图10-15所描述的。nic框架(900)可以被适当地适配,使得nic框架(900)中的一个或多个组件(例如,(911)、(915)、(916)、(917)、(921)和/或(925))使用任何适当类型的神经网络(例如,基于cnn或非cnn的神经网络)来实现。nic框架(900)的一个或多个其他组件可以使用神经网络来实现。
[0172]
可以训练包括神经网络(例如,cnn)的nic框架(900)来学习神经网络中使用的参数。例如,当使用cnn时,可以分别在训练过程中学习由θ
1-θ6表示的参数,例如,在主编码器网络(911)中的卷积核中使用的权重和偏置(如果在主编码器网络(911)中使用偏置)、在主解码器网络(915)中的卷积核中使用的权重和偏置(如果在主解码器网络(915)中使用偏置)、超级编码器(921)中的卷积核中使用的权重和偏置(如果在超级编码器(921)中使用偏置)、超级解码器(925)中的卷积核中使用的权重和偏置(如果在超级解码器(925)中使用偏置)、上下文模型nn(916)中的卷积核中使用的权重和偏置(如果在上下文模型nn(916)中使用偏置)以及在熵参数nn(917)中的卷积核中使用的权重和偏置(如果在熵参数nn(917)中使用了偏置)。
[0173]
在一个示例中,参考图10,主编码器网络(911)包括四个卷积层,其中,每个卷积层具有5
×
5的卷积核和192个信道。因此,在主编码器网络(911)中的卷积核中使用的权重的数量是19200(即,4x5x5x192)。主编码器网络(911)中使用的参数包括19200权重和可选偏
置。当在主编码器网络(911)中使用偏置和/或额外nn时,可以包括额外参数。
[0174]
参考图9b,nic框架(900)包括至少一个建立在神经网络上的组件或模块。该至少一个组件可以包括主编码器网络(911)、主解码器网络(915)、超级编码器(921)、超级解码器(925)、上下文模型nn(916)和熵参数nn(917)中的一个或多个。可以单独训练该至少一个组件。在一个示例中,训练过程用于分别学习每个组件的参数。该至少一个组件可以作为一个组共同训练。在一个示例中,训练过程用于共同学习至少一个组件的子集的参数。在一个示例中,训练过程用于学习所有至少一个组件的参数,因此被称为e2e优化。
[0175]
在nic框架(900)中的一个或多个组件的训练过程中,可以初始化一个或多个组件的权重(或权重系数)。在一个示例中,基于预训练相应神经网络模型(例如,dnn模型、cnn模型)来初始化权重。在一个示例中,通过将权重设置为随机数来初始化权重。
[0176]
例如,在初始化权重之后,可以采用一组训练块来训练一个或多个组件。该组训练块可以包括具有任何合适尺寸的任何合适的块。在一些示例中,该组训练块包括在空间域中的原始图像、自然图像、计算机生成的图像等的块。在一些示例中,该组训练块包括在空间域中具有残差数据的残差块或残差图像的块。残差数据可以由残差计算器(例如,残差计算器(723))来计算。在一些示例中,原始图像和/或包括残差数据的残差图像可以直接用于在nic框架中训练神经网络。因此,原始图像、残差图像、来自原始图像的块和/或来自残差图像的块可以用于在nic框架中训练神经网络。
[0177]
为了简洁起见,下面使用训练块作为示例来描述训练过程。该描述可以适当地适用于训练块。该组训练块中的训练块t可以通过图9b中的编码过程,以生成压缩表示(例如,编码信息,例如,比特流)。编码信息可以通过图9b中描述的解码过程来计算和重构该重构块
[0178]
对于nic框架(900),平衡了两个竞争目标,例如,重构质量和比特消耗。质量损耗函数(例如,失真或失真损耗)可以用于指示重构质量,例如,重构(例如,重构块)和原始块(例如,训练块t)之间的差异。速率(或速率损耗)r可以用于指示压缩表示的比特消耗。在一个示例中,速率损耗r还包括例如在确定上下文模型时使用的边信息。
[0179]
对于神经图像压缩,可以在e2e优化中使用量化的可微分近似。在各种示例中,在基于神经网络的图像压缩的训练过程中,使用噪声注入来模拟量化,因此量化是通过噪声注入来模拟的,而不是由量化器(例如,量化器(912))来执行。因此,利用噪声注入的训练可以可变地逼近量化误差。每像素比特(bpp)估计器可用于模拟熵编码器,因此熵编码由bpp估计器模拟,而不是由熵编码器(例如,(913))和熵解码器(例如,(914))执行。因此,例如,可以基于噪声注入和bpp估计器来估计训练过程中等式1所示的损耗函数l中的速率损耗r。一般而言,较高的速率r可以实现较低的失真d,而较低的速率r会导致较高的失真d。等式1中的权衡超参数λ可用于优化共同r-d损耗l,其中,l作为λd和r的总和可被优化。训练过程可用于调整nic框架(900)中的一个或多个组件(例如(911)、(915))的参数,使得共同r-d损耗l被最小化或优化。在一个示例中,可以使用折衷超参数λ来优化联合率失真(r-d)损耗,如下所示:
[0180]
[0181]
其中,e测量与编码前的原始块残差相比的解码块残差的失真,其充当残差编码/解码dnn和编码/解码dnn的正则化损耗。β是一个超参数,用于平衡正则化损耗的重要性。
[0182]
可以使用各种模型来确定失真损耗d和速率损耗r,从而确定等式1中的共同r-d损耗l。在一个示例中,失真损耗被表示为峰值信噪比(psnr),其是基于均方误差、多尺度结构相似性(ms-ssim)质量指数、psnr和ms-ssim的加权组合等的度量。
[0183]
在一个示例中,训练过程的目标是训练编码神经网络(例如,编码dnn),例如,要在编码器侧使用的视频编码器,以及训练解码神经网络(例如,解码dnn),例如,要在解码器侧使用的视频解码器。在一个示例中,参考图9b,编码神经网络可以包括主编码器网络(911)、超级编码器(921)、超级解码器(925)、上下文模型nn(916)和熵参数nn(917)。解码神经网络可以包括主解码器网络(915)、超级解码器(925)、上下文模型nn(916)和熵参数nn(917)。视频编码器和/或视频解码器可以包括基于nn和/或不基于nn的其他组件。
[0184]
可以以e2e方式训练nic框架(例如,nic框架(900))。在一个示例中,编码神经网络和解码神经网络在训练过程中基于反向传播梯度以e2e方式共同更新。
[0185]
在训练nic框架(900)中的神经网络的参数之后,nic框架(900)中的一个或多个组件可以用于编码和/或解码块。在一个实施例中,在编码器侧,视频编码器被配置为将输入块x编码成要在比特流中传输的编码块(931)。视频编码器可以包括nic框架(900)中的多个组件。在一个实施例中,在解码器侧,对应的视频解码器被配置为将比特流中的编码块(931)解码成重构块视频解码器可以包括nic框架(900)中的多个组件。
[0186]
在一个示例中,例如,当采用内容自适应在线训练时,视频编码器包括nic框架(900)中的所有组件。
[0187]
图16a示出了根据本公开实施例的示例性视频编码器(1600a)。视频编码器(1600a)包括参考图9b描述的主编码器网络(911)、量化器(912)、熵编码器(913)和第二子nn(952),为了简洁起见,省略了详细描述。图16b示出了根据本公开实施例的示例性视频解码器(1600b)。视频解码器(1600b)可以对应于视频编码器(1600a)。视频解码器(1600b)可以包括主解码器网络(915)、熵解码器(914)、上下文模型nn(916)、熵参数nn(917)、熵解码器(924)和超级解码器(925)。参考图16a-16b,在编码器侧,视频编码器(1600a)可以生成要在比特流中传输的编码块(931)和编码比特(932)。在解码器侧,视频解码器(1600b)可以接收和解码编码块(931)和编码比特(932)。
[0188]
图17-18分别示出了根据本公开的实施例的示例性视频编码器(1700)和相应的视频解码器(1800)。参考图17,编码器(1700)包括主编码器网络(911)、量化器(912)和熵编码器(913)。参考图9b描述主编码器网络(911)、量化器(912)和熵编码器(913)的示例。参考图18,视频解码器(1800)包括主解码器网络(915)和熵解码器(914)。参考图9b描述主解码器网络(915)和熵解码器(914)的示例。参考图17和18,视频编码器(1700)可以生成将在比特流中传输的编码块(931)。视频解码器(1800)可以接收并解码编码块(931)。
[0189]
如上所述,包括视频编码器和视频解码器的nic框架(900)可以基于该组训练图像中的图像和/或块来训练。在一些示例中,要压缩(例如,编码)和/或传输的一个或多个块具有与该组训练块显著不同的属性。因此,分别使用基于该组训练块训练的视频编码器和视频解码器直接对一个或多个块进行编码和解码,会导致相对较差的r-d损耗l(例如,相对较大的失真和/或相对较大的比特率)。因此,本公开的方面描述nic的内容自适应在线训练方
法,例如,nic的分块内容自适应在线训练方法。
[0190]
在分块内容自适应在线训练方法中,输入图像可以被分成块,并且一个或多个块可以用于通过优化率失真性能来将预训练的nic框架中的一个或多个参数更新为一个或多个替换参数。指示一个或多个替换参数或一个或多个替换参数的子集的神经网络更新信息可以与编码的一个或多个块一起被编码到比特流中。在解码器侧,视频解码器可以对编码的一个或多个块进行解码,并且可以通过使用一个或多个替换参数或一个或多个替换参数的子集来实现更好的压缩性能。分块内容自适应在线训练方法可以用作预处理步骤(例如,预编码步骤),用于提高预训练的e2enic压缩方法的压缩性能。
[0191]
为了区分基于该组训练块的训练过程和基于要压缩(例如,编码)和/或传输的一个或多个块的内容自适应在线训练过程,由该组训练块训练的nic框架(900)、视频编码器和视频解码器分别被称为预训练nic框架(900)、预训练视频编码器和预训练视频解码器。预训练nic框架(900)、预训练视频编码器或预训练视频解码器中的参数分别被称为nic预训练参数、编码器预训练参数和解码器预训练参数。在一个示例中,nic预训练参数包括编码器预训练参数和解码器预训练参数。在一个示例中,编码器预训练参数和解码器预训练参数不重叠,其中,编码器预训练参数都不包括在解码器预训练参数中。例如,(1700)中的编码器预训练参数(例如,主编码器网络(911)中的预训练参数)和(1800)中的解码器预训练参数(例如,主解码器网络(915)中的预训练参数)不重叠。在一个示例中,编码器预训练参数和解码器预训练参数重叠,其中,编码器预训练参数中的至少一个包括在解码器预训练参数中。例如,(1600a)中的编码器预训练参数(例如,上下文模型nn(916)中的预训练参数)和(1600b)中的解码器预训练参数(例如,上下文模型nn(916)中的预训练参数)重叠。可以基于该组训练块中的块和/或图像来获得nic预训练参数。
[0192]
内容自适应在线培训过程可被称为微调过程,如下所述。可以基于要编码和/或传输的一个或多个块进一步训练(例如,微调)预训练nic框架(900)中的nic预训练参数中的一个或多个预训练参数,其中,一个或多个块可以不同于该组训练块。nic预训练参数中使用的一个或多个预训练参数可以通过基于一个或多个块优化共同r-d损耗l来微调。已经由一个或多个块微调的一个或多个预训练参数被称为一个或多个替换参数或一个或多个微调参数。在一个实施例中,在nic预训练参数中的一个或多个预训练参数已经被一个或多个替换参数微调(例如,替换)之后,神经网络更新信息被编码到比特流中,以指示一个或多个替换参数或一个或多个替换参数的子集。在一个示例中,更新(或微调)nic框架(900),其中,一个或多个预训练参数分别被一个或多个替换参数替换。
[0193]
在第一种情况下,一个或多个预训练参数包括一个或多个预训练参数的第一子集和一个或多个预训练参数的第二子集。一个或多个替换参数包括一个或多个替换参数的第一子集和一个或多个替换参数的第二子集。
[0194]
一个或多个预训练参数的第一子集在预训练视频编码器中使用,并且例如在训练过程中被一个或多个替换参数的第一子集替换。因此,通过训练过程,预训练视频编码器被更新为更新的视频编码器。神经网络更新信息可以指示一个或多个替换参数的第二子集,其将替换一个或多个替换参数的第二子集。可以使用更新的视频编码器对一个或多个块进行编码,并在具有神经网络更新信息的比特流中传输。
[0195]
在解码器侧,一个或多个预训练参数的第二子集用于预训练视频解码器中。在一
个实施例中,预训练视频解码器接收并解码神经网络更新信息,以确定一个或多个替换参数的第二子集。当预训练视频解码器中的一个或多个预训练参数的第二子集被一个或多个替换参数的第二子集替换时,预训练视频解码器被更新为更新的视频解码器。可以使用更新的视频解码器来解码一个或多个编码块。
[0196]
图16a-16b示出了第一种情况的示例。例如,一个或多个预训练参数包括预训练上下文模型nn(916)中的n1预训练参数和预训练主解码器网络(915)中的n2预训练参数。因此,一个或多个预训练参数的第一子集包括n1预训练参数,并且一个或多个预训练参数的第二子集与一个或多个预训练参数相同。因此,预训练上下文模型nn(916)中的n1预训练参数可以被n1对应的替换参数替换,使得预训练视频编码器(1600a)可以被更新为更新的视频编码器(1600a)。预训练上下文模型nn(916)也被更新为更新的上下文模型nn(916)。在解码器侧,n1预训练参数可以由n1对应替换参数替换,n2预训练参数可以由n2对应替换参数替换,将预训练上下文模型nn(916)更新为更新上下文模型nn(916),并将预训练主解码器网络(915)更新为更新主解码器网络(915)。因此,预训练视频解码器(1600b)可以被更新为更新的视频解码器(1600b)。
[0197]
在第二种情况下,在编码器侧的预训练视频编码器中不使用一个或多个预训练参数。相反,在解码器侧的预训练视频解码器中使用一个或多个预训练参数。因此,不更新预训练视频编码器,并且在训练过程之后继续是预训练视频编码器。在一个实施例中,神经网络更新信息指示一个或多个替换参数。可以使用预训练视频编码器对一个或多个块进行编码,并在具有神经网络更新信息的比特流中传输。
[0198]
在解码器侧,预训练视频解码器可以接收和解码神经网络更新信息,以确定一个或多个替换参数。当预训练视频解码器中的一个或多个预训练参数被一个或多个替换参数替换时,预训练视频解码器被更新为更新的视频解码器。可以使用更新的视频解码器来解码一个或多个编码块。
[0199]
图16a-16b示出了第二种情况的示例。例如,一个或多个预训练参数包括预训练主解码器网络中的n2预训练参数(915)。因此,在编码器侧的预训练视频编码器(例如,预训练视频编码器(1600a))中没有使用一个或多个预训练参数。因此,在训练过程之后,预训练视频编码器(1600a)继续是预训练视频编码器。在解码器侧,n2预训练参数可以被n2对应的替换参数替换,这将预训练主解码器网络(915)更新为更新的主解码器网络(915)。因此,预训练视频解码器(1600b)可以被更新为更新的视频解码器(1600b)。
[0200]
在第三种情况下,一个或多个预训练参数在预训练视频编码器中使用,并且例如在训练过程中被一个或多个替换参数替换。因此,通过训练过程,预训练视频编码器被更新为更新的视频编码器。可以使用更新的视频编码器对一个或多个块进行编码,并在比特流中传输。比特流中没有编码神经网络更新信息。在解码器端,预训练视频解码器没有更新,仍然是预训练视频解码器。可以使用预训练视频解码器来解码一个或多个编码块。
[0201]
图16a-16b示出了第三种情况的示例。例如,一个或多个预训练参数在预训练主编码器网络中(911)。因此,预训练主编码器网络(911)中的一个或多个预训练参数可以被一个或多个替换参数替换,使得预训练视频编码器(1600a)可以被更新为更新的视频编码器(1600a)。预训练主编码器网络(911)也被更新为更新的主编码器网络(911)。在解码器侧,不更新预训练视频解码器(1600b)。
[0202]
在例如在第一、第二和第三场景中描述的各种示例中,视频解码可以由具有不同能力的预训练解码器来执行,包括具有和不具有更新预训练参数的能力的解码器。
[0203]
在一个示例中,与用预训练视频编码器和预训练视频解码器对一个或多个块进行编码相比,通过用更新的视频编码器和/或更新的视频解码器对一个或多个块进行编码,可以提高压缩性能。因此,内容自适应的在线训练方法可以用于使预训练nic框架(例如,预训练nic框架(900))适应目标块内容(例如,要传输的一个或多个块),从而微调预训练nic框架。因此,可以更新编码器侧的视频编码器和/或解码器侧的视频解码器。
[0204]
内容自适应在线训练方法可以用作预处理步骤(例如,预编码步骤),用于提高预训练e2e nic压缩方法的压缩性能。
[0205]
在一个实施例中,一个或多个块包括单个输入块,并且利用该单个输入块执行微调过程。基于单个输入块训练和更新(例如,微调)nic框架(900)。编码器侧的更新的视频编码器和/或解码器侧的更新的视频解码器可以用于编码单个输入块和可选的其他输入块。神经网络更新信息可以与编码的单个输入块一起被编码到比特流中。
[0206]
在一个实施例中,一个或多个块包括多个输入块,并且利用多个输入块执行微调过程。基于多个输入块被训练和更新(例如,微调)nic框架(900)。编码器侧的更新的视频编码器和/或解码器侧的更新的解码器可以用于编码多个输入块和可选的其他输入块。神经网络更新信息可以与编码的多个输入块一起被编码到比特流中。
[0207]
速率损耗r可以随着比特流中神经网络更新信息的信令而增加。当一个或多个块包括单个输入块时,针对每个编码块信令神经网络更新信息,并且速率损耗r的第一次增加用于指示由于每个块信令神经网络更新信息而导致的速率损耗r的增加。当一个或多个块包括多个输入块时,神经网络更新信息信令给多个输入图像并由多个输入块共享,并且速率损耗r的第二次增加用于指示由于每个块信令神经网络更新信息而导致的速率损耗r的增加。因为神经网络更新信息由多个输入块共享,所以速率损耗r的第二次增加可以小于速率损耗r的第一次增加。因此,在一些示例中,使用多个输入块来微调nic框架可能是有利的。
[0208]
在一个实施例中,要更新的一个或多个预训练参数在预训练nic框架(900)的一个组件中。因此,基于一个或多个替换参数来更新预训练nic框架(900)的一个组件,并且不更新预训练nic框架(900)的其他组件。
[0209]
一个组件可以是预训练上下文模型nn(916)、预训练熵参数nn(917)、预训练主编码器网络(911)、预训练主解码器网络(915)、预训练超级编码器(921)或预训练超级解码器(925)。根据更新预训练nic框架(900)中的哪个组件,可以更新预训练视频编码器和/或预训练视频解码器。
[0210]
在一个示例中,要更新的一个或多个预训练参数在预训练上下文模型nn(916)中,因此更新预训练上下文模型nn(916),而不更新剩余的组件(911)、(915)、(921)、(917)和(925)。在一个示例中,编码器侧的预训练视频编码器和解码器侧的预训练视频解码器包括预训练上下文模型nn(916),因此更新预训练视频编码器和预训练视频解码器。
[0211]
在一个示例中,要更新的一个或多个预训练参数在预训练超级解码器(925)中,因此更新预训练超级解码器(925),而不更新其余组件(911)、(915)、(916)、(917)和(921)。因此,不更新预训练视频编码器,而更新预训练视频解码器。
[0212]
在一个实施例中,要更新的一个或多个预训练参数在预训练nic框架(900)的多个组件中。因此,基于一个或多个替换参数来更新预训练nic框架(900)的多个组件。在一个示例中,预训练nic框架(900)的多个组件包括配置有神经网络(例如,dnn、cnn)的所有组件。在一个示例中,预训练nic框架(900)的多个组件包括基于cnn的组件:预训练主编码器网络(911)、预训练主解码器网络(915)、预训练上下文模型nn(916)、预训练熵参数nn(917)、预训练超级编码器(921)和预训练超级解码器(925)。
[0213]
如上所述,在一个示例中,要更新的一个或多个预训练参数在预训练nic框架的预训练视频编码器中(900)。在一个示例中,要更新的一个或多个预训练参数在nic框架(900)的预训练视频解码器中。在一个示例中,要更新的一个或多个预训练参数在预训练nic框架(900)的预训练视频编码器和预训练视频解码器中。
[0214]
nic框架(900)可以基于神经网络,例如,nic框架(900)中的一个或多个组件可以包括神经网络,例如,cnn、dnn等。如上所述,神经网络可以由不同类型的参数指定,例如,权重、偏置等。nic框架(900)中的每个基于神经网络的组件(例如,上下文模型nn(916)、熵参数nn(917)、主编码器网络(911)、主解码器网络(915)、超级编码器(921)或超级解码器(925))可以配置有合适的参数,例如,相应的权重、偏置或权重和偏置的组合。当使用cnn时,权重可以包括卷积核中的元素。一种或多种类型的参数可用于指定神经网络。在一个实施例中,要更新的一个或多个预训练参数是偏置项,并且只有偏置项被一个或多个替换参数替换。在一个实施例中,要更新的一个或多个预训练参数是权重,并且只有权重被一个或多个替换参数替换。在一个实施例中,要更新的一个或多个预训练参数包括权重和偏置项,并且包括权重和偏置项的所有预训练参数被一个或多个替换参数替换。在一个实施例中,可以使用其他参数来指定神经网络,并且可以微调其他参数。
[0215]
微调过程可以包括多个阶段(例如,迭代),其中,在迭代微调过程中更新一个或多个预训练参数。当训练损耗变平或即将变平时,微调过程可以停止。在一个示例中,当训练损耗(例如,r-d损耗l)低于第一阈值时,微调过程停止。在一个示例中,当两个连续训练损耗之间的差低于第二阈值时,微调过程停止。
[0216]
两个超参数(例如,步长和最大步数)可以与损耗函数(例如,r-d损耗l)一起用于微调过程。最大迭代次数可以用作终止微调过程的最大迭代次数的阈值。在一个示例中,当迭代次数达到最大迭代次数时,微调过程停止。
[0217]
步长可以指示在线训练过程(例如,在线微调过程)的学习速率。步长可用于在微调过程中执行的梯度下降算法或反向传播计算。可以使用任何合适的方法来确定步长。
[0218]
图像中每个块的步长可以不同。在一个实施例中,可以为图像分配不同的步长,以便实现更好的压缩结果(例如,更好的r-d损耗l)。
[0219]
在一些示例中,基于nic框架(例如,nic框架(900))的视频编码器和视频解码器可以直接编码和解码图像。因此,分块内容自适应在线训练方法可以适于通过直接使用一个或多个图像来更新nic框架中的某些参数,从而更新视频编码器和/或视频解码器中的某些参数。不同的图像可以具有不同的步长,以实现优化的压缩结果。
[0220]
在一个实施例中,不同的步长用于具有不同类型内容的块,以获得最佳结果。不同的类型可以指不同的差异。在一个示例中,基于用于更新nic框架的块的差异来确定步长。例如,具有高差异的块的步长大于具有低差异的块的步长,其中,高差异大于低差异。
[0221]
在一个实施例中,基于块或图像的特征,例如,块的rgb差异,来选择步长。在一个实施例中,基于块的rd性能(例如,r-d损耗l)来选择步长。可以基于不同的步长生成多组替换参数,并且可以选择具有更好压缩性能(例如,更小的r-d损耗)的组。
[0222]
在一个实施例中,第一步长可以用于运行一定数量(例如,100)的迭代。然后,第二步长(例如,第一步长加上或减去大小增量)可以用于运行一定数量的迭代。可以比较第一步长和第二步长的结果,以确定要使用的步长。可以测试两个以上的步长,来确定最佳步长。
[0223]
在微调过程中,步长可以变化。步长可在微调过程开始时具有初始值,并且可在微调过程的稍后阶段(例如,在一定次数的迭代之后)减小初始值(例如,减半),以实现更精细的调谐。在迭代在线训练期间,步长或学习速率可以由调度器来改变。调度器可以包括用于调整步长的参数调整方法。调度器可以确定步长的值,使得步长可以在多个间隔中增加、减小或保持恒定。在一个示例中,学习速率在每个步骤中由调度器改变。单个调度器或多个不同的调度器可以用于不同的块。因此,可以基于多个调度器生成多组替换参数,并且可以选择多组替换参数中具有更好压缩性能(例如,更小r-d损耗)的一组。
[0224]
在一个实施例中,为不同的块分配多个学习速率调度,以便实现更好的压缩结果。在一个实施例中,图像中的所有块共享相同的学习速率表。在一个实施例中,学习速率表的选择基于块的特性,例如,块的rgb差异。在一个实施例中,学习速率表的选择基于块的rd性能。
[0225]
在一个实施例中,不同的块可以用于更新nic框架中的不同组件(例如,上下文模型nn(916)或超解码器(925))中的不同参数。例如,第一块用于更新上下文模型nn中的参数(916),第二块用于更新超解码器中的参数(925)。
[0226]
在一个实施例中,不同的块可以用于更新nic框架中不同类型的参数(例如,偏置或权重)。例如,第一块用于更新nic框架中的一个或多个神经网络中的至少一个偏置,第二块用于更新nic框架中的一个或多个神经网络中的至少一个权重。
[0227]
在一个实施例中,图像中的多个块(例如,所有块)更新相同的一个或多个参数。
[0228]
在一个实施例中,基于块的特性,例如,块的rgb差异,选择要更新的一个或多个参数。在一个实施例中,基于块的rd性能来选择要更新的一个或多个参数。
[0229]
在微调过程结束时,可以为相应的一个或多个替换参数计算一个或多个更新的参数。在一个实施例中,计算一个或多个更新的参数,作为一个或多个替换参数和相应的一个或多个预训练参数之间的差。在一个实施例中,一个或多个更新的参数分别是一个或多个替换参数。
[0230]
在一个实施例中,可以从一个或多个替换参数中生成一个或多个更新的参数,例如,使用特定的线性或非线性变换,并且一个或多个更新的参数是基于一个或多个替换参数生成的代表性参数。一个或多个替换参数被转换成一个或多个更新的参数,以进行更好的压缩。
[0231]
一个或多个更新参数的第一子集对应于一个或多个替换参数的第一子集,一个或多个更新参数的第二子集对应于一个或多个替换参数的第二子集。
[0232]
在一个实施例中,不同的块在一个或多个更新的参数和一个或多个替换参数之间具有不同的关系。例如,对于第一块,计算一个或多个更新的参数,作为一个或多个替换参
数和相应的一个或多个预训练参数之间的差。对于第二块,一个或多个更新的参数分别是一个或多个替换参数。
[0233]
在一个实施例中,图像中的多个块(例如,所有块)在一个或多个更新参数和一个或多个替换参数之间具有相同的关系。
[0234]
在一个实施例中,基于块的特性,例如,块的rgb差异,选择一个或多个更新参数和一个或多个替换参数之间的关系。在一个实施例中,基于块的rd性能来选择一个或多个更新参数和一个或多个替换参数之间的关系。
[0235]
在一个示例中,可以压缩一个或多个更新的参数,例如,使用lzma2、bzip2算法等,该lzma2是lempel ziv markov链算法(lzma)的变体。在一个示例中,对于一个或多个更新的参数,省略压缩。在一些实施例中,一个或多个更新参数或一个或多个更新参数的第二子集可以作为神经网络更新信息被编码到比特流中,其中,神经网络更新信息指示一个或多个替换参数或一个或多个替换参数的第二子集。
[0236]
在一个实施例中,一个或多个更新参数的压缩方法对于不同的块是不同的。例如,对于第一块,lzma2用于压缩一个或多个更新的参数,对于第二块,bzip2用于压缩一个或多个更新的参数。在一个实施例中,使用相同的压缩方法来压缩图像中多个块(例如,所有块)的一个或多个更新参数。在一个实施例中,基于块的特性,例如,块的rgb差异,选择压缩方法。在一个实施例中,基于块的rd性能来选择压缩方法。
[0237]
在微调过程之后,在一些示例中,可以基于(i)一个或多个替换参数的第一子集或(ii)一个或多个替换参数来更新或微调编码器侧的预训练视频编码器。可以使用更新的视频编码器将输入图像(例如,用于微调过程的一个或多个块之一)编码到比特流中。因此,比特流包括编码块和神经网络更新信息。
[0238]
如果适用,在一个示例中,神经网络更新信息由预训练视频解码器解码(例如,解压缩),以获得一个或多个更新的参数或一个或多个更新的参数的第二子集。在一个示例中,可以基于一个或多个更新的参数和上述一个或多个替换参数之间的关系来获得一个或多个替换参数或一个或多个替换参数的第二子集。如上所述,可以微调预训练视频解码器,并且可以使用解码的更新视频来解码该编码块。
[0239]
nic框架可以包括任何类型的神经网络,并且使用任何基于神经网络的图像压缩方法,例如,上下文超优编码器-解码器框架(例如,图(9b)中所示的nic框架)、尺度超优编码器-解码器框架、高斯混合似然框架和高斯混合似然框架的变体、基于rnn的递归压缩方法和基于rnn的递归压缩方法的变体等。
[0240]
与相关的e2e图像压缩方法相比,本公开的内容自适应在线训练方法和设备具有以下优点。利用自适应在线训练机制来提高nic编码效率。使用灵活通用的框架可以适应各种类型的预训练框架和质量度量。例如,各种类型的预训练框架中的某些预训练参数可以通过使用对要编码和传输的块的在线训练来替换。
[0241]
图19示出了概述根据本公开实施例的过程(1900)的流程图。过程(1900)可用于编码块,例如,原始图像中的块或残差图像中的块。在各种实施例中,过程(1900)由处理电路执行,例如,终端装置(310)、(320)、(330)和(340)中的处理电路、执行视频编码器(1600a)的功能的处理电路、执行视频编码器(1700)的功能的处理电路。在一个示例中,处理电路执行(i)视频编码器(403)、(603)和(703)之一以及(ii)视频编码器(1600a)和视频编码器
(1700)之一的功能的组合。在一些实施例中,过程(1900)在软件指令中实现,因此当处理电路执行软件指令时,处理电路执行过程(1900)。该过程开始于(s1901)。在一个示例中,nic框架基于神经网络。在一个示例中,nic框架是参考图9b描述的nic框架(900)。nic框架可以基于cnn,例如,参考图10-15所描述的。如上所述,视频编码器(例如,(1600a)或(1700))和相应的视频解码器(例如,(1600b)或(1800))可以在nic框架中包括多个组件。预训练基于神经网络的nic框架,从而预训练视频编码器和视频解码器。过程(1900)进行到(s1910)。
[0242]
在(s1910),基于一个或多个块(或输入块)在nic框架上执行微调过程。输入块可以是具有任何合适大小的任何合适的块。在一些示例中,输入块包括空间域中的原始图像、自然图像、计算机生成的图像等中的块。
[0243]
在一些示例中,输入块包括例如由残差计算器(例如,残差计算器(723))计算的空间域中的残差数据。各种设备中的组件可以被适当地组合,以例如参考图7和图9,实现(s1910)来自残差计算器的残差块可以被馈送到nic框架中的主编码器网络(911)中。
[0244]
如上所述,nic框架(例如,预训练nic框架)中的一个或多个神经网络(例如,一个或多个预训练神经网络)中的一个或多个参数(例如,一个或多个预训练参数)可以分别被更新为一个或多个替换参数。在一个实施例中,在(s1910)中描述的训练过程期间,例如,在每个步骤中,更新一个或多个神经网络中的一个或多个参数。
[0245]
在一个实施例中,视频编码器(例如,预训练视频编码器)中的至少一个神经网络配置有一个或多个预训练参数的第一子集,因此视频编码器中的至少一个神经网络可以基于一个或多个替换参数的相应第一子集来更新。在一个示例中,一个或多个替换参数的第一子集包括全部一个或多个替换参数。在一个示例中,当一个或多个预训练参数的第一子集分别被一个或多个替换参数的第一子集替换时,更新视频编码器中的至少一个神经网络。在一个示例中,视频编码器中的至少一个神经网络在微调过程中迭代更新。在一个示例中,一个或多个预训练参数都不包括在视频编码器中,因此视频编码器不更新并且保持预训练视频编码器。
[0246]
在(s1920),可以使用具有至少一个更新的神经网络的视频编码器来编码一个或多个块中的一个,其中,视频编码器配置有一个或多个替换参数的第一子集。在一个示例中,在更新视频编码器中的至少一个神经网络之后,编码一个或多个块中的一个。
[0247]
可以适当地修改步骤(s1920)。例如,当一个或多个替换参数都不包括在视频编码器中的至少一个神经网络中时,不更新视频编码器,因此可以使用预训练视频编码器(例如,包括至少一个预训练神经网络的视频编码器)来编码一个或多个块中的一个。
[0248]
在(s1930),指示一个或多个替换参数的第二子集的神经网络更新信息可以被编码到比特流中。在一个示例中,一个或多个替换参数的第二子集将用于更新解码器侧的视频解码器中的至少一个神经网络。可以省略步骤(s1930),并且例如,如果一个或多个替换参数的第二子集不包括参数并且在比特流中没有信令神经网络更新信息,则没有更新视频解码器中的神经网络。
[0249]
在(s1940),可以传输包括一个或多个块中的编码块和神经网络更新信息的比特流。可以适当地修改步骤(s1940)。例如,如果省略步骤(s1930),则比特流不包括神经网络更新信息。过程(1900)进行到(s1999),并且终止。
[0250]
过程(1900)可以适合于各种情况,并且可以相应地调整过程(1900)中的步骤。可
以修改、省略、重复和/或组合过程(1900)中的一个或多个步骤。可以使用任何合适的顺序来实现该过程(1900)。可以添加额外的步骤。例如,除了对一个或多个块中的一个进行编码之外,还在(s1920)中对一个或多个块进行编码,并在(s1940)中传输。
[0251]
在过程(1900)的一些示例中,一个或多个块中的一个被更新的视频编码器编码并在比特流中传输。因为微调过程基于一个或多个块,所以微调过程基于要编码的上下文,因此是基于上下文的。
[0252]
在一些示例中,神经网络更新信息还指示一个或多个预训练参数的第二子集(或一个或多个替换参数的对应第二子集)是什么参数,使得可以更新视频解码器中的对应预训练参数。神经网络更新信息可以指示一个或多个预训练参数的第二子集的组件信息(例如,(915))、层信息(例如,第四层deconv:5x5 c3 s2)、信道信息(例如,第二信道)等。因此,参考图11,一个或多个替换参数的第二子集包括主解码器网络中的第二信道deconv:5x5 c3 s2的卷积核(915)。因此,更新预训练主解码器网络(915)中的第二信道deconv:5x5 c3 s2的卷积核。在一些示例中,一个或多个预训练参数的第二子集的分量信息(例如(915))、层信息(例如,第四层deconv:5x5 c3 s2)、信道信息(例如,第二信道)等预先确定并存储在预训练视频解码器中,因此不信令。
[0253]
图20示出了概述根据本公开实施例的过程(2000)的流程图。过程(2000)可以用于编码块的重构。在各种实施例中,过程(2000)由处理电路执行,例如,终端装置(310)、(320)、(330)和(340)中的处理电路、执行视频解码器(1600b)的功能的处理电路、执行视频解码器(1800)的功能的处理电路。在一个示例中,处理电路执行(i)视频解码器(410)、视频解码器(510)和视频解码器(810)中的一个以及(ii)视频解码器(1600b)或视频解码器(1800)中的一个的功能组合。在一些实施例中,过程(2000)在软件指令中实现,因此当处理电路执行软件指令时,处理电路执行过程(2000)。该过程开始于(s2001)。在一个示例中,nic框架基于神经网络。在一个示例中,nic框架是参考图9b描述的nic框架(900)。nic框架可以基于cnn,例如参考图10-15所描述的。如上所述,视频解码器(例如,(1600b)或(1800))可以在nic框架中包括多个组件。可以对基于神经网络的nic框架进行预训练。可以用预训练参数对视频解码器进行预训练。过程(2000)进行到(s2010)。
[0254]
在(s2010),可以解码编码比特流中的第一神经网络更新信息。第一神经网络更新信息可以用于视频解码器中的第一神经网络。第一神经网络可以配置有第一组预训练参数。第一神经网络更新信息可以对应于要重构的图像中的第一块,并且指示与第一组预训练参数中的第一预训练参数对应的第一替换参数。
[0255]
在一个示例中,第一预训练参数是预训练偏置项。
[0256]
在一个示例中,第一预训练参数是预训练权重系数。
[0257]
在一个实施例中,视频解码器包括多个神经网络。第一神经网络更新信息可以指示多个神经网络中的一个或多个剩余神经网络的更新信息。例如,第一神经网络更新信息还指示多个神经网络中的一个或多个剩余神经网络的一个或多个替换参数。一个或多个替换参数对应于一个或多个剩余神经网络的一个或多个相应的预训练参数。在一个示例中,第一预训练参数和一个或多个预训练参数中的每一个都是相应的预训练偏置项。在一个示例中,第一预训练参数和一个或多个预训练参数中的每一个都是相应的预训练权重系数。在一个示例中,第一预训练参数和一个或多个预训练参数包括多个神经网络中的一个或多
个预训练偏置项和一个或多个预训练权重系数。
[0258]
在一个示例中,第一神经网络更新信息指示多个神经网络的子集的更新信息,并且不更新多个神经网络的剩余子集。
[0259]
在一个示例中,视频解码器是图18中所示的视频解码器(1800)。第一神经网络是主解码器网络(915)。
[0260]
在一个示例中,视频解码器是图16b中所示的视频解码器(1600b)。视频解码器中的多个神经网络包括主解码器网络(915)、上下文模型nn(916)、熵参数nn(917)和超解码器(925)。第一神经网络是主解码器网络(915)、上下文模型nn(916)、熵参数nn(917)和超解码器(925)中的一个,例如,上下文模型nn(916)。在一个示例中,第一神经网络更新信息还包括视频解码器中的一个或多个剩余神经网络(例如,主解码器网络(915)、熵参数nn(917)和/或超解码器(925))的一个或多个替换参数。
[0261]
在(s2020),可以基于第一神经网络更新信息来确定第一替换参数。在一个实施例中,从第一神经网络更新信息中获得更新的参数。在一个示例中,可以通过解压缩(例如,lzma2或bzip2算法)从第一神经网络更新信息中获得更新的参数。
[0262]
在一个示例中,第一神经网络更新信息指示更新的参数是第一替换参数和第一预训练参数之间的差。可以根据更新参数和第一预训练参数的总和来计算第一替换参数。
[0263]
在一个实施例中,第一替换参数被确定为更新的参数。
[0264]
在一个实施例中,更新的参数是基于编码器侧的第一替换参数生成的代表性参数(例如,使用线性或非线性变换),并且基于代表性参数获得第一替换参数。
[0265]
在(s2030),可以基于第一替换参数更新(或微调)视频解码器中的第一神经网络,例如,通过用第一神经网络中的第一替换参数替换第一预训练参数。如果视频解码器包含多个神经网络,并且第一神经网络更新信息指示多个神经网络的更新信息(例如,额外替换参数),则可更新多个神经网络。例如,第一神经网络更新信息还包括用于视频解码器中的一个或多个剩余神经网络的一个或多个替换参数,并且可以基于一个或多个替换参数来更新一个或多个剩余神经网络。
[0266]
在(s2040),比特流中的编码的第一块可以由例如基于更新的第一神经网络更新的视频解码器解码。在(s2040)生成的输出块可以是具有任何合适大小的任何合适的块。在一些示例中,输出块是空间域中的重构图像中的重构块。
[0267]
在一些示例中,视频解码器的输出块包括空间域中的残差数据,并且因此可使用进一步处理来基于输出块生成重构块。例如,重构模块(874)被配置为在空间域中组合残差数据和预测结果(由帧间或帧内预测模块输出),以形成可以是重构图像的一部分的重构块。可以执行额外的适当操作,例如,去块操作等,以提高视觉质量。各种设备中的组件可以适当地组合,以例如参考图8和9,实现(s2040)来自视频解码器中的主解码器网络(915)的残差数据和相应的预测结果被馈送到重构模块(874)中,以生成重构图像。
[0268]
在一个示例中,比特流还包括用于确定解码编码块的上下文模型的一个或多个编码比特。视频解码器可以包括主解码器网络(例如,(911))、上下文模型网络(例如,(916))、熵参数网络(例如,(917))和超解码器网络(例如,(925))。神经网络是主解码器网络、上下文模型网络、熵参数nn和超解码器网络中的一个。可以使用超解码器网络来解码一个或多个编码比特。可以使用上下文模型网络和熵参数网络,基于上下文模型网络可用的编码块
的解码比特和量化潜在比特,来确定熵模型(例如,上下文模型)。可以使用主解码器网络和熵模型对编码块进行解码。
[0269]
过程(2000)进行到(s2099),并终止。
[0270]
过程(2000)可以适合于各种情况,并且可以相应地调整过程(2000)中的步骤。可以修改、省略、重复和/或组合过程(2000)中的一个或多个步骤。可以使用任何合适的顺序来实现该过程(2000)。可以添加额外的步骤。
[0271]
在一个示例中,在(s2040),基于第一块的更新的第一神经网络来解码编码比特流中的另一块。
[0272]
在一个示例中,在(s2010),解码视频解码器中的第二神经网络的编码比特流中的第二神经网络更新信息。第二神经网络配置有第二组预训练参数。第二神经网络更新信息对应于要重构的图像中的第二块,并且指示对应于第二组预训练参数中的第二预训练参数的第二替换参数。第二神经网络(例如,上下文模型nn(916))可以不同于第一神经网络(例如,主解码器网络(915))。在(s2030),可以基于第二替换参数更新视频解码器中的第二神经网络。在(s2040),可以基于第二块的更新的第二神经网络来解码第二块。在一个示例中,第一预训练参数是预训练权重系数和预训练偏置项中的一个。在一个示例中,第二预训练参数是预训练权重系数和预训练偏置项中的另一个。
[0273]
本公开中的实施例可以单独使用或者以任何顺序组合使用。此外,方法(或实施例)、编码器和解码器中的每一个可以由处理电路(例如,一个或多个处理器或一个或多个集成电路)来实现。在一个示例中,一个或多个处理器执行存储在非暂时性计算机可读介质中的程序。
[0274]
本公开没有对用于编码器(例如,基于神经网络的编码器)、解码器(例如,基于神经网络的解码器)的方法施加任何限制。编码器、解码器等中使用的神经网络可以是任何合适类型的神经网络,例如,dnn、cnn等。
[0275]
因此,本公开的内容自适应在线训练方法可以适应不同类型的nic框架,例如,不同类型的编码dnn、解码dnn、编码cnn、解码cnn等。
[0276]
上述技术可以被实现为使用计算机可读指令的计算机软件,并且物理地存储在一个或多个计算机可读介质中。例如,图21示出了适于实现所公开主题的某些实施例的计算机系统(2100)。
[0277]
计算机软件可以使用任何合适的机器代码或计算机语言来编码,其可以经受汇编、编译、链接或类似机制来创建包括指令的代码,这些指令可以由一个或多个计算机中央处理单元(cpu)、图形处理单元(gpu)等直接执行,或者通过解释、微代码执行等来执行。
[0278]
指令可以在各种类型的计算机或其组件上执行,包括例如个人计算机、平板计算机、服务器、智能手机、游戏装置、物联网装置等。
[0279]
图21中所示的计算机系统(2100)的组件本质上是示例性的,并且不旨在对实现本公开的实施例的计算机软件的使用范围或功能提出任何限制。组件的配置也不应被解释为对计算机系统(2100)的示例性实施例中所示的任何一个组件或组件组合有任何依赖性或要求。
[0280]
计算机系统(2100)可以包括某些人机接口输入装置。这种人机接口输入装置可以响应一个或多个人类用户通过例如触觉输入(例如:击键、滑动、数据手套移动)、音频输入
(例如:语音、鼓掌)、视觉输入(例如:手势)、嗅觉输入(未示出)进行的输入。人机接口装置还可以用于捕捉不一定与人的有意识输入直接相关的某些媒体,例如,音频(例如:语音、音乐、环境声音)、图像(例如:扫描图像、从静止图像相机获得的照片图像)、视频(例如,二维视频、包括立体视频的三维视频)。
[0281]
输入人机接口装置可以包括以下一个或多个(每个仅描绘了一个):键盘(2101)、鼠标(2102)、轨迹板(2103)、触摸屏(2110)、数据手套(未示出)、操纵杆(2105)、麦克风(2106)、扫描仪(2107)、相机(2108)。
[0282]
计算机系统(2100)还可以包括某些人机接口输出装置。这种人机接口输出装置可以通过例如触觉输出、声音、光和气味/味道来刺激一个或多个人类用户的感觉。这种人机接口输出装置可以包括触觉输出装置(例如,通过触摸屏(2110)、数据手套(未示出)或操纵杆(2105)的触觉反馈,但是也可以有不用作输入装置的触觉反馈装置)、音频输出装置(例如:扬声器(2109)、耳机(未示出))、视觉输出装置(例如,屏幕(2110),包括crt屏幕、lcd屏幕、等离子屏幕、oled屏幕,每个都具有或不具有触摸屏输入能力,每个都具有或不具有触觉反馈能力——其中一些能够通过诸如立体输出之类的方式输出二维视觉输出或多于三维的输出;虚拟现实眼镜(未示出)、全息显示器和烟雾箱(未示出))以及打印机(未示出)。
[0283]
计算机系统(2100)还可以包括人类可访问的存储装置及其相关联的介质,例如,包括具有cd/dvd或类似介质(2121)的cd/dvd rom/rw(2120)的光学介质、拇指驱动器(2122)、可移动硬盘驱动器或固态驱动器(2123)、诸如磁带和软盘(未示出)之类的传统磁介质、诸如安全加密狗(未示出)之类的专用rom/asic/pld装置等。
[0284]
本领域技术人员还应该理解,结合当前公开的主题使用的术语“计算机可读介质”不包括传输介质、载波或其他瞬时信号。
[0285]
计算机系统(2100)还可以包括到一个或多个通信网络(2155)的接口(2154)。网络例如可以是无线的、有线的、光学的。网络还可以是局域的、广域的、大都市的、车辆的和工业的、实时的、延迟容忍的等。网络的示例包括诸如以太网、无线lan之类的局域网、包括gsm、3g、4g、5g、lte等的蜂窝网络、包括有线电视、卫星电视和地面广播电视的电视有线或无线广域数字网络、包括canbus的车辆和工业网络等。某些网络通常需要连接到某些通用数据端口或外围总线(2149)(例如,计算机系统(2100)的usb端口)的外部网络接口适配器;其他的通常通过连接到如下所述的系统总线而集成到计算机系统(2100)的核心中(例如,pc计算机系统中的以太网接口或智能电话计算机系统中的蜂窝网络接口)。使用这些网络中的任何一个,计算机系统(2100)可以与其他实体通信。这种通信可以是单向的、只接收的(例如,广播电视)、单向的、只发送的(例如,到某些canbus装置的canbus),或者是双向的,例如,到使用局域或广域数字网络的其他计算机系统。如上所述,某些协议和协议栈可以用在这些网络和网络接口的每一个上。
[0286]
前述人机接口装置、人类可访问的存储装置和网络接口可以附接到计算机系统(2100)的核心(2140)。
[0287]
核心(2140)可以包括一个或多个中央处理单元(cpu)(2141)、图形处理单元(gpu)(2142)、现场可编程门区域(fpga)(2143)形式的专用可编程处理单元、用于特定任务的硬件加速器(2144)、图形适配器(2150)等。这些装置连同只读存储器(rom)(2145)、随机存取存储器(2146)、诸如内部非用户可访问硬盘驱动器、ssd之类的内部大容量存储器(2147)可
以通过系统总线(2148)连接。在一些计算机系统中,系统总线(2148)可以以一个或多个物理插头的形式访问,以允许额外cpu、gpu等的扩展。外围装置可以直接或者通过外围总线(2149)连接到核心的系统总线(2148)。在一个示例中,屏幕(2110)可以连接到图形适配器(2150)。外围总线的架构包括pci、usb等。
[0288]
cpu(2141)、gpu(2142)、fpga(2143)和加速器(2144)可以执行某些指令,这些指令组合起来可以构成上述计算机代码。该计算机代码可以存储在rom(2145)或ram(2146)中。过渡数据也可以存储在ram(2146)中,而永久数据可以存储在例如内部大容量存储器(2147)中。可以通过使用高速缓冲存储器来实现对任何存储装置的快速存储和检索,高速缓冲存储器可以与一个或多个cpu(2141)、gpu(2142)、大容量存储器(2147)、rom(2145)、ram(2146)等紧密关联。
[0289]
计算机可读介质上可以具有用于执行各种计算机实现的操作的计算机代码。介质和计算机代码可以是为了本公开的目的而专门设计和构造的,或者可以是计算机软件领域的技术人员公知和可获得的类型。
[0290]
作为示例而非限制,具有架构(2100)的计算机系统,特别是核心(2140)可以提供作为处理器(包括cpu、gpu、fpga、加速器等)执行包含在一个或多个有形的计算机可读介质中的软件的结果的功能。这种计算机可读介质可以是与如上所述的用户可访问的大容量存储器相关联的介质以及具有非暂时性的核心(2140)的某些存储器,例如,核心内部大容量存储器(2147)或rom(2145)。实现本公开的各种实施例的软件可以存储在这样的装置中并由核心执行(2140)。根据特定需要,计算机可读介质可以包括一个或多个存储装置或芯片。该软件可以使核心(2140)并且特别是其中的处理器(包括cpu、gpu、fpga等)执行本文描述的特定过程或特定过程的特定部分,包括定义存储在ram(2146)中的数据结构并且根据软件定义的过程修改这样的数据结构。此外或作为替代,计算机系统可以作为硬连线或以其他方式包含在电路中的逻辑(例如:加速器(2144))的结果来提供功能,其可以代替软件或与软件一起操作来执行本文描述的特定过程或特定过程的特定部分。在适当的情况下,对软件的引用可以包括逻辑,反之亦然。在适当的情况下,对计算机可读介质的引用可以包括存储用于执行的软件的电路(例如,集成电路(ic))、包含用于执行的逻辑的电路或者这两者。本公开包含硬件和软件的任何合适的组合。
[0291]
附录a:缩略语
[0292]
jem:joint exploration model,共同探索模式
[0293]
vvc:versatile video coding,多功能视频编码
[0294]
bms:benchmark set,基准集
[0295]
mv:motion vector,运动矢量
[0296]
hevc:high efficiency video coding,高效视频编码
[0297]
sei:supplementary enhancement information,补充增强信息
[0298]
vui:video usability information,视频可用性信息
[0299]
gop:groups of pictures,图片组
[0300]
tu:transform units,变换单元
[0301]
pu:prediction units,预测单元
[0302]
ctu:coding tree units,编码树单元
[0303]
ctb:coding tree blocks,编码树块
[0304]
pb:prediction blocks,预测块
[0305]
hrd:hypothetical reference decoder,假设参考解码器
[0306]
snr:signal noise ratio,信噪比
[0307]
cpu:central processing units,中央处理器
[0308]
gpu:graphics processing units,图形处理单元
[0309]
crt:cathode ray tube,阴极射线管
[0310]
lcd:liquid-crystal display,液晶显示器
[0311]
oled:organic light-emitting diode,有机发光二极管
[0312]
cd:compact disc,光盘
[0313]
dvd:digital video disc,数字视频光盘
[0314]
rom:read-only memory,只读存储器
[0315]
ram:random access memory,随机存取存储器
[0316]
asic:application-specific integrated circuit,专用集成电路
[0317]
pld:programmable logic device,可编程逻辑器件
[0318]
lan:local area network,局域网
[0319]
gsm:global system for mobile communications,全球移动通信系统
[0320]
lte:long-term evolution,长期演进
[0321]
canbus:controller area network bus,控制器局域网总线
[0322]
usb:universal serial bus,通用串行总线
[0323]
pci:peripheral component interconnect,外围组件互连
[0324]
fpga:field programmable gate areas,现场可编程门区域
[0325]
ssd:solid-state drive,固态硬盘
[0326]
ic:integrated circuit,集成电路
[0327]
cu:coding unit,编码单元
[0328]
nic:neural image compression,神经图像压缩
[0329]
r-d:rate-distortion,率失真
[0330]
e2e:end to end,端到端
[0331]
ann:artificial neural network,人工神经网络
[0332]
dnn:deep neural network,深度神经网络
[0333]
cnn:convolution neural network,卷积神经网络
[0334]
虽然本公开已经描述了几个示例性实施例,但是存在落入本公开范围内的变更、置换和各种替代等同物。因此,应当理解,本领域技术人员将能够设计出许多系统和方法,尽管在此没有明确示出或描述,但是这些系统和方法体现了本公开的原理,并且因此在本公开的精神和范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献