RD-GAN:基于部首分解和渲染的少样本/零样本汉字风格迁移
由三部分组成,字体部件拆分模块(共享backbone),字体部件渲染模块(backbone),多层判别模块
首先通过字体部件渲染模块(backbone)的编码器部分提取特征传递到字体部件拆分模块。字体部件拆分模块采用端到端的模式,编码器和解码器都采用双层双向的LSTM网络。
字体部件渲染模块编码器:将特征图的每一行看作一个时间步,即特征图的宽度=T。每一行经过平均池化层压缩后进入BLSTM中形成隐状态hi,每一个hi都由平均池化层压缩后的输出+构成,最终fg作为特征图输入解码器中。
字体部件渲染模块解码器:第一次输入时输入和隐藏状态都为0,在进行完一次循环后会输出一个部件信息(如:亻)。接着解码器根据先前输出和隐藏状态迭代地更新注意力机制,输出新的部件信息和更新隐藏状态
第一层LSTM:提取上次输出的结果和隐藏状态,可能对已经输出区域的注意力下降,对该区域相关的区域注意力提升(可能是下一个部首存在的区域)
是一个邻域相关的二维注意力机制,F是编码器输出的特征图
具体流程如下:公式5计算某一区域的注意力值:根据第一层LSTM提取上次输出的结果和隐藏状态、该区域编码器输出的特征图、该区域相邻区域编码器输出的特征图共同作用;公式6计算某一区域的注意力值所占全图注意力的权重;公式7将权重与特征图对应区域相乘
第二层LSTM:将计算好的权重特征图和提取上次输出的结果、隐藏状态输入第二层LSTM中计算本次的隐藏状态,再经过一次线性变换输出本次的部首区域。本论文置信度大于0.5的视为部首
字体部件渲染模块(backbone):采用端到端的方法提取特征并对字体整体进行风格迁移。该横向连接包含两个通路,分别命名为SE通路和上采样通路。
SE通路:操作是在通道维度上执行的。首先,挤压层通过使用1*1卷积来减少特征维度,以实现来自不同通道的信息融合并减少计算量。然后,我们实现一个非线性层,包括两个可变形卷积和ReLu激活函数,以实现大的感受野。最后,使用一个扩展层通过1*1卷积来扩大特征图通道,作为挤压层的逆过程。获得完善局部风格的同时兼顾全局信息。
上采样通路:正常进行上采样
多层判别模块:多层次包括几何层面和结构层面,生成损失由几何层面和结构层面构成
几何层面:就是将图片分割成36块,对每一块进行判别真伪。y取0或1,当取0表示生成图片时,判别器希望愈接近0越好,即损失越大越好;生成器希望
愈接近1越好,即损失越小越好
结构层面:将整体图片+置信度大于0.5的部首进行联合判别。通过二者的对比学习增强整体图片在局部风格的真实性
注意:为什么不使用传统gan损失?
因为该论文对无样本字体也可以生成无法让判别器对真实图像进行判别
如果判别器惰性学习无脑把所有图片都认为是1(真),生成损失很低,但生成图片质量很差?
1.判别器需要生成损失大才会收敛(零样本)
2.接下来损失如L2损失会对比真实图像与生成图像差值,如果生成图片质量很差总损失依旧会很大
模型总损失
L2损失:最小化目标图像和真实图像差异
Total Variation Loss(针对零样本):对于图像生成而言,一个常见的问题是模型倾向于生成噪声图像。为了解决这个问题,我们采用该损失进行全局去噪。噪声图倾向于每两个相近像素点差异较大,合理的生成图像相邻像素点较为平滑差异较小
Content Loss:针对不同高级特征测量的损失函数对于特征重建是有效的。为了更好地从不同层级生成图像,我们引入内容损失来惩罚输出图像的特征与CNN中特定层级上对应的真实图像之间的差异。我们将输出图像和真实图像输入到预训练模型中,并强制对应层中的响应相匹配。
就是backone对应层的特征差异
总损失: