- 李想:负责
$CAP-VSTNet$ 网络结构复现与报告撰写 - 王圣远:负责
$CAP-VSTNet$ 训练和转换的jittor
实现,尝试图像美学质量评估(Image AestheticQuality Assessment),报告撰写 - 汪晗阳:负责
$CAP-VSTNet$ 数据处理和优化实现与报告撰写
截止到2023年6月25日,我们采用的算法在
我们在训练集上利用
我们在测试集上实现的效果如下(左上为语义标签图,右上为参考风格图,左下为
我们主要在比赛提供的 baseline Jittor
框架尝试复现了
对于
工作流程如下:
- 给定一个内容图像(即content)和一个风格图像(即style),$CAP-VSTNet$ 首先通过
$Injective \ Padding \ (IP)$ 模块,将输入维度沿通道维度进行零填充; - 之后通过网络的前向推理,将输入的内容/风格图像映射到隐空间(latent space),前向推理通过级联的
$Reversible \ Residual \ Block \ (RBB)$ 和$Spatial \ Squeeze$ 模块实现; - 这之后,一个
$Channel \ Refinement \ (CR)$ 模块被用来去除内容/风格图像特征中的通道冗余信息,以实现更有效的风格转换; - 再然后,一个线性变换模块
$cWCT$ 被用来迁移内容表示,以匹配风格表示的统计数据; - 最后,通过反向推理,将风格化的表示反过来映射到风格化的图像上,得到生成结果。
网络各部分的详细描述如下:
在
残差网络的前向推理过程如下(如上图中 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)
$$
其中,残差函数
此外,为捕获大规模的风格信息,$CAP-VSTNet$ 使用了
上述结构的问题在于,级联的可逆残差网络和压缩模块设计,导致了前向推理过程中冗余信息的积累,因为压缩模块会以指数形式增加通道,而冗余信息将对风格迁移产生负面影响。
于是,$CAP-VSTNet$ 使用了通道细化模块进行通道压缩,消除冗余信息,以实现更有效的风格转换。详细架构如下图所示:
在下图中可以看到,相较于使用全连接层(MLP)等其他设计方式,采用这样的架构可以最有效地减少伪影问题的出现:
传统的网络架构采用基于奇异值分解的
为此,$CAP-VSTNet$ 使用了Cholesky 分解来解决这一问题,将
总体的损失函数可被定义为: $$ L_{total} = L_s + \lambda_mL_m+\lambda_{cyc}L_{cyc} $$ 右侧分别代表风格损失函数、 Matting Laplacian 损失函数以及循环一致性损失函数,其定义如下:
由于 baseline
综上所述,我们的算法可以划分为如下两个阶段:
-
首先,$GauGAN$ 会使用输入的语义标签图(即 mask 图)与参考风格图(即 ref 图)输出生成图像(即 gen 图);
-
之后,$CAP-VSTNet$ 会使用参考风格图与上一阶段得到的生成图像,进行进一步的风格迁移,输出最终的生成图像。
与 baseline 相比,我们的算法在 FID 及 风格相似度 两个评测指标上的表现均有明显提升:
此处模型的一些超参数为:
-
$GauGAN$ :190 epoch(模型训练$190$ 轮次) -
$CAP-VSTNet$ :600 epoch + finetune(模型训练$600$ 轮次 + 进行$50$ 轮次 finetune)
本项目主要运行在单张卡的 3090 上,
-
$GauGAN$ 200 个 epoch 的训练周期一般为 4~5 天; -
$CAP-VSTNet$ 1000 个 epoch 的训练周期一般在 4 小时以内。
- ubuntu 20.04 LTS
- python >= 3.7
- jittor >= 1.3.0
可以进入相应目录执行以下命令安装依赖( jittor 框架请遵循官网给出的安装指导)
在gaugan
目录下执行
pip install -r requirements.txt
数据目录我们没有上传,请遵循赛事公告进行下载。在本次比赛中,我们没有采取更多的数据预处理操作,裁剪、正则化等操作在项目代码中已经有所体现。
预训练模型我们采用的是 Jittor
框架自带的 vgg19
模型,无需额外下载,在代码运行的过程中会载入到内存里。
下载后将label与img的映射关系(label_to_img.json)放置在gaugan
目录下,测试集保存至gaugan/data/val_A_labels_resized
风格迁移前的图片保存在CAP-VSTNet/data/content
,参考风格图片保存在CAP-VSTNet/data/style
,
在单卡上训练,只需在目录 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/
下执行以下命令:
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。