CAP-VST-Jittor
jittor
截止到2023年6月25日,我们采用的算法在 AAA 榜排名第 888,得分 0.58520.58520.5852,提交 request_idrequest\_idrequest_id 为 202306241030169897768620230624103016989776862023062410301698977686。
我们在训练集上利用 CAP−VSTNetCAP-VSTNetCAP−VSTNet 实现的风格迁移效果如下(第一行为原图像,第二行为参考风格图像,第三行为输出图像):
我们在测试集上实现的效果如下(左上为语义标签图,右上为参考风格图,左下为 GauGANGauGANGauGAN 生成的图像,右下为在 GauGANGauGANGauGAN 基础上利用 CAP−VSTNetCAP-VSTNetCAP−VSTNet 进行风格迁移后生成的图像):
我们主要在比赛提供的 baseline GauGANGauGANGauGAN(Semantic Image Synthesis with Spatially-Adaptive Normalization)的基础上,使用 Jittor 框架尝试复现了 CAP−VSTNetCAP-VSTNetCAP−VSTNet(CAP-VSTNet: Content Affinity Preserved Versatile Style Transfer )的模型结构,对 baseline 的训练结果进行进一步的风格迁移,分阶段成功跑通训练和测试流程,基本复现了原论文的结果,并通过对网络参数的调整,实现了在比赛数据集上达到更好的效果。
Jittor
对于 GauGANGauGANGauGAN 网络架构的介绍,可以参考仓库 wenqi-wang20/jittor-ThisNameIsGeneratedByJittor-Landscape: 第二届计图人工智能挑战赛,基于Jittor的草图风景图像生成大赛 (github.com)
CAP−VSTNetCAP-VSTNetCAP−VSTNet 的主要创新点在于抛弃了传统图像风格迁移工作中所使用的 encoder−transformation−decoderencoder-transformation-decoderencoder−transformation−decoder 架构,而是使用了一个新的可逆残差网络和一个基于 Cholesky 分解的无偏线性变换模块,降低了风格迁移过程中特征与像素的亲和力损失(affinity loss),保证了内容细节的清晰以及相同语义区域内风格特征的一致性,从而有效降低了风格迁移中常见的伪影问题。新的可逆残差网络不仅可以保留内容的亲和力,而且不会像传统的可逆网络那样引入冗余信息,从而实现更加有效的风格迁移;同时,通过使用 Matting Laplacian 训练损失,网络弥补了传统的线性变换所导致的像素亲和力损失问题。详细架构如下图所示:
工作流程如下:
网络各部分的详细描述如下:
在 CAP−VSTNetCAP-VSTNetCAP−VSTNet 中,输入会沿通道维度被划分为相同大小的输入对 x1,x2x_1,x_2x1,x2,之后通过可逆残差网络进行处理。
残差网络的前向推理过程如下(如上图中 a 部分所示):
x1,x2=split(x)y1=x1+F(x2), y2=x2x_1,x_2=split(x)\\ y_1=x_1+F(x_2),\ y_2=x_2x1,x2=split(x)y1=x1+F(x2), y2=x2
后向推理过程如下(如上图中 b 部分所示):
y1,y2=split(y)x2=y2, x1=y1−F(x2)y_1,y_2=split(y)\\ x_2=y_2,\ x_1=y_1-F(x_2)y1,y2=split(y)x2=y2, x1=y1−F(x2)
其中,残差函数 FFF 由核大小为 333 的连续卷积层实现,网络通过堆叠多层模块来增大感受野,以便捕捉密集的成对关系。
此外,为捕获大规模的风格信息,CAP−VSTNetCAP-VSTNetCAP−VSTNet 使用了 Spatial SqueezeSpatial \ SqueezeSpatial Squeeze 模块来归约空间信息,同时增大通道维度。
上述结构的问题在于,级联的可逆残差网络和压缩模块设计,导致了前向推理过程中冗余信息的积累,因为压缩模块会以指数形式增加通道,而冗余信息将对风格迁移产生负面影响。
于是,CAP−VSTNetCAP-VSTNetCAP−VSTNet 使用了通道细化模块进行通道压缩,消除冗余信息,以实现更有效的风格转换。详细架构如下图所示:
在下图中可以看到,相较于使用全连接层(MLP)等其他设计方式,采用这样的架构可以最有效地减少伪影问题的出现:
传统的网络架构采用基于奇异值分解的 WCTWCTWCT 架构进行风格迁移,但当内容/风格表示的特征图具有相近的奇异值时,该架构便会失效,导致模型训练崩溃。
为此,CAP−VSTNetCAP-VSTNetCAP−VSTNet 使用了Cholesky 分解来解决这一问题,将 WCTWCTWCT 架构改进为 Cholesky decomposition based WCTCholesky \ decomposition \ based \ WCTCholesky decomposition based WCT,即 cWCTcWCTcWCT 架构。
总体的损失函数可被定义为:
Ltotal=Ls+λmLm+λcycLcycL_{total} = L_s + \lambda_mL_m+\lambda_{cyc}L_{cyc}Ltotal=Ls+λmLm+λcycLcyc
右侧分别代表风格损失函数、 Matting Laplacian 损失函数以及循环一致性损失函数,其定义如下:
由于 baseline GauGANGauGANGauGAN 生成的图像在风格相似度这一指标上与参考风格图仍然有一定差距,我们将该生成图像作为 content,原先的参考风格图保留继续作为 style,两者共同作为输入传入 CAP−VSTNetCAP-VSTNetCAP−VSTNet 中,最终生成的图像理论上在图像风格方面会更接近参考图,也即超越 baseline,得到更高的评测分数。
综上所述,我们的算法可以划分为如下两个阶段:
首先,GauGANGauGANGauGAN 会使用输入的语义标签图(即 mask 图)与参考风格图(即 ref 图)输出生成图像(即 gen 图);
之后,CAP−VSTNetCAP-VSTNetCAP−VSTNet 会使用参考风格图与上一阶段得到的生成图像,进行进一步的风格迁移,输出最终的生成图像。
与 baseline 相比,我们的算法在 FID 及 风格相似度 两个评测指标上的表现均有明显提升:
此处模型的一些超参数为:
本项目主要运行在单张卡的 3090 上,
可以进入相应目录执行以下命令安装依赖( jittor 框架请遵循官网给出的安装指导)
在gaugan目录下执行
gaugan
pip install -r requirements.txt
数据目录我们没有上传,请遵循赛事公告进行下载。在本次比赛中,我们没有采取更多的数据预处理操作,裁剪、正则化等操作在项目代码中已经有所体现。
预训练模型我们采用的是 Jittor 框架自带的 vgg19 模型,无需额外下载,在代码运行的过程中会载入到内存里。
vgg19
下载后将label与img的映射关系(label_to_img.json)放置在gaugan目录下,测试集保存至gaugan/data/val_A_labels_resized
gaugan/data/val_A_labels_resized
风格迁移前的图片保存在CAP-VSTNet/data/content,参考风格图片保存在CAP-VSTNet/data/style,
CAP-VSTNet/data/content
CAP-VSTNet/data/style
在单卡上训练,只需在目录 gaugan/ 下执行以下命令:
gaugan/
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
在单卡上训练,只需在目录 CAP-VSTNet-Jittor/ 下执行以下命令:
CAP-VSTNet-Jittor/
python train.py
在单卡上进行测试,只需执行以下命令:
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 框架当中。其中重度参考了论文的官方开源代码:CAP-VSTNet。
pytorch
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
Jittor 草图生成风景比赛
JittorAnythingGauGAN + CAP-VSTNet
队伍成员及分工
jittor实现,尝试图像美学质量评估(Image AestheticQuality Assessment),报告撰写实现效果
截止到2023年6月25日,我们采用的算法在 A 榜排名第 8,得分 0.5852,提交 request_id 为 2023062410301698977686。
我们在训练集上利用 CAP−VSTNet 实现的风格迁移效果如下(第一行为原图像,第二行为参考风格图像,第三行为输出图像):
我们在测试集上实现的效果如下(左上为语义标签图,右上为参考风格图,左下为 GauGAN 生成的图像,右下为在 GauGAN 基础上利用 CAP−VSTNet 进行风格迁移后生成的图像):
算法背景
我们主要在比赛提供的 baseline GauGAN(Semantic Image Synthesis with Spatially-Adaptive Normalization)的基础上,使用
Jittor框架尝试复现了 CAP−VSTNet(CAP-VSTNet: Content Affinity Preserved Versatile Style Transfer )的模型结构,对 baseline 的训练结果进行进一步的风格迁移,分阶段成功跑通训练和测试流程,基本复现了原论文的结果,并通过对网络参数的调整,实现了在比赛数据集上达到更好的效果。GauGAN
对于 GauGAN 网络架构的介绍,可以参考仓库 wenqi-wang20/jittor-ThisNameIsGeneratedByJittor-Landscape: 第二届计图人工智能挑战赛,基于Jittor的草图风景图像生成大赛 (github.com)
CAP−VSTNet
CAP−VSTNet 的主要创新点在于抛弃了传统图像风格迁移工作中所使用的 encoder−transformation−decoder 架构,而是使用了一个新的可逆残差网络和一个基于 Cholesky 分解的无偏线性变换模块,降低了风格迁移过程中特征与像素的亲和力损失(affinity loss),保证了内容细节的清晰以及相同语义区域内风格特征的一致性,从而有效降低了风格迁移中常见的伪影问题。新的可逆残差网络不仅可以保留内容的亲和力,而且不会像传统的可逆网络那样引入冗余信息,从而实现更加有效的风格迁移;同时,通过使用 Matting Laplacian 训练损失,网络弥补了传统的线性变换所导致的像素亲和力损失问题。详细架构如下图所示:
工作流程如下:
网络各部分的详细描述如下:
可逆残差网络(Reversible Residual Block)+ 压缩模块(Spatial Squeeze module)
在 CAP−VSTNet 中,输入会沿通道维度被划分为相同大小的输入对 x1,x2,之后通过可逆残差网络进行处理。
残差网络的前向推理过程如下(如上图中 a 部分所示):
x1,x2=split(x)y1=x1+F(x2), y2=x2
后向推理过程如下(如上图中 b 部分所示):
y1,y2=split(y)x2=y2, x1=y1−F(x2)
其中,残差函数 F 由核大小为 3 的连续卷积层实现,网络通过堆叠多层模块来增大感受野,以便捕捉密集的成对关系。
此外,为捕获大规模的风格信息,CAP−VSTNet 使用了 Spatial Squeeze 模块来归约空间信息,同时增大通道维度。
通道细化模块(Channel Refinement module)
上述结构的问题在于,级联的可逆残差网络和压缩模块设计,导致了前向推理过程中冗余信息的积累,因为压缩模块会以指数形式增加通道,而冗余信息将对风格迁移产生负面影响。
于是,CAP−VSTNet 使用了通道细化模块进行通道压缩,消除冗余信息,以实现更有效的风格转换。详细架构如下图所示:
在下图中可以看到,相较于使用全连接层(MLP)等其他设计方式,采用这样的架构可以最有效地减少伪影问题的出现:
迁移模块
传统的网络架构采用基于奇异值分解的 WCT 架构进行风格迁移,但当内容/风格表示的特征图具有相近的奇异值时,该架构便会失效,导致模型训练崩溃。
为此,CAP−VSTNet 使用了Cholesky 分解来解决这一问题,将 WCT 架构改进为 Cholesky decomposition based WCT,即 cWCT 架构。
损失函数
总体的损失函数可被定义为:
Ltotal=Ls+λmLm+λcycLcyc
右侧分别代表风格损失函数、 Matting Laplacian 损失函数以及循环一致性损失函数,其定义如下:
由于 baseline GauGAN 生成的图像在风格相似度这一指标上与参考风格图仍然有一定差距,我们将该生成图像作为 content,原先的参考风格图保留继续作为 style,两者共同作为输入传入 CAP−VSTNet 中,最终生成的图像理论上在图像风格方面会更接近参考图,也即超越 baseline,得到更高的评测分数。
综上所述,我们的算法可以划分为如下两个阶段:
首先,GauGAN 会使用输入的语义标签图(即 mask 图)与参考风格图(即 ref 图)输出生成图像(即 gen 图);
之后,CAP−VSTNet 会使用参考风格图与上一阶段得到的生成图像,进行进一步的风格迁移,输出最终的生成图像。
与 baseline 相比,我们的算法在 FID 及 风格相似度 两个评测指标上的表现均有明显提升:
此处模型的一些超参数为:
安装
本项目主要运行在单张卡的 3090 上,
运行环境
安装依赖
可以进入相应目录执行以下命令安装依赖( jittor 框架请遵循官网给出的安装指导)
在
gaugan目录下执行数据预处理
数据目录我们没有上传,请遵循赛事公告进行下载。在本次比赛中,我们没有采取更多的数据预处理操作,裁剪、正则化等操作在项目代码中已经有所体现。
预训练模型我们采用的是
Jittor框架自带的vgg19模型,无需额外下载,在代码运行的过程中会载入到内存里。下载后将label与img的映射关系(label_to_img.json)放置在
gaugan目录下,测试集保存至gaugan/data/val_A_labels_resized风格迁移前的图片保存在
CAP-VSTNet/data/content,参考风格图片保存在CAP-VSTNet/data/style,训练
GauGAN
在单卡上训练,只需在目录
gaugan/下执行以下命令:CAP−VSTNet
在单卡上训练,只需在目录
CAP-VSTNet-Jittor/下执行以下命令:推断
在单卡上进行测试,只需执行以下命令:
致谢
我们将原论文的
pytorch版本的源代码,迁移到了Jittor框架当中。其中重度参考了论文的官方开源代码:CAP-VSTNet。