前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JoJoGAN 实践

JoJoGAN 实践

作者头像
GoCoding
发布于 2022-02-23 06:02:12
发布于 2022-02-23 06:02:12
49600
代码可运行
举报
文章被收录于专栏:GoCodingGoCoding
运行总次数:0
代码可运行

JoJoGAN: One Shot Face Stylization. 只用一张人脸图片,就能学习其风格,然后迁移到其他图片。训练时长只用 1~2 min 即可。

  • code[1]
  • paper[2]

效果:

主流程:

本文分享了个人在本地环境(非 colab)实践 JoJoGAN 的整个过程。你也可以依照本文上手训练自己喜欢的风格。

准备环境

安装:

  • Anaconda[3]
  • PyTorch[4]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n torch python=3.9 -y
conda activate torch

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch -y

检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python - <<EOF
import torch, torchvision
print(torch.__version__, torch.cuda.is_available())
EOF
1.10.1 True

准备代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/mchong6/JoJoGAN.git
cd JoJoGAN

pip install tqdm gdown matplotlib scipy opencv-python dlib lpips wandb

# Ninja is required to load C++ extensions
wget https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force

然后,将本文提供的几个 *.py 放进 JoJoGAN 目录,从这里获取:https://github.com/ikuokuo/start-deep-learning/tree/master/practice/JoJoGAN 。

  • download_models.py: 获取模型
  • generate_faces.py: 生成人脸
  • stylize.py: 风格化
  • train.py: 训练

之后,于训练流程一节,会结合代码,讲述下 JoJoGAN 的工作流程。其他些 *.py 只提下用法,实现就不多说了。

获取模型

python download_models.py 获取模型,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
models/
├── arcane_caitlyn_preserve_color.pt
├── arcane_caitlyn.pt
├── arcane_jinx_preserve_color.pt
├── arcane_jinx.pt
├── arcane_multi_preserve_color.pt
├── arcane_multi.pt
├── art.pt
├── disney_preserve_color.pt
├── disney.pt
├── dlibshape_predictor_68_face_landmarks.dat
├── e4e_ffhq_encode.pt
├── jojo_preserve_color.pt
├── jojo.pt
├── jojo_yasuho_preserve_color.pt
├── jojo_yasuho.pt
├── restyle_psp_ffhq_encode.pt
├── stylegan2-ffhq-config-f.pt
├── supergirl_preserve_color.pt
└── supergirl.pt

生成人脸

用 StyleGAN2 预训练模型随机生成人脸,用于测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python generate_faces.py -n 5 -s 2000 -o input

使用预训练风格

JoJoGAN 给了 8 个预训练模型,可以一并体验,与文首的效果图一样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 预览 JoJoGAN 所有预训练模型 风格化某图片(test_input/iu.jpeg)的效果
python stylize.py -i test_input/iu.jpeg -s all --save-all --show-all

# 使用 JoJoGAN 所有预训练模型 风格化所有生成的测试人脸(input/*)
find ./input -type f -print0 | xargs -0 -i python stylize.py -i {} -s all --save-all

训练自己的风格

首先,准备一张风格图:

之后,开始训练:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python train.py -n yinshi -i style_images/yinshi.jpeg --alpha 1.0 --num_iter 500 --latent_dim 512 --use_wandb --log_interval 50

--use_wandb 时,可查看训练日志:

最后,测试效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python stylize.py -i input/girl.jpeg --save-all --show-all --test_style yinshi --test_ckpt output/yinshi.pt --test_ref output/yinshi/style_images_aligned/yinshi.png

训练工作流程

准备风格图片,转为训练数据

将风格图片里的人脸裁减对齐:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# dlib 预测人脸特征点,再裁减对齐
from util import align_face
style_aligned = align_face(img_path)

将风格图片 GAN Inversion 逆映射回预训练模型的隐向量空间(Latent Space):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name, _ = os.path.splitext(os.path.basename(img_path))
style_code_path = os.path.join(latent_dir, f'{name}.pt')

