【论文笔记】Unpaired Photo-to-Caricature Translation on Faces in the Wild

Unpaired Photo-to-Caricature Translation on Faces in the Wild

Abstract:

一些基于 cycle consistency loss的unpaired methods 就像DualGAN, CycleGAN and DiscoGAN 是非常受欢迎的。然而,对于需要high-level视觉信息转换的翻译任务来说仍然是非常具有挑战性的。我们提出了一种学习将faces in the wild从 the source photo domain转换到具有不同样式的target caricature domain的方法,该方法也可用于其他高级别的图像翻译任务。

  • 为在翻译时捕获具有本地统计信息的全局结构,我们设计了一个双路径(dual pathway)模型:(coarse discriminator and one fine discriminator)。coarse discriminator 负责全局结构信息。fine discriminator负责关于本地统计信息
  • 对于生成器,我们额外提供一个与adversarial loss 和cycle consistency loss相关的perceptual loss,以实现两个不同域的表征学习。这个perceptual loss使generated output 与 unpaired target domain image保持一致。
  • 为了提高模型的鲁棒性,我们设计了一种noise-added training procedure.受InfoGAN的影响,我们发现auxiliary noise 可以帮助模型在翻译任务中学习卡通风格信息。

我们的动机是设计一个具有多个鉴别器的对抗训练,以提高GAN鉴别器在特征表示方面的能力。通过使用我们提出的方法,the photos of faces in the wild可以被翻译成具有学习的通用夸张艺术风格的漫画,同时仍然保持原始逼真的表达。

3.method

我们原先的CGAN的目标函数表示为 L c ( G , D ) = E x , y ∼ p d a t a ( x , y ) [ l o g D ( x , y ) ] + E x ∼ P d a t a ( x ) [ l o g ( 1 − D ( x , G ( x ) ) ) ] L_c(G,D)=E_{x,y \sim p_{data}(x,y)}[logD(x,y)]+E_{x \sim P_{data}(x)}[log(1-D(x,G(x)))] Lc(G,D)=Ex,ypdata(x,y)[logD(x,y)]+ExPdata(x)[log(1D(x,G(x)))]
在这里插入图片描述

3.1 Cycle consistency loss

关于这个知识点详细可见论文[1]
在这里插入图片描述
L c y c ( G 1 , G 2 ) = E x ∼ P d a t a ( x ) [ ∣ ∣ G 2 ( G 1 ( x ) ) − x ∣ ∣ 1 ] + E y ∼ P d a t a ( y ) [ ∣ ∣ G 1 ( G 2 ( y ) ) − y ∣ ∣ 1 ] L_{cyc}(G1,G2)=E{x \sim P_{data(x)}}[||G_2(G_1(x))-x||_1]+E_{y \sim P_{data(y)}}[||G_1(G_2(y))-y||_1] Lcyc(G1,G2)=ExPdata(x)[G2(G1(x))x1]+EyPdata(y)[G1(G2(y))y1]
(ps:此处的公式我们使用L1 loss来计算)

3.2 Perceptual loss

为了进一步减小域间映射函数的空间间隔,我们将perceptual loss L p L_p Lp应用于模型中。(我们采用的是content loss,也称为perceptual similarity loss或feature matching。)

我们将perceptual loss应用于我们的模型,然后是cycle consistence loss,并计算来自不同域的不成对图像之间的perceptual loss,以推动生成器捕获特征表示。
在这里插入图片描述

  • φ是一个预先训练过的visual perception network(我们在实验中使用预训练的VGG-19)。
  • n是feature map的数目,网络中的不同层表示从低到高级别的信息。

3.3 Auxiliary noise input

为了提高图像的鲁棒性,丰富域间图像转换的多样性,在翻译之前,我们设计了一个noise-added training procedure。
步骤:

  • 我们从随机均匀分布中得到一个随机噪声输入。(0-255)
  • 我们将噪声输入和原始图像输入合并,使用近似权值获取最终输入。

x = x i ∗ α + ( 1 − α ) ∗ n x=x_i * \alpha+(1-\alpha)*n x=xiα+(1α)n
这里,我们将α定义为原始图像占最终图像的比例。
x i x_i xi为原始输入;n 表示均匀分布(uniform distribution) P n o i s e P_{noise} Pnoise的噪声.

根据加入了auxiliary noise input 我们的 L c L_c Lc需要做相应的改变,公式如下所示。
L c ( G , D ) = E x , y ∼ P d a t a ( x , y ) [ l o g D ( x , y ) ] + E x ∼ P d a t a ( x ) , n ∼ P n o i s e ( n ) [ l o g ( 1 − D ( x , G ( x , n ) ) ] L_c(G,D)=E_{x,y \sim P_{data(x,y)}}[logD_(x,y)]+E_{x \sim P_{data(x)},n \sim P_{noise(n)}}[log(1-D(x,G(x,n))] Lc(G,D)=Ex,yPdata(x,y)[logD(x,y)]+ExPdata(x),nPnoise(n)[log(1D(x,G(x,n))]

3.4 Dual discriminators

传统的训练方法通常只有一个generator和一个discriminator。与之不同的是,我们设计了两种不同的discriminator来捕获不同层次的信息。
coarse discriminator
目的是鼓励生成基于全局风格和结构信息的图像合成,用于领域翻译。
fine discriminator
目的是实现特征匹配,帮助生成更合理、更精确的图像,而精细匹配则是对人脸细节的训练,例如嘴唇和眼睛。

  • 这里有和论文[2]不同之处:我们不使用image patch作为local discriminator的输入。我们提供两者的整体图像作为输入,而两者的输出是不同的。coarse discriminator的输出是4×4的,而 fine discriminator的输出是16×16的。这两个判别网络的最后一层都是sigmoid function。注意这个16×16和4×4是可以改变的,此处的设定是因为在该设定下实验效果能达到最好。

3.5 Generator

在这里插入图片描述
γ和σ是平衡各损失对目标贡献的参数。(γ = 10 and σ = 2.0)
如图2所示,我们使用Conv-Residual blocks-Deconv作为生成器,直接在输入和输出之间共享低级和高级信息。

4.Experiments

4.1 Dataset and training

我们提出的模型在配对的脸部照片漫画数据集上以受监督的不成对方式进行训练,名为IIIT-CFW-P2C数据集,这个数据集是在由IIIT-CFW重建的。

IIIT-CFW数据集包含了来自名人的8928张卡通图片以及1000张真实人脸照片。然而,它不适用于使用一些成对的方法对照片到漫画翻译任务的训练,因为脸部照片和面部照片不是成对的。因此,我们通过搜索匹配数据集和因特网作为比较实验的训练集,重建了一个具有1171对配对图像的图像数据集。在这里我们使用其中800对进行训练,其余的用来作为测试。

4.2 Comparison with state-of-the-arts

我们使用IIIT-CFW-P2C数据集将本文提出的模型与以往的模型进行实验结果的对比。
Qualitative evaluation:(定性评估)
在这里插入图片描述
Quantitative evaluation:(定量评估)
在这里插入图片描述
在这里插入图片描述

4.3 Dual discriminators

在该实验中我们验证coarse discriminator和fine discriminator缺一不可。
在这里插入图片描述

4.4 Loss selection

中间那一列是没有使用cycle consistency loss
在这里插入图片描述

4.5 Auxiliary noise input

在这里插入图片描述
[1].Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks。
[2].Globally and locally consistent image completion

<think>好的,用户想了解如何使用basicsr库训练多个数据集。我需要先回忆一下basicsr的基本用法和配置方式。basicsr是一个基于PyTorch的图像超分辨率恢复工具库,通常通过YAML配置文件来设置训练参数和数据集。 首先,用户可能已经知道如何训练单个数据集,但现在需要扩展到多个数据集的情况。我应该考虑多个数据集的配置方式,可能是在YAML文件中指定多个数据集路径,或者通过不同的数据模式加载不同的数据集。 接下来,我需要确定在basicsr中如何处理多数据集训练。通常,可能会有两种方式:一种是每个数据集单独作为一个数据源,另一种是将多个数据集合并成一个大的数据集。需要查看官方文档或示例配置,看看是否支持多个数据集的配置。 假设支持多个数据集配置,可能在options/train.yml里,数据设置部分可以列出多个数据集。例如,使用dataroot参数指定多个路径,或者通过不同的子配置项来定义每个数据集。同时,可能需要设置不同的参数,比如batch_size的分发方式,或者每个数据集的采样比例。 然后,关于数据加载部分,basicsr可能提供了相应的Dataset类,支持从多个文件夹读取数据。例如,使用PairedImageDataset或RepeatDataset来处理多个来源的数据。需要确认是否需要使用特定的数据加载方式,比如将多个数据集合并成一个,或者交替训练不同数据集。 另外,用户可能需要调整训练策略,比如每个epoch中从不同数据集采样,或者按照一定比例混合数据。这时候可能需要修改数据加载的代码,或者利用现有的配置参数来实现。 还需要注意数据预处理的一致性,比如不同的数据集是否需要相同的裁剪大小、缩放比例等。如果不同数据集的分辨率不一致,可能需要统一处理,或者在配置中分别指定各自的预处理方式。 此外,验证集的配置也可能需要调整,确保在训练多个数据集时,验证集能正确地从指定数据集中选取样本。可能需要为每个数据集单独设置验证路径,或者在验证时只使用其中一个数据集作为评估标准。 最后,可能还需要考虑学习率调整、训练日志记录等细节,确保多数据集训练时的稳定性和可追踪性。如果用户在使用过程中遇到错误,比如路径配置错误或数据加载不匹配,可能需要检查YAML文件的格式是否正确,数据集路径是否存在,以及数据格式是否符合要求。 总结来说,回答应该包括修改配置文件以支持多个数据集路径,选择合适的Dataset类,调整数据加载参数,处理数据预处理和验证集配置,以及可能的常见问题解决方法。同时,需要引导用户参考官方文档或示例,确保配置的正确性。</think>在 BasicSR 中训练多个数据集通常需要修改配置文件(`.yml` 文件),通过合并或交替加载不同数据集实现。以下是关键步骤和示例: --- ### **1. 数据集准备** - 确保所有数据集遵循相同格式(如 paired 或 unpaired),例如: ``` datasets/ ├── dataset_A/ │ ├── train/ │ │ ├── HR/*.png │ │ └── LR/*.png ├── dataset_B/ │ ├── train/ │ │ ├── HR/*.png │ │ └── LR/*.png ``` --- ### **2. 修改 YAML 配置文件** 在 `options/train.yml` 中配置多数据集加载: #### **方案 1:直接合并多个数据集** ```yaml datasets: train: name: PairedImageDataset dataroot_gt: [datasets/dataset_A/train/HR, datasets/dataset_B/train/HR] dataroot_lq: [datasets/dataset_A/train/LR, datasets/dataset_B/train/LR] io_backend: type: disk scale: 4 # 超分比例 batch_size: 32 ... ``` #### **方案 2:交替训练不同数据集** 使用 `RepeatDataset` 控制每个 epoch 的数据源: ```yaml datasets: train: name: RepeatDataset datasets: - name: PairedImageDataset dataroot_gt: datasets/dataset_A/train/HR dataroot_lq: datasets/dataset_A/train/LR io_backend: {type: disk} scale: 4 batch_size: 16 # 每个批次来自同一数据集 - name: PairedImageDataset dataroot_gt: datasets/dataset_B/train/HR dataroot_lq: datasets/dataset_B/train/LR io_backend: {type: disk} scale: 4 batch_size: 16 repeat_times: [1, 1] # 控制每个子数据集的采样比例 ``` --- ### **3. 调整训练参数** - **Batch Size**: 确保总 batch size 合理(如方案 2 中每个子数据集 `batch_size=16`,总为 32)。 - **数据平衡**: 通过 `repeat_times` 或合并比例控制不同数据集权重。 - **验证集**: 指定单独数据集用于验证: ```yaml datasets: val: name: PairedImageDataset dataroot_gt: datasets/dataset_A/val/HR dataroot_lq: datasets/dataset_A/val/LR scale: 4 ``` --- ### **4. 启动训练** ```bash python basicsr/train.py -opt options/train.yml ``` --- ### **注意事项** - **数据格式统一**: 确保所有数据集的 LR/HR 图像尺寸匹配(如 HR 是 LR 的 4 倍)。 - **路径正确性**: YAML 文件中路径需与实际位置一致。 - **增强一致性**: 若不同数据集需要不同预处理,需自定义 Dataset 类。 --- ### **扩展:自定义数据集类** 如需更复杂操作(如动态混合),可继承 `PairedImageDataset` 并重写数据加载逻辑,然后在 YAML 中指定自定义类名。 详细文档参考:[BasicSR 官方 GitHub](https://github.com/xinntao/BasicSR)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值