一、介绍

DragGAN是由谷歌、麻省理工学院和马克斯普朗克研究所创建的一种新的人工智能模型。可以让你轻松通过点击拖动等简单的交互操作就能改变拍摄对象的姿势、形状和表情等。

该项目打开了图像领域的新思路,以后关于此类的技术肯定会越来越多,且越来越方便。本站将在本篇教程教您如安装部署DragGAN,并且配置其相关环境和使用。

项目仓库

GitHub:XingangPan/DragGAN

二、安装教程

在执行项目安装之前,我们还需要安装GitConda以及CUDA。如果您的电脑还未安装这几款软件,请先根据本站所给出的教程安装。

Windows系统安装Git请参阅此文章:

http://dataddd.com/git%ef%bd%9cwindows%e5%ae%89%e8%a3%85%e6%95%99%e7%a8%8b/

Windows系统安装Conda请参阅此文章:

http://dataddd.com/anaconda%ef%bd%9cminiconda%ef%bd%9cwindows%e5%ae%89%e8%a3%85%e6%95%99%e7%a8%8b/

Windows系统安装CUDA请参与此文章:

http://dataddd.com/cuda%ef%bd%9cwindows%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85%e6%95%99%e7%a8%8b%e5%85%a8%e6%94%bb%e7%95%a5/

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放该项目的相关环境依赖文件。本站所选择的目录为D盘的根目录下dataddd文件夹,完整路径为:D:\dataddd

检测D盘是否在dataddd目录,没有则创建该文件夹。

if not exist D:\dataddd mkdir D:\dataddd

强制切换工作路径为D盘的dataddd文件夹。

cd /d D:\dataddd

拉取该项目的Github仓库文件,将其下载至dataddd文件夹内。

git clone https://github.com/XingangPan/DragGAN.git

环境部署

在CMD中执行如下命令,强制切换至DragGAN的项目目录。

cd /d D:\dataddd\DragGAN

因为官方提供了environment.yml文件,该文件内置了所有需要的依赖项列表。正常来说,我们根据这个列表可以一键安装所有所需要的环境。

但这个列表仅适用于Linux系统版本,scipycudatoolkit在安装时将会找不到指定的版本,你在安装时会遇到以下报错:

D:\dataddd\DragGAN<strong>></strong>conda env create -p D:\dataddd\DragGAN\ENV python=3.10 -f D:\dataddd\DragGAN\environment.yml
Collecting package metadata (repodata.json): done

Solving environment: failed

ResolvePackageNotFound:
- scipy=1.11.0
- cudatoolkit=11.1

我们为了解决这个错误,打开DragGAN项目根目录下的environment.yml文件,删除scipycudatoolkit的版本号,修改后的文件内容如下,然后保存。

name: stylegan3
channels:
  - pytorch
  - nvidia
dependencies:
  - python >= 3.8
  - pip
  - numpy>=1.25
  - click>=8.0
  - pillow=9.4.0
  - scipy
  - pytorch>=2.0.1
  - torchvision>=0.15.2
  - cudatoolkit
  - requests=2.26.0
  - tqdm=4.62.2
  - ninja=1.10.2
  - matplotlib=3.4.2
  - imageio=2.9.0
  - pip:
    - imgui==2.0.0
    - glfw==2.6.1
    - gradio==3.35.2
    - pyopengl==3.1.5
    - imageio-ffmpeg==0.4.3
    # pyspng is currently broken on MacOS (see https://github.com/nurpax/pyspng/pull/6 for instance)
    - pyspng-seunglab

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda env create -p D:\dataddd\DragGAN\ENV python=3.10 -f D:\dataddd\DragGAN\environment.yml

初始化Conda环境,防止后续操作可能存在报错等问题。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate D:\dataddd\DragGAN\ENV

执行如下命令,安装该项目的相关依赖库。

pip install -r requirements.txt

三、模型下载

模型说明

官方目前一共提供了8个模型,每个模型的具体对应内容如下:

  • 猫类
    • stylegan2-afhqcat-512×512.pkl
    • stylegan2-car-config-f.pkl
    • stylegan2-cat-config-f.pkl
  • 人类
    • stylegan_human_v2_512.pkl|附加模型
    • stylegan2-ffhq-512×512.pkl
  • 马类
    • stylegan2_horses_256_pytorch.pkl
  • 狗类
    • stylegan2_dogs_1024_pytorch.pkl
  • 大象
    • stylegan2_elephants_512_pytorch.pkl
  • 景观
    • stylegan2-lhq-256×256.pkl|附加模型
  • 狮子
    • stylegan2_lions_512_pytorch.pkl

其中的附加模型,是官方额外提供的两个模型,使用方式与其它模型一致。

