基于上下文编码器的图像修复算法①

2023-10-28 05:38任鹏博毛克彪
高技术通讯 2023年9期
关键词:编码器损失卷积

任鹏博 毛克彪

(*宁夏大学物理与电子电气工程学院 银川 750021)

(**中国农业科学院农业资源与农业区划研究所 北京 100081)

0 引言

图像修复技术主要利用缺失区域周边或者外部辅助数据来对图片受损区域进行信息推理和修复[1]。在实际生活中,图像修复的应用十分广泛,比如对象移除、修复图像、图片修饰、文字移除等操作[2]。当前,图像修复技术有2 种,一种是基于传统的非深度学习算法,另一种是基于深度学习的图像修复算法。

基于扩散的方法[3]首次使用数字修补的方法进行图像修复,该方法大体上是基于变分方法和偏微分方程理论[4-6]。2000 年,文献[7]提出了BSCB(Bertalmio Sapiro Caselles Ballester)图像修复算法,它是一种基于数学建模和偏微分方程的方法。2021年,文献[8]对提出了一种基于向量场和灰度级别的联合插值方法来进行图像填充的技术。该类方法在要针对较窄或者较小的待修复区域,但在面对较大缺失区域或者图像纹理结构复杂时,结果往往会比较模糊。基于纹理合成的方法是先将图片生成一个集合,然后设计一个匹配原则,在修复图像时,针对缺失区域,寻找一个匹配度最高的块来进行填充[9]。文献[10]提出了一种纹理合成修复算法,之后又对该算法进行了改进[11],该方法在对缺失区域为背景区域时修复效果较好,但是当缺失区域为前景区域或者纹理结构较为复杂的区域时效果不是很理想。基于数据驱动的方法是基于外部数据库,在修复图像时,用数据驱动的方式寻找详细图像来进行目标图像的修复[12-13]。文献[14,15]提出了一种修复方法,该方法基于全局优化,使修复的结果得到了较大程度的改善。

近年来,深度学习技术发展迅猛,深度学习用端到端的方式来学习图像中的先验语义信息和隐式表达[16]。目前基于深度学习的图像修补方法主要分为基于自编码器(auto encoder,AE)和基于生成对抗网络(generative adversarial network,GAN)的图像修补算法。AE 采用卷积神经网络,从图像中抽取特征信息,并进行降维编码;译码器由反卷积神经网络构成,作用是根据编码器提取到的特征信息来重构原始图像。GAN 包括2 个网络,一个是生成网络,另一个是判别网络。其中生成网络用来生成缺失区域,判别网络的功能用来判断所产生图像的真伪,不断地引导生成网络学习训练和优化网络。2016 年,文献[17]提出了一种基于GAN 的上下文编码器图像的修复方法。2017 年,文献[18]使用上下文编码器加卷积神经网络马尔可夫随机场(convolution neural network Marcov random field,CNNMRF),

证明了从神经网络中间层提取的特征信息可以用来重建逼真的图像和纹理,并使用这些特征来传递艺术风格。同年文献[19,20]扩展上下文编码器,首次提出了深度学习图像修复模型。2018 年文献[21]提出了部分卷积这一概念,让图像修复更关注缺失区域。2021 年,文献[22]提出了一种基于多尺度的图像修复模型,该模型对图像大面积缺失包括图像边缘缺失都有较好的修复结果。

本文在AE 和GAN 的基础上,将两者结合,利用AE 进行图像的特征学习,推断生成图像的缺失区域,利用GAN 来对生成结果进行判断,通过对抗学习优化模型。在AE 的编码器和解码器之间通过全连接层传递信息。该全连接层与传统全连接层不同,它只在特征图内传递信息,而不连接不同特征图的参数,这样可以大大减少参数数量,之后加入一个步长为1 的卷积层,以在不同信道之间传播信息。最后对损失函数进行对比,验证损失函数的作用,并用本文模型与其他模型对比,证明本文模型的优势。

