当前位置: 首页 > news >正文

风格迁移项目一:如何使用

前言

由于我不太会pr,所以直接新建的项目,

原项目地址:https://github.com/Optimistism/Style-transfer

原项目代码的讲解地址:https://www.bilibili.com/video/BV1yY4y1c7Cz/

本项目是对原项目的一点点完善。

项目地址:https://github.com/Knighthood2001/Style-transfer

更新

  • 2024-08-03 更新:这个项目,是不能保存模型参数的,也就是说,你只能通过训练,得出图片,而不能直接进行推理。

项目如何运行

  1. 下载项目
    这个比较简单,直接在github上下载zip包,然后解压即可。或者使用git clone命令克隆项目。
  2. 安装依赖
  • 这里由于我没有用到虚拟环境,无法准确得出需要用的包,大致就是torch和我requirements.txt中的包。
  • 安装命令
    安装torch的话,会比较慢
pip install -r requirements.txt
  • 这里需要注意,需要安装tensorboard,作者给出的并没有这个,但是如果没有这个,你是查看不了运行结果的。
  1. 运行项目
  • 首先就是运行代码
  • 然后的话,它会去https://download.pytorch.org/models/vgg19-dcbb9e9d.pth 去下载vgg19的预训练权重,这个文件大概548mb。
    由于我这里不知道pytorch如何加载这个文件,因此,大家可以自己下载这个文件,或者将我这个文件,放到你代码运行后,它给出的那个路径下。可以看下面我更改部分第一点的第二张图片,运行代码会给出最终下载的路径的。
  • 然后想要看到tensorboard中的数据,就在终端输入
tensorboard --logdir=runs

然后点击浏览器,输入localhost:6006
点击这里也可以

在这里插入图片描述

后续你跑自己的图片,只需要在main.py中修改content_imgstyle_img即可。

更改

  1. 更新了vgg19传参
    最开始会报这个警告
    在这里插入图片描述

使用这行代码后

# self.vgg = models.vgg19(pretrained=True).features  # .features用于提取卷积层
self.vgg = models.vgg19(weights=VGG19_Weights.IMAGENET1K_V1).features

这行代码,会去自动下载官网的vgg19预训练权重,548mb,下载还是很慢的。我下载这个花了30分钟。

我这里由于文件太大,无法上传到github,因此,大家可以自己下载这个文件。

不会警告了
在这里插入图片描述

  1. 添加了content_weight参数,更加符合其公式要求
loss = content_weight * content_loss + style_weight * style_loss
  1. 运行代码后提示报错
RuntimeError: Input type (torch.FloatTensor) and weight type(torch.cuda.FloatTensor) should be the same or input should be a MKLDNN tensor and weight is a dense tensor

当模型的权重(weights)和输入数据(inputs)不在同一个设备上时。

这个命令报错表示你的模型权重被移动到了CUDA设备上(即GPU),但是你的输入数据还在CPU上。

因此,具体做法是,将输入数据也移动到device中,它将根据你代码中的变换,自动选择设备。

# 图片输入到gpu,否则就会报错
content_img = content_img.to(device)
style_img = style_img.to(device)
  1. 添加了日志记录

main.py的最开始,添加了一些代码,主要就是设置了日志,并且以时间命名,方便后续将结果保存到日志中,方便查看。免得你自己去创建txt进行cv。

在这里插入图片描述

可以看到,这里也会有时间,你可以通过看日志,计算训练的时间。

实际体验

我本机是1650的显卡,跑3000轮,花了20分钟。

原图
在这里插入图片描述

结果图

梵高风的狗头自拍图

2999轮的结果

在这里插入图片描述
6000轮的结果
在这里插入图片描述

效果其实还不错


http://www.mrgr.cn/news/42109.html

相关文章:

  • JQuery基本介绍和使用方法
  • CF687D Dividing Kingdom II 题解
  • 简历制作面试篇
  • pdb个人记录
  • 【算法系列-链表】交换链表节点(反转 + 交换)
  • Spring MVC的运行流程详解
  • Netty:高性能异步网络编程框架全解析
  • Python中重载操作符实现管道操作
  • python全栈学习记录(二十一)类的继承、派生、组合
  • 【C++】vector类的模拟实现
  • QT入门知识----2024.8.21-9.28
  • 如何降低接口的响应时间(RT)
  • 滚雪球学Oracle[5.2讲]:数据库备份与恢复基础
  • Servlet的生命周期及用户提交表单页面的实现(实验报告)
  • 【c++】反证法证明为什么c++不能像JavaScript的typeof那样自动判断数据类型
  • [题解] [SDOI2011] 消防
  • Prometheus之Pushgateway使用
  • 【洛谷】AT_dp_m Candies 的题解
  • 复杂问题分析思维训练
  • c++小游戏