cnn风格迁移_CNN 风格迁移实战(附python代码)

本文介绍了如何构建一个风格迁移网络,通过CNN捕捉图像内容和风格,并应用到新图像上。利用VGG16模型,结合内容损失、风格损失和总变差损失,实现保留原始内容的同时应用新样式。通过L-BFGS算法优化,最终生成风格化图像。
摘要由CSDN通过智能技术生成

在今天的文章中,我们会建立一个很棒的风格迁移网络。为了做到这一点,我们需要深入地了解 CNN 和卷积层的工作原理。在文章结束时,你将会创建一个风格迁移网络,这个网络能够在保留原始图像的同时将新样式应用到它上面。

波士顿天际线和梵高的繁星之夜混合效果

风格迁移

在开始之前,先明确一下我们的目标。

我们将风格迁移定义为改变图像风格同时保留它的内容的过程。

给定一张输入图像和样式图像,我们就可以得到既有原始内容又有新样式的输出图像。在 Leon A. Gaty 的论文 A Neural Algorithm of Artistic Style 中有所描述。

输入图像 + 样式图像 -> 输出图像(风格化)

工作方式

准备输入图像和风格图像并将它们调整为相同的大小。

加载预训练的卷积神经网络(VGG16)。

区分负责样式的卷积(基本形状,颜色等)和负责内容的卷积(特定于图像的特征),将卷积分开可以单独地处理内容和样式。

优化问题,也就是最小化:

内容损失(输入和输出图像之间的距离 - 尽力保留内容)

风格损失(风格和输出图像之间的距离 - 尽力应用新风格)

总变差损失(正则化 - 对输出图像进行去噪的空间平滑度)

5.最后设置梯度并使用 L-BFGS 算法进行优化。

实现

可以在 Kaggle kernel 或 GitHub找到该项目的完整代码。

输入

# 旧金山

san_francisco_image_path = "https://www.economist.com/sites/default/files/images/print-edition/20180602_USP001_0.jpg"

# 输入可视化

input_image = Image.open(BytesIO(requests.get(san_francisco_image_path).content))

input_image = input_image.resize((IMAGE_WIDTH, IMAGE_HEIGHT))

input_image.save(input_image_path)

input_image

这就是旧金山的天际线

风格

然后定义一个风格图像。

# Tytus Brzozowski

tytus_image_path = "http://meetingbenches.com/wp-content/flagallery/tytus-brzozowski-polish-architect-and-watercolorist-a-fairy-tale-in-warsaw/tytus_brzozowski_13.jpg"

# 风格图像可视化

style_image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值