-
大小: 225KB文件类型: .zip金币: 1下载: 0 次发布日期: 2021-05-13
- 语言: Python
- 标签:
资源简介
基于VGG19的图像风格迁移,如果没有vgg-19文件 运行utils代码是会下载。 在styles文件夹中选择更改要迁移的图,包含了风格图片,内容图片替换成自己要进行操作的图片即可。是可以直接运行跑通的。有疑问的话可以留言询问。
代码片段和文件信息
import numpy as np
import scipy.io
import tensorflow as tf
import utils
# VGG-19 parameters file
VGG_DOWNLOAD_link = “http://www.vlfeat.org/matconvnet/models/imagenet-vgg-verydeep-19.mat“
VGG_FILENAME = “imagenet-vgg-verydeep-19.mat“
EXPECTED_BYTES = 534904783 # 文件大小
class VGG(object):
def __init__(self input_img):
# 下载文件
utils.download(VGG_DOWNLOAD_link VGG_FILENAME EXPECTED_BYTES)
# 加载文件
self.vgg_layers = scipy.io.loadmat(VGG_FILENAME)[“layers“]
self.input_img = input_img
# VGG在处理图像时候会将图片进行mean-center,所以我们首先要计算RGB三个channel上的mean
self.mean_pixels = np.array([123.68 116.779 103.939]).reshape((1 1 1 3))
def _weights(self layer_idx expected_layer_name):
“““
获取指定layer层的pre-trained权重
:param layer_idx: VGG中的layer id
:param expected_layer_name: 当前layer命名
:return: pre-trained权重W和b
“““
W = self.vgg_layers[0][layer_idx][0][0][2][0][0]
b = self.vgg_layers[0][layer_idx][0][0][2][0][1]
# 当前层的名称
layer_name = self.vgg_layers[0][layer_idx][0][0][0][0]
assert layer_name == expected_layer_name
print(“layer name error!“)
return W b.reshape(b.size)
def conv2d_relu(self prev_layer layer_idx layer_name):
“““
采用relu作为激活函数的卷积层
:param prev_layer: 前一层网络
:param layer_idx: VGG中的layer id
:param layer_name: 当前layer命名
“““
with tf.variable_scope(layer_name):
# 获取当前权重(numpy格式)
W b = self._weights(layer_idx layer_name)
# 将权重转化为tensor(由于我们不需要重新训练VGG的权重,因此初始化为常数)
W = tf.constant(W name=“weights“)
b = tf.constant(b name=“bias“)
# 卷积操作
conv2d = tf.nn.conv2d(input=prev_layer
filter=W
strides=[1 1 1 1]
padding=“SAME“)
# 激活
out = tf.nn.relu(conv2d + b)
setattr(self layer_name out)
def avgpool(self prev_layer layer_name):
#“““
#average pooling层(这里参考了原论文中提到了avg-pooling比max-pooling效果好,所以采用avg-pooling)
# :param prev_layer: 前一层网络(卷积层)
#:param layer_name: 当前layer命名
#“““
with tf.variable_scope(layer_name):
# average pooling
out = tf.nn.avg_pool(value=prev_layer
ksize=[1 2 2 1]
strides=[1 2 2 1]
padding=“SAME“)
setattr(self layer_name out)
def load(self):
“““
加载pre-trained的数据
“““
self.conv2d_relu(self.input_img 0 “conv1_1“)
self.conv2d_relu(self.conv1_1 2 “conv1_2“)
self.avgpool(self.conv1_2 “avgpool1“)
self.conv2d_relu(self.avgpool1 5 “conv2_1“)
self.conv2d_relu(self.c
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-07-26 21:54 图像风格迁移 Python vgg\
文件 4227 2019-07-09 13:08 图像风格迁移 Python vgg\load_vgg.py
目录 0 2019-07-26 21:53 图像风格迁移 Python vgg\st
目录 0 2019-07-26 21:55 图像风格迁移 Python vgg\st
文件 19875 2019-07-09 19:24 图像风格迁移 Python vgg\st
文件 31984 2019-07-09 15:22 图像风格迁移 Python vgg\st
文件 33499 2019-07-09 21:17 图像风格迁移 Python vgg\st
文件 57785 2019-07-09 15:04 图像风格迁移 Python vgg\st
文件 34430 2019-07-09 13:26 图像风格迁移 Python vgg\st
文件 23973 2019-07-09 17:03 图像风格迁移 Python vgg\st
文件 22993 2019-07-09 14:52 图像风格迁移 Python vgg\st
文件 8386 2019-07-11 18:56 图像风格迁移 Python vgg\st
- 上一篇:pyton 实现学生信息管理系统
- 下一篇:高效爬取微博数据python3实现
评论
共有 条评论