1 卷积神经网络和生成对抗网络

1.1 卷积神经网络

卷积神经网络(convolutional neural network,CNN)是一种多层的监督学习神经网络,它的结构主要包括3 个层:卷积层、采样层(也称池化层)和全连接层。其中卷积层和采样层是其关键模块,用来进行特征提取。

1.1.1 卷积层

卷积层是构建CNN 的核心层,通过卷积运算可以提取出图像的特征。在CNN 中,神经元仅与相邻神经元相连。在CNN 的某一个卷积层中,一般含有几个特征图,这些特征图都是由几个神经元构成,这些特征图中的神经元共用权重,而这些权重被称为卷积核。卷积核通常是用一个随机的小数矩阵来进行初始化,然后通过对网络进行训练,获得一个适当的权重。共享权值(卷积核)可以有效地减少网络中各个层次的联结,并减小过度拟合的危险。

图1 卷积神经网络

在卷积层之后,一般会跟一个激活函数,用来把卷积的结果做非线性映射。如果没有激活函数,每一层的输出都是线性的,这样无论有多少层,输出都是输入的线性组合,而线性模型的表达能力相当有限,因此引入激活函数可以使深层神经网络表达能力更加强大,几乎可以逼近任意函数。

1.1.2 采样层(池化层)

采样层对每邻域4 个像素求和变为1 个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个激活函数产生一个大概缩小4 倍的特征映射图Sx+1。

卷积之后生成的特征图中可能包含与识别任务无关的冗余信息,对其进行下采样的目的就是去除这些冗余信息,而不会破坏识别结果。通常在连续的卷积层之间会加入采样层,这样可以降低各个特征图的维度,减少网络中参数数量,同时保留有用信息,减少过拟合。

1.1.3 全连接层

在全连接层中所有神经元都有权重连接,全连接层在整个CNN 中是一个分类器的作用,它一般位于卷积神经网络尾部,可以将卷积层、采样层等学到的特征数据映射到样本标记空间。为了提高性能,全连接层中的神经元一般都采用ReLU 激活函数。

1.2 生成对抗网络

生成对抗网络(generative adversarial network,GAN)[23]是深度学习中的一个重要网络,可以同时训练2 个网络(生成器和鉴别器),并在极小极大算法中相互竞争。该方法克服了传统生成模式在实际应用中遇到的难题,巧妙地利用对抗学习的方法逼近某些无法求解的损失函数。

GAN 主要包括生成器(generator,G)和鉴别器(discriminator,D),生成器用来生成假的数据,判别器用来判断生成器产生的数据是否为真。这种方法可以被简单地理解为2个网络之间的博弈。在GAN的最初版本中,G和D是2 个多层次的感知网络结构。GAN 运行的数据可以是很多类型,这里以数字图像为参照介绍GAN 网络结构。

在图2 中,z为随机噪声。该算法利用原始图像和生成图像的数据,对2 种类型的神经网络进行训练。生成器可以通过一系列的随机数字,制造出一幅“假图像”,以此来骗过判别系统,而判别系统则负责分辨出这张图片的真伪,并给出相应的分数(score)。

图2 左边为GAN 网络,右边为GAN 训练,上部分为判别器训练,下部分为生成器训练

在训练D的过程中,直接将上一个周期G生成的照片与真实照片合并成x。再依次排列为0 和1,结果是虚假图为0,真实图为1。然后利用D(x) 产生一个由score 和y构成的范围在0 到1 之间的损失函数,进行梯度反转。

训练G时,要将G与D视为一体(D_on_G,DG)。整个DG 的输出还是score。将一套随机矢量z输入到DG 系统中,在G上产生一幅图像,由D对该图形进行评分,得到一个score 值,即DG 系统的正向处理。DG 系统所要进行的优化的最终目的就是让score 达到1,在这过程中score 的大小与y=1的差值可以构成损失函数,从而可以利用逆向传播梯度来实现。要注意D的参数在此无法进行训练,从而确保G的训练能够达到D评分的要求,GAN 模型的目标函数表达式为

