首页 > 其他分享 >[论文阅读] GAS-NeXt@Few-Shot Cross-Lingual Font Generator

[论文阅读] GAS-NeXt@Few-Shot Cross-Lingual Font Generator

时间:2023-05-27 19:33:25浏览次数:48  
标签:Loss Shot 判别 Generator Lingual 字体 AGIS Net 图片

Pre

title: GAS-NeXt: Few-Shot Cross-Lingual Font Generator
accepted: arxiv 2022
paper: https://arxiv.org/abs/2212.02886
code: https://github.com/cmu-11785-F22-55/GAS-NeXt

关键词: few-shot, cross-lingual, font generation
阅读理由: 新作,有代码,简单易读(快速应对组会),对输入多张风格图片的方式有兴趣

Motivation

当前少有模型支持跨语言字体生成,而 AGIS-Net 将字体生成看作I2I任务,局限于只能转换统一语言的,而且依赖于fine-tuning。本文希望结合 AGIS-Net 和 Font Translator GAN 得到一个用于少样本跨语言字体生成的模型。

Idea

在AGIS-Net的基础上直接缝合了FTransGAN,无创新,实验部分算是AGIS-Net的删减版

Background

相关工作分GAN、Font generation、Style Transfer三个方面,讲得都比较简单,其中有提到MX-Font跟CG-GAN,但并未与其进行对比

Method(Model)

Overview

  • few-shot:local texture refinement loss(AGIS-Net)
  • 跨语言字体生成:加入FTransGAN的上下文感知注意力和层注意力
  • 无需fine-tuning:加入FTransGAN的上下文感知注意力和层注意力

图1 AGIS-Net架构

图1上面是简单的流程示意,下面是三种判别器的例子,从左到右分别是shape判别器、texture判别器、局部判别器

Generator

图5 AGIS-Net Generator

图6 AGIS-Net Generator 子模块

这里的decoder相应encoder,也分成两个,content-shape,style-texture。如图5、6,形状解码器拼合上一层的输出,然后从编码器层去抽取内容风格特征以生成形状图片 \(y_{gray}\) 。实际上encoder部分的特征也会通过跳跃连接加入到两个decoder的生成中。

从图6可以看到,纹理编码器通过简单的拼接将形状、纹理信息结合,即两个解码器输出结合在一起,然后通过卷积才能得到输出图片 \(y\)。这图画得很怪,中间那个Submodule应该是多余的

这整个其实就是AGIS-Net的架构跟处理流程,因为AGIS-Net做的是彩色字体的转换,其中texture指的是是真实样本,带颜色、形状的,shape是它的灰度版本,没颜色。两个解码器相当于把生成分为了两步:先生成形状再上色。

实际上根据shape跟texture的定义,本文中这两个岂不是同一个东西?毕竟作者用的图片都是二元的,没有texture一说

Discriminator

这部分作者没写,那就看下AGIS-Net的,反正都一样,就是图1里下部的三个判别器

图AGIS-Net-2 模型架构

图AGIS-Net-4 局部判别器

局部判别器就是对图片随机裁剪,然后施加高斯模糊来得到负样本,然后其他两个判别器是PatchGAN。

Objective Function

目标函数共4项,分别是对抗损失,L1损失,上下文损失跟局部纹理精炼损失,即 \(L_{adv} + L_{1} + L_{CX} + L_{local}\)

Adversarial Loss

L1 Loss 计算 \(y_{gray},\; y\) 与各自groundtruth的L1距离,其中 \(y\) 那一项的权重更大,也就是说转换的结果相比shape更重要?

Contextual Loss 似乎来自The Contextual Loss for Image Transformation with Non-Aligned Data,说L1 Loss和L2 Loss这种损失需要图像对齐,而Contextual Loss可用于非对齐数据,不使用GAN也可以有好的风格转换效果

根据本论文的介绍,该损失度量图片特征图之间的相似度,聚焦于高层风格特征。令 \(x_i,\; y_i\) 分别表示 \(X,\; Y\) 第i个/第j个特征图,则 \(x_i,\; y_i\) 之间的相似度CX定义为移位归一化余弦距离的归一化指数(normalized exponential of the shifted normalized cosine distances):

\[C X_{i j}=\frac{w_{i j}}{\sum_{k}w_{i k}},\hat{d}_{i j}=\frac{d_{i j}}{\operatorname*{min}_{k}d_{i k}+\epsilon},w_{i j}=\exp\Biggl\{\frac{1-\hat{d}_{i j}}{h}\Biggr\}, \]

