上期视频我们分享了使用styleGAN2生成动漫的视频,本期我们从代码角度分享一下实现过程

我们向styleGAN2模型中输入如下2张动漫照片,神经网络会通过学习,生成同时具有2种风格,且风格各异的不同的动漫人物

打开网易新闻 查看精彩图片

styleGAN2

GAN生成对抗神经网络

生成对抗网络(Generative Adversarial Networks)是一种无监督深度学习模型,用来通过计算机生成数据,由Ian J. Goodfellow等人于2014年提出。模型两个主要模块:生成模型(Generative Model)和判别模型(Discriminative Model)。在神经网络训练时,生成模型与判别模型相互博弈,以达到模型最好的效果

生成对抗网络被认为是当前最具前景、最具活跃度的模型之一,目前主要应用于样本数据生成、图像生成、图像修复、图像转换、文本生成等方向。

打开网易新闻 查看精彩图片

GAN模型

StyleGAN系列是NVIDIA在2018年发布的,目前已经发展到StyleGAN3,由于其效果与精度比传统GAN更好,得到了广大开发者的喜欢,本次的代码是基于StyleGAN2

打开网易新闻 查看精彩图片

StyleGAN与传统GAN模型区别

A Style-Based Generator Architecture for Generative Adversarial Networks
https://arxiv.org/pdf/1812.04948.pdf

——2——

StyleGAN2 生成动漫人物

打开网易新闻 查看精彩图片

https://github.com/NVlabs/stylegan2 开源链接

如下代码运行在Google colab上,当然你也可以下载到自己本地电脑进行运行

复制styleGAN2工程,并安装相应第三方库与下载预训练模型

!git clone https://github.com/cedro3/stylegan2.git! pip install --upgrade gdown
import gdown
gdown.download('https://drive.google.com/u/1/uc?id=1_NUX9_xRGjce1KbCxT4frUsFWctlN4ZC', 'network-tadne.pkl', quiet=False)

本代码基于tensorflow,需要安装上tensorflow

%tensorflow_version 1.x
%cd /content/stylegan2
from function import *

输入给模型2张动漫图片,模型便可以生成具有不同风格的动漫图片

打开网易新闻 查看精彩图片

styleGAN2

src_seed = 60
dst_seed = 75
blending = 0.5
truncation_psi = 0.8
generate_images([src_seed, dst_seed], truncation_psi)

print("Blended image (", blending, ")")
blend_images(src_seed, dst_seed, blending=blending, truncation_psi=truncation_psi)

这里src_seed是输入图片的编号,dst_seed是第2张输入图片的编号,我们把2张动漫图片输入给模型,让模型学习2张图片的特征,并生成具有2种图片风格的目标动漫图片

blending是混合图片的比例,truncation_psi是生成的图片距离训练图片的距离

最后我们直接使用GAN模型生成图片

第三步

我们生成一个从输入动漫图片到目标动漫图片的转换过程

src_seed = 51
dst_seed = 58
truncation_psi = 0.7
duration_sec = 5.0
mp4_fps = 30

generate_images([src_seed, dst_seed], truncation_psi)
output_filename = interpolate_between_seeds(seed_array=[src_seed, dst_seed], truncation=truncation_psi, duration_sec=duration_sec, mp4_fps=mp4_fps)

首先,我们输入2张图片src_seed与dst_seed,duration_sec为视频的时长

打开网易新闻 查看精彩图片

GAN

从结果可以看出来,就算2张图片转换过程中,其模型生成的中间状态图片也是比较精美的

2张图片的转换,在我们分享人脸识别与人脸检测时,也有分享过类似的代码,主要是使用opencv的仿射变换

打开网易新闻 查看精彩图片