其中,D(x) 表示将数据x送入判别器D后返回值,G(z) 表示将一个噪声z送入生成器G后的返回值,Pdata(x)和Pz(z) 为x和z的分布函数。

在此,对G网络的训练是为了使D(G(z))接近1,对D网络的训练是为了让D(G(z)) 接近于0。在训练的时候,一边固定一个网络参数,一边修改另一个的参数,这样可以让对手的错误达到最大,这就是一种对抗的理念。

2 基于上下文编码器的网络结构

基于上下文编码器的图像修复网络结构如图3所示,其总体架构是一个简单的编码器-解码器通道。对于输入的缺损图像,通过编码器得到图像的特征信息,然后经过全通道连接层传递到解码器,解码器根据图像的特征信息生成图像中的缺失部分,最后将生成部分与真实图像对比,给出是真或假的结果。此处的全通道连接层只在特征图内传递信息,而不连接不同特征图的参数,大大减少了参数量。之后加入一个步长为1 的卷积层,以在不同信道之间传播信息,若仅仅使用全连接层容易导致参数爆炸。

图3 基于上下文编码器的图像修复网络结构

2.1 编码器

编码器结构源自于AlexNet(Alexnet 模型包括5个卷积层和3 个池化Pooling 层,并且其中还有3 个全连接层),本方法使用的是第5 层卷积层之后的那一层池化层之前的所有内容,也就是全连接层之前的AlexNet 架构,将它提取出来,使用到编码器里,每一层都使用具有线性矫正单元LeakyReLu 激活函数。

与AlexNet 体系结构不同,本模型没有进行ImageNet 训练,而是从完全随机初始化的权重开始训练的,但是当编码结构被限制在卷积层中时,它就不能从一个角落向另一个角落传递信息。这是由于卷积层把所有的元素映射联系起来,但从不直接连接特定特征图中的所有位置。在当前的架构中,这样的信息传递是通过一个全连接层完成的,在这个过程中,所有的激活都会被直接地连接在一起。但是,如果把编码和译码器全部连接起来,那么参数的数目就会猛增,并且对现有图形处理器(graphics processing unit,GPU)进行有效训练也会变得非常困难。为了解决这一问题,本文采用了一个全通道连接层,把编码器和译码器连接起来。

2.2 全通道连接层

这一层是对常规全通道连接层的改进。在常规全通道连接层中,每一个神经元与后一层的所有神经元相连接,假设输入层是数量为m大小为n×n的特征图,输出为同样数量为m大小为n×n的特征图,那么总参数量为m×n×n×m×n×n等于m2n4。本文相较于常规全通道连接层,没有连接不同特征图之间的神经元映射,而是只连接同一特征图内的神经元映射,这样假设输入大小为m×n×n的特征图,输出同样大小为m×n×n的特征图,总参数量为m×n×n×n×n等于mn4,大大减少了参数数量。然后加入一个步长为1 的卷积层,以达到在不同通道之间进行信息交互的目的。

2.3 解码器

解码器利用编码器所提供的特征信息产生图像。编码结果是由全通道连接层与译码器相连的。解码器是一组上取样的卷积层,在全通道连接层后面,每个层都是一个上取样的卷积层,每一层都使用具有线性矫正单元ReLU 激活函数。先上采样,然后卷积,这一系列的上卷积加上之前编码器产生的特征的非线性加权上采样,可以随着训练生成更高分辨率的图像,直到达到需要的结果。

2.4 鉴别器

鉴别器是和编码器结构很类似的卷积层结构,是一系列的卷积层,每一层都使用具有线性矫正单元Leaky ReLU 激活函数。编解码器共同构成生成器,分别输入解码器生成的图片和原图像,比较判断结果是否是真实图像。

3 损失函数

损失函数一般用于估算预测结果与真实数据之间的差异,且具有非负性,损失值越低,鲁棒性越好。对于图像修复来说,修复的缺失区域经常会生成似是而非的情况。本文的上下文编码器模型中的损失主要分为两部分,重建损失(L2)和对抗性损失。重建损失用来捕捉丢失的结构及其与环境相关的一致性,它更倾向于取多种模型中的平均值。对抗损失努力让所预测的结果看上去是真实的,并且能够从分布中选取特定模式。

令输入图像为x,通过本文模型输出的图像为F(x),为二进制掩膜,对于缺失部分值为1,对于有效的输入部分值为0。本文将输入图片的中心部分设为缺失部分,掩膜值为1,其他部分掩膜值为0。训练过程中将自动为每幅图像生成这些掩膜。

3.1 重建损失

本文使用正则化的掩膜层下的重建损失(reconstruction loss,L2)距离作为重建损失函数Lrec。

L2 范数损失函数,也叫做最小平方误差,它是将预测值yi和真实值f(xi) 的差值的平方和最小化,定义为

L2 正则定义为

其中,ω为特征系数,λ为用户自己设定的正则化系数。正则化是为了防止过拟合,它通过降低模型的复杂性来缓解过拟合,对大数值的权重进行严厉的惩罚,对小数值的权重进行鼓励。如果ω小于1,ω2会更小。

本文的重建损失Lrec定义为

其中·表示矩阵对应位置相乘,M表示二值化的掩码(0 表示有效像素,1 表示缺失区域),x表示输入图像,F表示编解码器。经过这种简单损失函数能训练解码器生成大致结果轮廓,但是结果较模糊,而且不能捕获较高频率的细节信息。这是不可避免的,因为L2 损失函数在计算时,使用的是平均分布的损失值来进行预测,这样能够使误差最小化,但是会使生成的图片模糊。对此本文引入了对抗性损失。

3.2 对抗损失

GAN 对抗损失(adversarial loss,adv)的定义如式(1)所示。本文采用了GAN 的框架进行预测,但是其在上下文编码器中不易训练,因为判别器D很容易利用原始图像和修复图像中的不连续感知来区分出真实图像和生成的预测图像。因此,对上下文编码器中的生成器进行调整,得到的上下文编码器对抗损失Ladv为

在此,判别器D和函数F联合作用,使用随机梯度下降进行优化,该优化可使输出看起来更加真实,同时去除了输入中的噪声矢量z。

3.3 联合损失

联合损失(joint loss)就是重建损失和对抗损失的加权,其定义为

其中,λrec和λadv为重建损失和对抗损失的2 个超参数。

4 实验验证

4.1 实验数据

模型的实现基于Keras 框架,模型的输入图像Places2 数据集中的arch 类图片共5000 张,这些图片是256 像素×256 像素的3 通道24 bit 位深度图,随机抽取其中500 张作为测试集,训练集与测试集比例为10 ∶1。

4.2 实验设置

本实验选择Adam 优化器[24],学习率为0.0001,β1参数调整为0.5;在联合损失中对重建损失参数λrec的取值为0.999,对抗损失参数λadv取值为0.001。训练中由于条件限制,为了保证训练效率,将所有图像掩码设定为图像中心,并根据掩码生成缺损区域。分别设置掩码大小为32 ×32,64 ×64,128 × 128。模型总训练轮数(epoch)分别为10 000、20 000 和30 000,批大小(batch_size)均设置为16,即每轮随机抽取16 张图片进行训练,每50轮输出一次损失值和修复结果。损失值的结果以掩码大小为64 ×64 为例进行展示。

4.3 实验结果