\[C X(X,Y)=\frac{1}{N}\sum_{j}\operatorname*{max}_{i}C X_{i j}, \]

这里 \(d_{ij}\) 是 \(x_i,\; y_i\) 之间的余弦距离, \(h,\; \epsilon\) 是超参数,分别设置为 0.5, 1e-5

特征用预训练好的VGG19抽取, \(\phi^l\) 表示VGG19的第l层所抽取的特征,实验中取 \(\lambda_{CXgray}=15.0,\; \lambda_{CXtex}=25.0\) ,contextual loss如下:

\[L_{C X}=\lambda_{C Xg r a y}\Bigl(-\,{\frac{1}{L}}\sum_{l}\log\bigl(C X(\phi^{l}(y_{g r a y}),\phi^{l}(\hat{y}_{g r a y}))\bigr)\Bigr) \]

\[+\lambda_{C Xt e x}\bigg(-\,\frac{1}{L}\sum_{l}\big(C X(\phi^{l}(y),\phi^{l}(\hat{y})\big)\bigg)\bigg). \]

大概就是用VGG19每一层抽取的每一个特征图去计算相似度,用它们之间的余弦相似度来确定特征之间的差距。说是效果好,但感觉计算代价不小

Local Textual Refinement Loss 局部判别器 \(D_{local}\) 将裁剪的真实图片patch 作为正样本,而模糊化的真图片patch、合成的图片patch作为负样本,损失写为下列形式:

\[L(D_{l o c a l}) = \mathbb{E}_{p_{real}}[\log(D_{l o c a l}(p_{r e a l}))]) + \mathbb{E}_{p_{blur}}[\log(1-D_{l o c a l}(p_{b l u r}))]+ \]

\[+\,\mathbb{E}_{p_{y}}[\log (1- D_{l o c a l}(p_{y}))], \]

\[L_{l o c a l}=\lambda_{l o c a l}\mathbb{E}_{p_{y}}[\log(1-D_{l o c a l}(p_{y}))]. \]

其中 \(\lambda_{l o c a l}=1.0\) ,这是AGIS-Net提出用来做 few-shot 风格转换任务的,说是新颖且计算高效

Experiment

Training Detail

给出三个指标的表达式:

\[F I D=\|\mu_{x}-\mu_{y}\|^{2}+T r(C_{x}+C_{y}-2\times\sqrt{C_{x}\times C_{y}}), \]

\[S S I M=\frac{(2\mu_x\mu_y+c_{1})(2\sigma_{x y}+c_{2})}{(\mu_{x}^{2}+\mu_{y}^{2}+c_{1})(\sigma_{x}^{2}+\sigma_{y}^{2}+c_{2})}, \]

Pixel-level Accuracy (pix-acc)

\[P A=\frac{\sum_{j=1}^{h}{n_{j j}}}{\sum_{j=1}^{k}{t_{j}}}, \]

PA是Pixel-level Accuracy (pix-acc),其中 \(n_{jj}\) 表示类别j的正确数量, \(t_j\) 是标记为类别j的像素数量。使用灰度图去评估,因此类别是二元的,总之取平均的像素级精度去评估合成图片的总体质量。

Dataset

找了一些现成的数据集,包括CASIA那个,说考虑到纯上下文输入(plain context inputs),对于汉字使用尽可能常见的平均字体风格,而英文字母就用MC-GAN的Code New Roman

图AGIS-Net-5 英文/中文数据集中内容输入字形图片的例子

Results

表1 AGIS-Net和baseline评估指标

图2 生成字体的例子

图11 上下文感知注意力

图12 层注意力

作者缝上了FTransGAN,使用上下文感知注意力去捕获局部风格特征,利用层注意力捕获全局风格特征。判别器方面就是FTransGAN的加上AGIS-Net的局部判别器。图11、图12直接就照搬FTransGAN的原图,清晰度还不行。这部分可参看之前写过的FTransGAN阅读笔记

图4 模型生成结果对比

Results(AGIS-Net)

补一点AGIS-Net的结果,因为更细致,而且有本文没做的彩色字体生成结果

图AGIS-Net-6 艺术字形图片合成的例子

图AGIS-Net-7 跟其他模型结果对比

AGIS-Net还做了更多的实验,比如调整few-shot样本数、输入的风格图片数量,对局部风格损失、上下文损失跟跳跃连接的消融实验、其他语言转换、失败样本、跟其他模型比较shape...

图AGIS-Net-13 fine-tuning阶段对所有字形图片进行消融的L1损失

