本文主要是介绍神经风格迁移——基于VGG算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文是基于吴恩达《深度学习》卷积神经网络第四周习题而做。神经风格迁移的效果是将A图片的某些特征迁移到B图中,使B图具有与之相同的风格,具体的讲解可以观看达叔《深度学习》教程。
所需的第三方库如下,其中所用的数据集和辅助程序可点击此处下载。
import os
import sys
import scipy.io
import scipy.misc
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow
from PIL import Image
from nst_utils import *
import numpy as np
import tensorflow as tf
1.问题描述
神经风格迁移是一项比较有趣的深度学习技术,如下图所示,我们将两张图片进行融合,第一张图片是罗浮宫博物馆,我们称之为content 图像(用C表示),第二张是莫奈的风景画,我们称之为style图像(用S表示),二者融合后的图像具有莫奈画作的风格,我们称之为generated图像(用G表示)。
下面让我们一起来实现这个算法。
2.迁移学习
在达叔的之前课程中已经详细讲述过迁移学习的作用,即将其他任务中已经训练好的网络应用当前的新任务中。神经风格迁移也是应用这样的思路来实现的。
在本文中,我们将使用VGG-19网络,由名字可知该网络是一个19层的VGG网络。这个模型已经在一个非常大的图像数据集上进行了训练,因此这个网络已经可以识别很多低层级和高层级的图像特性。
运行下列代码可以下载VGG-19模型的参数,直接生成一个model
model = load_vgg_model("pretrained-model/imagenet-vgg-verydeep-19.mat")
print(model)
可以打印出模型各层的参数设置如下
{'input': <tf.Variable 'Variable:0' shape=(1, 300, 400, 3) dtype=float32_ref>, 'conv1_1': <tf.Tensor 'Relu:0' shape=(1, 300, 400, 64) dtype=float32>, 'conv1_2': <tf.Tensor 'Relu_1:0' shape=(1, 300, 400, 64) dtype=float32>, 'avgpool1': <tf.Tensor 'AvgPool:0' shape=(1, 150, 200, 64) dtype=float32>, 'conv2_1': <tf.Tensor 'Relu_2:0' shape=(1, 150, 200, 128) dtype=float32>, 'conv2_2': <tf.Tensor 'Relu_3:0' shape=(1, 150, 200, 128) dtype=float32>, 'avgpool2': <tf.Tensor 'AvgPool_1:0' shape=(1, 75, 100, 128) dtype=float32>, 'conv3_1': <tf.Tensor 'Relu_4:0' shape=(1, 75, 100, 256) dtype=float32>, 'conv3_2': <tf.Tensor 'Relu_5:0' shape=(1, 75, 100, 256) dtype=float32>, 'conv3_3': <tf.Tensor 'Relu_6:0' shape=(1, 75, 100, 256) dtype=float32>, 'conv3_4': <tf.Tensor 'Relu_7:0' shape=(1, 75, 100, 256) dtype=float32>, 'avgpool3': <tf.Tensor 'AvgPool_2:0' shape=(1, 38, 50, 256) dtype=float32>, 'conv4_1': <tf.Tensor 'Relu_8:0' shape=(1, 38, 50, 512) dtype=float32>, 'conv4_2': <tf.Tensor 'Relu_9:0' shape=(1, 38, 50, 512) dtype=float32>, 'conv4_3': <tf.Tensor 'Relu_10:0' shape=(1, 38, 50, 512) dtype=float32>, 'conv4_4': <tf.Tensor 'Relu_11:0' shape=(1, 38, 50, 512) dtype=float32>, 'avgpool4': <tf.Tensor 'AvgPool_3:0' shape=(1, 19, 25, 512) dtype=float32>,
这篇关于神经风格迁移——基于VGG算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!