# e4e FFHQ encoder (pSp) > GAN inversion,得到 latent
from e4e_projection import projection
latent = projection(style_aligned, style_code_path, device)

载入 StyleGAN2 模型,训练微调

载入预训练模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
latent_dim = 512

# 加载预训练模型
original_generator = Generator(1024, latent_dim, 8, 2).to(device)
ckpt = torch.load("models/stylegan2-ffhq-config-f.pt", map_location=lambda storage, loc: storage)
original_generator.load_state_dict(ckpt["g_ema"], strict=False)

# 准备微调的模型
generator = deepcopy(original_generator)

训练可调参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 控制风格强度 [0, 1]
alpha = 1.0
alpha = 1-alpha

# 是否保留原图像色彩
preserve_color = True

# 训练迭代次数(最好 500,Adam 学习率是基于 500 次迭代调优的)
num_iter = 500

# 风格图片 targets 及 latents
targets = ..
latents = ..

进行训练,拟合隐空间。最后保存:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 准备 LPIPS 计算 loss
lpips_fn = lpips.LPIPS(net='vgg').to(device)

# 准备优化器
g_optim = torch.optim.Adam(generator.parameters(), lr=2e-3, betas=(0, 0.99))

# 哪些层用于交换,用于生成风格化图片
if preserve_color:
    id_swap = [7,9,11,15,16,17]
else:
    id_swap = list(range(7, generator.n_latent))

# 训练迭代
for idx in tqdm(range(num_iter)):
    # 交换层混合风格,并加噪声
    mean_w = generator.get_latent(torch.randn([latents.size(0), latent_dim])
        .to(device)).unsqueeze(1).repeat(1, generator.n_latent, 1)
    in_latent = latents.clone()
    in_latent[:, id_swap] = alpha*latents[:, id_swap] + (1-alpha)*mean_w[:, id_swap]

    # 以 latent 风格化图片,与目标风格对比
    img = generator(in_latent, input_is_latent=True)
    loss = lpips_fn(F.interpolate(img, size=(256,256), mode='area'),
        F.interpolate(targets, size=(256,256), mode='area')).mean()

    # 优化
    g_optim.zero_grad()
    loss.backward()
    g_optim.step()

# 保存权重,完成
torch.save({"g": generator.state_dict()}, save_path)

结语

JoJoGAN 实践下来效果不错。使用本文给到的代码,更容易上手训练自己喜欢的风格,值得试试。

脚注

[1]

code: https://github.com/mchong6/JoJoGAN

[2]

paper: https://arxiv.org/abs/2112.11641

[3]

Anaconda: https://www.anaconda.com/products/individual

[4]

