最近看了篇文章《生成模型大道至简|Rectified Flow基础概念》,看上去很简单的,决定自己做个实验测试下
很多人喜欢拿MNIST数据集来做入门实验,个人不建议,主要是MNIST图片太小,不便于观察模型的学习过程。本文选择合成汉字图片作为训练集,图片尺寸为64×64像素。共使用了165款中文字体。合成的训练样本示例如下:
为了加快训练,我们先只包含以下64个汉字:
啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班
关于Rectified Flow,网上参考代码很多,本文不过多介绍
说一下我个人对Rectified Flow的理解:
1、如果不限制步数,2-Rectified Flow生成图片的效果不会比1-Rectified Flow好
2、当t接近于0或1时,模型的 |输出值-期望值| 会存在极大的噪声,这些噪声经过多次叠加后应该趋向于0
使用单卡(不低于6G显存)训练2个小时左右,结果如下:
生成汉字“奥”“百”
此时生成的字体还没法看
继续训练15个小时左右,结果如下:
效果改善不明显,不过已经可以通过人工筛选的方式选择效果比较好的字体了。筛选好后,我们固定输入高斯噪声,改变控制条件(即字符编码),就可以创造出新的字体了。如下图所示: