Super SloMo:用神经网络脑补超级慢动作
首页 专栏 算法 文章详情
2

Super SloMo:用神经网络脑补超级慢动作

超神经HyperAI 发布于 3 月 18 日

如今,人们对于视频帧率的追求越来越高,因为高帧率视频更加顺滑、流畅,能极大地提升人们的观看体验。

现有相机拍摄的视频帧率,也从 25 FPS(Frames Per Second) 不断提升到 60 FPS,再到 240 FPS 甚至更高。

在绝大多数电影帧率 24 的当下,李安的《双子杀手》,以 120 的帧率实现电影技术的革新

但是,高帧率的摄像设备,对于内存需求非常大,而且成本高昂,尚不能普及。为了在没有专业设备的情况下,能够得到高帧率的视频,视频插帧技术应运而生。

而英伟达提出的 AI「脑补」大法 Super SloMo,则在众多视频插帧技术中一骑绝尘,即使帧率仅仅为 30 帧的视频,也可以 Super SloMo 补成 60 帧、240 帧甚至更高。

传统插帧方法优劣势一览

为了更好地理解 Super SloMo,我们首先来了解一下现有的较为传统的视频插帧技术。

帧采样

帧采样就是用关键帧来做补偿帧,其实质就是拉长每一个关键帧的显示时间,相当于并没有插帧。除了获得文件属性更高的帧率和在同视频质量下更大的文件体积外,不会带来任何视觉观感上的提升。

优点: 帧采样消耗资源少,速度快。

缺点: 可能会使得视频看起来不是很流畅。

帧混合

帧混合,顾名思义,就是提升前后关键帧的透明度,再将其混合成一个新的帧,来填补空缺。

优点: 计算所需时长短。

缺点: 效果不佳。由于只是简单的把原关键帧变成半透明状,运动物体轮廓在前后两帧交叠的时候,就会产生明显的模糊场景,对视频的视觉效果流畅程度提升很小。

运动补偿

运动补偿(Motion Estimation and Motion Compensation,简称 MEMC),其原理是在水平和垂直两个方向上,对两帧之间的差异寻找出现运动的块,通过分析图像块的运动趋势,再辅以计算得到中间帧

MEMC 主要被应用于电视、显示器和移动端,提升视频帧率,给观众更加流畅的观感。

优点: 减小运动抖动,减弱画面拖尾与虚影,提升画面清晰度。

缺点: 对于运动物体背景比较复杂的情况 ,就会出现物体边缘运动的 bug。

光流法

光流法是计算机视觉研究中的一个重要方向,其根据上下帧来推断像素移动的轨迹,自动生成新的空缺帧。有点类似于运动模糊计算方法。

优点: 画面更流畅、卡顿感弱。

缺点: 计算量大, 耗时长;对光线敏感,在光线变化较大的情况下,容易出现画面紊乱的错误。

Super SloMo:AI 插帧法,堪称业界经典

在 2018 年计算机顶会 CVPR 上,英伟达发布的论文《Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Interpolation》中,提出了 Super SloMo,在业界引起广泛关注。

《超级慢动作:用于视频多个中间帧插值的的高质量估计》

查看论文:请点击此处

Super SloMo 不同于传统方法,它利用深度神经网络来实现补帧,基本思路为:使用大量普通视频与慢动作视频进行训练,然后让神经网络学会推理,根据正常视频生成高质量的超级慢动作视频。

Super SloMo 方法框架图,包括光流计算模块(左)与特定时间流插值模块(右)

Super SloMo 团队提出的方法,其整个框架依赖于两个全卷积神经网络  U-Net。

首先,用一个 U-Net 来计算相邻输入图像之间的双向光流。然后,在每个时间步长上对这些光流进行线性拟合,以近似中间帧的双向光流。

为了解决运动边界出现伪影的问题,使用另一个 U-Net 来对近似的光流进行改善,并且预测柔性可见性映射关系。最后,将输入的两张图像进行扭曲和线性融合,从而形成中间帧。

