Python3简单实现图像风格迁移
创始人
2024-06-01 00:19:55
0

导语

T_T之前似乎发过类似的文章,那时候是用Keras实现的,现在用的PyTorch,而且那时候发的内容感觉有些水,于是我决定。。。

好吧我确实只是为了写点PyTorch练手然后顺便过来水一篇美文~~~

利用Python实现图像风格的迁移!!!

不喜欢过程同学的依旧可以直接下拉到最后看结果~

Let's Go!

参考资料

链接:

http://pytorch.org/tutorials/advanced/neural_style_tutorial.html#

是的,这又是来自于PyTorch官网的一个教程。

在相关文件中我依旧提供了我翻译好的版本~~~

以及涉及到的论文~~~

相关文件

网盘下载链接: https://pan.baidu.com/s/1eDOTzd0uzNzzQDRbpDEd2A

密码: tv5i

开发工具

Python版本:3.6.4

相关模块:torch模块;PIL模块;matplotlib模块;torchvision模块;以及一些Python自带的模块。

torch版本:0.3.0

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

补充说明:

PyTorch暂时不支持直接pip安装。

有两个选择:

(1)安装anaconda3后在anaconda3的环境下安装(直接pip安装即可);

(2)使用编译好的whl文件安装,下载链接为:

https://pan.baidu.com/s/1dF6ayLr#list/path=%2Fpytorch

额外说明

T_T相关文件中提供了所需的预训练模型,若嫌弃官网的下载速度,可以下载我的。

下载之后放到类似下图路径的文件夹中:

原理简介

作为一个纯正的非艺术生,抱歉我真的没法解释什么叫图像的艺术风格。反正齐白石和梵高的画肯定不是一个style的就是了。

那么我来尝试解释一下风格迁移吧:

风格迁移的实质是保留原画内容的基础上,用另外一种style来呈现原画。

那么如何量化呢?

简单而言大概是这样的:

利用CNN逐层提取图像的特征(层越靠后提取出的特征越高级和稳定,即更能表现图片的高级语义信息),并且将某一层或某几层输出的Gram矩阵作为损失函数,来衡量两幅图像之间的内容/风格差异(T_T就是两幅图像分别经过相同的卷积神经网络,比较某一层或者某几层输出的Gram矩阵的差异)。

Gram矩阵是啥???

具体而言,其计算方式为:

我们都知道,一张图片在某个卷积层的输出特征为一个形如(batch_size, channels, width, height)的四阶张量,显然batch_size为1。

我们将类似下图的特征:

转换为(batch_size*channels, width*height)大小的矩阵,这个矩阵和它的转置相乘就可以得到一个大小为(batch_size*channels, batch_size*channels)的矩阵,这个矩阵即为Gram矩阵。

其实这就算是定义了图像风格和图像内容这两个概念了,接下来我们就可以实现风格迁移了。

其流程大概是这样的:

具体的实现细节详见源代码吧~~~

相关文件中也有官网教程的个人翻译版以及相关的论文供感兴趣者参考。

使用方式

修改下图所示处的图片路径为自己的图片路径:

在cmd窗口运行Neural_Transfer.py文件即可。

由于资源和时间有限,下面展示的结果我都只跑了几百轮左右,图像大小为256*256。

梵高笔下的皮卡丘

原图像:

生成的图像:

梵高笔下的老北京

原图像:

生成的图像:

毕加索笔下的爱因斯坦

原图像:

生成的图像:

齐白石笔下的西湖

原图像:

生成的图像:

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...