🍃 CycleGAN_for_FontDesign 🍃
👋 基于 CycleGAN 风格迁移算法的 风格化字体 生成
本项目为基于Mindspore框架实现的CycleGAN在字体设计方面的衍生应用,我们使用的在线训练平台为 OpenI 启智社区(https://openi.org.cn/)。
1. 准备数据
1.1 训练数据集要求
准备训练数据集如 dataset
应分为两组:
- 🀄 内容图片(如中文汉字),图片路径为:
./data/dataset/trainA
- 🍃 风格图片(如竹叶风格),图片路径为::
./data/dataset/trainB
通过训练可将 trainB
文件夹内图片风格迁移至 trainA
内容图片上。
提供边训练边验证,若使用验证集,则内容图片的路径为:./data/dataset/devA
❗ 注意:trainA、trainB 文件夹内图片原则上应统一分辨率大小、图片格式,推荐使用 256px * 256px,72dpi 或 512px * 512px,72dpi 大小的 .jpg 或 .png 格式图片。
本项目中,trainA
为楷体字体为带白底的 .png 图片,训练所用字体图片可通过字库解包的 python 代码获得。trainB
为手动收集与处理的竹叶带白底的 .png 图片。本实验通过训练CycleGAN模型,将 trainB 文件夹中竹叶的风格迁移至 trainA
的楷体字体上,从而生成风格独特的竹叶🍃字体。以“粉”字为例,效果如下:
1.2 数据集的获取和预处理
- 获取:通过 OTF 或 TTF 字体库解包,获得需要进行转换的字体图片集。
- 预处理:通过裁剪边缘、二值化、重置图片大小等图片处理方法,将字体图片中的文字尽量居中,且在上下左右留出适当的距离。
🀄 本项目提供 楷体文字 .png 图片数据 300 张 ,放置于 trainA
文件夹内,数据集概览如下:
🍃 通过手动搜集与处理的 竹叶 png 图片数据 300 张 ,同样将其进行二值化与重置图片大小,放置于 trainB
文件夹内。数据集概览如下:
2. 模型训练
2.1 环境
2.2 训练
运行以下命令进行模型训练:
bash scripts/run_train_ascend.sh [DATA_PATH] [EPOCH_SIZE] [BATCH_SIZE] [SAVE_IMG_NUMS]
参数说明:
[DATA_PATH]
:训练数据集 路径
[EPOCH_SIZE]
:训练 epoch 数量
[BATCH_SIZE]
:batch size 大小
[SAVE_IMG_NUMS]
:训练每一个epoch中,想要随机查看训练集图片风格转化结果的数量,若查看数量为 N
的 trainA
全部数据集效果,则此参数设定为 N
。
❗❗以上命令中的参数应满足:N
> [SAVE_IMG_NUMS]
* [BATCH_SIZE]
例如,训练200个epoch,bacth size为1,训练集大小为300,每个epoch保存全部训练集图片结果:
bash scripts/run_train_ascend.sh ./data/dataset 200 1 300
2.3 下载与保存训练结果
2.3.1 训练集和验证集图片结果
生成的训练集风格转换后的图片会按照 epoch 分类保存在 outputs/imgs
路径下。
如果提供的数据集 dataset
中包括验证集,将会自动在每个epoch训练结束后,自动执行模型在验证集上的表现,所有验证集的风格转换后图片都会保存到eval
目录下,同样按照 epoch 进行分类,方便使用者判断各个epoch的效果,并按需选择效果最好的epoch,从而下载对应的模型参数checkpoint文件用于后续推理。
🎉 参考模型在训练集上对应的训练结果如下图所示:
使用以下命令进入指定的epoch压缩训练集结果,便于下载:
cd ./outputs/imgs
zip -r [EPOCH_NUMS].zip [EPOCH_NUMS]
使用以下命令进入指定的epoch压缩验证集结果,便于下载:
cd ./outputs/eval
zip -r epoch_[EPOCH_NUMS].zip epoch_[EPOCH_NUMS]
其中保存图片命名 100_199_0_fake_B.jpg
表示该图片的来源是由Gnerator B在以下时间节点生成的:
- epoch:100
- step:199
- 图片id:0
2.3.2 模型参数
模型训练过程中保存checkpoint文件的路径:./outputs/ckpt
,训练过程中每5个epoch保存一次checkpoint文件,其中各文件命名含义:
- G_A_10.ckpt:Generator A在epoch 10的模型参数文件
- G_B_10.ckpt:Generator B在epoch 10的模型参数文件
- D_A_10.ckpt:Discriminator A在epoch 10的模型参数文件
- D_B_10.ckpt:Discriminator B在epoch 10的模型参数文件
2.3.3 训练日志
模型默认后台训练,训练日志:output.train.log
3. 模型推理
3.1 测试集
准备测试集放在该组数据集目录./data/dataset
,运行以下命令:
bash scripts/run_eval_ascend.sh
使用您觉得效果最佳的模型参数文件(.ckpt),更改该脚本中涉及参数:
- G_A_ckpt:Generator_A的checkpoint路径
- G_B_ckpt:Generator_B的checkpoint路径
python eval.py --platform Ascend --device_id 0 --model DepthResNet --G_A_ckpt ./outputs/ckpt/G_A_70.ckpt --G_B_ckpt ./outputs/ckpt/G_B_70.ckpt > output.eval.log 2>&1 &
3.2 单张图片推理展示
本项目提供针对单张图片推理,加载模型ckpt文件,即可对测试文字图片进行风格转换。
➡️ 文件路径./predict.ipynb
根据需要,修改如下模型参数文件路径和待风格转换的图片路径:
G_A_ckpt, G_B_ckpt = './outputs/ckpt/G_A_70.ckpt', './outputs/ckpt/G_B_70.ckpt'
img_path = './dataset/testA/12.png'
💭 推理结果会直接显示在运行结束后
References