对抗生成:基于CycleGAN的风格迁移
  • 前言
  • 相关介绍
  • CycleGAN 的工作原理
  • 核心思想
  • 主要组件
  • 训练目标
  • 优点
  • 缺点
  • 应用实例
  • 总结
  • 实验环境
  • 项目地址
  • Linux
  • Windows
  • 项目结构
  • 具体用法
  • 准备数据(以vangogh2photo为例)
  • 进行训练(以vangogh2photo为例)
  • 进行测试(以vangogh2photo为例)
  • 参考文献


对抗生成:基于CycleGAN的风格迁移_神经网络


对抗生成:基于CycleGAN的风格迁移_python_02

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。

相关介绍

对抗生成:基于CycleGAN的风格迁移_人工智能_03

CycleGAN 是一种生成对抗网络(GAN)架构,特别设计用于无监督的图像到图像转换任务。它是 Jun-Yan Zhu 等人在 2017 年提出的。下面是对 CycleGAN 的详细介绍以及它的主要优缺点。

CycleGAN 的工作原理
核心思想
  • 无配对训练数据:CycleGAN 能够在没有配对的训练样本的情况下进行图像到图像的转换。
  • 循环一致性:通过引入循环一致性损失来保证生成的图像经过两次转换后尽可能接近原始图像。
主要组件
  • 生成器:有两个生成器 G 和 F,其中 G 用于 A 到 B 的转换,F 用于 B 到 A 的转换。
  • 判别器:同样有两个判别器 D_A 和 D_B,它们分别用于辨别真假图像是否属于 A 或 B 领域。
  • 循环一致性损失:这是 CycleGAN 的关键组成部分,它确保了从 A 到 B 再回到 A 的转换尽可能接近原始图像,同样对于 B 到 A 再回到 B 也适用。
训练目标
  • 对抗损失:使生成器产生的图像能够欺骗对应的判别器。
  • 循环一致性损失:确保两次转换后的图像接近原始图像。
  • 身份损失:可选的损失项,当输入图像本身就是目标域的图像时,生成器应该输出相同的图像。
优点
  1. 无配对训练数据:CycleGAN 不需要成对的训练数据,这大大降低了收集数据的难度。
  2. 可扩展性:可以在不同类型的图像之间进行转换,例如不同艺术风格间的转换、不同季节的景观转换等。
  3. 高保真度:能够较好地保持图像的内容特征,同时转换其风格或外观。
  4. 减少过拟合:即使使用少量的数据也可以训练出有效的模型。
  5. 易于实现:CycleGAN 的结构相对简单,易于理解和实现。
  6. 不需要特殊预处理:可以直接处理原始图像,不需要额外的预处理步骤。
缺点
  1. 训练复杂度:需要训练两个生成器和两个判别器,这可能会增加计算成本和训练时间。
  2. 几何变换限制:对于涉及较大几何变形的图像转换任务,CycleGAN 可能表现不佳。
  3. 生成图像质量:在某些情况下,生成的图像可能存在轻微的失真或伪影。
  4. 高级纹理信息丢失:循环一致性损失可能不足以恢复所有纹理信息,尤其是在处理高度模糊或损坏的图像时。
  5. 模型调整:为了获得最佳结果,可能需要对模型进行精细调整和参数选择。
应用实例
  • 艺术风格转换:例如将照片转换为油画风格或素描风格。
  • 天气或季节转换:例如将夏季照片转换为冬季场景。
  • 物体类别转换:例如将马的图像转换为斑马的图像。
总结

CycleGAN 提供了一种强大的工具,用于在没有配对数据的情况下执行图像转换任务。它通过引入循环一致性损失来克服了传统图像转换方法的一些限制。尽管如此,CycleGAN 在某些特定情况下可能会遇到局限性,特别是在处理涉及复杂几何变换的任务时。

实验环境

python=3.6.7
pytorch=1.4.0
torchvision=0.5.0
dominate>=2.4.0
visdom>=0.1.8.8
wandb
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

项目地址

Linux

git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
cd pytorch-CycleGAN-and-pix2pix
  • 1.
  • 2.

Windows

请到https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git网站下载源代码zip压缩包。

cd pytorch-CycleGAN-and-pix2pix
  • 1.

项目结构

pytorch-CycleGAN-and-pix2pix
├─data
│  └─__pycache__
├─datasets
│  ├─bibtex
│  └─vangogh2photo
│      ├─testA
│      ├─testB
│      ├─trainA
│      └─trainB
├─docs
├─imgs
├─models
│  └─__pycache__
├─options
│  └─__pycache__
├─scripts
│  ├─edges
│  └─eval_cityscapes
│      └─caffemodel
└─util
    └─__pycache__
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

具体用法

准备数据(以vangogh2photo为例)

  • 本文以vangogh2photo数据集进行示例。
  • 本文所使用数据集免费下载地址:
vangogh2photo
├─testA
├─testB
├─trainA
└─trainB
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

对抗生成:基于CycleGAN的风格迁移_神经网络_04

进行训练(以vangogh2photo为例)

进行训练之前要启动一个web服务,用来查看训练结果和损失图表,请执行python -m visdom。并单击URLhttp://localhost:8097

对抗生成:基于CycleGAN的风格迁移_python_05


对抗生成:基于CycleGAN的风格迁移_人工智能_06

python train.py --dataroot ./datasets/vangogh2photo --name vangogh2photo_cyclegan --model cycle_gan
  • 1.

对抗生成:基于CycleGAN的风格迁移_pytorch_07


对抗生成:基于CycleGAN的风格迁移_神经网络_08


对抗生成:基于CycleGAN的风格迁移_生成对抗网络_09


对抗生成:基于CycleGAN的风格迁移_pytorch_10


对抗生成:基于CycleGAN的风格迁移_python_11


对抗生成:基于CycleGAN的风格迁移_生成对抗网络_12

进行测试(以vangogh2photo为例)

python test.py --dataroot ./datasets/vangogh2photo --name vangogh2photo_cyclegan --model cycle_gan
  • 1.

对抗生成:基于CycleGAN的风格迁移_生成对抗网络_13


对抗生成:基于CycleGAN的风格迁移_生成对抗网络_14

对抗生成:基于CycleGAN的风格迁移_python_15

对抗生成:基于CycleGAN的风格迁移_python_02

参考文献

[1]  CycleGAN 源代码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
[2]  CycleGAN 论文地址:https://arxiv.org/abs/1703.10593