论文解读系列二十三:探索FET-GAN

还是又又又又空白 发表于 2021/08/24 11:52:07 2021/08/24
【摘要】 本文解读了《FET-GAN: Font and Effect Transfer via K-shot Adaptive Instance Normalization》,该论文提出了一种端到端的模型FET-GAN用于实现文字字体风格迁移;还提出了一种小样本微调策略,在已有模型基础上实现新文字风格迁移;同时还构建了一个包含100种字体,800多字符的数据集用于验证模型效果。

image-20210823161640224.png

​ 论文地址:https://ojs.aaai.org//index.php/AAAI/article/view/5535

​ github地址:https://github.com/liweileev/FET-GAN

​ 论文假设一个图形对象可以被分解为全局结构特征和局部风格特征,风格特征通常包含文字的颜色,阴影,轮廓,背景等。结构特征是稳定不变的,就像一个字符W,即使他的颜色,字体发生了变化,人们还是可以识别出来。文字风格迁移的目的是在保留文字内容的同时,实现文字风格的变化。但是现有方法通常将字体特征和其他风格特征当做两个独立的属性处理,通过不同的网络分别学习字体特征和其他风格特征。也不能在文字和其他图形对象之间做风格迁移。

​ 论文贡献如下:

  1. 提出了一种端到端的风格迁移网络FET-GAN,将字体也作为一种视觉风格特征。相比起现有方法,可以在统一的模型中实现包含字体风格和其他文字风格的迁移。
  2. FET-GAN可以从少量的、非成对的样本上学习到文字风格的特征表达,这种特征表达方法可以实现非文字对象的风格迁移,也就是可以将一种文字风格迁移到其他非文字图形对象上。由于数据集是非成对的,即不同风格的图片中不需要含有同样的字符,可以有效降低数据收集的难度。
  3. 提出一种小样本微调策略,可以快速的对模型进行微调,生成训练集中未见过的风格效果。
  4. 发布一个新的字体数据集,包含100种不同的文字风格和800多个中英文字符。

1. 模型结构

​ 假设训练集中有 C C 种风格的图片数据集,每种风格的图片属于同一个风格域。源图片 x s x_s 属于风格域 X X 。参考图片为 y y ,属于风格域 Y Y 。我们需要将图片从风格域 X X 迁移到风格域 Y Y 中,即生成目标图片 y s y_s 。为方便区分,生成的图片用~表示,如 y s ~ \widetilde{y_s} 。如下图所示,FET-GAN的网络结构包含三部分:

  1. 编码器 E E 从参考图片 y r e f y_{ref} 中提取文字风格特征code z z ,参考图片的数量为K,后续实验证明在训练过程中K的数量越大越好,在推理的时候K的数量不影响推理结果。

  2. 生成器 G G 根据编码器 E E 提取的风格特征 z z 和源图片 x s x_s 生成图片 y s ~ \widetilde{y_s}

  3. 判别器使用了Patch-based判别器。一般Patch-based判别器输出为 N N N*N 的矩阵,FET-GAN将其扩展为了C维判别器,输出为 C N N C*N*N 的矩阵。C表示训练集中的文字风格数量。在反向传播更新参数的时候,只会更新参考图片所属风格 C x C_x 对应通道的参数。

Figure 1. 模型结构
Figure 2. 判别器结构

2. 损失函数

