CAP-VST-Jittor
jittor
截止到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 的训练结果进行进一步的风格迁移,分阶段成功跑通训练和测试流程,基本复现了原论文的结果,并通过对网络参数的调整,实现了在比赛数据集上达到更好的效果。
Jittor
对于 $GauGAN$ 网络架构的介绍,可以参考仓库 wenqi-wang20/jittor-ThisNameIsGeneratedByJittor-Landscape: 第二届计图人工智能挑战赛,基于Jittor的草图风景图像生成大赛 (github.com)
的主要创新点在于抛弃了传统图像风格迁移工作中所使用的 $encoder-transformation-decoder$ 架构,而是使用了一个新的可逆残差网络和一个基于 Cholesky 分解的无偏线性变换模块,降低了风格迁移过程中特征与像素的亲和力损失(affinity loss),保证了内容细节的清晰以及相同语义区域内风格特征的一致性,从而有效降低了风格迁移中常见的伪影问题。新的可逆残差网络不仅可以保留内容的亲和力,而且不会像传统的可逆网络那样引入冗余信息,从而实现更加有效的风格迁移;同时,通过使用 Matting Laplacian 训练损失,网络弥补了传统的线性变换所导致的像素亲和力损失问题。详细架构如下图所示:
工作流程如下:
网络各部分的详细描述如下:
在 $CAP-VSTNet$ 中,输入会沿通道维度被划分为相同大小的输入对 $x_1,x_2$,之后通过可逆残差网络进行处理。
残差网络的前向推理过程如下(如上图中 a 部分所示): $ x_1,x_2=split(x)\ y_1=x_1+F(x_2),\ y_2=x_2 $ 后向推理过程如下(如上图中 b 部分所示): $ y_1,y_2=split(y)\ x_2=y_2,\ x_1=y_1-F(x_2) $ 其中,残差函数 $F$ 由核大小为 $3$ 的连续卷积层实现,网络通过堆叠多层模块来增大感受野,以便捕捉密集的成对关系。
此外,为捕获大规模的风格信息,$CAP-VSTNet$ 使用了 $Spatial \ Squeeze$ 模块来归约空间信息,同时增大通道维度。
上述结构的问题在于,级联的可逆残差网络和压缩模块设计,导致了前向推理过程中冗余信息的积累,因为压缩模块会以指数形式增加通道,而冗余信息将对风格迁移产生负面影响。
于是,$CAP-VSTNet$ 使用了通道细化模块进行通道压缩,消除冗余信息,以实现更有效的风格转换。详细架构如下图所示:
在下图中可以看到,相较于使用全连接层(MLP)等其他设计方式,采用这样的架构可以最有效地减少伪影问题的出现:
传统的网络架构采用基于奇异值分解的 $WCT$ 架构进行风格迁移,但当内容/风格表示的特征图具有相近的奇异值时,该架构便会失效,导致模型训练崩溃。
为此,$CAP-VSTNet$ 使用了Cholesky 分解来解决这一问题,将 $WCT$ 架构改进为 $Cholesky \ decomposition \ based \ WCT$,即 $cWCT$ 架构。
总体的损失函数可被定义为: $ L_{total} = L_s + \lambda_mL_m+\lambda_{cyc}L_{cyc} $ 右侧分别代表风格损失函数、 Matting Laplacian 损失函数以及循环一致性损失函数,其定义如下:
由于 baseline $GauGAN$ 生成的图像在风格相似度这一指标上与参考风格图仍然有一定差距,我们将该生成图像作为 content,原先的参考风格图保留继续作为 style,两者共同作为输入传入 $CAP-VSTNet$ 中,最终生成的图像理论上在图像风格方面会更接近参考图,也即超越 baseline,得到更高的评测分数。
综上所述,我们的算法可以划分为如下两个阶段:
首先,$GauGAN$ 会使用输入的语义标签图(即 mask 图)与参考风格图(即 ref 图)输出生成图像(即 gen 图);
之后,$CAP-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
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
Jittor 草图生成风景比赛 GauGAN + CAP-VSTNet
JittorAnything队伍成员及分工
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$ 中,输入会沿通道维度被划分为相同大小的输入对 $x_1,x_2$,之后通过可逆残差网络进行处理。
残差网络的前向推理过程如下(如上图中 a 部分所示): $ x_1,x_2=split(x)\ y_1=x_1+F(x_2),\ y_2=x_2 $ 后向推理过程如下(如上图中 b 部分所示): $ y_1,y_2=split(y)\ x_2=y_2,\ x_1=y_1-F(x_2) $ 其中,残差函数 $F$ 由核大小为 $3$ 的连续卷积层实现,网络通过堆叠多层模块来增大感受野,以便捕捉密集的成对关系。
此外,为捕获大规模的风格信息,$CAP-VSTNet$ 使用了 $Spatial \ Squeeze$ 模块来归约空间信息,同时增大通道维度。
通道细化模块($Channel \ Refinement \ module$)
上述结构的问题在于,级联的可逆残差网络和压缩模块设计,导致了前向推理过程中冗余信息的积累,因为压缩模块会以指数形式增加通道,而冗余信息将对风格迁移产生负面影响。
于是,$CAP-VSTNet$ 使用了通道细化模块进行通道压缩,消除冗余信息,以实现更有效的风格转换。详细架构如下图所示:
在下图中可以看到,相较于使用全连接层(MLP)等其他设计方式,采用这样的架构可以最有效地减少伪影问题的出现:
迁移模块
传统的网络架构采用基于奇异值分解的 $WCT$ 架构进行风格迁移,但当内容/风格表示的特征图具有相近的奇异值时,该架构便会失效,导致模型训练崩溃。
为此,$CAP-VSTNet$ 使用了Cholesky 分解来解决这一问题,将 $WCT$ 架构改进为 $Cholesky \ decomposition \ based \ WCT$,即 $cWCT$ 架构。
损失函数
总体的损失函数可被定义为: $ L_{total} = L_s + \lambda_mL_m+\lambda_{cyc}L_{cyc} $ 右侧分别代表风格损失函数、 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。