PyTorch: https://pytorch.org/get-started/locally/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DragGAN 完全自由 P 图指南
在上篇中,树先生教大家如何正确部署 DragGAN 项目,实现自由拖拽式 P 图。
程序员树先生
2023/07/06
6131
DragGAN 完全自由 P 图指南
你也能用英伟达GAN造脸了:官方实现有了,高清数据集也开源了
如今,它终于有了自己的名字,叫StyleGAN。顾名思义,GAN的生成器,是借用风格迁移的思路重新发明的。
量子位
2019/04/24
5930
你也能用英伟达GAN造脸了:官方实现有了,高清数据集也开源了
一张自拍即可实现变老变年轻,带你感受时光流逝之美
项目效果 飞浆是一个由百度推出的深度学习开发平台,为开发者提供了高效、易用、灵活和全面的深度学习开发工具和服务。 PaddleGAN是飞浆在图像生成和处理领域的一个代表性项目,通过深度学习的技术和飞浆
江户川码农
2023/03/02
1.3K2
一张自拍即可实现变老变年轻,带你感受时光流逝之美
生成对抗网络(GAN)如何推动AIGC的发展
为了更深入理解生成对抗网络(GAN),我们需要探索其更复杂的变种和技术细节。这些变种通常旨在解决GAN的训练不稳定性、生成质量以及应用范围等问题。以下是一些主要的GAN变种及其特性。
用户11292525
2024/11/21
1400
自定义数据集上训练StyleGAN | 基于Python+OpenCV+colab实现
生成对抗网络(GAN) 是机器学习中的一项最新创新,由 Ian J. Goodfellow 及其同事于2014年首次提出。
AI算法与图像处理
2021/04/21
4K0
自定义数据集上训练StyleGAN | 基于Python+OpenCV+colab实现
MMGEN-FaceStylor | 因为是你,所以每一种样子我都喜欢
另外,我们还提供完整的模型训练代码和探索的心路历程,如果不满足于试试效果,而是想自己训练起来,那就赶快来 Star 吧~
OpenMMLab 官方账号
2022/01/18
7690
MMGEN-FaceStylor | 因为是你,所以每一种样子我都喜欢
一个快速构造GAN的教程:如何用pytorch构造DCGAN
在本教程中,我们将在PyTorch中构建一个简单的DCGAN,并在手写数据集上对它进行训练。我们将讨论PyTorch DataLoader,以及如何使用它将图像数据提供给PyTorch神经网络进行训练。PyTorch是本教程的重点,所以我假设您熟悉GAN的工作方式。
deephub
2020/08/04
1.5K0
一个快速构造GAN的教程:如何用pytorch构造DCGAN
生成对抗网络(GAN)系列:WGAN与金融时序(附代码)
过拟合是我们试图将机器学习技术应用于时间序列时遇到的问题之一。出现这个问题是因为我们使用我们所知道的唯一时间序列路径来训练我们的模型:已实现的历史。
量化投资与机器学习微信公众号
2020/06/29
4.2K1
生成对抗网络(GAN)系列:WGAN与金融时序(附代码)
AI绘画中VAE压缩图像
在Stable Diffusion中,所有的去噪和加噪过程并非在图像空间直接进行,而是通过VAE模块将图像编码到一个低维空间。
Dlimeng
2023/12/23
4150
AI绘画中VAE压缩图像
生成式AI核心技术详解:从GANs到Transformers
生成式AI(Generative AI)作为人工智能的一个重要分支,通过学习大量的数据生成新的数据样本,在多个领域取得了令人瞩目的进展。生成式AI不仅在学术研究中激发了广泛的兴趣,也在工业应用中展示了巨大的潜力,推动了图像生成、文本生成、视频生成等领域的快速发展。
TechLead
2024/05/29
4.7K0
生成式AI核心技术详解:从GANs到Transformers
[机器学习|理论&实践] 深度学习架构详解:生成对抗网络(GANs)的应用
生成对抗网络(Generative Adversarial Networks,简称GANs)是深度学习领域的一项重要技术,由Ian Goodfellow等人于2014年提出。GANs以其独特的生成模型结构和训练方式在图像生成、风格迁移、超分辨率等任务上取得了显著的成果。本文将深入介绍GANs的基本原理、训练过程,以及在实际应用中的一些成功案例。
数字扫地僧
2023/12/08
7523
GitHub 又一黑科技项目面世!网友惊呼:这也太强了...
今天小 G 给大家介绍一个 AI 黑科技,能够完美实现人脸性别变换,并带有丰富的表情,让你不仅瞬间拥有了对象,更是看到另一面的自己,都怕你一不小心爱上你自己。
GitHubDaily
2021/11/15
1.6K0
GitHub 又一黑科技项目面世!网友惊呼:这也太强了...
一文速览-合成数据在大模型训练和性能优化中的运用
如果你一直在跟着博主的脚步探索AI大模型的相关内容,从最初的大模型Prompt工程解析,到实际的开发部署,再到深入NL2SQL、知识图谱大模型和ChatBI等更高阶应用,应该已经感受到了我们一步一个脚印,从迈过一道道技术难关,到搭建起属于自己的技术桥梁的过程。如今,我们或许对大模型的开发已经有些轻车熟路,但也必须承认,技术的迭代速度实在太快了。要想跟上AI技术发展的步伐,把最新的人工智能技术融入现有业务和应用场景才是我们追求的最终目标。
fanstuck
2025/01/14
5790
一文速览-合成数据在大模型训练和性能优化中的运用
【论文复现】基于扩散模型的无载体图像隐写术
当前的图像隐写技术主要集中在基于载体图(cover image)的方法上,这些方法通常存在泄露隐藏图(secret image)的风险和对退化容器图(container image)不鲁棒的风险。受到最近扩散模型(diffusion models)发展的启发,作者发现了扩散模型的两个特性,即无需训练即可实现两张图像之间的转换以及对噪声数据有天然的鲁棒性。这些特性可以用来增强图像隐写任务中的安全性和鲁棒性。这是首次将扩散模型引入图像隐写领域的尝试。与基于载体图的图像隐写方法相比,作者提出的CRoSS框架在可控性、鲁棒性和安全性方面具有明显优势。
Eternity._
2024/11/18
2270
【论文复现】基于扩散模型的无载体图像隐写术
Github项目推荐 | PyTorch代码规范最佳实践和样式指南
AI 科技评论按,本文不是 Python 的官方风格指南。本文总结了使用 PyTorch 框架进行深入学习的一年多经验中的最佳实践。本文分享的知识主要是以研究的角度来看的,它来源于一个开元的 github 项目。
AI科技评论
2019/05/14
2.2K0
Stable Diffusion的入门介绍和使用教程
Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它,如下图所示。
deephub
2023/01/18
7K0
AIGC在游戏开发中的革命性潜力-自动生成内容与智能化NPC
随着游戏行业的快速发展,自动化生成内容(AIGC, Artificial Intelligence Generated Content)在游戏开发中的潜力日益受到关注。通过AIGC,开发者可以借助人工智能来自动生成游戏中的角色、场景、任务等内容,从而大幅减少开发时间,提升游戏的丰富性和玩家的沉浸感。在本文中,我们将探讨AIGC在游戏开发中的应用潜力,并通过代码实例展示如何实现基本的自动生成游戏内容。
一键难忘
2024/10/20
2460
使用GAN进行异常检测
自从基于Stable Diffusion的生成模型大火以后,基于GAN的研究越来越少了,但是这并不能说明他就没有用了。异常检测是多个研究领域面临的重要问题,包括金融、医疗保健和网络安全。检测和正确分类未见的异常是一个具有挑战性的问题,多年来已经以许多不同的方式解决了这个问题。而今天我们要介绍一种基于GAN的异常检测方法,GAN是一种深度学习模型,可以学习生成与给定数据集相似的真实数据样本。GAN的这一特性表明它们可以成功地用于异常检测,以前的基于GAN的生成模型都是使用GAN的生成器,而异常检测则是需要使用GAN的鉴别器。
deephub
2023/12/14
6570
使用GAN进行异常检测
一键cosplay各路动漫人物!快手的这个BlendGAN火了 | NeurIPS 2021
这就是来自快手的BlendGAN,而且这项工作还被顶会NeurIPS 2021接收。
量子位
2021/11/23
5670
年轻的LeCun、吴恩达长啥样?升级版StyleGAN告诉你
英伟达提出的风格迁移模型 StyleGAN 系列,一直是人们用来进行各类脑洞画图实验的流行工具。从生成二次元「老婆」,照片修图,到人物的卡通化,最近几年基于这种技术的应用不一而足。
深度学习技术前沿公众号博主
2021/07/14
3550
年轻的LeCun、吴恩达长啥样?升级版StyleGAN告诉你
推荐阅读
相关推荐
DragGAN 完全自由 P 图指南
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文