Skip to content

第二届计图人工智能挑战赛,基于Jittor的草图风景图像生成大赛

Notifications You must be signed in to change notification settings

wenqi-wang20/jittor-ThisNameIsGeneratedByJittor-Landscape

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jittor 草图生成风景比赛 SPADE + FPSE

ThisNameIsGeneratedByJittor (此名称由计图生成)

队伍成员及分工

  • 王文琦:负责算法 FPSE的实现与仓库维护
  • 陈顾骏:负责算法 GauGAN的实现与报告撰写

实现效果

截止到2022年6月29日(A榜封榜前1天),我们采用的算法在 $A$ 榜排名第 $14$,得分 $0.5218$,提交 $request_id$$2022062912515137607937$

我们在训练集上实现的效果如下(左侧为原图像,右侧为生成图像):

image-20220629161446325

我们在测试集上实现的效果如下(左侧为语义标签图,右侧为生成图像):

image-20220629160159114

算法背景

我们主要使用 $Jittor$ 复现了 $GauGAN$Semantic Image Synthesis with Spatially-Adaptive Normalization)和 $FPSE$Learning to Predict Layout-to-image Conditional Convolutions for Semantic Image Synthesis)的模型结构并成功跑通训练和测试流程,基本复现了原论文的结果。

$GauGAN$

$GauGAN$,即 $SPADE$ 的主要创新点在于使用了新的 $Spatially-Adaptive \ Normalization$ 层来取代传统的 $Batch \ Normalization$ 层,以此解决了 $pix2pix$ 等算法中会丢失部分输入语义分割图像信息的问题。主要的修改内容在于 $\gamma$$\beta$ 的计算不同。

img1

$Batch \ Normalization$$\gamma$$\beta$ 的计算是通过网络训练得到的,而 $Spatially \ Adaptive \ Normalization$$\gamma$$\beta$ 是通过语义分割图像计算得到的。

$Spatially-Adaptive \ Normalization$ 的极算过程如公式 $(1)$ 所示。在 $Batch \ Normalization$ 中, $\gamma$$\beta$ 是一维张量,其中每个值对应输入特征图的每个通道,而在 $Spatially-Adaptive \ Normalization$ 中, $\gamma$$\beta$ 是三维矩阵,除了通道维度外还有宽和高维度,因此公式 $(1)$$\gamma$$\beta$ 下标包含 $c,y,x$ 三个符号。均值 μ 和标准差 σ 的计算如公式 $(2)(3)$ 所示,这部分和 $Batch \ Normalization$ 中的计算一样。

img4

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

img5

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

img6

$SPADE$ 算法的整体示意图来看,生成器的输入可以是一个随机张量,这样生成的图像也是随机的;同样,这个张量也可以通过一个 $Image-Encoder$ 和一张风格图像计算得到,编码网络将输入图像编码成张量,这个张量就包含输入图像的风格,这样就能得到多样化的输出了。

$FPSE$

$CC-FPSE$ 网络主要是受 $SPADE$ 网络启发而来的。主要使用了一个由权重预测网络预测的条件卷积生成器 G 和一个特征嵌入的鉴别器 D 组成,详细架构如下图所示。

image-20220629151511682

在传统的卷积层中,相同的卷积核应用于所有样本和所有空间位置,而不管它们有不同的语义布局。而在 $FPSE$ 网络结构中,认为这种卷及操作对于语义图像的合成不够灵活和有效。所以为了更好地将 semantic image 的布局信息纳入到图像生成的过程中,本篇文章提出了基于语义布局来预测卷积核权值的方法。给定输入特征图 $X \in R^{C \times H \times W}$,通过一个核大小为 $k \times k$ 的卷积层来输出特征图 $Y \in R ^{D \times H \times W}$。其中使用权值预测网络,使用语义标签作为输入,输出每一个条件卷积层的卷积核权值。**当然,但实际操作的过程中,如果预测所有的卷积核权值,会导致过高的计算成本和 GPU 内存占用**,所以在真实的网络中,只预测轻量级的深度卷积的权值。

image-20230128151424434

上图是采取的训练损失函数。其余的鉴别器网络基本与 $SPADE$ 一致。论文中给出的实验效果要优于 $SPADE$

安装

本项目主要运行在单张卡的 3090 上,200个 epoch 的训练周期一般为 4~5 天。

运行环境

  • ubuntu 20.04 LTS
  • python >= 3.7
  • jittor >= 1.3.0

安装依赖

可以进入任意目录执行以下命令安装依赖( jittor 框架请遵循官网给出的安装指导)

pip install -r requirements.txt

数据处理

数据目录我们没有上传,请遵循赛事公告进行下载。在本次比赛中,我们没有采取更多的数据预处理操作,裁剪、正则化等操作在项目代码中已经有所体现。

预训练模型我们采用的是 Jittor 框架自带的 vgg19 模型,无需额外下载,在代码运行的过程中会载入到内存里。

训练

在单卡上训练,只需执行以下命令(针对 $SPADE$$FPSE$ 均可):

python train.py  \
--name "your project name" \ 
--datasetmode custom \
--label_dir "your train labels directory" \
--image_dir "your train images directory" \
--label_nc 29 \ 
--batchSize "your batchsize" \
--no_instance \
--use_vae

因为受平台算力的限制 (单卡3090),$FPSE$ 算法需要更高的参数量,也就需要更大的GPU内存。在实际操作中,$FPSE$ 只能使用 batchsize = 1 的梯度下降,导致模型训练效果较佳,但是泛化性能很差;相比之下,$SPADE$ 需要的模型参数量更小,可以使用 batchsize = 4 的梯度下降,相应地在测试集上的效果也就更好。我们最终是选择了$SPADE$ 算法的结果上交比赛平台。

推断

在单卡上进行测试,只需执行以下命令(针对 $SPADE$$FPSE$ 均可):

python test.py  \
--name "your project name (the same as the train project)" \ 
--datasetmode custom \
--label_dir "your test labels directory" \
--label_nc 29 \ 
--no_instance \
--use_vae

致谢

我们将两篇论文的 pytorch 版本的源代码,迁移到了 Jittor 框架当中。其中借鉴了开源社区 Spectral Normalization 的代码,以及重度参考了两篇论文的官方开源代码:SPADEFPSE

About

第二届计图人工智能挑战赛,基于Jittor的草图风景图像生成大赛

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages