普通视频转高清:10个基于深度学习的超分辨率神经网络

本文源自 RTC 开发者社区,做者吴晓然,声网高级视频工程师,专一于视频编解码及相关技术研究,我的技术兴趣包括多媒体架构、深度学习。

在 AlphaGo 对弈李世石、柯洁以后,更多行业开始尝试经过机器学习优化现有技术方案。其实对于实时音视频来说,对机器学习的研究已有多年,咱们曾分享过的实时图像识别只是其中一种应用。咱们还能够利用深度学习来作超分辨率。咱们此次就分享一下用于超分辨率的深度学习基本框架,以及衍生出的各类网络模型,其中有些网络在知足实时性方面也有不错的表现。算法

机器学习与深度学习

对于接触机器学习与深度学习较少的开发者,可能会搞不清二者的差异,甚至认为机器学习就是深度学习。其实,咱们用一张图能够简单区分这个概念。性能优化

上世纪50年代,就有人工智能的概念,后来也有一些较基础的应用,好比国际象棋。但到了70年代,因为硬件性能的制约,以及训练数据集的匮乏,使得人工智能经历了一段低谷。人工智能包括了不少,好比机器学习、调度算法、专家系统等。到了80年代才开始出现更多机器学习的应用,好比利用算法来分析数据,并进行判断或预测。机器学习包括了逻辑树、神经网络等。而深度学习,则是机器学习中的一种方法,源于神经网络。网络

超分辨率是什么?

超分辨率是基于人类视觉系统提出的概念。1981年诺贝尔医学奖获奖者David Hubel、Torsten Wiesel,发现人类视觉系统的信息处理方式是分层级的。第一层是原始的数据输入。当人看到一我的脸图像时,首先会先识别出其中的点、线等边缘。而后进入第二层,会识别出图像中一些基本的组成元素,好比眼睛、耳朵、鼻子。最后,会生成一个对象模型,也就是一张张完整的脸。架构

而咱们在深度学习中的卷积神经网络(以下图为例),就是模仿了人类视觉系统的处理过程。正所以,计算机视觉是深度学习最佳的应用领域之一。超分辨就是计算机视觉中的一个经典应用。app

超分辨率是经过软件或硬件方法,提升图像分辨率的一种方法。它的核心思想,就是用时间带宽换取空间分辨率。简单来说,就是在我没法获得一张超高分辨率的图像时,我能够多拍几张图像,而后将这一系列低分辨率的图像组成一张高分辨的图像。这个过程叫超分辨率重建。框架

为何超分辨率能够经过多拍几张图像,就能提升图片分辨率呢?机器学习

这牵涉到抖动。咱们常常说的拍照防抖动,其实防的是较明显的抖动,但微小的抖动始终存在。在拍摄同一场景的每张图像之间,都有细微差异,这些微小的抖动其实都包含了这个场景的额外信息,若是将他们合并,就会获得一张更为清晰的图像。函数

有人可能会问,咱们手机都能先后置两千万,为何须要超分辨率技术呢?这种技术应用场景是否是很少?性能

其实不是。了解摄影的人都知道。在相同的感光元器件上,拍摄的图像分辨率越高,在感光元器件上,单个像素占的面积越小,那会致使通光率越低,当你的像素密度到达必定程度后,会带来大量噪声,直接影响图像质量。超分辨率就能够解决这种问题。超分辨率有不少应用,好比:学习

  • 数字高清,经过这种方法来提升分辨率

  • 显微成像:合成一系列显微镜下的低分辨率图像来获得高分辨率图像

  • 卫星图像:用于遥感卫星成像,提高图像精度

  • 视频复原:能够经过该技术复原视频,例如老电影

可是,有不少状况下,咱们只有一张图像,没法拍摄多张,那么如何作超分辨率呢?这就须要用到机器学习了。比较典型的例子,就是在2017年Google 提出的一项“黑科技”。他们能够经过机器学习来消除视频图像中的马赛克。固然,这项黑科技也有必定限制,如下图为例,它训练的神经网络是针对人脸图像的,那么若是你给的马赛克图像不是人脸,就没法还原。

超分辨率神经网络原理

超分辨率神经网络(Super-Resolution CNN,SRCNN)是深度学习应用在超分辨率领域的首个模型。原理比较简单。它有三层神经网络,包括:

  • 特征提取:低分辨率图像通过二项式差值获得模糊图像,从中提取图像特征,Channel 为3,卷积核大小为 f1*f1,卷积核个数为 n1;

  • 非线性映射:将低分辨率图片特征映射到高分辨率,卷积核大小1*1

  • 图像重构:恢复细节,获得清晰的高分辨率图像,卷积核为f3*f3

参数调节是神经网络中比较玄的部分,也是最为人诟病的部分。不少人认为参数调节很像老中医看病,一般缺乏理论依据。在这里列出了几个在 n1 取不一样值的时候,所用的训练时间和峰值信噪比(PSNR,用于判断图片质量的参数,越高越好)。

在训练中,使用均方偏差(Mean Squared Error, MSE)做为损失函数,有利于得到较高的PSNR。

训练结果如何呢?在下表中,列出了几个传统方法与 SRCNN 方法的结果对比。最左一列是图片集,右侧分别列出了每一个方法的所用训练时间和图片峰值信噪比。能够看出,尽管有些图片,传统方法得出的结果更优于深度学习,可是整体来说,深度学习稍胜一筹,甚至所需时间更短。

有人说一图胜千言。那么实际图片效果如何呢?咱们能够看下面两组图片。每组第一张是小分辨率的原图,后面经过不一样的方法来实现高分辨率的大图。相比传统方法,SRCNN 的图片边缘更加清晰,细节恢复的更好一些。以上就是最初的超分辨率的深度学习模型。

9个超分辨率神经网络模型

SRCNN 是第一个超分辨率的神经网络模型。在 SRCNN 这个模型出现后,更多应用于超分辨率的神经网络模型。咱们如下分享几个:

FSRCNN

相对 SRCNN,这个方法不须要对原始图片使用二项式差值,能够直接对小分辨率图像进行处理。在提取特征值以后,缩小图片,而后通过 mapping、expending、反卷积层,而后获得高分辨率图片。它好处是,缩小图片能够下降训练的时间。同时,若是你须要获得不一样分辨率的图片,单独训练反卷积层便可,更省时。

ESPCN

这个模型是基于小图进行训练。最后提取了 r² 个 Channel。好比说,我想将图片扩大到原图的3倍,那么 r 就是缩放因子 3,Channel 为9。经过将一个像素扩充为一个3x3的矩阵,模拟为一个像素的矩阵,来达到超分辨率的效果。

对实时视频进行超分辨率处理的实验结果也很是理想。对 1080 HD 格式的视频进行3倍放大,SRCNN 每帧须要0.435s,而 ESPCN 则只需0.038s。

VDSR

这是2016年获奖的一个模型。咱们作视频编解码的都知道,图像之间是存在残差的。它认为原始的低分辨率图片与高分辨率图片之间,低频份量几乎同样,缺失的是高频份量,即图片细节。那么训练的时候,只须要针对高频份量进行训练就好了。

因此它的输入分为两部分,一是将整张原图做为一个输入,另外一部分则是对残差进行训练而后获得一个输入,将二者加起来就获得一张高分辨率图像。这样就大大加快了训练速度,收敛效果也更好。

DRCN

它仍是分为三层。可是在非线性映射这一层,它使用了一个递归网络,也就是说,数据循环屡次地经过该层。将这个循环展开的话,等效于使用同一组参数的多个串联的卷积层。

RED

每个卷积层都对应一个非卷积层。简单来说,能够理解为是将一张图片进行了编码,而后紧接着进行解码。它的优点在于解决了梯度消失的问题,并且能恢复出更干净的图片。它和 VDSR 有类似的思路。中间卷积层与反卷积层的训练是针对原始图片与目标图片的残差。最后原图会与训练输出结果相加,获得高分辨率的图片。

DRRN

在这个模型里你能够看到DRCN、VDSR的影子。它采用了更深的网络结构来提高性能。其中有不少个图片加强层。能够理解为,一张模糊的图片,通过多个加强层,一级级变得更加清晰,最终得出高清图片。你们能够在名为tyshiwo的 Github 上找到源码。

LapSRN

LapSRN 的特别之处在于引入了一个分级的网络。每一级都只对原图放大两倍,而后加上残差得到一个结果。若是对图片放大8倍的话,这样处理的性能会更高。同时,在每一级处理时,均可以获得一个输出结果。

SRDenseNet

它引入了一个 Desent Block 的结构。上一层网络训练出的特征值会传递到下一层网络,全部特征串联起来。这样作的好处是减轻梯度消失问题、减小参数数量。并且,后面的层能够复用以前训练得出的特征值,不须要重复训练。

SRGAN

它能够利用感知损失(perceptual loss)和对抗损失(adversarial loss)来提高恢复出的图片的。

在这个模型中有两个网络,一个是生成网络,另外一个是判别网路,前者会生成高分辨率图片,后者则会判断这张图是不是原图,若是结果为“否”,那么前者会再次进行训练、生成,直到能够骗过判别网络。

以上这些神经网络模型均可以应用于视频处理中,但实际应用还须要考虑不少因素,好比系统平台、硬件配置、性能优化。其实,除了超分辨率,机器学习与实时音视频有不少可结合的应用场景,好比音视频体验优化、鉴黄、QoE 改进等。咱们将在今年9月的 RTC 2018 实时互联网大会上,将邀请来自 Google、美图、搜狗等公司技术专家分享更多实践经验与干货。

相关文章
相关标签/搜索