官方下载

此项目已内置官方模型下载脚本,在CMD窗口内分别执行如下两行命令即可。但是该脚本执行过程中,大概率会下载出错。

cd /d D:\dataddd\DragGAN
.\scripts\download_model.bat

如果您想尝试StyleGAN-HumanLandscapes HQ(LHQ)数据集模型,那么还需要前往谷歌网盘下载以下两个模型。

本站所提供的模型包含官方的所有模型,下载后将该模型移动至项目的根目录下即可使用。

MSVC配置

Visual Studio

在安装之前我们还需要下载Visual Studio,否则必然会报错。

下载地址:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)

下载并安装Visual Studio 2022时,然后勾选使用C++的桌面开发通过 Windows 平台开发两个选项,最后点击安装,等待完成即可。

源码修改

我们已经安装完成MSVC之后,需要配置一下已安装的环境路径。

首先找到你的安装目录,例如本站的MSVC安装目录如下,如果你的默认安装路径为C盘,那应该与本站差不多。

唯一不确定的因素是版本号的问题,其中14.36.32532是不确定的,自行翻找一下。

C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.36.32532\bin\Hostx64\x64

建议使用代码编辑器,打开.\DragGAN\torch_utils\custom_ops.py文件,从第29行开始,默认内容如下:

def _find_compiler_bindir():
    patterns = [
        'C:/Program Files*/Microsoft Visual Studio/*/Professional/VC/Tools/MSVC/*/bin/Hostx64/x64',
        'C:/Program Files*/Microsoft Visual Studio/*/BuildTools/VC/Tools/MSVC/*/bin/Hostx64/x64',
        'C:/Program Files*/Microsoft Visual Studio/*/Community/VC/Tools/MSVC/*/bin/Hostx64/x64',
        'C:/Program Files*/Microsoft Visual Studio */vc/bin',
    ]

我们需要做的是添加刚刚安装的MSVC路径至最后一行,修改后的样式如下:

def _find_compiler_bindir():
    patterns = [
        'C:/Program Files*/Microsoft Visual Studio/*/Professional/VC/Tools/MSVC/*/bin/Hostx64/x64',
        'C:/Program Files*/Microsoft Visual Studio/*/BuildTools/VC/Tools/MSVC/*/bin/Hostx64/x64',
        'C:/Program Files*/Microsoft Visual Studio/*/Community/VC/Tools/MSVC/*/bin/Hostx64/x64',
        'C:/Program Files*/Microsoft Visual Studio */vc/bin',
        'C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64'
    ]

修改完成后,保存文件。

启动方式

关于启动方式目前有两种,全部都是官方所提供的,一种是在浏览器中运行WebUI,另外一是通过本地GUI界面来运行的。

值得注意的一点是,站长使用的时候不知道是不是个人错觉问题,站长认为GUI启动方式在运算时的速度更快,但是WebUI并没有GUI版本好用。

GUI

在CMD中执行如下命令,强制切换至项目目录文件夹。

cd /d D:\dataddd\DragGAN

激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。

conda activate D:\dataddd\DragGAN\ENV

此时我们执行如下代码,尝试运行并加载所有模型。

python visualizer_drag.py checkpoints/stylegan2_lions_512_pytorch.pkl checkpoints/stylegan2-ffhq-512x512.pkl checkpoints/stylegan2-afhqcat-512x512.pkl checkpoints/stylegan2-car-config-f.pkl checkpoints/stylegan2_dogs_1024_pytorch.pkl checkpoints/stylegan2_horses_256_pytorch.pkl checkpoints/stylegan2-cat-config-f.pkl checkpoints/stylegan2_elephants_512_pytorch.pkl checkpoints/stylegan_human_v2_512.pkl checkpoints/stylegan2-lhq-256x256.pkl

提示:如果你有看到这头狮子,而是报错信息,可以查看本文末尾的报错处理部分。

WebUI

在CMD中执行如下命令,强制切换至项目目录文件夹。

cd /d D:\dataddd\DragGAN

激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。

conda activate D:\dataddd\DragGAN\ENV

此时我们执行如下代码,尝试运行并加载所有模型。

python visualizer_drag_gradio.py

当你执行完上面的代码,将会需要等待加载片该,然后将会看到如下输出:

Microsoft Windows [版本 10.0.22621.1848]
(c) Microsoft Corporation保留所有权利

C:\Users\openA>cd /d D:\dataddd\DragGAN

D:\dataddd\DragGAN>conda activate D:\dataddd\DragGAN\ENV

(D:\dataddd\DragGAN\ENV) D:\dataddd\DragGAN>python visualizer_drag_gradio.py
File under cache_dir (./checkpoints):
['stylegan2-afhqcat-512x512.pkl', 'stylegan2-car-config-f.pkl', 'stylegan2-cat-config-f.pkl', 'stylegan2-ffhq-512x512.pkl', 'stylegan2-lhq-256x256.pkl', 'stylegan2_dogs_1024_pytorch.pkl', 'stylegan2_elephants_512_pytorch.pkl', 'stylegan2_horses_256_pytorch.pkl', 'stylegan2_lions_512_pytorch.pkl', 'stylegan_human_v2_512.pkl']
Valid checkpoint file:
{'stylegan2-afhqcat-512x512': './checkpoints\\stylegan2-afhqcat-512x512.pkl', 'stylegan2-car-config-f': './checkpoints\\stylegan2-car-config-f.pkl', 'stylegan2-cat-config-f': './checkpoints\\stylegan2-cat-config-f.pkl', 'stylegan2-ffhq-512x512': './checkpoints\\stylegan2-ffhq-512x512.pkl', 'stylegan2-lhq-256x256': './checkpoints\\stylegan2-lhq-256x256.pkl', 'stylegan2_dogs_1024_pytorch': './checkpoints\\stylegan2_dogs_1024_pytorch.pkl', 'stylegan2_elephants_512_pytorch': './checkpoints\\stylegan2_elephants_512_pytorch.pkl', 'stylegan2_horses_256_pytorch': './checkpoints\\stylegan2_horses_256_pytorch.pkl', 'stylegan2_lions_512_pytorch': './checkpoints\\stylegan2_lions_512_pytorch.pkl', 'stylegan_human_v2_512': './checkpoints\\stylegan_human_v2_512.pkl'}
Loading "./checkpoints\stylegan2_lions_512_pytorch.pkl"... Done.
()
{'z_dim': 512, 'c_dim': 0, 'w_dim': 512, 'img_resolution': 512, 'img_channels': 3, 'mapping_kwargs': {'num_layers': 8, 'embed_features': None, 'layer_features': None, 'activation': 'lrelu', 'lr_multiplier': 0.01, 'w_avg_beta': 0.995}, 'synthesis_kwargs': {'channel_base': 32768, 'channel_max': 512, 'num_fp16_res': 0, 'conv_clamp': None, 'architecture': 'skip', 'resample_filter': [1, 3, 3, 1], 'use_noise': True, 'activation': 'lrelu'}}
Setting up PyTorch plugin "bias_act_plugin"... Done.
Setting up PyTorch plugin "upfirdn2d_plugin"... Done.
D:\dataddd\DragGAN\ENV\lib\site-packages\gradio\components\image.py:390: UserWarning: The `style` method is deprecated. Please set these arguments in the constructor instead.
  warnings.warn(
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://15bd2ffa960870b3b4.gradio.live

This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)

当我们看到有两个网址被显示出来时,这就代表我们已经可以启动UI界面啦,我们可以通过两种方式打开WebUI。

# 本地URL
Running on local URL:  http://127.0.0.1:7860
# 公开URL
Running on public URL: https://15bd2ffa960870b3b4.gradio.live

比如站长打开http://127.0.0.1:7860,此时将会看到如下界面:

主界面与GUI是基本一致的,下面还有一些快速使用的帮助信息。

英文信息

Quick Start

  1. Select desired Pretrained Model and adjust Seed to generate an initial image.
  2. Click on image to add control points.
  3. Click Start and enjoy it!

Advance Usage

  1. Change Step Size to adjust learning rate in drag optimization.
  2. Select w or w+ to change latent space to optimize:
    • Optimize on w space may cause greater influence to the image.
    • Optimize on w+ space may work slower than w, but usually achieve better results.
    • Note that changing the latent space will reset the image, points and mask (this has the same effect as Reset Image button).
  3. Click Edit Flexible Area to create a mask and constrain the unmasked region to remain unchanged.

中文翻译

快速开始

  1. 选择所需的Pretrained Model(预训练模型),并调整Seed(种子)以生成初始图像。
  2. 点击图像添加控制点。
  3. 点击开始,享受吧!

高级用法

  1. 更改步长来调整拖动优化中的学习率。
  2. 选择ww+来更改优化的潜空间:
    • w空间上优化可能对图像产生更大的影响。
    • w+空间上优化可能比w空间慢,但通常可以获得更好的结果。
    • 请注意,更改潜空间将重置图像、点和遮罩(这与重置图像按钮的效果相同)。
  3. 点击编辑灵活区域,创建遮罩并限制未遮罩区域保持不变。

功能讲解

本站在下面讲解一下GUI方式启动的所有功能,因为GUIWebUI的功能基本上都差不多,所以只讲其一。

