前言

文章目录

  • 前言
  • 1.介绍
  • 2. 基本原理
  • 3 准备工作
  • 4 加载素材

1.介绍

本教程主要讲解如何实现由Leon A. Gatys,Alexander S. Ecker和Matthias Bethge提出的 Neural-Style 算法。Neural-Style或者叫Neural-Transfer,可以让你运用新的风格将你指定的图片进行重构。这个算法将使用两张图片,一张图片作为风格提供者,一张图片作为内容提供者,另外生成一张图片内容与内容图片相似,但图片风格的和风格图片相似的新图片。

2. 基本原理

其实现原理非常特别,展现了人类思维的巧妙性,
我们定义两个优化指标:
1,一个用于内容D_C;
2,一个用于风格D_S。
D_C度量两张图片内容上的区别,而D_S用来测量两张图片风格的区别。
然后,我们生成第三张图片,并优化这张图片,使其与内容图片的内容差别和风格图片的风格差别最小化。
现在,原理讲完了,开始实现吧,首先,我们导入必要的包。

3 准备工作

首先是导入以下的包:

  1. torch, torch.nn(使用PyTorch进行风格转换必不可少的包)
  2. numpy (矩阵处理必须用)
  3. torch.optim (高效的梯度下降)
  4. PIL, PIL.Image, matplotlib.pyplot (加载和展示图片)
  5. torchvision.transforms (将PIL图片转换成张量)
  6. torchvision.models (训练或加载预训练模型)
  7. copy (对模型进行深度拷贝;系统包)
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from PIL import Image
import matplotlib.pyplot as plt
import torchvision.transforms as transforms
import torchvision.models as models
import copy
import warnings
warnings.filterwarnings("ignore")

接着是一个比较关键的步骤,确定是GPU还是CPU来运行神经网络。虽然,在GPU上运行可以加速,但有的电脑上没有GPU。
我们可以使用torch.cuda.is_available()来判断是否有可用的GPU。

if torch,cuda.is_available():device=torch.device("cuda")
else:device=torch.device("cpu")

4 加载素材

接下来是导入提供风格和内容的图片。
导入图片也意味着对图片进行预处理,原始的PIL图片的属性值介于0到255之间,但是当转换成torch张量时,它们的值被压缩到0到1之间,另外,图片分辨率也会被调整到520。一个重要的细节是,注意torch库中的神经网络用来训练的张量的值为0到1之间。如果你尝试将0到255的张量图片加载到神经网络,然后激活的特征映射将不能侦测到目标内容和风格。然而,Caffe库中的预训练网络用来训练的张量值为0到255之间的图片。

这是一个下载本教程需要用到的图片的链接: picasso.jpg 和 dancing.jpg。下载这两张图片并且将它们添加到你当前工作目录。
如果嫌麻烦,可以关注公众号,

发送neuralstyle,自动推送资源集成包。
设置图片预处理程序

# desired size of the output image
imsize = 512 if torch.cuda.is_available() else 128  # use small size if no gpuloader = transforms.Compose([transforms.Resize(imsize),  # scale imported imagetransforms.ToTensor()])  # transform it into a torch tensordef image_loader(image_name):image = Image.open(image_name)# fake batch dimension required to fit network's input dimensionsimage = loader(image).unsqueeze(0) #添加一个0维度 batch 适应网络输入return image.to(device, torch.float)style_img = image_loader("picasso.jpg")
content_img = image_loader("dancing.jpg")assert style_img.size() == content_img.size(), \"we need to import style and content images of the same size"

因为tensor是四维的不能直接展示,所以,我们创建一个imshow函数,重新将图片转换成标准三维数据来展示,这样也可以让我们确认图像是否被正确加载。

unloader = transforms.ToPILImage()  # reconvert into PIL imageplt.ion()def imshow(tensor, title=None):image = tensor.cpu().clone()  # we clone the tensor to not do changes on itimage = image.squeeze(0)      # remove the fake batch dimension 去掉0维度image = unloader(image)plt.imshow(image)if title is not None:plt.title(title)plt.pause(0.001) # pause a bit so that plots are updatedplt.figure()
imshow(style_img, title='Style Image')plt.figure()
imshow(content_img, title='Content Image')

正确加载的话,运行到这里,可以看到这个。

PyTorch进行神经风格转换/迁移(Neural-Transfer:图像风格迁移)相关推荐

  1. 图像迁移风格保存模型_CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、关键步骤配图、案例应用...

    CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介.过程思路.关键步骤配图.案例应用之详细攻略 目录 图像风格迁移算法简介 图像风格迁移算法过程思路 1.VGG对比NS 图像风 ...

  2. CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、过程思路、关键步骤配图、案例应用之详细攻略

    CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介.过程思路.关键步骤配图.案例应用之详细攻略 目录 图像风格迁移算法简介 图像风格迁移算法过程思路 1.VGG对比NS 图像风 ...

  3. java图像风格迁移_Python+OpenCV 图像风格迁移(模仿名画)

    现在很多人都喜欢拍照(自拍).有限的滤镜和装饰玩多了也会腻,所以就有 APP 提供了模仿名画风格的功能,比如 prisma.versa 等,可以把你的照片变成 梵高.毕加索.蒙克 等大师的风格. 这种 ...

  4. (高能预警!)为什么Gram矩阵可以代表图像风格?带你揭开图像风格迁移的神秘面纱!

    文章目录 (高能预警)为什么Gram矩阵可以代表图像风格 简介 风格迁移概述 领域适应 相关知识 Gram矩阵 特征值分解 核函数 希尔伯特空间 可再生核希尔伯特空间 最大平均差异(MMD) 图像风格 ...

  5. TensorFlow练手项目三:使用VGG19迁移学习实现图像风格迁移

    使用VGG19迁移学习实现图像风格迁移 2020.3.15 更新: 使用Python 3.7 + TensorFlow 2.0的实现: 有趣的深度学习--使用TensorFlow 2.0实现图片神经风 ...

  6. cnn风格迁移_快速图像风格迁移思想在无线通信中的另类应用:算法拟合

    在本文中,并不是介绍最新的一些论文,而是回顾自己在很早(半年前?)读过的几篇文章.[1]Learning to optimize: Training deep neural networks for ...

  7. Torch 和 OpenCV4.0 在风格转换中对应层(风格迁移)

    上一章中已经从 OpenCV4.0 中导出风格迁移各层名称,这里来和 Torch 比一比: Torch 层 OpenCV4.0 层 nn.Sequential nn.SpatialReflection ...

  8. Tensorflow实现Neural Style图像风格转移

    刚开始接触TensorFlow,实践个小项目,也参考了一下其他博主的文章,希望大家提出宝贵意见. 代码详解: TensorFlow版本的源码主要包含了三个文件:neural_style.py, sty ...

  9. 基于深度学习的图像风格转换

    距离上次写博客已经好久好久好久了,真是懈怠的生活节奏,整天混吃等死玩游戏,前些日子做毕业设计时总算又学了点新东西.学了一点深度学习和卷积神经网络的知识,附带着详细学习了一下前段时间我觉得比较有意思的图 ...

  10. 计算机视觉系列-图像风格转换

    计算机视觉系列-图像风格转换 目录 图像风格转换论文 论文链接 图像风格转换网络 论文复现代码 运行结果 图像风格转换论文 以不同的方式呈现图像的语义内容样式是图像处理中的一个难点.以前方法的限制因素 ...

最新文章

  1. php删除目录下的所有文件和目录
  2. Python+OpenCV实现自动扫雷,创造属于自己的世界记录!
  3. 怎样健身最有效?程序员们可能还需要这些……
  4. 对现有的所能找到个DDOS代码(攻击模块)做出一次分析----TCP篇
  5. 图卷积神经网络(part6)--GAT
  6. Wannafly 挑战赛27 题解
  7. springcloud config配置中心概述
  8. php5.2 array,详解php 5.2.x 数组操作实例
  9. 怎样将Datatable中的数据直接导入到Excel模板上
  10. 邮局解决方案 发邮件邮箱使用 系统邮件自动发送 邮件发送提醒 网易免费企业邮 设置自己的域名邮箱
  11. JS的 setTimeout 和 bind 使用 、复选框限制选定数据jq
  12. Atitti 知识图谱构建方法attilax 总结
  13. 盘点遥测终端RTU怎么分类?
  14. html5鼠标悬停遮罩,js实现鼠标移动到图片产生遮罩效果
  15. 梯度消失,梯度爆炸产生的原因及解决办法
  16. router 路由守卫
  17. 微信做音乐相册html5,如何制作微信音乐相册 微信音乐相册制作软件的精品教程...
  18. 被吹上天的802.11ac Wave2到底好在哪?还有,Wave1哪去了?
  19. Redis入门到实战(实战篇)缓存更新、穿透、雪崩、击穿!
  20. 最新的百度网盘不限速下载工具 - 100兆速度理论10m/s

热门文章

  1. 如何保住我们的头发?初级程序员的碎碎念
  2. 为什么晚结婚的离婚率低?与这个对于我们的启示。
  3. 用tar备份linux
  4. jQuery dataTables 的使用
  5. CSS---内外边距
  6. Tomcat启动时卡在org.apache.catalina.startup.HostConfig
  7. SQL Server 2012入门T-SQL基础篇:(2)SQL的两个基础概念
  8. cocos2d-x3.0 实现HTTP请求GET、POST
  9. 1-2. linux系统结构
  10. 六年磨一剑 Novell转身云计算架构供应商