结果如图4 所示,从图中可以看出,基于上下文编码器的方法修复图像,其损失值在刚开始较大,经过训练逐渐收敛,重建损失最终稳定在0.015 左右,对抗损失最终稳定在0.014 左右。修复结果如图5所示,可以看出,无论是在纹理上还是在语义信息上,该模型都取得了较好的结果。根据训练次数可知,对于越小的缺失部分,该模型学习得越快,修复结果也越好;对于越大缺失部分的图像,就需要越多次数的训练。

图4 重建损失和对抗损失

图5 不同大小掩码的修复结果

4.4 对比实验

4.4.1 损失函数对比

本文分别单独使用重建损失和对抗损失,以掩码大小为64 ×64 为例,分析其输出结果的差距。

图6 和图7 分别展示了单独使用重建损失和对抗损失的损失值与修复结果。可以看出,单独使用重建损失,重建损失最终稳定在0.018 左右,修复结果内容良好,但会导致较严重的模糊;单独使用对抗损失,对抗损失并不收敛,并且损失值达到1.3 左右,修复结果内容虽然清晰,但严重不匹配。与重建损失和对抗损失相比,联合损失显著减轻了各自的弱点,改善了修复效果,生成的纹理细节更加清晰,与原图相似度较大,减少了无意义的重复内容,结构更合理,更逼近真实情况。在面对较大待修复缺损区域时,结构更加完整,比如图中的桥、拱门、楼房等。

图6 单独使用重建损失的损失值和修复结果

图7 单独使用对抗损失的损失值和修复结果

4.4.2 与其他模型对比

实验通过计算常规的评估指标,包括平均绝对误差(mean absolute error,MAE),峰值信噪比(peak signal-to-noise ratio,PSNR),结构相似性(structural similarity index,SSIM),对比修复效果的优劣,比对的模型是RFR(recurrent feature reasoning)模型[25]和EC(edge connect)模型[26]。

EC 模型使用Adam 优化器,学习率为0.0001,β1=0,β2=0.9,batch_size 设置为16,其他超参数设置与原文一致;RFR 模型使用Adam 优化器,学习率为0.0001,batch_size 设置为16,其他超参数设置与原文一致。测试图像采用与本文一致的place2 数据集中arch 类的500 张图片,计算结果取平均值。对比并未采用掩膜大小为32 ×32 的结果,因为缺失区域占比太小,对比差异不大。各模型具体对比结果如表1 所示。

表1 各模型评估指标对比

由表1 可知,本文所使用的模型在各项指标上与EC 和RFR 模型相比,均有所提升。

5 结论

图像修复是图像处理领域的一个重要分支,近些年来,随着深度学习技术的发展,图像修复方向涌现了许多方法和方向。本文使用结合自编码器(AE)和生成对抗网络(GAN)的结构,基于上下文训练生成缺失区域的图像。本文对残缺图像的修复在主观效果和各种指标数据上均有所提升。

由实验结果可以看出,该方法还有很大的改进空间,存在的问题及后续研究的思路如下。

(1)在修复的掩膜区域边缘,仍有一定程度的截断感和模糊,如何对这些部分进行优化,应是未来优化的一个重点。

(2)在图片的尺寸上,本方法输入的是大小256×256 的图片,实际中输入的图片可能是各种大小和纵横比,这样会一定程度影响修复效果。因此,一种对任意大小输入图片都有很好修复效果的算法,是很必要的。

(3)对于大小不同的缺损区域,可以看到,在训练相同次数时,大缺损区域修复效果没有小缺损区域修复结果好,大缺损区域的每轮训练时间也比小缺损区域长,且需要更多的训练次数。如何提高图像修复的精度和效率,也是一个很重要的研究方向。

猜你喜欢
编码器损失卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
胖胖损失了多少元
从滤波器理解卷积
玉米抽穗前倒伏怎么办?怎么减少损失?
基于FPGA的同步机轴角编码器
基于傅里叶域卷积表示的目标跟踪算法
基于PRBS检测的8B/IOB编码器设计
JESD204B接口协议中的8B10B编码器设计
一般自由碰撞的最大动能损失
损失