更多内容见:
https://github.com/jiauzhang/dlcv
CVPR 2017
基于判别器和生成器建模方法的纹理合成具有很大的潜力,但是现有方法为了效率而采用的前向网络在泛化能力上并不行,即一个网络只能合成一种纹理,缺少多样性。本文着重解决该问题。训练一个多纹理合成网络存在的一些困难:不同类型纹理的统计特是完全不同,使用基于 Gram 矩阵的纹理损失[1, 2]只能部分的衡量其中的差异;纹理之间内在的不同导致收敛速率也不一样。所以训练一个多纹理合成网络的难度取决于纹理之间的差异和各个纹理本身的复杂性。另外,多纹理合成网络还会出现输入的噪声向量被边缘化的问题,这就导致一个给定的纹理无法生成多个不同样本,这通常意味着对特定纹理的过拟合。
本文设计的网络结构有两个输入,一个噪声向量、一个 one-hot vector 表示不同纹理,网络分为 Generator 和 Selector 两路,Selector 的每层的特征图除了自用之外,还会和 Generator 的对应层特征拼接在一起作为 Generator 下一层的输入,最后一层的输出即为生成的纹理,再使用 VGG 提取特征。
基于 Gram 矩阵的纹理损失函数对于单一纹理合成很有用,但是用于多纹理时并不够理想,作者认为这是因为不同纹理的 Gram 矩阵在尺度上有较大的差异导致的,所以本文首先是改进了 Texture loss,由公式(1)变成公式(2):
改进前后的效果对比:
第一行是原始纹理,第二行是公式(1)的效果,第三行是改进后的效果。
另一个需要解决的是缺乏多样性的问题,因为网络有把噪声向量边缘化的问题,所以作者提出了显式衡量同一纹理不同噪声下生成样本之间的损失函数,即多样性损失,强行把输入噪声和输出耦合在一起:
其效果如下:
第一列是原始纹理,第三~四列是没使用多样性损失的结果,很明显三个样本差不多,最后三个是使用了多样性损失的结果,样本之间有明显的差异。
具体训练时,作者发现每次都随机的选择一种纹理和有规律的增量训练效果差别挺大,增量训练的过程如下:
随机训练和增量训练的结果对比:
第一行为原始纹理,第二行是随机训练的结果,第三行是增量训练的结果,显然是增量训练的结果更接近原始纹理。
作者还将其扩展到了 multi-style transfer 上,这里就不具体介绍了,关键点都是以上的内容,展示点效果:
第一行为 style,第二行为风格迁移效果。风格插值效果如下:
最左边和最右边是两种不同的 style,中间为图片为插值效果。
参考文献
[1] L. A. Gatys, A. S. Ecker, and M. Bethge. Texture synthesis using convolutional neural networks. In NIPS, 2015.
[2] L. A. Gatys, A. S. Ecker, and M. Bethge. Image style transfer using convolutional neural networks. In CVPR, 2016.
[3] Li, Yijun, et al. Diversified texture synthesis with feed-forward networks. In CVPR, 2017.