本期作者
邱慎杰
哔哩哔哩高级算法工程师
吴宇
哔哩哔哩高级算法工程师
盛高立
哔哩哔哩内容运营经理
蔡春磊
哔哩哔哩多媒体算法teamleader
1 前言
喜欢观看历史剧的观众在B站刷剧时或许已经留意到,经典历史正剧《雍正王朝》悄然将画质从540p@25fps提升至1080p@50fps。在高清高帧率的加持下,这部描绘雍正皇帝生平的经典之作,以丝滑清晰的画面为观众带来了一场全新的视觉盛宴。
图1. 左:修复前540p@25fps,右:修复后1080p@50fps
而之所以视频流畅度会有如此大的提升,我们自研的视频插帧算法在其中发挥着关键作用。那么,插帧算法是如何实现帧率的提高、相较于目前开源的插帧算法,它又是如何克服视频插帧中常见问题的呢?接下来,我们将逐一揭秘。
2 背景
随着B站用户规模和日活跃用户的增加,以及播放设备性能的不断提高,低帧率视频在现有设备上已无法充分发挥其性能,进而影响用户感受更加细腻的动态画面。为解决这一问题,B站开发了一套主要服务于点播场景的云端视频插帧算法,通过AI模型将低帧率视频插帧至高帧率,旨在改善视频流畅度,提升用户的观看体验。
3 现有技术
视频插帧,顾名思义就是在视频时序上连续的每两帧中增加若干帧,缩短帧之间的时间间隔,提高视频的帧率和流畅度。
目前常见的插帧方法普遍有三种:
直接复制前一帧或者后一帧作为中间帧,即复制帧;
将前后两帧进行类似双重曝光的模糊处理来得到中间帧,即混合帧;
基于光流模型的插帧,通过对前后两帧画面进行分析建模生成光流从而得到帧间线性映射关系,最终采样预测出中间帧。
上述提到的三种插帧方式中,第一种方式完全依靠的是复制上一帧或者下一帧来提高帧率,在实际应用中,并不会带来视觉上的提升,有时反而会加重视频卡顿感;第二种方法虽然参考的前后两帧的信息,但简单的双重曝光模糊会导致较为严重的拖影,同时一帧清晰一帧模糊会给视频编码带来额外的负担;而基于光流估计模型的插帧方法,通过对前后两帧的运动关系进行建模生成光流,并根据光流中的映射关系从前后帧采样来预测出中间帧,相较于上两种插帧方式,这种方式合成出的中间帧更加合理,大量的实际应用结果也表明,基于光流估计的深度学习模型的视频插帧不论是主观感受还是客观指标,都要好于其他方式。
目前常见的光流插帧算法流程都是先预测出双向稠密光流,再结合前后帧,最终warp出中间帧。其中的代表作有SuperSlomo、DAIN、RIFE、IFRNet等,这些算法的提出,使得AI视频插帧在效果及速度上得到进一步的提升,为插帧的实际应用奠定了坚实的基础。
图2. 基于光流的插帧方法
我们充分借鉴了多种插帧算法的优点,以IFRNet为基础模型做深入改进。在面对实际应用中的挑战时,我们不仅优化了模型结构,还在训练技巧和推理技巧等方面做出了进一步的调整。最终在RTX3090上,我们成功将1080p视频的最快推理速度提升至165fps,实现了高效处理点播视频稿件的需求。
4 技术挑战及算法优化
尽管目前的光流插帧算法已经在许多场景下表现出色,但在学术和工业领域仍存在一些亟待解决的算法缺陷。从用户观看体验的角度来看,这些缺陷主要包括大运动缺陷、重复/周期性纹理缺陷和文字扭曲缺陷。
在插帧后的视频中,微小区域内出现的伪影缺陷在连续播放中可能不容易察觉。然而,当伪影的面积足够大时,即使在个别帧中偶然出现,也会对视频观感产生极大的负面影响。因此,在确保客观指标如PSNR和SSIM足够好的前提下,我们将视频插帧的主观效果优化作为模型主要的优化方向。
下面我们将详细介绍各种插帧缺陷的形成原因,并说明在训练和推理过程中我们如何引入不同的技巧来解决这些问题。通过针对性的算法优化,我们完善了插帧算法在实际应用中的表现,从而为用户带来更丝滑流畅的画面。
4.1 大运动缺陷
大运动缺陷在一些注重模型推理速度的小模型上较为普遍。其根本原因是小模型的复杂度较低,感受野较小,导致其对大运动的建模能力不足,无法捕捉远距离运动,从而影响对光流的准确预测,最终影响合成的中间帧。通常情况下,在运动肢体部位存在大幅摆动等大运动时,插帧结果可能出现“断肢”的情况,例如图3前后两帧(图左和图右)的画面中人物肢体存在大幅摆动等大运动时,插帧结果会出现“断肢”的情况(图3中)。而在连续播放时,这常常表现为运动肢体部位明显的闪烁。
图3. 左:前一帧,中:优化前的预测帧,出现断肢,右:后一帧
解决方案:通常插帧是在两帧的中间时刻(t=0.5)进行的,但现有的光流插帧模型已经可以在两帧之间的任意时刻(0 < t < 1)插帧。我们通过实验发现,插帧时刻越靠近任一输入帧,插帧缺陷越少。基于这一特点,我们考虑在帧间存在大运动时,将插帧时刻置前或置后,并借助视频解码过程中生成的帧间运动向量信息,作为判断当前帧中物体运动大小的依据,并决定插帧时刻位置。这样规避了在中间时刻插帧可能出现的严重伪影问题,显著提高了插帧结果的主观效果。由于视频插帧过程本身就涉及到解码,使得判断机制的引入不会带来额外的算力消耗。图4展现了通过引入运动判断机制后,自适应地将t=0.2的插帧结果作为预测结果插入两帧之间,插帧结果中的人物保留下了完整的肢体。
图4. 左:优化前,右:优化后,没有断肢
4.2 重复/周期性纹理缺陷
重复/周期性纹理对于光流估计任务来说是一项较大的挑战,同样是受限于模型复杂度和感受野大小,其无法有效建模这种周期重复像素块之间的运动模式。处理这种纹理时,模型在双向光流估计阶段就可能出现预测错误,导致生成的插入帧在重复纹理区域出现违和的块状移位,例如图5插帧结果中观众席区域出现的奇怪纹理。在连续播放视频时,能够明显看到纹理对应区域出现的闪烁现象。
图5. 左:前一帧,中:优化前,重复纹理处出现块状移位,右:后一帧
解决方案:通过增加模型模块数或者通道数等操作可以缓解这个问题,但随之而来的时间和算力成本不利于算法的落地,而B站每天又有成千上万的稿件要处理,无疑是得不偿失的。因此,我们自制了多种类型的重复纹理运动数据,提高了这类数据在训练集中的占比,让模型学习这种重复纹理的运动模式。为了防止引入光流估计监督模型带来的误差,我们在训练后期完全屏蔽了有监督的光流估计学习,最终在不增加任何时间和算力成本的前提下提高了处理重复纹理运动的能力。图6右边为优化后的插帧结果,可以看出,观众席不再出现奇怪的块状移位。
图6. 左:优化前,右:优化后,块状移位消失
4.3 文字扭曲缺陷
其实从上述几个问题来看,光流插帧的缺陷基本是由光流估计错误引起的,前景静态文字缺陷也不例外。由于开源模型在训练数据中包含较少静止前景文字+运动背景同时存在的数据,模型对这种类型数据的敏感度及泛化能力不足,导致在估计双向光流时更倾向于处理背景物体的运动。这使得开源模型在处理这类视频时主观效果不佳。在视频播放过程中,文字在背景较快运动时可能会出现明显的扭动变形及抖动,有时甚至是文字的缺失,如图7字幕的最后几个字。
图7. 左:前一帧,中:优化前,末尾文字严重扭曲,右:后一帧
解决方案:文字扭曲问题其实也是经典的欠拟合问题,因此让模型适应并学习静止前景文字+运动背景数据的模式是最简单且有效的方法。为此我们在训练模型过程中加入自制的人造前景文字数据,并进行了丰富的数据增强,从而极大改善了文字扭曲变形的问题。通过添加文字数据进行训练后,插帧结果中的文字不再扭曲,同时周围的运动(如图8中周杰伦的手部运动)也没有受到静止字幕的影响,生成的结果更加自然。
图8. 左:优化前,右:优化后,文字部分不再扭曲变形
4.4 推理速度
推理速度一直是深度学习模型在工业界应用中的主要挑战之一。为了提高插帧算法处理视频的效率,我们采用了模型剪枝等技术,结合低分辨率光流推理等技巧,成功将1080x1920分辨率下的0.5倍光流尺寸的FLOPs控制在13G内。最终实测在RTX3090上1080p视频插帧,最快速度达到165fps。通过这些优化,我们显著提高了插帧算法的推理速度。
5 视频插帧工程化
为了将视频插帧等画质能力以最高效的方式应用于线上服务,多媒体实验室自研了一套多媒体推理SDK库:BVT(Bilibili Vision Toolkit)。BVT的存在,不仅有效缩短了我们算法的验证流程,同时由于其优秀的数据表示及内存管理机制、异步并行等特性,提升了吞吐性能,从而减少模型在推理过程中不必要的IO等待耗时。目前,BVT已经完美支持视频插帧,并能够实现更快速的多进程,多卡同时推理。
图9. 视频插帧流程图
6 效果展示
我们的视频插帧算法不仅能实现2倍视频插帧,同样支持应用于视频剪辑场景下更高帧率的2N倍视频插帧,下面展示的是对原始25fps视频做4倍插帧后的效果。
图10. 上:原始帧率,下:4倍帧率
作为哔哩哔哩多媒体实验室画质矩阵的一个重要组成部分,我们的插帧能力正不断为线上视频赋能。除了应用于老片《雍正王朝》,视频插帧功能已经在不同品类的视频中投入生产,包括在周杰伦最新专辑的宣发过程中,支持了《我是如此相信》,《错过的烟火》,《粉色海洋》,《红颜如霜》等MV的流畅度提升。
7 在直播场景的应用探索
除了点播,我们同样深入探索了插帧在直播场景的应用潜力。
直播作为一种独特的视频形式,吸引着大量观众,更是B站的重要增长点。因此我们特别关注直播视频的播放流畅度。在许多直播场景中,例如舞蹈和体育赛事专区,由于直播环境、成本或设备性能等因素,大多数主播难以实现60fps高帧率的视频推流。而插帧算法在这种情况下能够有效提升低帧率视频直播的流畅度,为直播间带来更多关注及人气。
我们的首要目标是在保证插帧质量的前提下,实现对视频的实时插帧并推流,确保插帧不会引起直播卡顿。其次,我们追求占用更少的计算资源和成本。事实上,通过模型加速策略和BVT推理引擎的双重优化,我们的视频插帧算法在RTX3060等算力较低的GPU上同样能够实现从1080p@30fps到1080p@60fps的实时直播插帧推流。这也意味着B站的直播插帧技术在视频直播场景上的应用已经成为可能。未来,我们将探索直播插帧技术的实际应用及落地。
8 总结与展望
作为B站视频画质矩阵的关键组成部分,我们的视频插帧算法以提高帧率为出发点,旨在为用户创造更加流畅丝滑的视频播放体验。在实际的算法落地实践中,我们充分关注视频插帧常见问题,逐一优化解决,确保更加完善的插帧效果。目前,插帧算法与其他画质能力协同合作,已成功投入线上点播业务,并根据不同策略持续提升不同视频的画质水平。未来,我们将持续在推理速度、主观效果和部署灵活度等方面进行算法的迭代更新,以在直播、点播、应用端等多个场景为视频画质提供更大的增益。
B站对画质的优化,不仅依靠的是视频插帧算法的巧妙应用,我们多媒体实验室画质矩阵中的画质增强、人脸修复、HDR、超分等技术同样发挥着至关重要的作用。关注哔哩哔哩多媒体实验室,我们将陆续分享更多画质相关技术文章,敬请期待。
哔哩哔哩多媒体实验室(bilibili mlab)是一支技术驱动的年轻队伍,具备完善的多媒体技术能力,以清晰流畅的极致视频体验为目标,通过对自研视频编码器、高效转码策略、视频图像分析与处理、画质评价等技术的持续打磨和算法创新,提出了画质可控的窄带高清转码算法、超实时4K60FPS直播超分、视频画质评价、数字水印、高性能多媒体算法推理基座、自研编码器等诸多高质量、低成本的多媒体解决方案,从系统尺度提升了整个多媒体系统的性能和效率, 助力哔哩哔哩成为体验最好的互联网视频社区。
开发者问答
除了文中提到的插帧缺陷问题,大家最在意的缺陷还有哪些?欢迎在留言区告诉我们。小编将选取1则最有价值的评论,送出日版赫斯缇雅手办景品一个(见下图)。12月19日中午12点开奖。如果喜欢本期内容的话,欢迎点个“在看”吧!
往期精彩指路