图AGIS-Net-17 用预训练、few-shot learning都没见过的汉字进行合成

图AGIS-Net-18 用汉字字形图片训练的模型去合成日文韩文

Conclusion

指标上跟FTransGAN接近,但局部细节处的视觉效果比它好一些,看图4。说不知道有关于跨语言字体生成的正式讨论,本文的模型就给将来这方面的研究充当了一个基础。

将来工作一方面可以深挖局部判别器,另一方面可以做彩色字体风格,本文模型对于彩色字体的生成并不理想,作者尝试过将三通道分离然后分别生成,最后把三个通道重建为一个图片,但效果很差,因为三个通道在不同的像素区域生成结果,导致不完全的重叠。

不过彩色字体很少看到有工作在做,好像不是很实用?而且这个更贴近风格迁移,I2I那些

Critique

本文似乎是卡内基梅隆大学的某一次课程作业的结果,三个作者应该都是在校生。就文章来说确实是水一些,可以理解,感觉就本科毕设水平。

低情商:缝合怪;高情商:一篇顶俩。总之收获还是有的,看这篇相当于看了AGIS-Net,行文模型到效果都差不多,那个 Contextual Loss 之前确实没听说过。

Unknown

标签:Loss,Shot,判别,Generator,Lingual,字体,AGIS,Net,图片
From: https://www.cnblogs.com/Stareven233/p/17204382.html

相关文章

  • MybatisPlusGenerator 实体类 xml dao 生成工具
    packagecom.thtf.zwdsj.gongjia.config;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.baomidou.mybatisplus.generator.FastAutoGenerator;importcom.baomidou.mybatisplus.generator.config.OutputFile;importcom.baomidou.mybatisplus.gener......
  • JavaScript中的生成器函数(Generator Functions)
    简介:生成器函数(GeneratorFunctions)是JavaScript中的一种特殊类型函数,它允许开发者在函数内部产生多个值并逐步返回,与传统函数一次返回单个值的方式不同。本文将介绍生成器函数的特性、优缺点以及如何使用它们,并提供一些代码案例来说明其用法。特性:使用function\*关键字声明:生成......
  • [Javascript] Generator with example - 1
    Differencebetween yieldand returnreturnset donetotrue/***Example1*/function*loggerator(){console.log("running");yield"paused";console.log("runningagain");return"stopped";}letlogger=......
  • [论文阅读] Zero-shot Image-to-Image Translation
    Pretitle:Zero-shotImage-to-ImageTranslationaccepted:Arxiv2023paper:https://arxiv.org/abs/2302.03027code:https://github.com/pix2pixzero/pix2pix-zero关键词:Zero-shot,Image-to-ImageTranslation,pretrainedmodel,BLIP,CLIP,GPT-3,diffusionmodel,......
  • ahb_system_generator
    0.ahb_system_generatorEnviroment:WSL2ahb_generator要运行AHB系统生成器,必须安装PERL(一般系统自带)和一个名为Tk的GUIPERL模块perl--version //检查perlperl-e"useTk" //检查Tk模块,若未安装会返回错误信息1.perlinstall官网下载Tk模块安装包进入解压......
  • generator 1(矩阵优化递推式+10倍增优化)
     x1,bx2(开始值) ......
  • Eclipse使用mybatis generator自动生成代码
    一、写在前面           Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。通过在Eclipse中集成mybatis-generater插件,自动生成Mybatis相关的model、dao、Mapping......
  • 生成器:generator
    列表生成式:[x*xforxinrange(10)][0,1,4,9,16,25,36,49,64,81]所有数据已经生成(数据太多的话占内存) 生成器:generator(x*xforxinrange(10))数据没有生成,有算法(调用next函数,边执行边运算(惰性运算)目的是要最小化计算机要做的工作)>>>g=(x*xforx......
  • Qt QTimer::singleShot问题及用法
    问题描述问题描述:QTimer::singleShot定时器事件超时,如果此时类内对象已经被回收,定时器事件调用已经释放的类内资源时会引起崩溃1voidfunc()2{3QTimer::singleShot(50,[=](){4this->continueNodeTask();5});6}78/*9如果singleShot事......
  • Qt QTimer::singleShot用法
    [static]voidQTimer::singleShot(intmsec,constQObject*receiver,constchar*member)这个静态函数在一个给定时间间隔msec(毫秒)之后调用一个槽。用法1:假设类A有个槽函数function(){}我们要在10s之后执行它就可以: QTimer::singleShot(10*1000,this,&A::func......