NSDI22 论文分享 | Swift: Adaptive Video Streaming with Layered Neural Codecs

  今天给大家介绍一篇NSDI22年的论文,这篇论文从层次编码的问题出发,利用自编码器对每一层的残差进行编码,并设计了single-shot和multi-exit机制用来降低解码延迟和根据用户计算资源动态调节解码,同时优化了自适应码率选择算法。

一、问题提出

问题一:   当前的自适应码率选择算法难以预测实时的带宽变化,造成码率调节不准,从而影响视频播放质量。如图所示,蓝色的线为实时带宽,在60秒前,码率选择算法过高估计了带宽,选择了4K清晰度的码率,从而造成了播放卡顿的问题。在60-200秒,又过低估计了码率,造成长时间的收看清晰度低下。

picture1

  那么现在的码率选择算法还会产生什么问题呢?拿BOLA和BOLA-FS举例,BOLA对于带宽的变化响应很慢,带宽上升75秒后才进行了码率上调的响应,它的改进工作BOLA-FS虽然可以在感知到当前带宽利用不足的情况下进行高码率片段的下载,但是这样带来了带宽资源的浪费。

picture2

  层次编码可以很好地解决这个问题,因为层次编码不是将同一个视频端编码成多个码率的视频,而是一种层层增强的关系,如果发现当前码率不能较好利用带宽,可以通过请求增强层来增强视频质量,不会带来带宽的浪费。但是层次编码也会产生新的问题。

picture3

问题二:   层次编码的第一个问题就是压缩比不如传统编码方式高,带来空间上的开销,原因是由于层次编码为了防止帧间漂移问题所以没有引入帧间预测。 第二个问题就是层次编码的解码时间开销较大,且随层次上升。也正是因为这两个问题,层次编码难以被大规模地应用。

picture4

  传统的层次压缩编码的压缩比和时间复杂度已经基本达到瓶颈了,所以基于学习的压缩越来越普遍。比如下图的基于利用自编码器(AutoEncoder(AE))的编码,利用AE将视频或图像降维为成中间的”code”,从而达到压缩的目的。本文提出的Swift也是在此基础上进行的优化改进。

picture5

二、方法设计

Swift的方法设计主要可以被分成三块:

  • Encoder:编码器优化
  • Decoder:解码器优化
  • Streamer:码率选择算法优化
  1. Encoder

首先来介绍Encoder方面的优化,编码器的设计如图所示:

picture6

  编码器(E)将每个在时间t的帧作为输入,生成一个代码向量(c),即ct = E(It)。解码器(D)重建给定ct的帧 Iˆt ,即,Iˆt =D(ct)。这里的优化问题是要训练E和D,以使Iˆt 和D(ct)之间的差异最小它的差值最小,训练用损失函数如下式。为了使每层可以尽可能减少对于上一层的冗余信息,将Iˆt 和D(ct)之间的残差ri作为下一层的编码输入,即 ci = E(ri)。

$$ \mathcal{L}_{rec}=\frac{1}{L}{\sum\limits_{i=0}^{L-1}}{\Vert\mathcal{D}(c_i)-r_i\Vert}_1 $$
  1. Decoder

(1)Single-shot机制   为了解决上文提到的层次解码时间开销随层数线性增长的问题,本文设计了一种single-shot的解码机制,在一些层数的数据还无法解码时,直接用0填充,这样用较少的画面清晰度损失缓解解码开销对时延敏感型视频的影响,解码器的设计如下图所示。

picture7

在此基础上,损失函数添加了一项关于画面质量的损失项。

$$ \mathcal{L}_{rec}=\frac{1}{L}{\sum\limits_{i=0}^{L-1}}[\underbrace{{\Vert\mathcal{D}(c_i)-r_i \Vert}_1}_{residual\ quality\ loss}+ \underbrace{{\Vert\mathcal{D}^{ss}(\oplus_{k=0}^{i}c_k)-I\Vert}_1}_{image\ quality\ loss}] $$

如下图所示,因为single-shot机制的引入,视频的解码延迟不再随层数而增长。

picture8

(2)Multi-exit机制   由于基于自编码器的视频编解码依赖于用户的GPU,所以我们也不得不靠考虑客户端主机的计算资源问题。为此,作者设计了一个multi-exit机制。机制的网络模型如下图所示

picture9

  即在解码器处设置了多个出口。作者在这里认为,出口所在层数越多,输出视频质量更好,测量了层数、出口深度和视频质量的关系,如这个热力图所示。

picture10

  1. Streamer

  最后是码率选择算法(ABR)上的优化,码率选择算法主要解决的问题就是最大化流媒体传输的QoE,即最大化视频质量、卡顿时间、和平滑度的加权和。这里的算法设计基于2017年Sigcomm的工作Pensieve,一个基于强化学习的码率选择算法。在此基础上,作者为码率选择算法添加了一些新的输入,如当前的GPU可使用量、GPU和视频质量的映射矩阵等,输出的动作为请求的视频段和层数。

下图为Swift的整体运行流程。

picture11

三、实验效果

  作者为衡量Swift的性能做了充分的实验。   实验一:各个码率选择算法对于当前网络带宽的响应速度。黑色的线为当前网络的带宽,我们可以看到绿色线代表的Swift可以在很短的时间内响应网络带宽的增加。

picture12

  实验二:各个码率选择算法带宽使用量的对比。可以看出,在同等的实验条件下,Swift占用的带宽是最低的,减少了网络资源的浪费。

picture13

四、启发

  虽然都是面向流媒体传输的优化,本文与我们之前专注的传输层方向是垂直的,它从编码和码率选择的角度去解决流媒体传输的问题,像是一种将网络的压力卸载到端上的操作。

宋丛溪
宋丛溪
2020级