# TensorFlow2 实现神经风格迁移，DIY数字油画定制照片，面试必问知识点

[](

)使用VGG提取特征

1. 通过CNN向前计算图像以提取特征。
2. 使用随机初始化的输入，并进行训练，以便其重建与步骤1中的参考特征最匹配的特征。

vgg = tf.keras.applications.VGG19(include_top=False, weights=’imagenet’)

content_layers = [‘block4_conv2’]

content_outputs = [vgg.get_layer(x).output for x in content_layers]

model = Model(vgg.input, content_outputs)

### [](

)图像加载

[En]

First, you need to load the content image and style image:

def scale_image(image):

MAX_DIM = 512

scale = np.max(image.shape)/MAX_DIM

print(image.shape)

new_shape = tf.cast(image.shape[:2]/scale, tf.int32)

image = tf.image.resize(image, new_shape)

return image

content_image = scale_image(np.asarray(Image.open(‘7.jpg’)))

style_image = scale_image(np.asarray(Image.open(‘starry-night.jpg’)))

### [](

)VGG预处理

Keras 预训练模型期望输入图像的BGR范围为 [0, 255] 。因此，第一步是反转颜色通道，以将 RGB 转换为 BGRVGG 对不同的颜色通道使用不同的平均值，可以使用 tf.keras.applications.vgg19.preprocess_input() 进行预处理，在 preprocess_input() 内部，分别为B，G和R通道的像素值减去 103.939116.779123.68

[En]

The following is the forward calculation code, which preprocesses the image before performing a forward calculation, and then inputs it into the model to return content features. Then, we extract the content features and use them as our goal:

def extract_features(image):

image = tf.keras.applications.vgg19。preprocess_input(image *255.)

content_ref = model(image)

return content_ref

content_image = tf.reverse(content_image, axis=[-1])

content_ref = extract_features(content_image)

image = tf.Variable(tf.random.normal( shape=content_image.shape))

[En]

Next, we will use back propagation to reconstruct the image from the content features.

### [](

)重建内容

def calc_loss(y_true, y_pred):

loss = [tf.reduce_sum((x-y)**2) for x, y in zip(y_pred, y_true)]

return tf.reduce_mean(loss)

for i in range(1,steps+1):

with tf.GradientTape() as tape:

content_features = self.extract_features(image)

loss = calc_loss(content_features, content_ref)

image.assign(tf.clip_by_value(image, 0., 1.))

![重构后的内容图像](https://img-blog.csdnimg.cn/202106241308363

[En]

If we look carefully, the structure and edges of the leaves are still preserved and in their proper place. Now, we have extracted the content, after extracting the content features, the next step is to extract style features.

### ; [](

)用Gram矩阵重建风格

