Keras实现风格迁移

风格迁移

风格迁移算法经历多次定义和更新,现在应用在许多智能手机APP上。
风格迁移在保留目标图片内容的基础上,将图片风格引用在目标图片上。

风格本质上是指在各种空间尺度上图像中的纹理,颜色和视觉图案;内容是图像的高级宏观结构。
实现风格迁移背后的关键概念与所有深度学习算法的核心相同:定义了一个损失函数来指定想要实现的目标,并最大限度地减少这种损失。
知道自己想要实现的目标:在采用参考图像的样式的同时保留原始图像的内容。如果我们能够在数学上定义内容和样式,那么最小化的适当损失函数将是以下内容:
loss = distance(style(reference_image) - style(generated_image)) +
distance(content(original_image) - content(generated_image))

distance是一个如L2范数的函数,content计算图片内容表示的函数;style计算图片风格表示的函数。最小化损失函数导致style(generated_image)和引用图片style(reference_image)尽可能接近,而content(generated_image))与内容图片content(original_image)尽可能接近,最终达到风格迁移的目标。

内容损失函数

我们已经知道网络模型前几层的激活函数值表示图片的局部信息,高层网络激活值包括全局性、抽象性的特征信息。换言之,卷积网的不同层的激活值提供了在不同空间尺度上图像内容的分解。因此,期望通过convnet中上层的表示捕获更全局和抽象的图像内容。
内容损失函数的另一种选择是在目标图像上计算的预训练的网络中的上层的激活与生成的图像上计算的相同层的激活之间的L2范数。这保证从上层看生成的图像看起来与原始目标图像类似。假设卷积网的上层看到的是输入图像的内容,那么这就是保存图像内容的一种方式。

风格损失函数

内容损失函数仅使用单个上层,但是Gatys定义的风格损失函数使用多个convnet层:尝试捕获由convnet提取的所有空间比例的样式参考图像的外观,而不仅仅是单个比例。对于风格的损失,Gatys使用图层激活的Gram矩阵:给定图层的要素图的内积。该内积可以理解为表示层的特征之间的相关性的图。这些特征相关性捕获特定空间尺度的模式的统计数据,其在经验上对应于在该尺度下找到的纹理的外观。
因此,风格损失旨在在风格参考图像和生成的图像之间保持不同层的激活内的类似内部相关性。反过来,这保证了在不同空间尺度上找到的纹理在样式参考图像和生成的图像中看起来相似。

可以使用预训练好的网络模型定义损失函数:
- 通过在目标内容图像和生成的图像之间保持类似的高级图层激活来保留内容。卷积网应该“看到”目标图像和生成的图像包含相同的内容;
- 通过在低级图层和高级图层的激活中保持类似的相关性来保留样式。特征相关性捕获纹理:生成的图像和样式参考图像应在不同的空间尺度共享相同的纹理。

Keras实现

使用VGG19网络模型实现风格迁移。流程:
1. 设置一个网络,同时为风格参考图像,目标图像和生成图像计算VGG19图层激活函数值;
2. 使用在这三个图像上计算的图层激活值来定义前面描述的损失函数,可以将其最小化以实现风格迁移;
3. 设置梯度下降过程以最小化此损失函数。

定义风格图片、目标图片路径地址;为了确保两张处理图片尺寸相同(尺寸不同会增加处理难度),对两张图片进行resize操作,大小为400px。
定义初始变量

from keras.preprocessing.image import load_img,img_to_array

target_image_path = 'img/protrait.jpg'
style_reference_image_path = 'img/transfer_style_reference.jpg'

width, height = load_img(target_image_path).size
img_height = 400
img_width = int(width*img_height/height)

定义辅助函数方便加载、预处理、后期处理VGG19卷积网络接收和产生的图片。
辅助函数

import numpy as np
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值