更多文章欢迎来我的小博客
艺术风格转移的卷积神经网络
课程视频见:https://www.bilibili.com/video/av19891729/
总结
其实就像最基本的二分类问题一样,任何机器学习的问题的解决无非是这几个步骤,了解问题是什么,数据准备,然后选择解决问题的机器学习模型,然后训练模型,测试模型,周而复始,大功告成。
构建和训练模型的目的是“教会机器解决问题”,两大部分。一是“如何衡量学习效果”,也就是找到合适的损失函数来考核每一次训练的效果如何,二是“让机器不断进步”也就是找到合适的最优化方法最小化损失,使每一次的训练都能让机器“学”到东西。
按这个思路对今天的问题进行总结:
问题描述:图像风格转移,即让我们可以将任何给定图像的“画风”转移到另一个图像上面。
模型选择:16层卷积神经网络(CNN),VGG16。
损失函数:我们将使用我们选择的隐藏层的输出来分别计算样式和内容的损失函数。
优化方法:,类似于随机梯度下降法,即L-BFGS。
机器学习创作艺术,创作音乐,机器学习写作.......这类主题是最吸引我的,这些主题同样也是很难的。作为深度学习入门的部分,很多数学的,神经网络的东西这里就先浅尝辄止了,以后慢慢在做深入。
艺术风格转移
本文的程序是对这篇倍受欢迎的论文Gatys et al., 2015的python代码实现,它演示了如何使用神经网络将艺术风格从一个图像转移到另一个图像上(如下图)。并且作为这篇博客文章的补充。
依赖库
from __future__ import print_function import time from PIL import Image import numpy as np from keras import backend from keras.models import Model from keras.applications.vgg16 import VGG16 # CNN模型 from scipy.optimize import fmin_l_bfgs_b # 优化方法 from scipy.misc import imsave
数据准备
需要的输入数据分为内容图像(content image)和样式图像(style image),下面将对这两个图像进行加载和预处理。
图像导入
用PIL将图片导入并将大小一致设置为512×512
# 内容图像 height = 512 width = 512 content_image_path = 'images/hugo.jpg' content_image = Image.open(content_image_path) content_image = content_image.resize((height, width)) content_image
out[1]:
# 样式图像 style_image_path = 'images/styles/wave.jpg' style_image = Image.open(style_image_path) style_image = style_image.resize((height, width)) style_image
out[2]: