前言

在今天的文章中,我们将实现风格转换效果。为了做到这一点,我们必须更深入地理解卷积神经网络及其各层是如何工作的。在本文的最后,您将能够创建并运行一个风格转换程序。

什么是风格转换

在我们开始我们的风格转换应用程序之前,让我们介绍一下我们正在努力实现的目标。

给定一个输入图像和一个样式图像,我们可以用原始内容和一个新的样式来计算一个输出图像。就像下面这个例子:

波士顿的天际线与梵高的《星夜》交相辉映

如何实现风格转换

  1. 我们获取输入图像和风格图像,并将它们调整为相同的形状。
  2. 我们加载一个预先训练好的卷积神经网络(VGG16)。
  3. 知道我们可以区分负责样式的层(基本形状、颜色等)和负责内容的层(特定于图像的特性),我们就可以分离这些层来独立处理内容和样式。
  4. 然后我们把我们的任务设置为一个优化问题,我们要最小化:
  • 内容loss(输入和输出图像之间的距离-我们努力保持内容)
  • 风格loss(样式与输出图像之间的距离—我们努力应用新样式)
  • total variation loss(正则化-对输出图像进行去噪的空间平滑度)

5. 最后,我们使用L-BFGS算法设置梯度并进行优化。

代码讲解

你可以在GitHub上找到风格转换项目的完整代码库:

https://github.com/gsurma/style_transfer

输入:

# San Franciscosan_francisco_image_path = "https://www.economist.com/sites/default/files/images/print-edition/20180602_USP001_0.jpg"#Input visualization input_image = Image.open(BytesIO(requests.get(san_francisco_image_path).content))input_image = input_image.resize((IMAGE_WIDTH, IMAGE_HEIGHT))input_image.save(input_image_path)input_image

下图就是输入图片:

风格:

# Warsaw by Tytus Brzozowski, http://t-b.pltytus_image_path = "http://meetingbenches.com/wp-content/flagallery/tytus-brzozowski-polish-architect-and-watercolorist-a-fairy-tale-in-warsaw/tytus_brzozowski_13.jpg"# Style visualization style_image = Image.open(BytesIO(requests.get(tytus_image_path).content))style_image = style_image.resize((IMAGE_WIDTH, IMAGE_HEIGHT))style_image.save(style_image_path)style_image

风格图片:

数据预处理:

# Data normalization and reshaping from RGB to BGRinput_image_array = np.asarray(input_image, dtype="float32")input_image_array = np.expand_dims(input_image_array, axis=0)input_image_array[:, :, :, 0] -= IMAGENET_MEAN_RGB_VALUES[2]input_image_array[:, :, :, 1] -= IMAGENET_MEAN_RGB_VALUES[1]input_image_array[:, :, :, 2] -= IMAGENET_MEAN_RGB_VALUES[0]input_image_array = input_image_array[:, :, :, ::-1]style_image_array = np.asarray(style_image, dtype="float32")style_image_array = np.expand_dims(style_image_array, axis=0)style_image_array[:, :, :, 0] -= IMAGENET_MEAN_RGB_VALUES[2]style_image_array[:, :, :, 1] -= IMAGENET_MEAN_RGB_VALUES[1]style_image_array[:, :, :, 2] -= IMAGENET_MEAN_RGB_VALUES[0]style_image_array = style_image_array[:, :, :, ::-1]

网络模型:

# Modelinput_image = backend.variable(input_image_array)style_image = backend.variable(style_image_array)combination_image = backend.placeholder((1, IMAGE_HEIGHT, IMAGE_SIZE, 3))input_tensor = backend.concatenate([input_image,style_image,combination_image], axis=0)model = VGG16(input_tensor=input_tensor, include_top=False)

结果

经过运行程序,我们获得了如下结果:

参考:

https://towardsdatascience.com/style-transfer-styling-images-with-convolutional-neural-networks-7d215b58f461

++库 照片风格转换风格_如何用神经网络实现照片的风格转换相关推荐

  1. 目前流行的装修风格_目前装修流行的主要八大风格

    1.中国传统风格 中国传统风格也叫中式风格,这种风格崇尚庄重.优雅,在装修时吸取中国传统的木构架构屏风.隔扇等装饰.而且大多采用对称的空间构图方式,色彩庄重,体现出一种宁静雅致的氛围. 此图片由圣都装 ...

  2. python神经网络风格_[Deep-Learning-with-Python]使用LSTM生成尼采风格文章

    github地址repos LSTM生成文本 使用循环神经网络生成序列文本数据.循环神经网络可以用来生成音乐.图像作品.语音.对话系统对话等等. 如何生成序列数据? 深度学习中最常见的方法是训练一个网 ...

  3. java utf8 简繁转换 类库_在Java中进行中文繁体简体转换,基于OpenCC(Open Chinese Convert)方案...

    一.OpenCC介绍 OpenCC (Open Chinese Convert,开放中文转换) 是一个用于中文简繁转换的开源项目,支持词汇级别的转换.异体字转换和地区习惯用词转换(中国大陆.台湾.香港 ...

  4. python数字大小写转换代码_用python实现把数字人民币金额转换成大写的脚本程序...

    # -*- coding: utf-8 -*- def Num2MoneyFormat( change_number ): """ .转换数字为大写货币格式( forma ...

  5. 目前流行的装修风格_目前最流行的八大装修风格对比,总有一款适合你

    目前最流行的风格有8种:分别是1.现代简约风格:2.混搭风格:3.欧式简约风格:4.美式风格:5.乡村风格:6.欧式古典风格:7.地中海风格:8.新古典风格.除此之外,田园风格.和式风格.韩式风格.东 ...

  6. 如何用photoshop做24色环_如何用Photoshop给照片添加印章水印,内附印章模板素材...

    欢迎关注抱你一下 一个和你一样好看的公众号 教程视频及其模板福利往下看哦   前几天录剪了我的第一个视频,是一个关于怎样在PS中制作个人艺术印章的教程. 同时我还在视频最后给大家准备了几十份印章模板, ...

  7. python视频处理为卡通风格_使用python代码将照片变成卡通图片

    今次介绍用代码来实现这项任务,可以就此探查各种滤镜的内部机制. 制作环境:Windows10,Python2.7,Anaconda 任务描述:将D盘某文件夹中的所有图片使用代码进行卡通化,然后保存到另 ...

  8. 坐标系转换工具_借助工具实现不同坐标系之间的转换

    在设计院日常工作中避免不了不同坐标系之间矢量数据.栅格数据等的转换,由于涉及到不同的参考椭球可能在某些情况要转换需要额外的参数,实现转换.但是有时候却受限于一些原因需要我们自己进行转换,下面就工作中的 ...

  9. 目前流行的装修风格_现在最流行的八大装修风格

    流行的装修风格主要分为八大风格,分别为:现代前卫风格.现代简约风格.雅致主义风格.现代中式风格.新古典风格 .欧式古典风格.美式*主义以及地中海风格.不同的设计风格分别对应了不同的生活方式:现代前卫对 ...

最新文章

  1. php 输出读取结果集,php获取数据库结果集实例详解
  2. 3千字带你搞懂XXL-JOB任务调度平台
  3. mysql NOW,CURRENT_TIMESTAMP,SYSDATE 之间的区别
  4. Linux系统编程 -- 为什么需要进程间通信??
  5. python: 正则表达式2--元字符与re模块
  6. 图数据库Neo4j下载、安装
  7. 尚硅谷-智慧校园项目总结(项目代码在最后)
  8. 微信小程序布局 底部位置固定例子
  9. 开发微信小程序中遇见的难点,以及解决方法
  10. wifi一到晚上服务器无响应,一到晚上九点,网络就开始卡了?主要原因是这三点!...
  11. KK集团旗下公司又遭处罚:招股书已“失效”一个月,快客电商曾被罚30万元
  12. 2022年云计算的八大发展趋势,多样化云计算形态成为主流
  13. linux常中的cat命令,linux下cat命令详解
  14. 无纸化考试系统(CS)
  15. 侍魂微信新服务器,侍魂手游2019年3月23日微信问答试炼答案
  16. 几款常用压测工具介绍与使用
  17. python对于字典d d.get(x、y)_字典的使用与操作
  18. 搜索框实现模糊查询方法 - js
  19. Android 上传代码到gitee并发布到Jitpack生成远程库
  20. 镜头能看多远,人眼能看多远

热门文章

  1. Mysql 数据库学习笔记02 编程
  2. 基于MATLAB的夜间车牌识别处理
  3. 美国域名总量增至8023万个:1月净增5.9万个
  4. java怎么倒计时_详解java倒计时三种简单实现方式
  5. mfc 学习的第三天
  6. 有关计算机组装和拆卸的说法,有关计算机组装论文
  7. Vscode ROS 环境搭建
  8. 详细解读八大无线网络安全技术利弊
  9. Bing Maps开发扩展三:Bing Maps中渲染ESRI SHP空间数据
  10. 簡單設定 kernel 選項在使用 iptables 前