神经网络之风格迁移TF-Hub开源项目

Posted 一颗小树x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络之风格迁移TF-Hub开源项目相关的知识,希望对你有一定的参考价值。

前言

风格迁移,基于A图像内容,参考B图像的风格(名画,像毕加索或梵高一样绘画),创造出一幅新图像。

本文基于TF-Hub开源项目进行开发,60多行代码快速实现神经网络的风格迁移,为方便大家使用,已经整理相关代码和模型到Github中,直接下载即可使用。

 

一、模型效果

Style_transfer_V2版本

 

二、原理

风格迁移是基于生成对抗网络实现的,是一种优化技术,用于将两个图像,A图像内容和B图像风格,混合再一起,是输出的图像看起来像A图像,但是也参考了B图像的风格。

通过优化输出图像,以匹配A图像的内容统计数和B图像的风格统计数据。这些统计数据可以使用卷积网络从图像中提取。

 

三、项目实践

3.1、下载项目

大家点击这里Github下载代码和模型

模型V1(Style_transfer

模型V2(Style_transfer_V2)效果更好一些,模型更大;

3.2、运行环境

主要用到几个依赖库:Tensorflow2.x、tensorflow_hub、numpy、PIL、matplotlib

参考:

搭建Tensorflow2.x环境:Python 3.8、TensorFlow2.3、anacoda

安装tensorflow_hub:pip install tensorflow-hub

3.3、运行模型

首先选择内容图像,content_image;风格图像,style_image;填写对应的图像路径。

然后直接运行代码 Style_transfer.py,运行成功后生成Style_transfer_Output.png。

 

四、源代码

'''
基于Tensorflow2,TF-Hub开源项目——神经网络风格迁移
'''

# 导入和配置模块
import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
import PIL.Image
import matplotlib.pyplot as plt
import time

# 张量转化为图像,保存图片
def tensor_to_image(tensor):
  tensor = tensor*255
  tensor = np.array(tensor, dtype=np.uint8)
  if np.ndim(tensor)>3:
    assert tensor.shape[0] == 1
    tensor = tensor[0]
  # 保存图片
  img = tf.image.encode_png(tensor)
  with tf.io.gfile.GFile("./Style_transfer_Output.png", 'wb') as file:
    file.write(img.numpy())
  return PIL.Image.fromarray(tensor)

# 定义一个加载图像的函数,并将其最大尺寸限制为 512 像素
def load_img(path_to_img):
  max_dim = 512
  img = tf.io.read_file(path_to_img)
  img = tf.image.decode_image(img, channels=3)
  img = tf.image.convert_image_dtype(img, tf.float32)

  shape = tf.cast(tf.shape(img)[:-1], tf.float32)
  long_dim = max(shape)
  scale = max_dim / long_dim

  new_shape = tf.cast(shape * scale, tf.int32)

  img = tf.image.resize(img, new_shape)
  img = img[tf.newaxis, :]
  return img

# 创建一个简单的函数来显示图像
def imshow(image, title=None):
  if len(image.shape) > 3:
    image = tf.squeeze(image, axis=0)
  plt.imshow(image)
  if title:
    plt.title(title)

content_image = load_img("./test_picture/girl.jpg")
style_image = load_img("./test_picture/MonaLisa.jpg")

plt.subplot(1, 2, 1)
imshow(content_image, 'Content Image')
plt.subplot(1, 2, 2)
imshow(style_image, 'Style Image')

# 使用 TF-Hub 进行快速风格迁移
hub_module = hub.load('./model/magenta_arbitrary-image-stylization-v1-256_2')
stylized_image = hub_module(tf.constant(content_image), tf.constant(style_image))[0]
tensor_to_image(stylized_image)

 

如果觉得不错,后续继续更新开源项目~

 

 

以上是关于神经网络之风格迁移TF-Hub开源项目的主要内容,如果未能解决你的问题,请参考以下文章

风格迁移CycleGAN开源项目代码运行步骤详细教程

风格迁移论文总结

深度学习之神经风格迁移

githubgirl将 AI 艺术创作类的开源项目整合到了一起,包括图像风格迁移图像卡通话

安利一个很火的 Github 滤镜项目

图像风格迁移实战(代码可跑通)