论视频插帧与人脸驱动的关系

背景

视频插帧(video frame interpolation, VFI),是在视频序列中连续的两帧之间插入一帧或多帧。视频插帧在时域上,通过增加帧数来减小帧间的运动幅度,从而提高视频的流畅度和用户的体验。视频插帧在RTE(real time communication)有着广泛的潜在应用价值:

  1. 低帧率视频恢复成高帧率视频,在RTC场景中,受到弱网的网络带宽的限制,为了保证视频传输的流畅性,不得不降低视频的分辨率和帧率,而视频插帧,有可能在接收端将接收到的低帧率视频,恢复成高帧率。
  2. 慢动作回放,利用视频插帧,将高帧率的视频,生成超高帧率的视频,为用户提供慢动作回放。

人脸动画(face animation),是一张静态图像人脸A模仿视频人脸B的动作、表情、姿态,也就是视频人脸B的动作、表情、姿态“迁移”到静态图像人脸A,使得静态图像人脸A“动”起来。而人脸的动作、表情、姿态等信息的码率,远小于人脸图像的码率,这一特性,能数量级地提高视频编码的压缩率。人脸动画,在RTC场景有着广阔的应用前景,在发送端,将提取的视频人脸B的动作、表情、姿态等信息和人脸A的图像(只发送一次),发送至接收端;在接收端,利用接收到人脸B的动作、表情、姿态等信息“驱动“人脸A,从而使人脸A”动“起来,起到视频压缩的目的,又不降低视频的质量。

视频插帧与人脸动画,看似不相关的两个技术,但都对视频传输起到提高视频压缩率,降低网络带宽成本,它们之间有什么关系?为了叙述清楚它们的关系,需要从它们的算法原理说起。

视频插帧

视频插帧,是在连续的两帧之间插入一帧或多帧。为了简单起见,这里以插入一帧为例进行介绍。连续的两帧,分别表示为I0、 I1,插入的帧表示为It。插入的帧It,可表示为:

It = α * g(I0, M0->t) + (1-α) * g(It, M1->t)

其中,g(I, M)是一个warp函数,它的作用是根据稠密的运动矢量M,对图像I的像素进行“搬运”到指定位置;α是权重系数,插入帧It是由经过像素”搬运“的图像I0和I1加权得到的。M0->t和M1->t分别表示I0到It的稠密运动矢量和I1到It的稠密运动矢量,它们是生成It的关键。

由于It不存在, 无法直接计算M0->t和M1->t,但M0->1和M1->0可利用I0到I1计算所得。计算M0->1和M1->0的方法有两种:一种是利用传统光流方法,传统光流方法的缺点是受光线变化影响较大和无法准确捕捉大幅度运动信息,并且计算速度慢,无法满足实时要求。另一种是利用深度学习,如FlowNet, 深度学习方法计算光流,精度远好于传统光流方法,但计算速度也很慢。

计算M0->1和M1->0后,如何进一步计算M0->t和M1->t呢?这里有一个前提假设,即I0、 I1之间是线性运动。那么,M0->t, M1->t可表示为:

M0->t = t * M0->1

M1->t = (1-t) * M1->0

人脸动画

人脸动画, 是将driving image的动作、表情、姿态等信息,迁移到source image,source image的人脸属性不变,但脸部的动作、表情、姿态与driving image的保持一致,即source image在模仿driving image,目标是模仿得惟妙惟肖。
人脸动画,是如何将driving image的动作、表情、姿态等信息迁移到source image的呢?要完成这个目标,需要解决两个问题:1)如何描述动作、表情、姿态信息?2)如何将动作、表情、姿态信息融合到source image?

描述人脸的动作、表情、姿态信息的方法有多种,其中一种比较直观和有效的方法是人脸关键点。人脸关键点,分布在人脸关键的区域,每个点的分布,都有明确的语义信息,如哪些点是定位在眉毛、眼睛、鼻子、嘴巴、脸颊。常见的人脸关键点的点数有68、106。由于人脸关键点有明确的语义定义,可以利用人脸关键点的运动,来捕捉人脸的变化信息,如动作、表情、姿态。

将动作、表情、姿态的信息融合到source image,其本质是计算稠密运动矢量M的问题。由于人脸关键点是稀疏的点分布,需要建立一个稀疏运动到稠密运动的映射关系,这种映射关系比较复杂,往往需要深度学习来建立。一旦获取了稠密运动矢量M,则可以根据M,逐个像素地”搬运“source image,使得source image模仿driving image运动起来,从而生成了人脸动画。

总结

从原理上来看,视频插帧和人脸动画的本质是一样的,都需要计算稠密运动矢量M,warp函数根据M来进行像素级的”搬运“工作,将图像的像素”搬运“到指定位置,从而使图像运动起来。区别在于计算稠密运动矢量的方式不一样,视频插帧利用连续的两帧直接计算稠密运动矢量M,而人脸动画,则是通过稀疏的人脸关键点建立稀疏到稠密运动矢量的映射关系。

当前,视频插帧和人脸动画技术还不成熟,难以达到实际应用的要求,但相信随着技术的迅速发展,在不久的将来,视频插帧和人脸动画技术给我们带来惊喜和更优的用户体验。