李二强, 陈凯健, 周 漾
(深圳大学 计算机与软件学院, 广东 深圳 518060)
纹理合成是图形学及图像处理领域的基础问题之一, 纹理合成技术旨在合成符合用户要求的纹理图片, 在真实感和非真实感绘制、 图像修复、 图像艺术风格转换等领域应用广泛. 纹理合成方法主要分为两大类: 基于参数化过程的和基于样例的纹理合成. 由于前者包含复杂的参数设计, 因此目前的研究工作以后者为主.
基于样例的纹理合成算法研究目前已取得许多成果[1-14]. 传统基于样例的纹理合成方法主要从源纹理图像拷贝像素颜色至结果图像, 包括逐像素拷贝[1-2]、 逐块拷贝拼接[3-4]和基于块纹理优化[5,15], 这些算法在均匀纹理(随机纹理和规则纹理等)的合成上取得了较好的效果. 对于非均匀纹理, 近年才有研究者通过分析样图, 提取一些人工设计特征作为引导通道实现可控合成, 例如边缘[6]和渐变[7]等. 但这些方法可处理的非均匀纹理有限. 深度学习技术的发展为纹理合成方法带来了新思路. Gatys等[8]用神经网络实现了基于样图的纹理合成工作, 该方法将神经网络中间层的特征图统计信息作为深度纹理表征, 通过反馈网络优化合成结果; Ulyanov等[9]将文献[8]的方法转换为前馈神经网络; Li等[12]将生成对抗网络引入到纹理合成中, 该网络能同时进行纹理合成和艺术风格迁移; 文献[11]提出了一种用于合成周期性重复纹理的生成对抗网络. 但这些深度学习方法仍仅适用于随机或规则性重复等均匀纹理. Sendik等[16]对文献[8]的工作进行了改进, 通过引入深层关联误差项, 提高了具有规则结构的非均匀纹理合成质量, 但该方法对大尺度结构的感知能力和感知范围有限, 也不能处理具有空域变化的非均匀纹理. Zhou等[14]基于生成对抗网络, 提出了通过训练网络学习从小纹理块扩展成包含其大纹理块的映射, 使得网络在学习纹理模式内分布的同时, 还能使输出结果符合输入纹理的结构, 从而解决了非均匀纹理合成的难题. 但这些方法对每张纹理图片都需单独训练一个专门网络(称为单一纹理扩展模型), 当需要学习多张纹理的合成时, 空间消耗呈线性增加. 如果简单将文献[14]的方法直接用于多张纹理合成, 即直接使用多张纹理图像训练单一纹理扩展模型, 当纹理图像间的纹理模式接近时, 会出现合成结果退化为同一种纹理的现象, 在生成对抗网络中称为模式崩溃现象. 而且文献[14]方法使用的生成器网络只有一个条件输入, 即使网络能学习到多种不同的纹理模式, 在进行纹理迁移时, 用户也无法控制生成想要的纹理模式或风格. 目前已有通过过拟合单一图像实现自然图像编辑的工作, 如InGAN[17]和SinGAN[18]方法, 这些方法也可直接用于纹理合成, 但与文献[14]方法相同, 每张图像都需要训练一个单独的网络.
针对上述问题, 本文在文献[14]方法的基础上, 提出一种新的适用于多重纹理扩展合成与迁移的网络. 首先通过在判别器中增加分类误差, 使判别器在区分生成数据和真实数据的同时, 还能进一步正确判别输入纹理来自哪一张训练图像, 从而改善模式崩溃问题. 其次, 为达到纹理迁移中用户对纹理模式的控制, 将生成器修改为双流数据输入, 其中一流提供结构引导特征, 另一流提供纹理模式特征, 融合两种特征后解码生成最终的纹理图像. 实验结果表明, 本文的多重纹理扩展模型不仅可用一个网络就能正确学习到多张纹理图像的纹理模式, 训练好的模型还具有更好的纹理迁移功能.
不同方法的多重纹理扩展结果如图1所示. 文献[14]提出的从小纹理块到包含其大纹理块的扩展映射, 可视为一个完美的纹理合成过程, 如图2所示. 基于该假设, 先从单张纹理采样出足够多的大纹理块作为生成结果参考图像, 再从这些纹理块中随机采样出小纹理块作为输入图像, 利用对抗训练的方法, 最终训练生成器即学会了对任意大小的该种纹理由小到大的扩展合成. 除扩展相同纹理模式的输入图片外, 训练好的网络还能将任意输入图片进行纹理迁移, 生成保留输入图片的大尺度结构, 同时具备训练样本纹理模式的合成纹理. 但该方法需对每张纹理图片都单独训练一个纹理扩展模型, 如果需学习多张纹理的合成时, 空间消耗将呈线性增加. 将文献[14]的方法直接应用于多张纹理合成, 即直接在多张纹理图像上采样训练纹理对, 训练其同一个纹理扩展模型, 可能导致以下问题:
1) 当训练集中纹理图像间的纹理模式接近时, 不同纹理输入的合成结果退化为同一种纹理模式, 如图1(C)所示, 这种现象在生成对抗网络中称为模式崩溃;
2) 生成器网络只有一个条件输入(提供大尺度结构), 因此即使网络能学习到多种不同的纹理模式, 在进行纹理迁移时用户也无法控制输出的纹理模式或风格.
图1 不同方法的多重纹理扩展结果
图2 单一纹理扩展合成过程
针对上述问题, 本文基于单一纹理扩展模型的思想, 提出一种新的多纹理扩展合成网络, 如图3所示. 该网络生成器包含双流输入, 分别提供结构控制与纹理模式/风格, 从而使训练好的模型能按用户指定的纹理模式进行纹理迁移. 对于判别器网络, 本文受ACGAN[19]启发, 在PatchGAN[20]判别器基础上增加一个分类器网络分支, 从而改善多重纹理扩展的模式崩溃现象.
图3 多重纹理扩展模型架构
1.2.1 生成器网络
生成器网络采用双流(two-stream)输入, 一流输入结构引导图片, 另一流输入纹理模式图片. 首先, 将双流图片分别输入到预训练的VGG19网络模型, 结构引导流使用VGG19模型的relu3_4层提取图片的特征图, 提供扩展结果的大尺度结构引导; 纹理模式流使用VGG19模型的relu3_1层提取纹理模式特征图, 计算其Gram矩阵[21]作为图片的纹理表征, 控制扩展结果的整体纹理风格. 其次, 为生成器网络引入启发层[22], 对结构特征图及纹理特征图的Gram矩阵进行融合, 输出纹理化的结构特征图. 为提升生成器网络的合成能力, 本文在启发层后加入6个残差网络模块, 进行图像特征的深度加工. 最后, 解码器根据深度特征生成图片. 解码器的上采样层比编码器的下采样层多一层, 以实现纹理图片由小到大的扩展合成. 本文网络生成的图片结构特征明显, 很好地保留了大尺度结构的完整性, 纹理清晰度高, 保留了纹理的整体风格及局部细节特征.
1.2.2 判别器网络
图4 分类器网络结构
在多重纹理扩展训练中, 判别器的主要任务是对多张纹理平行进行真假纹理块的判别, 即寻找每个纹理样本的真假纹理块二分类边界. 如果判别器分类能力不足, 则可能错误选择其他纹理样本类别的二分类边界, 对生成器回传错误分类的真假判别梯度, 从而导致输入纹理图与生成图像纹理模式不匹配并可能出现模式崩溃问题. 基于此, 本文采用一种基于局部判别的判别器网络, 其基础结构如图3中蓝色虚线框内所示. 本文判别器网络由若干个卷积模块和下采样卷积模块组成, 与传统判别器网络不同, 输入该判别器网络一张图片, 输出为一个二维矩阵, 因此提高了判别器输出的信息量及生成对抗网络训练的稳定性. 为解决纹理扩展的模式崩溃问题, 受ACGAN[19]的启发, 本文在原判别器网络最后一个下采样卷积模块后增加一个分类器网络模块, 如图4所示, 使得判别器在区分生成数据和真实数据的同时, 还要能进一步正确判别输入纹理来自哪一张训练图像, 从而改善多重纹理扩展的模式崩溃问题.
进行分类训练时, 训练开始前先对多张纹理图片进行one-hot标签化处理, 以提供真实的分类标签. 训练过程中, 根据判别器的高层特征, 分类器网络对平行训练的纹理样本进行分类, 输出预测的one-hot分类标签. 在判别器和生成器网络训练过程中, 存在两种分类误差: 纹理样本分类误差和合成结果分类误差.
在判别器训练阶段, 纹理样本误差负责迫使分类器网络对输入图片进行正确地分类, 其计算公式为
(1)
其中θC表示分类器网络的网络参数,n为标签向量p的长度,p(i)和q(i) 分别为目标纹理标签向量的第i位和将目标纹理输入判别器网络后分类器网络输出概率向量的第i位. 在生成器训练阶段, 合成结果分类误差负责迫使生成器网络合成正确分类的合成结果, 其计算公式为
(2)
其中r(i)为将生成器网络合成结果输入判别器网络后分类器网络输出概率向量的第i位.
如图1(B)所示, 在增加了分类误差后, 3类相似的纹理可按自身的纹理模式进行扩展生成. 实验表明, 通过添加分类器网络模块和使用分类误差, 有效解决了模式崩溃问题.
1.3.1 纹理扩展训练流程
类似于文献[23]的训练方法, 本文以交替的方式对判别器和生成器进行迭代训练, 训练过程如下:
1) 对进行扩展训练的某张纹理样本, 先从纹理样本中随机裁剪2K×2K目标纹理块Pt作为真实样本, 再从Pt纹理块中随机裁剪K×K纹理块Pin作为生成器的结构输入和纹理输入, 输出2K×2K生成纹理块Pout;
2) 分别以Pt和Pout作为真实样本和生成样本, 交替地对判别器与生成器进行迭代训练. 重复上述两步, 直至设定迭代次数完毕为止.
1.3.2 损失函数
在模型训练过程中, 除使用对抗训练误差Ladv[23]及分类误差LDC,LGC[19]外, 本文还引入Pt和Pout的重建误差L1及风格误差Lstyle[21], 以加快模型收敛, 提高生成图片的质量. 本文实验中, 多重纹理扩展网络的总损失函数为
Ltotal=Ladv+λ1L1+λ2Lstyle+λ3(LDC+LGC),
(3)
其中λ1=100,λ2=1,λ3=1, 分别为重建误差、 风格误差及分类误差的权重. 实验表明, 分类误差的存在能有效解决模式崩溃问题, 而其权重大小对训练及生成图片质量的影响较小.
1.3.3 训练方法
本文以NVIDIA Titan Xp GPU作为实验设备, 使用50张纹理样图, 对网络进行10万次迭代训练, 单张图片GPU训练总时间约为75~80 h, 网络训练完成后, 将分辨率为600×400像素的纹理样图输入生成器网络, 生成器网络输出扩展合成结果仅需约5 ms. 训练过程中, 使用Adam[24]参数优化方法, 学习率被初始化为0.000 2, 在前5万次迭代中保持不变, 在后5万次迭代中线性衰减至零.
使用Pt和Pout的L1损失作为重建误差. 对风格误差, 使用ImageNet预训练的VGG19分类模型, 分别提取Pt和Pout在relu1_1,relu2_1,relu3_1,relu4_1,relu5_1的特征图输出, 计算二者各层特征图的Gram矩阵的加权L2损失, 其权重分别设为1 000/(64×64),1 000/(128×128),1 000/(256×256),1 000/(512×512)和1 000/(512×512).
与单一纹理扩展模型相同, 训练好的网络能用于纹理迁移[14]. 本文的多重纹理扩展模型可实现纹理迁移, 且可实现纹理风格的控制. 图5为训练完成的多重纹理模型迁移过程, 用户可将任意图片作为结构引导图输入, 以训练样图中任意纹理图片作为纹理模式图输入, 输出具有相应结构特点及纹理风格的纹理图片输出. 由图5可见, 本文模型有效地实现了结构流和纹理流的解耦与融合, 生成的纹理输出结构特征明显, 纹理清晰度高, 保留了原纹理的整体风格及局部细节特征.
本文方法深度学习网络的运行环境设置如下: CPU为Inter Xeon E5-2630 v3, 内存容量为256 GB, GPU为Nvidia Titan Xp, 操作系统为Linux, Cuda版本为9.0, 使用Python 3.6作为开发语言, Pytorch作为深度学习框架.
根据文献[14]发布的数据, 本文构建一个由50张纹理图片组成的数据集. 图6和图7为该训练集上的部分扩展合成结果, 其中每组图片中左侧小图为给定的纹理样图, 大图为多重纹理扩展合成的结果. 作为比较, 本文从全部实验结果中挑选3张非均匀纹理与目前已有方法的结果进行对比, 结果如图7所示. 本文的所有合成结果均由一个训练好的网络生成, 而图7中另外3种方法扩展合成结果需训练3个不同的网络. 由图7可见, 本文多重纹理的扩展合成结果相比于InGAN[17]和SinGAN[18]方法的结果, 在纹理元素的形态和排列上均与纹理样图保持一致, 更好地保留了纹理的整体结构, 且合成结果更真实自然. 相比于文献[14]单一纹理的合成方法, 这两种方法的合成结果相似且都具有较高的合成质量, 仅在细节上有差别.
图6 多重纹理扩展合成结果
图7 不同方法的纹理扩展合成结果对比
本文的可控制多重纹理迁移方法实验结果如图8所示, 其中每组图片最左边小图为给定的纹理结构引导图, 最上边图为纹理风格图, 大图为对应的纹理迁移合成结果. 由图8可见, 本文方法有效控制了纹理迁移结果, 纹理迁移结果保留了结构引导图的大尺度整体结构, 而纹理样式、 风格与对应的风格引导图相似.
图8 多重纹理迁移结果
可控制多重纹理迁移方法与原单一纹理迁移方法的实验结果对比如图9所示, 其中最左边是给定的纹理结构引导图, 第一行为纹理风格图, 第二行为多重纹理网络迁移所得结果, 第三行为单一纹理扩展合成方法的神经网络在对应纹理上进行训练, 再把结构引导图输入到生成器网络后所得结果, 即训练4个不同网络所得结果. 由图9可见, 与原单一纹理迁移方法的实验结果相比, 本文方法的结果结构更清晰, 风格化程度更高, 且图片色彩连续均匀.
图9 多重纹理与单一纹理迁移结果对比
考虑到本文方法利用了文献[22]的风格迁移方法中的启发层, 因此进一步对比利用本文方法进行纹理迁移与利用经典的风格迁移方法, 如文献[21]提出的基于优化方法, 文献[25]提出的自适应实例归一化层(AdaIN)方法, 文献[22]提出的基于启发层(MSG)方法, 文献[17]提出的自然图像重定向任务风格迁移方法(InGAN)和文献[18]提出的从单张自然图像中学习非条件生成模型(SinGAN)方法进行纹理迁移. 为客观比较, 本文首先将纹理进行扩展, 再利用现有的风格迁移方法进行纹理迁移, 结果如图10所示, 其中结果图像的结构引导图为图8中最后一排的纹理样图.
图10 不同方法的纹理迁移结果对比
由图10可见, 文献[21]方法能较好地保持局部纹理模式, 但存在较多伪影. 与AdaIN[25]和MSG[22]方法的结果对比表明, 本文结果的纹理风格化程度更高, 即在细节方面图片与纹理风格样图更相似, 同时本文结果的纹理细节尺度保持较好, 未出现不适当的缩放, 图片色彩连续均匀, 未出现大面积伪影. 本文方法与基于单张图像过拟合的InGAN[17]和SinGAN[18]两种方法对比结果表明: SinGAN方法[18]并不适合纹理迁移, 其结果几乎完全丢失了纹理模式; InGAN方法[17]取得了较好的结果, 其纹理元素保持比较完整, 但在纹理模式细节上仍有一定瑕疵.
除定性的视觉效果对比外, 还可通过对纹理迁移结果进行定量分析评判这些方法的合成质量. 首先, 随机选择10张自然图片作为结构引导图, 选择图10中第一列的2张纹理图片作为给定的纹理风格样图, 利用上述6种方法进行纹理迁移, 得到6组结果, 每组有20张图片纹理迁移结果; 然后遍历所有组, 求每组中所有纹理迁移结果及其对应纹理样图的风格误差[21]; 最后根据所求风格误差, 计算每组结果风格误差的平均值, 结果列于表1.
表1 风格误差平均值
考虑到纹理迁移与风格迁移目标并不完全一致, 风格误差平均值只能在一定程度上反映纹理迁移结果的质量. 由表1可见, 文献[21]方法取得了最小风格误差, 原因是其在风格迁移过程中直接最小化风格误差, 因此该组结果取得最小风格误差符合预期, 但由图10视觉对比可见, 该方法结果视觉瑕疵较多, 很可能是陷入了局部最优. 本文方法结果的风格误差平均值仅低于文献[21]方法的结果. InGAN方法[17]取得了较好的视觉效果, 但由于存在一定的细节瑕疵, 其风格误差也偏大. SinGAN方法[18]纹理迁移失败, 其风格误差最大. 因此, 综合该定量分析结果与图10中纹理迁移结果的定性分析结果可知, 本文方法纹理迁移结果的质量优于其他4种方法.
综上所述, 本文基于单一纹理扩展模型的思想, 提出了一种新的适用于多重纹理扩展合成与迁移的网络. 首先, 通过在判别器中增加分类器网络模块, 使判别器在区分生成数据和真实数据的同时, 还能进一步正确判别输入纹理来自哪一张训练图像, 从而改善了多重纹理扩展的模式崩溃问题. 其次, 为达到纹理迁移中用户对纹理模式的控制, 本文将生成器修改为双流数据输入, 分别提供结构控制与纹理模式/风格, 从而使训练好的模型可实现用户可控的合成纹理迁移. 实验结果表明, 本文的多重纹理扩展模型, 不仅能使用一个网络就能正确学习到多张纹理图像的纹理模式, 而且训练好的模型还具有更好的纹理迁移功能. 相比单一纹理扩展模型, 本文方法的纹理扩展合成结果与其质量基本相同, 在纹理迁移方面则优于单一纹理扩展合成方法及其他风格迁移方法.