风格及语义引导的风景图片生成 GauGAN与Diffusion
GauGAN仓库地址(使用baseline完成):https://github.com/Jittor/JGAN/tree/master/models/gaugan
简介
本项目包含了第二届计图挑战赛计图 - 草图生成风景比赛的代码实现。
本项目的特点是:采用了GauGAN方法对mask和style进行处理,取得了fid=42.81, 总分0.554的效果。
SPADE 的主要创新点在于使用了新的 Spatially−Adaptive Normalization 层来取代传统的 Batch Normalization 层,以此解决了 pix2pix 等算法中会丢失部分输入语义分割图像信息的问题。主要的修改内容在于 $\gamma$和 $\beta$ 的计算不同。

令$ h^i $表示深度卷积网络的第i层激活层,输入的batch size为N。令 $C^i $为当前卷积层的特征图通道数,$H^i $和$ W^i $是当前激活输出的尺寸高和宽。GauGAN使用的新的归一化层,空间自适应归一化层(Spatially-Adaptive normalization),其实现结构如下图所示。在每层归一化层,设置两层卷积层结构,对输入的语义标注图进行学习,得到归一化参数。
学习到的归一化参数与原始的BN操作对应,形式如下公式。

Gama和Beta由卷积层学习得到,而其余的miu和sigma是数据的均值和标准差,计算过程如下

增加编码器对特定风格的图像进行风格编码

网络结构方面,生成器采用堆叠多个 SPADE ResBlk
实现,其中每个 SPADE ResBlk
的结构如左侧所示, Spatially−Adaptive Normalization
层中的 γ 和 β 参数通过输入的语义分割图像计算得到。

判别器和 pix2pixHD
一样采用常见的 Patch−GAN
形式。

从 SPADE
算法的整体示意图来看,生成器的输入可以是一个随机张量,这样生成的图像也是随机的;同样,这个张量也可以通过一个 Image−Encoder
和一张风格图像计算得到,编码网络将输入图像编码成张量,这个张量就包含输入图像的风格,这样就能得到多样化的输出了。
安装
本项目主要运行在单张卡的 3090 上,200个 epoch 的训练周期一般为 4~5 天。
运行环境
- ubuntu 20.04 LTS
- python >= 3.7
- jittor >= 1.3.0
安装依赖
可以进入任意目录执行以下命令安装依赖( jittor 框架请遵循官网给出的安装指导)
pip install -r requirements.txt
数据处理
数据目录我们没有上传,请遵循赛事公告进行下载。在本次比赛中,我们没有采取更多的数据预处理操作,裁剪、正则化等操作在项目代码中已经有所体现。
预训练模型我们采用的是 Jittor
框架自带的 vgg19
模型,无需额外下载,在代码运行的过程中会载入到内存里。
训练
生成测试集上的结果可以运行以下命令:
sh train.sh
此前需要修改train.sh,其内容为:
CUDA_VISIBLE_DEVICES="0" python train.py --input_path {训练数据集路径(即train_resized文件夹所在路径)}
测试
在单卡上进行测试:
sh test.sh
此前需要:
- 将label与img的映射关系(label_to_img.json)放置在gaugan目录下
- 修改test.sh,其内容为:
CUDA_VISIBLE_DEVICES="0" python test.py \
--input_path {测试数据集路径(即labels文件夹所在路径),它提供label mask图} \
--img_path {训练数据集的图片路径(即train_resized/imgs文件夹所在路径,它提供ref图)}
--which_epoch {使用的模型的epoch数目}
致谢
原作者将论文的 pytorch
版本的源代码,迁移到了 Jittor
框架当中。其中借鉴了开源社区 Spectral Normalization
的代码,以及重度参考了原论文的官方开源代码:SPADE。
Diffusion 部分参考了Semantic Image Synthesis via Diffusion Models在github上的开源库。
风格及语义引导的风景图片生成 GauGAN与Diffusion
GauGAN仓库地址(使用baseline完成):https://github.com/Jittor/JGAN/tree/master/models/gaugan
简介
本项目包含了第二届计图挑战赛计图 - 草图生成风景比赛的代码实现。
本项目的特点是:采用了GauGAN方法对mask和style进行处理,取得了fid=42.81, 总分0.554的效果。
SPADE 的主要创新点在于使用了新的 Spatially−Adaptive Normalization 层来取代传统的 Batch Normalization 层,以此解决了 pix2pix 等算法中会丢失部分输入语义分割图像信息的问题。主要的修改内容在于 $\gamma$和 $\beta$ 的计算不同。
令$ h^i $表示深度卷积网络的第i层激活层,输入的batch size为N。令 $C^i $为当前卷积层的特征图通道数,$H^i $和$ W^i $是当前激活输出的尺寸高和宽。GauGAN使用的新的归一化层,空间自适应归一化层(Spatially-Adaptive normalization),其实现结构如下图所示。在每层归一化层,设置两层卷积层结构,对输入的语义标注图进行学习,得到归一化参数。
学习到的归一化参数与原始的BN操作对应,形式如下公式。
Gama和Beta由卷积层学习得到,而其余的miu和sigma是数据的均值和标准差,计算过程如下
增加编码器对特定风格的图像进行风格编码
网络结构方面,生成器采用堆叠多个
SPADE ResBlk
实现,其中每个SPADE ResBlk
的结构如左侧所示,Spatially−Adaptive Normalization
层中的 γ 和 β 参数通过输入的语义分割图像计算得到。判别器和
pix2pixHD
一样采用常见的Patch−GAN
形式。从
SPADE
算法的整体示意图来看,生成器的输入可以是一个随机张量,这样生成的图像也是随机的;同样,这个张量也可以通过一个Image−Encoder
和一张风格图像计算得到,编码网络将输入图像编码成张量,这个张量就包含输入图像的风格,这样就能得到多样化的输出了。安装
本项目主要运行在单张卡的 3090 上,200个 epoch 的训练周期一般为 4~5 天。
运行环境
安装依赖
可以进入任意目录执行以下命令安装依赖( jittor 框架请遵循官网给出的安装指导)
数据处理
数据目录我们没有上传,请遵循赛事公告进行下载。在本次比赛中,我们没有采取更多的数据预处理操作,裁剪、正则化等操作在项目代码中已经有所体现。
预训练模型我们采用的是
Jittor
框架自带的vgg19
模型,无需额外下载,在代码运行的过程中会载入到内存里。训练
生成测试集上的结果可以运行以下命令:
此前需要修改train.sh,其内容为:
测试
在单卡上进行测试:
此前需要:
致谢
原作者将论文的
pytorch
版本的源代码,迁移到了Jittor
框架当中。其中借鉴了开源社区Spectral Normalization
的代码,以及重度参考了原论文的官方开源代码:SPADE。Diffusion 部分参考了Semantic Image Synthesis via Diffusion Models在github上的开源库。