【毕设】基于CycleGAN的风格迁移【一】环境搭建及运行代码

源代码地址:CycleGAN源码

因为该篇内容包含Anaconda的环境管理及包的管理,可以选择参考:Anaconda安装+环境管理+包管理+实际演练例子(全网最详细)_MrRoose1的博客-CSDN博客

一、搭配环境

1.首先把代码包下载并解压到本地(我是直接放到桌面)。

2.打开Anaconda prompt,先切换路径到代码包解压的路径中。

3. 然后通过使用作者的环境包来搭建设定好的环境,输入:

conda env create -f environment.yml

 随后产生一个叫pytorch-CycleGAN-and-pix2pix的环境名称。我们可以通过输入:

conda info --envs

来查看已有的虚拟环境名称。

 4.由于CycleGAN源码中用到了visdom,但此时pytorch-CycleGAN-and-pix2pix环境中却没有visdom这个包,我们需要手动安装。先进入到pytorch-CycleGAN-and-pix2pix虚拟环境中,输入:

activate pytorch-CycleGAN-and-pix2pix

 再通过pip来安装visdom,输入:

pip install -r requirements.txt

注:期间会有一些提示,显示一些包的版本,那些不用管,因为pip中的requirement.txt与conda中的environment.yml之间有一些包版本不一致,但不耽误我们搭配环境哈,你们按照我的步骤来,保准没问题。 

上述就是先把基础环境搭配好了


二、数据集下载

从解压后的代码包中,找到download_cyclegan_dataset.sh文件

(我的地址是:D:\桌面\pytorch-CycleGAN-and-pix2pix-master\datasets\download_cyclegan_dataset.sh)

通过记事本打开,找到

其中复制’$‘前面的地址并打开:(地址:Index of /cyclegan/datasets

以我为例,下载horse2zebra这个压缩包,把这个数据集解压并保存在解压后的代码包的dataset文件中(我的地址:D:\桌面\毕业设计-图像风格迁移\Neural-Style-GAN\pytorch-CycleGAN-and-pix2pix-master\pytorch-CycleGAN-and-pix2pix-master\datasets) 

此时数据集和环境已经准备好了,我们可以打开pycharm进行最后的参数调试。

三、调用Visdom及运行pycharm前的参数搭建

Train.py

首先需要参考Pycharm中如何配置已有的环境_MrRoose1的博客-CSDN博客把刚刚在anaconda中安装的pytorch-CycleGAN-and-pix2pix虚拟环境配置在pycharm中。

随后由下图可得,如果想保证训练正常运行,得先python -m visdom.server,启动服务器(可以,有tensorboard那味儿了)

那就在terminal开一下,如下图所示

 注:我后期把代码包转移位置,放到了桌面一个名叫毕业设计-风格迁移内部的一个叫Neural-Style-GAN文件夹中,此时代码包的路径是 (D:\桌面\毕业设计-图像风格迁移\Neural-Style-GAN\pytorch-CycleGAN-and-pix2pix-master\pytorch-CycleGAN-and-pix2pix-master)

从图片中我们可以看到“It's Alive!”代表启动成功,点击terminal中的地址,就可以在train代码的时候看见页面的变化(此时还没有run代码,所以页面内啥也看不到)。

最后看一下这个训练参数设置

python train.py --dataroot ./datasets/horse2zebra --name horse2zebra_cyclegan --model cycle_gan

这里说一下以前没说的,类似这种附加参数在pycharm里打开文件后(注意现在活跃的脚本和你想添加参数的脚本要一致,比如我们要添加train文件中的参数,那我们就应该注意红色框内的文件名是否是train) run/Edit Configurations/

打开然后把后面的参数塞到里面,当然,因为数据集不同,所以需要稍微改改

--dataroot ./datasets/horse2zebra --name horse2zebra_cyclegan --model cycle_gan

然后直接训练。

(可能会出现的问题)

第一个

UserWarning: Argument interpolation should be of type InterpolationMode instead of int. Please, use InterpolationMode enum.
“Argument interpolation should be of type InterpolationMode instead of int. “

关于这个问题,在网上找了一圈,在base_dataset添加InterpolationMode,并代替PIL.Image。
你说它没事插什么值啊!

from torchvision.transforms import InterpolationMode

定位到dataset的transform里(base_dataset.py),添加引用,然后改一下

def get_transform(opt, params=None, grayscale=False, method=Image.BICUBIC, convert=True):

原81行

def get_transform(opt, params=None, grayscale=False, method=InterpolationMode.BICUBIC, convert=True):

改81行

第二个

UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). In PyTorch 1.1.0 and later, you should call them in the opposite order: optimizer.step() before lr_scheduler.step(). Failure to do this will result in PyTorch skipping the first value of the learning rate schedule.

这说的就很明白了,就是说pytorch1.1.0之后,优化器的更新要放到学习率更新的前面,定位到就在train里(还好这俩玩意没被放一块)把学习率更新扔后面

        # model.update_learning_rate()    # update learning rates in the beginning of every epoch.

注释掉train43行

        model.update_learning_rate()    # update learning rates in the ending of every epoch.

放到78行运行完一个epoch后

然后就应该没问题可以正常运行了。

Test.py

我们可以下载作者已经训练好的模型来直接上手跑。地址:Index of /cyclegan/pretrained_models

 这里我下载的是horse2zebra.pth文件。随后在解压后的代码包中找到checkpoints文件夹,在里面新建一个叫{name}_pretrained的文件夹(其中{name}此时是horse2zebra),把下载好的文件重命名为latest_net_G.pth,并保存在{name}_pretrained(horse2zebra_pretrained)中。

 然后与train.py训练一样,添加pycharm参数即可(text.py不需要开启visdom

--dataroot datasets/horse2zebra/testA --name horse2zebra_pretrained --model test --no_dropout

 注:这里稍微注意一下dataroot中的路径,最后的是testA,为什么不是testB呢,因为这个模型是马转换成斑马的单向转换模型,textA中全都是马的数据集,而testB中都是斑马的数据集。

test.py运行后的结果(风格迁移后的图片)在D:\桌面\毕业设计-图像风格迁移\Neural-Style-GAN\pytorch-CycleGAN-and-pix2pix-master\pytorch-CycleGAN-and-pix2pix-master\results\horse2zebra_pretained\test_latest\images路径中查询。

  • 18
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
【项目介绍】 毕业设计基于卷积神经网络的图像风格迁移python源码+模型+操作说明.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 **程序运行环境配置安装指南** 1.安装使用PyCharm Community Edition 2022.3.3 2.安装Python 3.安装Anaconda 4.安装PyTorch,opencv,numpy,av,torchvision,ffmpeg,skvideo,pillow,os,tqdm,numpy 5.启动项目 打开cmd,找到对应的项目目录,在anaconda运行python app.py ,后访问 [http://127.0.0.1:5000](http://127.0.0.1:5000/) 可打开网页。 6.训练模型 运行python train.py --dataset_path data/coco/images/ --style_image images/styles/adriaen-van-ostade_landscape.jpg --epochs 1 --batch_size 4 --image_size 256 data/coco/images/替换为自己的数据集地址; images/styles/adriaen-van-ostade_landscape.jpg 替换为要训练的风格图片地址; **程序操作指南** 1.图片风格迁移功能 打开浏览器,输入[http://127.0.0.1:5000](http://127.0.0.1:5000/),进入系统首页,在图片风格迁移板块,点击“选择文件”,从本地选择图片上传,后原本为“未选择任何文件”的区域,会显示上传图片的名称和格式。接着在选择风格模型的下拉框里,选择你想要进行风格迁移的风格,点击“apply style”,等待一段时间后,页面会刷新,生成的图片会刷新在新的页面上。 2. 视频风格迁移功能 打开浏览器,输入[http://127.0.0.1:5000](http://127.0.0.1:5000/),进入系统首页,在视频风格迁移板块,点击“选择文件”,从本地选择视频上传,后原本为“未选择任何文件”的区域,会显示上传视频的名称和格式。接着在选择风格模型的下拉框里,选择你想要进行风格迁移的风格,点击“apply style”,等待一段时间后,页面会刷新,生成的视频会刷新在新的页面上。
### 回答1: CycleGAN是一种无监督的图像风格转换工具,可以将一个领域的图像转换成另一个领域的图像,例如将马的图片转换成斑马的图片,或将日本画转换成现实照片等。 为了训练CycleGAN,需要先准备两个数据集,例如A和B,分别代表两种不同的领域。接着,需要编写一个Python脚本进行训练。以下是一份基本的CycleGAN训练代码: ``` import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision.datasets import ImageFolder from cyclegan import Generator, Discriminator, cycle_loss # Set device (CPU/GPU) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # Define hyperparameters lr = 0.0002 epochs = 200 batch_size = 1 # Define dataset transform = transforms.Compose([transforms.Resize(256), transforms.RandomCrop(256), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) dataset_A = ImageFolder(root="./datasets/horses/trainA", transform=transform) dataset_B = ImageFolder(root="./datasets/zebras/trainB", transform=transform) dataloader_A = DataLoader(dataset_A, batch_size=batch_size, shuffle=True) dataloader_B = DataLoader(dataset_B, batch_size=batch_size, shuffle=True) # Initialize generators and discriminators G_AtoB = Generator(3, 3).to(device) G_BtoA = Generator(3, 3).to(device) D_A = Discriminator(3).to(device) D_B = Discriminator(3).to(device) # Define loss function and optimizers MSE_Loss = nn.MSELoss() L1_Loss = nn.L1Loss() G_optimizer = optim.Adam(list(G_AtoB.parameters()) + list(G_BtoA.parameters()), lr=lr, betas=(0.5, 0.999)) D_optimizer = optim.Adam(list(D_A.parameters()) + list(D_B.parameters()), lr=lr, betas=(0.5, 0.999)) # Begin training for epoch in range(epochs): for i, (real_A, real_B) in enumerate(zip(dataloader_A, dataloader_B)): # Move tensors to device real_A = real_A[0].to(device) real_B = real_B[0].to(device) # Train generators G_AtoB.zero_grad() G_BtoA.zero_grad() fake_B = G_AtoB(real_A) cycle_A = G_BtoA(fake_B) fake_A = G_BtoA(real_B) cycle_B = G_AtoB(fake_A) D_fake_A = D_A(fake_A) D_fake_B = D_B(fake_B) G_loss = cycle_loss(MSE_Loss, L1_Loss, G_AtoB, G_BtoA, D_A, D_B, real_A, real_B, fake_A, fake_B, cycle_A, cycle_B) G_loss.backward() G_optimizer.step() # Train discriminators D_A.zero_grad() D_B.zero_grad() D_real_A = D_A(real_A) D_real_B = D_B(real_B) D_fake_A = D_A(fake_A.detach()) D_fake_B = D_B(fake_B.detach()) D_A_loss = (MSE_Loss(D_real_A, torch.ones_like(D_real_A)) + MSE_Loss(D_fake_A, torch.zeros_like(D_fake_A))) / 2 D_B_loss = (MSE_Loss(D_real_B, torch.ones_like(D_real_B)) + MSE_Loss(D_fake_B, torch.zeros_like(D_fake_B))) / 2 D_A_loss.backward() D_B_loss.backward() D_optimizer.step() print("Epoch [{}/{}]: G_loss {:.4f} D_A_loss {:.4f} D_B_loss {:.4f}".format(epoch + 1, epochs, G_loss.item(), D_A_loss.item(), D_B_loss.item())) # Save models torch.save(G_AtoB.state_dict(), "./saved_models/G_AtoB.pth") torch.save(G_BtoA.state_dict(), "./saved_models/G_BtoA.pth") ``` 上述代码中,`cyclegan.py`是自定义的CycleGAN类文件,其中包含了`Generator`、`Discriminator`和`cycle_loss`等API。在进一步理解CycleGAN的原理后,可以通过修改训练超参数、调整模型架构或增加其他数据增强方式等方法,改进模型性能和训练效率。 ### 回答2: CycleGAN是一种GAN模型,可以用于图像风格迁移。在使用CycleGAN进行风格迁移训练之前,需要准备两组数据,一组是原始的图像数据,另一组是目标风格的图像数据。这两组数据应该包含相同的主题或对象,并且分别属于两种不同的风格。 接下来,需要编写CycleGAN的训练代码。在训练代码中,需要定义GAN的网络结构和优化器,并设置超参数。例如,CycleGAN需要定义两个生成器和两个判别器,每个生成器接受一组数据并生成一组与目标风格相匹配的数据,每个判别器用于判断生成的数据是否与目标风格相匹配。 训练代码中的超参数包括批量大小、学习率、迭代次数等。这些参数需要根据具体的应用场景进行调整。例如,在迭代次数方面,通常需要进行多轮迭代才能得到较好的结果。在每轮迭代中,需要计算生成器和判别器的损失,并根据损失更新网络中的参数。 当训练完成后,需要将测试图像输入模型并生成新的图像。这些新的图像应该具有与目标风格相似的外观和特征。同时,需要对生成的图像进行评估和调整,进一步提高模型的性能和效果。 总之,使用CycleGAN进行风格迁移的训练代码需要在GAN的网络结构、超参数和训练过程中进行合理的调整和设置,以实现较好的结果。 ### 回答3: CycleGAN是一种用于图像风格迁移的神经网络模型,可将一种领域的图像转换为另一种领域的图像,例如将马的图像转换为斑马的图像或将日落的图像转换为日出的图像。 要使用CycleGAN进行风格迁移训练,首先需要准备两个数据集,分别代表两个领域的图像。然后,需要编写代码来定义模型的结构和训练过程。 在模型定义方面,CycleGAN包括两个生成器网络和两个判别器网络。生成器将一个领域的图像转换为另一个领域的图像,判别器则负责区分生成图像与真实图像的差异。 在训练过程中,会通过交替优化生成器和判别器的损失来训练模型。生成器的损失包括重建损失和对抗损失,而判别器的损失包括真实图像与生成图像之间的损失。 最后,一旦模型训练完成,就可以使用它将任意领域的图像转换为目标领域的图像。 总之,使用CycleGAN进行风格迁移需要编写复杂的代码来定义模型和训练过程,但它是一种非常强大和灵活的工具,可以让我们轻松地将图像从一种领域转换为另一种领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrRoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值