此外,Super SloMo 的光流计算网络和插值网络的参数,都不依赖于被插值帧的特定时间步长(时间步长被做为网络的输入)。因此,它可以并行地在两帧之间的任意时间步长上插帧,从而突破了很多单帧插值方法的局限性。

原始 SloMo 视频(上),Super SloMo 补帧后的超级慢动作视频(下)

作者表示,使用他们未经优化的 PyTorch 代码,在单个 NVIDIA GTX 1080Ti 和 Tesla V100 GPU 上,生成 7 个分辨率为 1280*720 的中间帧,分别只需要 0.97 秒和 0.79 秒。

为了训练网络,作者从 YouTube 和手持摄像机上收集了多个 240 帧的视频。总计收集了 1100 个视频段,由 30 万张 1080×720 分辨率的独立的视频帧组成。 这些视频从室内到室外,从静态相机到动态相机,从日常活动到专业运动,包含了各类场景。

之后在其它数据集上对模型进行了验证,结果表明,该研究在这些数据集上比现有的方法性能上有了显著的提高。

戳下方官方演示视频,观看更多效果展示:教程传送门

跟着教程,一键实现 Super SloMo

虽然英伟达这一论文的作者尚未公开数据集和代码,不过,高手在民间,GitHub 上一位名为为 avinashpaliwal 的用户,已经开源了自己对 Super SloMo 的 PyTorch 实现,其结果与论文描述相差无几。

该项目具体信息如下:

Super SloMo 超级慢动作镜头补帧

运行环境: PyTorch 0.4.1

语言版本: Python 3.6

训练可视化: TensorboardX

训练数据集: Adobe 240 fps

项目地址: 请点击此处

由于模型训练和测试是在 PyTorch 0.4.1 和 CUDA 9.2  上完成的,所以安装这两个软件必不可少,另外你还需要有一张 NVIDIA 的显卡。

此外,模型不能直接使用视频训练,因此还需要安装 ffmpeg 从视频中提取帧。这些准备工作一切就绪后,方可下载 adobe 240fps 数据集进行训练。

不过,你也可以不需要准备这些,做一个安安静静的「伸手党」,一键实现 Super SloMo。

我们在国内的机器学习算力容器服务平台 OpenBayes,找到了相应的教程。从数据集到代码再到算力,一应俱全,即使是小白,也可以轻松上手。

教程传送门链接:请点击此处

教程使用指南

首先注册并登录 OpenBayes,在「公共资源」菜单下的 「公共教程」 中,选择本教程——「Super-SloMo超级慢动作镜头的PyTorch实现」。

教程中样例展示文件是 Super-SloMo.ipynb,运行这个文件,会安装环境,并展示最终补帧而来的超级慢动作效果。

大家也可以使用自己的视频素材,将下方生成代码中的 lightning-dick-clip.mp4 改为你的视频文件名。

属性「scale」 用于控制生成视频的倍速,比如:设为 4,即 4 倍速慢放。

生成代码:

!python3 'Super-SloMo/eval.py' 'lightning-dick-clip.mp4' --checkpoint='/openbayes/input/input0/SuperSloMo.ckpt' --output='output-tmp.mp4'     --scale=4 print('Done')

转换视频格式代码:

!ffmpeg -i output-tmp.mp4 -vcodec libx264 -acodec aac output.mp4

该教程中,使用了网络上的某段视频,进行 Super SloMo 插帧,得到如下结果:

4 倍速慢放,看清武术动作的每一步

目前,该平台还能薅羊毛,每周都赠送 vGPU 的使用时长,人人都可轻松完成,赶快动手试试吧!

亲自动手,制作神奇的超级慢动作

参考资料:

查看教程

查看论文

项目主页

其他参考

