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

本文介绍了如何使用TensorFlow2进行神经风格迁移,通过预训练的VGG模型提取特征,实现图像内容的重构和风格的重建。文章详细讲解了特征提取、图像预处理、VGG模型的使用以及Gram矩阵在风格重建中的应用,展示了不同层的风格特征对重构效果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[](

)使用VGG提取特征


分类器CNN可以分为两部分:第一部分称为特征提取器 (feature extractor),主要由卷积层组成;后一部分由几个全连接层组成,输出类概率得分,称为分类器头 (classifier head)。在ImageNet上为分类任务预先训练的CNN也可以用于其他任务,这就是所谓的迁移学习 (transfer learning),我们可以转移或重用一些学到的知识到新的网络或应用中。

在CNN中,图像重建的两个步骤如下:

  1. 通过CNN向前计算图像以提取特征。

  2. 使用随机初始化的输入,并进行训练,以便其重建与步骤1中的参考特征最匹配的特征。

在正常的网络训练中,输入图像是固定的,并且使用反向传播的梯度来更新网络权重。在神经风格迁移中,所有网络层都被冻结,而我们使用梯度来修改输入。在原始的论文使用的是 VGG19Keras 有一个可以使用的预训练模型。VGG的特征提取器由五个块组成,每个块的末尾都有一个下采样。每个块都有2~4个卷积层,整个VGG19具有16个卷积层和3个全连接层。

在下文中,我们将实现内容重构,同时将其扩展以执行风格迁移。以下是使用预训练的VGG提取block4_conv2的输出层的代码:

因为我们只需要提取特征,所以在实例化VGG模型时使用include_top = False冻结网络参数

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)

预训练的 Keras CNN 模型分为两部分。底部由卷积层组成,通常称为特征提取器,而顶部是由全连接层组成的分类器头。因为我们只想提取特征而不关心分类器,所以在实例化VGG模型时将设置 include_top = False

[](

)图像加载

首先需要加载内容图像和风格图像:

def scale_image(image):

MAX_DIM = 512

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

print(image.shape)

new_shape = tf.cast(image.shape[

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值