日复一日临摹人像的练习,让画家画出一张完整的人脸,只有几个关键特征。同样,我们希望机器能够通过低清图像有限的图像信息推断出图像对应的高清细节,这就需要算法像画家一样“理解”图像内容。至此,传统规则算法应接不暇,新兴的深度学习以超清图像闪耀星空。图1.最新的Pixel循环网络在图像超清上的应用。左图为低分辨率图像,右图为其对应的高清图像,中间图像为算法生成的结果。这是一个4倍超清的问题,即把边长扩大到原来的4倍。得益于硬件的飞速发展,短短几年间更新了好几代手机,旧手机拍摄的照片在大分辨率屏幕上变得模糊不清。同样,图像分辨率的提高也增加了网络带宽的压力。这样,图像超清算法就发挥作用了。对于保存多年的老照片,我们采用超清算法,让细节栩栩如生;面对网络传输的带宽压力,我们先对图像进行压缩传输,再用超清算法进行还原,可以大大减少传输数据量。传统的三次插值等几何方法和片段匹配等传统匹配方法无力满足此类需求。深度学习的出现使得算法对图像进行语义级操作成为可能。本文旨在介绍深度学习技术在图像超清晰化问题上的最新研究进展。深度学习最早出现于图像,其主要的图像处理技术是卷积神经网络。关于卷积神经网络的起源,业界对Alex在2012年ImageNet比赛中的亮眼表现给予了认可。虽时隔五年,已是陈词滥调。因此,本文不再重复卷积神经网络的基本细节。下面使用CNN(ConvolutionalNeuralNetwork)来指代卷积神经网络。自CNN出现以来,催生了许多研究热点,其中印象最深刻的有5个:深度探索和广度探索:VGG网络的出现标志着CNN在搜索深度和广度上取得了初步突破。结构探索:Inception及其变体的出现进一步增加了模型的深度。ResNet的出现,让深度学习的深度变得“真实”,达到了数百甚至数千层。内容损失:图像风格转换是CNN在应用层面的一个小高峰,涌现出一批以Prisma为首的小型创业公司。但图像风格迁移的真正技术贡献是在预训练模型上通过特征图在语义层面生成图像。AgainstNeuralNetworks(GAN):虽然GAN是机器学习领域的架构创新,但它最初的应用是在CNN上。通过对抗训练,可以借监督学习之风改进生成模型,将生成模型的质量提升到一个更高的水平。PixelCNN:引入像素之间的依赖关系,是CNN模型结构方法的一个比较大的创新,用来生成图像,效果最好,但是有失败率。这五个热点都体现在超清图像问题上。下面就为大家一一揭晓。CNN第一枪图2.第一个应用于超清图像问题的CNN网络结构。输入是低分辨率图像,输出是高清图像。该结构分为三个步骤:低分辨率图像的特征提取、低分辨率图像特征到高清特征的映射、高清图像的重建。超清图像的特点是低清图像和高清图像中的很大一部分信息是共享的。基于这个前提,在CNN出现之前,业界的解决方案是使用一些特定的方法,如PCA、SparseCoding等,将低分辨率和高分辨率的图像转化为特征表示,然后将特征表示进行映射。CNN在传统方法结构的基础上,也将模型分为三个部分,即特征提取、非线性映射和特征重建。由于CNN的特点,这三部分的运算都可以使用卷积来完成。因此,虽然模型结构的解释与传统方法类似,但CNN是一个可以同时联合训练的连续体,在数学上有更简单的表达。传统方法的影子不仅体现在模型解释上,还体现在具体操作上。在上面的模型中,需要对数据进行预处理,提取出很多patches。这些补丁可能相互重叠,这些补丁的集合就是整个图像。上述CNN结构应用于这些补丁而不是整个图像。得到所有图像的patch后,将这些patch组合起来得到最终的高清图像,对重叠的部分进行平均。更深、更快、更准确的CNN图3.基于残差的深度CNN结构。该结构使用残差连接将低分辨率图像添加到CNN的输出中以获得高分辨率图像。即仅使用CNN结构来学习低分辨率图像所缺乏的高清细节。图2的方法虽然效果比传统方法高很多,但也存在几个问题:训练层数少,视野不够;训练太慢,导致在深度网络上没有好的结果;不支持多倍数高清。针对上述问题,图3中的算法提出了更深层次的网络模型。并使用三种技术来解决图2中算法的问题。第一种技术是残差学习。CNN是端到端学习。如果像图2的方法直接学习,那么CNN需要保存图像的所有信息,在恢复高清细节的同时需要记住所有的低分辨率图像。信息。这样网络中的每一层都需要存储所有的图像信息,导致信息过载,使得网络对梯度非常敏感,容易造成梯度消失或梯度爆炸。在图像超清问题中,CNN的输入图像和输出图像中有很大一部分信息是共享的。残差学习是一种只学习图像的高清细节信息的算法。如上图所示,将CNN的输出与原始低分辨率图像相加得到高分辨率图像,即CNN学习高分辨率图像和低分辨率图像的区别。这样CNN携带的信息量小,更容易收敛,也能取得比非残差网络更好的效果。之所以高清图可以和低清图相加减去,是因为在数据预处理的时候,通过插值的方式把低清图缩放到和高清图一样的大小。所以图片虽然叫低清,但是图片大小其实和高清图片是一样的。第二种技术是高学习率。在CNN中设置高学习率通常会导致梯度爆炸,因此在使用高学习率的同时使用自适应梯度截断。截止区间为[-θ/γ,θ/γ],其中γ为当前学习率,θ为常数。第三种技术是数据混合。最理想的算法是为每一个倍数训练一个模型,但这极其耗费资源。因此,与之前的算法不同,该技术将不同倍数的数据集混合在一起训练模型,从而支持高清的多个倍数。感知损失在此之前,在使用CNN解决高清问题时,对高清图像的评价方法是计算CNN生成模型生成的图像与生成的图像之间以像素为单位的损失函数(一般为欧式距离)实际图像。这种损失函数得到的模型只捕捉到像素级的规则,泛化能力比较弱。感知损失是指将CNN生成模型和实际图像都输入到训练好的网络中,得到两幅图像在训练好的网络的某些层上的激活值,在激活值函数上计算损失。由于CNN可以提取高级特征,因此基于感知损失的模型可以学习到更稳健和更有说服力的结果。图4.基于感知损失的图像风格迁移网络。该网络还可用于图像超分辨率问题。左边是一个要训练的转换网络,用于对图像进行操作;右边是一个训练有素的网络,有几个层,将用于计算损失。图4是感知损失网络,最初用于快速图像风格转换。在这个结构中,需要训练左边的Transform网络生成图像,将生成的图像Y、内容图像和风格图像输入到右边训练好的VGG网络中,得到损失值。如果去掉style图片,content图片改成高清图片,输入改成低清图片,那么这个网络就可以用来解决超清图片的问题。对抗神经网络(GAN)图5.用于对抗训练的生成网络G和判别网络结构D。上半部分是生成网络G,很深,使用residualblock和skip-connection结构;下半部分是判别网络D。对抗性神经网络可以说是最近机器学习中最具变革性的成就。主要思路是训练两个模型G和D,G是生成网络,D是分类网络。G和D都以D的分类精度进行训练。G用于某种生成任务,例如图像超分辨率或图像恢复。G生成图像后,将生成图像和真实图像放入D中进行分类。使用对抗神经网络训练模型是一个追求平衡的过程:保持G不变,训练D提高分类准确率;保持D不变,训练G降低分类准确率,直到平衡。GAN框架使无监督生成任务能够利用监督学习进行改进。基于GAN框架,只要定义生成网络和分类网络,就可以完成一定的生成任务。而这篇将GAN应用于图像高清问题的论文可以说是神作。生成模型较深,使用residualblock和skip-connection;在GAN的损失函数基础上也加入了perceptualloss。GAN的生成网络和分类网络如图5所示,其中生成网络本身也可以是单独的图像超清算法。论文中分析了GAN和non-GAN的区别,发现GAN主要工作在细节上,而不能更深入的解释。“无法解释”也是目前GAN的短板之一。PixelRecurrentNetwork(PixelCNN)虽然图5中的GAN可以取得更好的效果,但由于可解释性较差,难免有被套用的嫌疑。事实上,超清图像的问题有一个关键问题,就是一张低清图像可能对应多张高清图像,那么问题就来了。如果我们把低分辨率图片中需要高清的部分分成A、B、C、D等部分,那么A可能对应A1、A2、A3、A4,B对应B1、B2,B3,B4,如此类推。假设A1、B1、C1、D1对应一张完美的高清图片。那么现有的算法可能会生成A1、B2、C3、D4等混搭,导致高清图像模糊。为了验证上述问题的存在,想象一个极端的情况。图6.图像超清晰模糊问题分析的图形说明。前半部分是用于分析问题的数据集的构建。下半部分是现有损失函数对这个问题的影响。通过对比可以看出,PixelCNN可以防止这种模糊。为了分析图像模糊问题的原因,在图6的上半部分,基于MNist数据集生成了一个新的数据集。生成方式如下:将MNIST数据集中图片A的长宽加倍,每张图片可以生成两张图片A1和A2,A1中的A在右下角,A2中的A在左上角。将原始图像视为低分辨率图像,将生成的图像视为高分辨率图像。使用图6下半部分列出的三种方法进行训练,得到的模型在生成图像时会产生图6下半部分的结果。也就是说,每个像素点可能以等概率投影到左上部分和右下部分,导致生成的图片出现错误。引入PixelCNN后,由于像素之间的依赖关系,很好的避免了这种情况。为解决上述问题,需要在生成图像时引入先验知识。凭借对人脸的了解,画家可以画出令人信服的高清细节。类比超高清图像的问题,先验知识就是告诉算法选择哪种高清结果。在超清图像的问题中,这种认识体现在像素之间的相互依存关系上。这样就可以保证A、B、C、D这四个不同的部分在高清版的选择上是一致的。图7基于PixelCNN的CNN网络结构解决超清图像问题。其中,先验网络为PixelCNN;调节网络是图像生成网络,其结构和功能类似于GAN中的生成网络和感知损失中的转换网络。模型架构如图7所示。其中,条件网络是一种基于低分辨率图像生成高清图像的网络。它可以独立生成以像素为单位的高清图像,就像GAN中的G网络,perceptualloss中的conversionnetwork。priornetwork是一个PixelCNN组件,用来增加高清图片像素之间的依赖,让像素选择一致的高清细节,从而看起来更自然。那么PixelCNN是如何增加依赖的呢?在生成网络时,PixelCNN以像素为单位生成,从左上角到右下角,在生成当前像素时,会考虑之前生成的像素。如果加入先验网络和条件网络的混合,PixelCNN在生成图像时,除了考虑之前生成的像素外,还需要考虑条件网络的结果。综上所述,上述算法是在超清图像问题中使用的典型CNN结构。此外,还有许多其他结构取得了较好的效果。随着CNN网络结构层次的深入,离实际场景越来越远。例如,基于GAN的网络结构的训练难以稳定,结果不可解释;基于PixelCNN的网络无法并行化,因为它需要在像素级生成,导致生成效率极低。此外,从实用性出发,可以在数据的方向上进行进一步的优化。例如,目前的算法输入图像都是从低分辨率图像进行三次插值。那么,小网络得到的结果是否可以作为初始化值呢?再比如多个小网络串联是否能得到比一个大网络更好的结果等。超清图像的问题是一个比较简单的图像语义问题。我相信这只是图像语义操作的开始。未来,越来越多的图像处理问题将由CNN的出现来解决。