算法 机器学习 人工智能 深度学习 神经网络
阅读 646 发布于 3 月 18 日
赞2 收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
超神经HyperAI
AI 行业实验媒体,站在科技与人文的交叉口,看懂人工智能。微信公众号:HyperAI
关注专栏
avatar
超神经HyperAI
声望
1k 粉丝
关注作者
0 条评论
得票数 最新
提交评论
你知道吗?

注册登录
avatar
超神经HyperAI
声望
1k 粉丝
关注作者
宣传栏
目录

如今,人们对于视频帧率的追求越来越高,因为高帧率视频更加顺滑、流畅,能极大地提升人们的观看体验。

现有相机拍摄的视频帧率,也从 25 FPS(Frames Per Second) 不断提升到 60 FPS,再到 240 FPS 甚至更高。

在绝大多数电影帧率 24 的当下,李安的《双子杀手》,以 120 的帧率实现电影技术的革新

但是,高帧率的摄像设备,对于内存需求非常大,而且成本高昂,尚不能普及。为了在没有专业设备的情况下,能够得到高帧率的视频,视频插帧技术应运而生。

而英伟达提出的 AI「脑补」大法 Super SloMo,则在众多视频插帧技术中一骑绝尘,即使帧率仅仅为 30 帧的视频,也可以 Super SloMo 补成 60 帧、240 帧甚至更高。

传统插帧方法优劣势一览

为了更好地理解 Super SloMo,我们首先来了解一下现有的较为传统的视频插帧技术。

帧采样

帧采样就是用关键帧来做补偿帧,其实质就是拉长每一个关键帧的显示时间,相当于并没有插帧。除了获得文件属性更高的帧率和在同视频质量下更大的文件体积外,不会带来任何视觉观感上的提升。

优点: 帧采样消耗资源少,速度快。

缺点: 可能会使得视频看起来不是很流畅。

帧混合

帧混合,顾名思义,就是提升前后关键帧的透明度,再将其混合成一个新的帧,来填补空缺。

优点: 计算所需时长短。

缺点: 效果不佳。由于只是简单的把原关键帧变成半透明状,运动物体轮廓在前后两帧交叠的时候,就会产生明显的模糊场景,对视频的视觉效果流畅程度提升很小。

运动补偿

运动补偿(Motion Estimation and Motion Compensation,简称 MEMC),其原理是在水平和垂直两个方向上,对两帧之间的差异寻找出现运动的块,通过分析图像块的运动趋势,再辅以计算得到中间帧

MEMC 主要被应用于电视、显示器和移动端,提升视频帧率,给观众更加流畅的观感。

优点: 减小运动抖动,减弱画面拖尾与虚影,提升画面清晰度。

缺点: 对于运动物体背景比较复杂的情况 ,就会出现物体边缘运动的 bug。

光流法

光流法是计算机视觉研究中的一个重要方向,其根据上下帧来推断像素移动的轨迹,自动生成新的空缺帧。有点类似于运动模糊计算方法。

优点: 画面更流畅、卡顿感弱。

缺点: 计算量大, 耗时长;对光线敏感,在光线变化较大的情况下,容易出现画面紊乱的错误。

Super SloMo:AI 插帧法,堪称业界经典

在 2018 年计算机顶会 CVPR 上,英伟达发布的论文《Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Interpolation》中,提出了 Super SloMo,在业界引起广泛关注。

《超级慢动作:用于视频多个中间帧插值的的高质量估计》

查看论文:请点击此处

Super SloMo 不同于传统方法,它利用深度神经网络来实现补帧,基本思路为:使用大量普通视频与慢动作视频进行训练,然后让神经网络学会推理,根据正常视频生成高质量的超级慢动作视频。

Super SloMo 方法框架图,包括光流计算模块(左)与特定时间流插值模块(右)

Super SloMo 团队提出的方法,其整个框架依赖于两个全卷积神经网络  U-Net。

首先,用一个 U-Net 来计算相邻输入图像之间的双向光流。然后,在每个时间步长上对这些光流进行线性拟合,以近似中间帧的双向光流。