1. 使用 tf.squeeze() 将批尺寸 (1, H, W, C) 修改为 (H, W, C)
2. 转置张量以将形状从 (H, W, C) 转换为 (C, H, W)
3. 将最后两个维度展平为 (C, H&#xD7;W)
4. 执行特征的点积以创建形状为 (C, C)Gram 矩阵；
5. 通过将矩阵除以每个展平的特征图中的元素数 (H&#xD7;W) 进行归一化。

def gram_matrix(x):

x = tf.transpose(tf.squeeze(x), (2,0,1));

x = tf.keras.backend.batch_flatten(x)

num_points = x.shape[-1]

gram = tf.linalg.matmul(x, tf.transpose(x))/num_points

return gram

def extract_features(image):

image = tf.keras.applications.vgg19.preprocess_input(image *255.)

styles = self.model(image)

styles = [self.gram_matrix(s) for s in styles]

return styles

（1）Python所有方向的学习路线（新版）

[En]

Recently, I have made a new update to these routes, and the knowledge system has become more comprehensive.

（2）Python学习视频

（3）100多个练手项目

[En]

When we watch videos to learn, we can’t just move our eyes and brains without doing anything. A more scientific learning method is to use them after understanding. At this time, the training program is very suitable, but there are many items in it, and the level is also uneven. You can choose what you can do to practice.

（3）100多个练手项目

[En]

When we watch videos to learn, we can’t just move our eyes and brains without doing anything. A more scientific learning method is to use them after understanding. At this time, the training program is very suitable, but there are many items in it, and the level is also uneven. You can choose what you can do to practice.

Original: https://blog.csdn.net/java199909/article/details/123633229
Author: java199909
Title: TensorFlow2 实现神经风格迁移，DIY数字油画定制照片，面试必问知识点

(0)

### 大家都在看

• #### 用ArkTs在鸿蒙系统上画一个世界杯海报

偶然看到了CSDN关于世界杯的征文活动： 用代码画一个足球？ 哈哈很有意思！ 想了想，画一个自定义View（足球），当然是使用Canvas了，但除了Canvas还有没有其它方法呢？…

人工智能 2023年7月30日
0119
• #### COCO数据集Keypoint标注格式梳理和使用COCO-Annotator在自有数据集上进行标注

这里写自定义目录标题 COCO数据集Keypoint标注格式 * COCO数据集官网 Keypoint Detection关键点检测 – 统一数据格式 Keypoint…

人工智能 2023年7月20日
0382
• #### 【数据挖掘】Pandas介绍

🔥一个人走得远了，就会忘记自己为了什么而出发，希望你可以不忘初心，不要随波逐流，一直走下去🎶🦋 欢迎关注🖱点赞👍收藏🌟留言🐾🦄 本文由 程序喵正在路上 原创，CSDN首发！💖 系列…

人工智能 2023年7月7日
0160
• #### 入门opencv，欢笑快乐每一天

🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🥰 博客首页： knighthood2001😗 欢迎点赞👍评论🗨️❤️ 热爱python，期待与大家一同进步成长！！❤️👀 给大家推荐一款很火爆的刷题、面试…

人工智能 2023年6月17日
0168
• #### 一句话生成视频(python)

一句话生成视频(python) 最近想运营个抖音号, 但是制作视频是个很麻烦的事情. 因此，我想到了运营一个著名的警句和新闻抖音账号。 [En] So I thought of r…

人工智能 2023年5月23日
0163
• #### Docker 部署深度学习 运行deeplabV3

文章目录 前言 一、Docker简介 二、帮助命令 三、镜像常用命令 四、容器常用命令 五、配置深度学习环境 六、运行deeplabV3代码 七、提交容器，保存镜像 总结 前言 本…

人工智能 2023年6月17日
0113
• #### 时序数据预测-SARIMA篇

一、概念 定义：SARIMA模型具有处理季节趋势的时间序列数据的特点。 参数介绍：SARIMA(p, d, q) (P, D, Q)s ，分为两部分，非季节模型与参数p、d、q，季…

人工智能 2023年7月14日
0147
• #### Additive Angular Margin Loss (ArcFace) 附加角裕度损失的进阶之路

ArcFace: Additive Angular Margin Loss for Deep Face Recognition 本文目的是梳理loss函数由欧式空间（Euclide…

人工智能 2023年7月1日
0175
• #### 机器学习实验四：朴素贝叶斯分类

文章目录 * – 一、算法介绍 – 二、朴素贝叶斯分类的优缺点 – 三、代码简单实现 一、算法介绍 贝叶斯分类算法是一大类分类算法的总称，贝叶斯…

人工智能 2023年7月2日
0197
• #### 【Python数据分析】数据挖掘建模——聚类分析

聚类算法是在没有给定划分类别的情况下，根据数据相似度进行样本分组的一种方法，是一种无监督学习方法。聚类的输入是一组未被标记的样本，聚类根据数据自身的距离或相似度将他们划分为若干组，…

人工智能 2023年7月15日
0131
• #### 【python】之哥德巴赫猜想（递归法）和教室排课（枚举法）

14天阅读挑战赛努力是为了不平庸~ 算法学习有些时候是枯燥的，这一次，让我们先人一步，趣学算法！欢迎记录下你的那些努力时刻（算法学习知识点/算法题解/遇到的算法bug/等等），在分…

人工智能 2023年7月3日
0160
• #### 【基于机器学习的垃圾分类监控系统】

基于机器学习的垃圾分类监控系统 一、摘要 abstract 正确处理厨余垃圾，可以有效地保护环境，并带来不错的经济效益。本文将机器学习运用到厨余垃圾的分类监控中，以识别混入其中的非…

人工智能 2023年7月1日
0138
• #### R语言广义线性模型函数GLM、glm函数构建泊松回归模型（Poisson regression）、输出提供偏差（deviances）、回归参数和标准误差、以及系数的显著性p值

[据集 ………………………………&#…

人工智能 2023年6月18日
0144
• #### 【一文足以系列】ORB SLAM2完整详细算法流程

目录 算法目的 算法应用场景 算法优点 相关概念点 内涵算法 算法实现 * tracking线程 – 步骤 单目相机初始化 + 成功条件 单目相机初始化器 初始化后续 …

人工智能 2023年7月27日
0186
• #### 数据科学/机器学习项目流程 — 特征工程

目录 1 特征工程定义 2 特征工程流程步骤 2.1 数据获取 2.2 特征理解 2.3 特征改进 数据清洗 数据编码 2.4 特征选择 基于统计的特征选择 基于模型的特征选择 2…

人工智能 2023年7月18日
0231
• #### 鲁棒的回归算法：RANSAC、MSAC、LMEDS等

Random Sample Consensus Least Median of Squares M-estimator Sample Consensus Maximum Likel…

人工智能 2023年6月18日
0197