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

 
前言
- 由于本人水平有限,难免出现错漏,敬请批评改正。
 - 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
 - 基于DETR的人脸伪装检测
 - YOLOv7训练自己的数据集(口罩检测)
 - YOLOv8训练自己的数据集(足球检测)
 - YOLOv10训练自己的数据集(交通标志检测)
 - YOLOv5:TensorRT加速YOLOv5模型推理
 - YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
 - 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
 - YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
 - YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
 - Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
 - YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
 - 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
 
相关介绍
- [1] CycleGAN 源代码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
 - [2] CycleGAN 论文地址:https://arxiv.org/abs/1703.10593
 
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 也适用。
 
训练目标
- 对抗损失:使生成器产生的图像能够欺骗对应的判别器。
 - 循环一致性损失:确保两次转换后的图像接近原始图像。
 - 身份损失:可选的损失项,当输入图像本身就是目标域的图像时,生成器应该输出相同的图像。
 
优点
- 无配对训练数据:CycleGAN 不需要成对的训练数据,这大大降低了收集数据的难度。
 - 可扩展性:可以在不同类型的图像之间进行转换,例如不同艺术风格间的转换、不同季节的景观转换等。
 - 高保真度:能够较好地保持图像的内容特征,同时转换其风格或外观。
 - 减少过拟合:即使使用少量的数据也可以训练出有效的模型。
 - 易于实现:CycleGAN 的结构相对简单,易于理解和实现。
 - 不需要特殊预处理:可以直接处理原始图像,不需要额外的预处理步骤。
 
缺点
- 训练复杂度:需要训练两个生成器和两个判别器,这可能会增加计算成本和训练时间。
 - 几何变换限制:对于涉及较大几何变形的图像转换任务,CycleGAN 可能表现不佳。
 - 生成图像质量:在某些情况下,生成的图像可能存在轻微的失真或伪影。
 - 高级纹理信息丢失:循环一致性损失可能不足以恢复所有纹理信息,尤其是在处理高度模糊或损坏的图像时。
 - 模型调整:为了获得最佳结果,可能需要对模型进行精细调整和参数选择。
 
应用实例
- 艺术风格转换:例如将照片转换为油画风格或素描风格。
 - 天气或季节转换:例如将夏季照片转换为冬季场景。
 - 物体类别转换:例如将马的图像转换为斑马的图像。
 
总结
CycleGAN 提供了一种强大的工具,用于在没有配对数据的情况下执行图像转换任务。它通过引入循环一致性损失来克服了传统图像转换方法的一些限制。尽管如此,CycleGAN 在某些特定情况下可能会遇到局限性,特别是在处理涉及复杂几何变换的任务时。
实验环境
python=3.6.7
pytorch=1.4.0
torchvision=0.5.0
dominate>=2.4.0
visdom>=0.1.8.8
wandb
 
项目地址
- CycleGAN 源代码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
 
Linux
git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
cd pytorch-CycleGAN-and-pix2pix
 
Windows
请到
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git网站下载源代码zip压缩包。
cd pytorch-CycleGAN-and-pix2pix
 
项目结构
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__
 
具体用法
准备数据(以vangogh2photo为例)
- 本文以vangogh2photo数据集进行示例。
 - 本文所使用数据集免费下载地址:https://download.csdn.net/download/FriendshipTang/89621331
 
vangogh2photo
├─testA
├─testB
├─trainA
└─trainB
 

进行训练(以vangogh2photo为例)
进行训练之前要启动一个web服务,用来查看训练结果和损失图表,请执行python -m visdom。并单击URLhttp://localhost:8097。
 
 
python train.py --dataroot ./datasets/vangogh2photo --name vangogh2photo_cyclegan --model cycle_gan
 

 
 
 
 
 
进行测试(以vangogh2photo为例)
python test.py --dataroot ./datasets/vangogh2photo --name vangogh2photo_cyclegan --model cycle_gan
 

 


参考文献
[1] CycleGAN 源代码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
 [2] CycleGAN 论文地址:https://arxiv.org/abs/1703.10593
- 由于本人水平有限,难免出现错漏,敬请批评改正。
 - 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
 - 基于DETR的人脸伪装检测
 - YOLOv7训练自己的数据集(口罩检测)
 - YOLOv8训练自己的数据集(足球检测)
 - YOLOv10训练自己的数据集(交通标志检测)
 - YOLOv5:TensorRT加速YOLOv5模型推理
 - YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
 - 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
 - YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
 - YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
 - Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
 - YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
 - 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
 




