​ 论文使用的损失函数包含以下几个, λ \lambda 为各个loss之间的权重值:

  1. 风格编码loss:如前文所述模型使用了K个参考图片进行风格特征提取,按照假设,同种风格不同参考图片的提取到的风格特征应该是一致的。
  1. 风格迁移loss:使用各个参考图片风格特征的平均值和源图片 x s x_s 来生成图片 y s ~ \widetilde{y_s} ,与实际图片中对应文字的图片 y S y_S 进行对比作为loss。该loss要求数据集中存在成对的样本数据,即源图片 x s x_s 里的字符应该在目标风格数据集中存在,例如源图片中有字符“岸”,目标风格中也存在字符“岸”的图片,是一种有监督学习。实际场景中会出现无监督或者半监督场景,这类场景的处理在小样本学习策略进行说明。
  1. 风格复原loss:如果提取源图片 x s x_s 的特征和 x s x_s 本身,通过生成器 G G 生成的图片 x s ~ \widetilde{x_s} 应该和 x s x_s 是一样的,该loss可以有助于保证编码器 E E 提取的风格特征是有效的。
  1. 对抗loss:通过对抗loss来保证生成的图片能够以假乱真。由于作者使用了多维的Patch-based判别器,输出结果为 C N N C*N*N 的矩阵。因此在计算对抗loss的时候,仅使用了输入图片所属风格对应通道的预测结果。即对于源风格图片 x s x_s x s ~ \widetilde{x_s} ,使用通道 C x C_x 的输出结果 D C x ( ) D^{C_x}() ,对于目标风格图片 y s y_s y s ~ \widetilde{y_s} ,使用通道 C y C_y 的输出结果 D C y ( ) D^{C_y}() 。作者还引入了梯度惩罚来保证模型收敛。

3. 小样本学习策略

​ 模型只能迁移训练数据集中存在的风格,对于新风格图片,需要对模型进行一定程度的微调。但是实际场景中数据的收集是一大难题,需要成对的数据,并且模型结构发生了变化。因此作者提出了一种微调策略,具体如下:

  1. 数据集构建:对于新风格图片的样本,通过裁剪翻转等操作扩充成临时数据集。

  2. 预训练模型加载:模型的判别器输出的是 C N N C*N*N 矩阵,增加一种新风格的图片意味着要判别器输出为 ( C + 1 ) N N (C+1)*N*N ,多了一维输出。对于C+1维通道的参数,作者通过将样本数据输入到判别器中,得到C维的结果,取其中预测结果得分最高的通道 c c 的参数作为第C+1维通道的初始参数。

  3. 模型训练:因为新风格的训练数据不能与之前的训练数据构成成对的数据集,因此训练过程只使用新风格的图片进行训练,也即是源图片和目标图片来至于同一风格图片。此时风格迁移loss实际上和风格恢复loss是一样的。

​ 实际上根据作者提供的开源代码,微调过程中模型结构并没有扩展成C+1维。而是直接将通道 c c 当做第C+1维通道,更新了通道 c c 的参数。因为训练数据只有新风格图片,所以微调过程不会受到原本风格数据的干扰。

4. 实验结果

​ 作者做了一系列的实验验证了模型效果

  1. 与现有方法的对比如下图所示:

    (1)第一行是字体风格迁移结果对比,源图片和目标图片的字体是不一致,结果显示FET-GAN可以有效实现 字体风格的迁移。而现有的一些方法并不能实现字体风格的迁移。

    (2)第二行使用的源图片的风格不存在于训练集中,可见仍能实现有效的风格迁移。

    (3)第三行是复杂风格的迁移结果对比,源图片和目标图片在颜色,轮廓,背景,字体等都是不一致的,可 见FET-GAN效果还是很接近真实效果的。

    (4)第四行是非文字的图形对象的风格迁移效果对比。源图片不是文字图片,仍能够实现风格迁移。

    (5)第五行是新风格微调结果对比,部分方法不能应对新风格迁移的场景。

Figure 3. 现有方法对比实验结果
  1. 参数K的影响如下图所示:

    (1)第一行对比结果在训练过程使用了不同的参数K,推理过程参数K都是1,可见训练过程中K越大,效果越 好。

    (2)第二行对比结果在训练过程中参数K=4,推理过程使用了不同的参数K,可见推理过程中K对预测结果无 影响,这是因为风格编码loss保证了不同参考图片提取到的特征是一致的。

    (3)第三行对比结果是在模型微调的时候使用了不同的参数K。同样的,K越大,效果越好。

Figure 4. 参数K影响实验结果
  1. 微调策略的效果如下:作者从网上下载了新风格的图片,并将其扩展成数据集后进场微调。经过40次迭代后效果已经很接近真实了。但是继续迭代会出现严重的过拟合问题,作者认为是由于数据集太小导致的。
Figure 5. 小样本微调实验结果

想了解更多的AI技术干货,欢迎上华为云的AI专区,目前有AI编程Python等六大实战营(http://su.modelarts.club/qQB9)供大家免费学习。

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。