为了解决运动边界出现伪影的问题,使用另一个 U-Net 来对近似的光流进行改善,并且预测柔性可见性映射关系。最后,将输入的两张图像进行扭曲和线性融合,从而形成中间帧。

此外,Super SloMo 的光流计算网络和插值网络的参数,都不依赖于被插值帧的特定时间步长(时间步长被做为网络的输入)。因此,它可以并行地在两帧之间的任意时间步长上插帧,从而突破了很多单帧插值方法的局限性。

原始 SloMo 视频(上),Super SloMo 补帧后的超级慢动作视频(下)

作者表示,使用他们未经优化的 PyTorch 代码,在单个 NVIDIA GTX 1080Ti 和 Tesla V100 GPU 上,生成 7 个分辨率为 1280*720 的中间帧,分别只需要 0.97 秒和 0.79 秒。

为了训练网络,作者从 YouTube 和手持摄像机上收集了多个 240 帧的视频。总计收集了 1100 个视频段,由 30 万张 1080×720 分辨率的独立的视频帧组成。 这些视频从室内到室外,从静态相机到动态相机,从日常活动到专业运动,包含了各类场景。

之后在其它数据集上对模型进行了验证,结果表明,该研究在这些数据集上比现有的方法性能上有了显著的提高。

戳下方官方演示视频,观看更多效果展示:教程传送门

跟着教程,一键实现 Super SloMo

虽然英伟达这一论文的作者尚未公开数据集和代码,不过,高手在民间,GitHub 上一位名为为 avinashpaliwal 的用户,已经开源了自己对 Super SloMo 的 PyTorch 实现,其结果与论文描述相差无几。

该项目具体信息如下:

Super SloMo 超级慢动作镜头补帧

运行环境: PyTorch 0.4.1

语言版本: Python 3.6

训练可视化: TensorboardX

训练数据集: Adobe 240 fps

项目地址: 请点击此处

由于模型训练和测试是在 PyTorch 0.4.1 和 CUDA 9.2  上完成的,所以安装这两个软件必不可少,另外你还需要有一张 NVIDIA 的显卡。

此外,模型不能直接使用视频训练,因此还需要安装 ffmpeg 从视频中提取帧。这些准备工作一切就绪后,方可下载 adobe 240fps 数据集进行训练。

不过,你也可以不需要准备这些,做一个安安静静的「伸手党」,一键实现 Super SloMo。

我们在国内的机器学习算力容器服务平台 OpenBayes,找到了相应的教程。从数据集到代码再到算力,一应俱全,即使是小白,也可以轻松上手。

教程传送门链接:请点击此处

教程使用指南

首先注册并登录 OpenBayes,在「公共资源」菜单下的 「公共教程」 中,选择本教程——「Super-SloMo超级慢动作镜头的PyTorch实现」。

教程中样例展示文件是 Super-SloMo.ipynb,运行这个文件,会安装环境,并展示最终补帧而来的超级慢动作效果。

大家也可以使用自己的视频素材,将下方生成代码中的 lightning-dick-clip.mp4 改为你的视频文件名。

属性「scale」 用于控制生成视频的倍速,比如:设为 4,即 4 倍速慢放。

生成代码:

!python3 'Super-SloMo/eval.py' 'lightning-dick-clip.mp4' --checkpoint='/openbayes/input/input0/SuperSloMo.ckpt' --output='output-tmp.mp4'     --scale=4 print('Done')

转换视频格式代码:

!ffmpeg -i output-tmp.mp4 -vcodec libx264 -acodec aac output.mp4

该教程中,使用了网络上的某段视频,进行 Super SloMo 插帧,得到如下结果:

4 倍速慢放,看清武术动作的每一步

目前,该平台还能薅羊毛,每周都赠送 vGPU 的使用时长,人人都可轻松完成,赶快动手试试吧!

亲自动手,制作神奇的超级慢动作

参考资料:

查看教程

查看论文

项目主页

其他参考