交互式视频风格化 水记
《Interactive Video Stylization Using Few-Shot Patch-Based Training》
项目主页:
Interactive Video Stylization
https://github.com/OndrejTexler/Few-Shot-Patch-Based-Training
https://github.com/OndrejTexler/Few-Shot-Patch-Based-Training
BV1Sf4y117qy AI又来抢饭碗?一边画一边动,无需建模,实时完成渲染!
一边动,一边画,自己就变二次元!华人小哥参与的黑科技:实时交互式视频风格化
之所以看这篇,是想看看他是怎么做到让画过的部分跟着人一起动的
是不是用某种方法显式或者隐式地建立了语义坐标系?
他用了 ARAP 图像配准做网格变形。
应该可以看作 EbSynth (也就是 《Stylizing Video by Example》)的后续工作
主要是做了实时性的改进,而且允许并行渲染了
功能
输入若干关键帧,每帧要风格化的区域mask(可以是全图风格化),对应的风格化后关键帧
输出会将关键帧的风格化效果传播到其他帧上
特点是,不需要一帧一帧地按顺序渲染,所有帧可以并行渲染,也可以只渲染其中几帧。
这意味着他没有用光流之类的方法来 warp 要风格化的区域,没有使用时域信息,而是实打实的能直接 align 要风格化的区域。
好吧,他是用的 ARAP 网格变形来 align 的。
这个任务叫做 keyframe-based video stylization ,本文之前的 SOTA 是 [Jamriška et al]
训练方法
主要使用 [Futschik et al. 2019] 中基于 U-net 的图像翻译框架,原本用于风格化人脸。
但是用在本任务上产生的结果,质量远低于 SOTA ,有两个原因:
- 一个原因是,原模型是在一个很大的风格化数据集上训练的(由FaceStyle [Fišer et al. 2017] 生成),而本任务中无法使用这么大的数据集,导致严重的过拟合,模型会直接重构出当前关键帧,降低对其他关键帧的风格化能力。即使使用数据增强也没用。
- 另一个原因是,由于原始方法没有显式考虑时间一致性,生成的帧序列会在时间尺度上产生很多闪烁。
解决方案:
- 为了减少过拟合,使用了 patch-based 的训练策略,每次输入一个小 patch 来训练,这样可以有效减少需要的训练数据量,减少过拟合,提高对其他关键帧的泛化能力,提高生成效果。
- 提出了一种抑制闪烁的方案,该方案不需要衡量时间一致性。
Patch-based 训练策略
每次从 mask 过的关键帧上随机截取一个小 patch,送入一个基于 U-net 的图像翻译框架(来自于 [Futschik et al. 2019] ),生成一个 patch,然后与风格化关键帧上对应的 patch 计算 loss,这里的 loss 使用的是 L1 loss + 对抗loss + VGG loss (来自于 [Futschik et al. 2019]) 。
注意,这里的 U-net 是一个全卷积结构,所以能输入任意大小的图片。
虽然导致当前帧的loss变高了,但是能明显降低其他帧的loss(与当前 SOTA 的 [Jamriška et al] 比较)。
超参搜索
尽管 patch-based 训练策略已经可观的提升了效果,但是对关键超参的调整还是必要的。
原始的超参可能会导致很差的推理质量,尤其是当训练速度对我们来说很重要的时候。此外,我们还需要在风格化质量与实时性之间做平衡。
我们制定了一个优化问题,使用网格搜索求解。
包含四个参数:patch 尺寸,batch尺寸(每个batch包含多少patch),学习率,残差块数量。
目标是:最小化与 [Jamriška et al. 2019] (当前SOTA,也就是 EbSynth) 生成的结果之间的差距。(注意只有微调超参时才使用了这个)
损失函数:使用 [Futschik et al. 2019] 的 loss (训练时也用的这个)。
约束条件是:训练时间 与 单个视频的推理时间 是固定的。(分别是 30秒 和 0.06秒)
因为约束的时间较短,所以用网格搜索是可行的。
时间一致性
尽管 [Futschik et al. 2019] 发现这个方法天然的具有一定的时间一致性,但是还是会出现很多闪烁。
闪烁的原因有两个:时间尺度的噪声,视觉上的歧义。
即使是很小的时间噪声,也会被外观翻译网络放大。
为了抑制噪声,使用了一个在时域工作的双边滤波器的运动补偿变体 [Bennett and McMillan 2005]
滤波器只有在对象具有独特且多变的纹理的时候很有效,如果缺乏足够独特的视觉信息(比如有一片完全同色的区域),就会出现视觉上的歧义。
解决 视觉歧义:
使用一个额外的输入层来显式的提升网络的鉴别能力。
该层由一组稀疏的随机分布的二维高斯组成,每个二维高斯都有一个独特的随机生成的颜色。
为了补偿视频中的运动,这些高斯被看作是粘在网格上的点。
网格由 as-rigid-as-possible (ARAP) 图像配准技术 [Sýkora et al. 2009] 变形。
该方法重复两个步骤:
- 块匹配(block-matching)估计网格上每个点的最优平移
- 利用ARAP变形模型,局部加强刚性来规范网格结构
该配准方法可以独立应用于每个帧,不需要时域信息。
之所以使用高斯,而不是直接编码像素坐标,例如 [Jamriška et al.2019; Liu et al. 2018]
是因为,随机着色提供更好的定位和稀疏性,以及旋转对称性,减少了局部失真的影响。
如果发生极端非平面变形(比如头部转动)或者强遮挡(比如有多个场景平面)的情况,需要提供额外的关键帧或将场景分割成多层。每个关键帧或场景层都有自己的专用变形网格。在补充材料的 2:56 处展示了这一点。
没看出来他怎么展示的,让头转一下就行了?网格呢?网格长啥样啊?
完全没解释是怎么引入额外关键帧或者分割场景的,估计是因为和提到的两篇做法一样吧。只能看看那两篇了,最坏情况可能只有看源码才行。
推理过程
经过训练过程,我们已经得到一个 根据 用户给定风格 微调过的 U-net 。
推理过程很简单。
直接把当前帧整个喂给 U-net ,然后得到风格化的当前帧。