Network & latent:模型

  • Pickle:模型相关
    • Recent
      • 点击该按钮之后,将会自动弹出模型选择窗口,该窗口内的模型为我们刚刚所下载的模型列表,根据自身需要选择即可。
    • Browse…
      • 该按钮目前不可用,后续应该支持选择自定义模型路径。
  • Latent:姿态相关
    • Seed文本框
      • 也就是Latent后面的数值0,后面还有按钮,这里可以随意更改数据,当数据发生改变之后,中间预览区域的图像将会被更换,更换的类别与当前已加载的模型吻合。
    • Path to latent code
      • 用来输入模型代码的,好像和PTI自定义模型有关,目前还没太研究明白PTI这一块,下一篇会讲到此部分。
    • Load latent
      • 点击此按钮,将会载入上面已输入的模型代码。
    • Step Size
      • 每一步运算的动画变化幅度,建议保持默认。
    • Reset
      • 两种方式,WW+
      • w空间上优化可能对图像产生更大的影响。
      • w+空间上优化可能比w空间慢,但通常可以获得更好的结果。

Drag:交互控制

  • Drag:交互功能
    • Add point
      • 添加操作点,在图像窗口中点击两次,将会自动拖拽第一个交互点至第二个交互点,听起来可能有点模糊,后面站长会讲解。
    • Reset Point
      • 点击此按钮之后,将会清理所有已创建的可交互点。
    • Start
      • 开始运算
    • Stop
      • 停止运算
    • Setps
      • 已运算的次数
  • Mask:遮罩
    • Flexible area
      • 点击后在图像的主区域,鼠标将会变成笔刷,用来绘制运算图像时的影响区域。
    • Fixed area
      • 擦除已绘制的区域,可以理解为橡皮擦。
    • Rest mask
      • 重置遮罩,删除所有已绘制部分。
    • Show mask
      • 勾选该选项之后,将会显示所绘制的遮罩区域,否则不可见。
    • Radius
      • 遮罩画笔的笔刷大小
    • Lambda
      • 遮罩的羽化程度

Capture:捕获

  • Capture
    • 保存路径,默认为项目根目录下的_screenshots文件夹内。
  • Save Image
    • 保存当前图像
  • Save GUI
    • 将当前GUI界面进行截图,同样保存至所设置的保存目录下。

四、使用教程

其实上面已经讲解完了所有功能,关于遮罩部分就自行摸索吧。下面是关于最常用功能的展示,因为录制GIT或者视频占用的带宽和服务器资源实在太大了。DragGAN操作展示

常见问题

如果你在运行时遇到以下报错,那就是因为你的MSVC环境没有配置,从头看本篇教程,安装MSVC环境,然后添加custom_ops.py中的路径即可。

Traceback (most recent call last):
    File "D:\dataddd\DragGANWiz\renderer.py",line 112,in render
        self.init network(res,**args)
    File "D:\dataddd\DragGAN\viz\renderer.py",line 249,in init network
        w=G.mapping(z,label,truncation psi=trunc_psi,truncation cutoff=trunc cutoff)
    File "D:\dataddd\DragGAN\ENWlib\site-packages\torch\nn\modules\module.py",line 1501,in call_impl
        return forward call(*args,**kwargs)
    File "D:\dataddd\DragGAN\training\networks_stylegan2.py",line 247,in forward
        x layer(x)
    File "D:\dataddd\DragGAN\ENWlib\site-packages\torch\nn\modules\module.py",line 1501,in _call_impl
        return forward_call(*args,**kwargs)
    File "D:\dataddd\DragGAN\training\networks_stylegan2.py",line 125,in forward
        x bias act.bias act(x,b,act=self.activation)
    File "D:\dataddd\DragGAN\torch_utils\ops\bias_act.py",line 84,in bias_act
        if impl ='cuda'and x.device.type ='cuda'and init():
    File "D:\dataddd\DragGAN\torch_utils\ops\bias act.py",line 41,in init
        _plugin custom ops.get plugin(
    File "D:\dataddd\DragGAN\torch_utils\custom_ops.py",line 84,in get_plugin
        raise RuntimeError(f'Could not find MSVC/GCC/CLANG installation on this computer.Check_find_compiler_bindir()in "file)".')
RuntimeError:Could not find MSVC/GCC/CLANG installation on this computer.Check_find_compiler_bindir()in "D:\dataddd\DragGAN\torch_utils\custom_ops.py".

总结

你可能会发现,无法上传图像?我不能上传自定义图像,那安装之后有什么用?

其实自定义图片这个需要另一个功能,那就是PTI,安装部署PTI之后将可以通过PTI生成PKL模型,然后我们再用该模型进行拖拽控制。