DragGAN 完全自由 P 图指南

简介: 在上篇中,树先生教大家如何正确部署 DragGAN 项目,实现自由拖拽式 P 图。但可惜只能使用项目预置的一些图片,本篇教大家如何利用该项目自由编辑修改任何图片。

在上篇中,树先生教大家如何正确部署 DragGAN 项目,实现自由拖拽式 P 图。

超炫酷项目来袭!DragGAN 正式开源了!

但可惜只能使用项目预置的一些图片,本篇教大家如何利用该项目自由编辑修改任何图片

这里主要使用到 PTI 项目,可以将你自定义的图片训练成 StyleGAN 潜空间模型,从而实现任何图片的编辑修改。

环境准备

这里我们还是继续选择 AutoDL 云平台,使用 Python 3.8,CUDA 11.8 的镜像,这个镜像的环境满足项目要求。

下载源码

git clone https://github.com/danielroich/PTI.git
# 安装依赖
cd PTI && pip install -r requirements.txt

你肯定好奇,项目里没有 requirements.txt 文件呀?放心,我给你准备好了~

torch>=2.0.0
scipy
Ninja==1.10.2
gradio>=3.35.2
imageio-ffmpeg>=0.4.3
huggingface_hub
hf_transfer
pyopengl
imgui
glfw==2.6.1
pillow>=9.4.0
torchvision>=0.15.2
imageio>=2.9.0
dlib
wandb
lpips

下载预训练模型

这里我们只要下载前 2 个即可,分别是 StyleGAN 的生成器文件 ffhq.pkl 和图片的预处理器文件 align.dat,下载完成后放到项目的 pretrained_models 目录下。

图片预处理

主要是完成原始图片人脸关键点检测工作,将你想要编辑的图片上传到项目的 image_original 目录下,然后将该目录的绝对路径写入 utils/align_data.py 文件中。

if __name__ == "__main__":
    pre_process_images(f'/root/autodl-tmp/PTI/image_original')

同时修改 configs/paths_config.py 文件参数。

### Input dir, where the images reside
input_data_path = '/root/autodl-tmp/PTI/image_processed'

然后运行。

cp utils/align_data.py .
python align_data.py

使用 PTI 进行 GAN 反演

反演是指将一个图像映射到生成模型的潜空间中,然后通过调整潜空间向量来修改图像的外观。通过这种方式,可以实现对图像的各种编辑操作,例如改变姿势、修改外貌特征或添加不同的风格。通过编辑潜空间,可以实现对图像的高级编辑,同时保持图像的真实性和准确性。

本项目中通过如下命令即可完成图像反演工作。

cp run_pti.py .
python run_pti.py

保存为 DragGAN 可识别的模型文件

上述经过 PTI 反演后的文件不是 DragGAN 可识别的模型文件格式,所以这里额外处理一下,将 pt 文件转换成  pkl 文件格式,转换脚本呈上。

import os
import sys
import pickle
import numpy as np
from PIL import Image
import torch
from configs import paths_config, hyperparameters, global_config
def load_generators(model_id, image_name):
  with open(paths_config.stylegan2_ada_ffhq, 'rb') as f:
    old_G = pickle.load(f)['G_ema'].cuda()
  with open(f'{paths_config.checkpoints_dir}/model_{model_id}_{image_name}.pt', 'rb') as f_new:
    new_G = torch.load(f_new).cuda()
  return old_G, new_G
def export_updated_pickle(new_G,model_id):
  print("Exporting large updated pickle based off new generator and ffhq.pkl")
  with open(paths_config.stylegan2_ada_ffhq, 'rb') as f:
    d = pickle.load(f)
    old_G = d['G_ema'].cuda() ## tensor
    old_D = d['D'].eval().requires_grad_(False).cpu()
  tmp = {}
  tmp['G'] = old_G.eval().requires_grad_(False).cpu()# copy.deepcopy(new_G).eval().requires_grad_(False).cpu()
  tmp['G_ema'] = new_G.eval().requires_grad_(False).cpu() # copy.deepcopy(new_G).eval().requires_grad_(False).cpu()
  tmp['D'] = old_D
  tmp['training_set_kwargs'] = None
  tmp['augment_pipe'] = None
  with open(f'{paths_config.checkpoints_dir}/stylegan2_custom_512_pytorch.pkl', 'wb') as f:
      pickle.dump(tmp, f)
if __name__ == "__main__": 
  # checkpoints 目录下 pt 文件名的一部分
  model_id = "BWISZTGIKPZT"
  # 图片名
  image_name = "myimg"   
  generator_type = image_name
  old_G, new_G = load_generators(model_id, generator_type)
  export_updated_pickle(new_G,model_id)

最后将 checkpoints 目录下生成的模型文件和对应的 embeddings 目录下的文件放入 DragGAN 项目的 checkpoints 目录下,然后重启 DragGAN,大功告成!

效果展示

一键整合包

想必你看了上面这一通操作,心里已经默默打了退堂鼓,为了方便大家直接使用,我已经将上述步骤整合成  Jupyter Notebook 文档,一键即可运行,完成图像反演!

食用宝典:align.dat 放入项目 pretrained_models 目录下,visualizer_drag_gradio_custom.py 放入项目根目录下,ipynb 文件直接运行即可。

关注公众号【程序员树先生】,回复【gan】即可获取!








相关文章
|
5月前
|
数据可视化 测试技术 uml
如果更好的绘制UML图
如果更好的绘制UML图
42 0
|
6月前
|
传感器 运维
【软件设计师备考 专题 】编写外部设计文档:系统配置图和关系图
【软件设计师备考 专题 】编写外部设计文档:系统配置图和关系图
106 1
|
6月前
OEEL——使用OEEL快速画出精美图案(以土地利用转移变化为例)
OEEL——使用OEEL快速画出精美图案(以土地利用转移变化为例)
40 0
|
存储 数据可视化 atlas
maftools | 从头开始绘制发表级oncoplot(瀑布图)
maftools | 从头开始绘制发表级oncoplot(瀑布图)
420 0
|
JSON 前端开发 数据可视化
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
188 0
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
|
前端开发 容器
这8张脑图几乎概括了所有的布局方案,确定不看看吗?
前端布局不管是在面试过程中还是在工作中都是非常重要的一部分,一个优秀的前端工程师可以在很快的时间内写出同一种布局的多种实现方案,练习并掌握CSS布局方案可以提高我们的页面开发速度。
135 0
|
数据库 数据安全/隐私保护
【号外】-温习如何画E-R图
【号外】-温习如何画E-R图
【号外】-温习如何画E-R图
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】 ☀️ | 层级面板中的 ‘小手指‘ 作用: 在Scen中将该物体设置为不可选中状态
|
芯片 异构计算
设计师为新iMac设计窄边框设想图
11月11日,苹果将召开2020年第三场秋季发布会,外界猜测将会发布搭载Apple Silicon的Mac产品。近日,就有设计师为苹果新iMac制作了设想图,屏幕尺寸分别为24寸和32寸。
137 0
设计师为新iMac设计窄边框设想图
|
API C#
用C#实现屏幕吸色功能,附逻辑思维讲解图,功能代码不超过50行即可实现
此程序是我上学的时候写的,好几年前的事了,前几天整理硬盘文件时发现自已其实还写过很多东西,当时还没有在园子里面混,故没怎么分享,现在有时间那就给需要的朋友分享分享,我的主要实现思路是: 一、创建一个画布(即为Form),大小和当前屏幕大小一样 二、在这快画布上建立一个绘图对象,截取复制当前屏幕内...
1264 0