虽然最近扩散模型飞速发展,并产生了令人十分惊喜的逼真图像效果,然而,自然语言无法对图像的空间属性进行细粒度控制,文本条件方法主要用于高级语义编辑。此外,当前的扩散模型推理较慢,因为它们需要多个去噪步骤。
因此,通过 GAN 作为图像编辑的思路,仍是一种行之有效的方法,基于 GAN 的学习生成图像流形,做出更加逼真的输出。比如在官方 Demo 中,作者轻触鼠标,一拖一拽,让狗狗微笑、让猫咪”Wink”、让倒影拉长、让太阳升起……完美贴合现实世界的物理结构和物理逻辑。
根据论文中的介绍,DragGAN 是一种用于直观基于点的图像编辑的交互方法。利用预先训练的 GAN 来合成不仅精确跟随用户输入的图像,而且停留在真实图像的流形上。与之前的许多方法相比,是一个不依赖于特定领域的建模或辅助网络的通用框架。
这是基于两种新方法实现的:一是对隐编码的优化,这些隐编码增量地将多个抓取点移动到它们的目标位置;二是通过点跟踪过程来准确地跟踪抓取点的轨迹。这两个组件利用 GAN 中间特征图的判别质量来进行图像变形,实现交互性能。
目前已经证明,此方法在基于 GAN 的操作中优于最先进的方法,并为使用生成先验的强大图像编辑开辟了新的方向。而对于未来的工作,作者计划将基于点的编辑扩展到 3D 生成模型。
DragGAN简介
深度生成模型,如生成对抗网络(GANs),在合成随机逼真图像方面取得了前所未有的成功。在现实世界的应用中,这类基于学习的图像合成方法对合成视觉内容的可控性有着重要的功能要求。
例如,社交媒体用户可能希望调整随意拍摄照片中人物或动物的位置、形状、表情和身体姿势;专业电影预可视化和媒体编辑可能需要高效地创建具有特定布局的场景草图;汽车设计师可能希望交互式地修改他们的设计形状。为了满足这些多样化的用户需求,理想的可控图像合成方法应具备以下特性:
1)灵活性:能够控制生成对象或动物的位置、姿势、形状、表情和布局等不同空间属性;
2)精确性:能够以高精度控制空间属性;
3)普适性:适用于不同的对象类别,而不仅限于特定类别。尽管先前的方法只满足这些特性中的一两个,但我们在本研究中旨在同时实现它们。
大多数先前的方法通过先前的3D模型来实现GANs的可控性。因此,这些方法无法推广到新的对象类别,通常只能控制有限的空间属性范围,或者在编辑过程中提供很少的控制。最近,文本引导的图像合成引起了人们的关注,然而,文本引导在编辑空间属性方面缺乏精确性和灵活性。例如,它无法用于按指定像素数量移动对象。
为了实现GANs的灵活、精确和通用的可控性,我们在本工作中探索了一种强大但较少探索的基于点的交互式操作。具体而言,我们允许用户在图像上点击任意数量的控制点和目标点,目标是使控制点达到其对应的目标点。如图1所示,这种基于点的操作允许用户控制不同的空间属性,并且与对象类别无关。
本地部署
项目的源代码在 XingangPan/DragGAN: Official Code for DragGAN,如果你希望本地运行,可以参考里面附带的指引。对于 GPU 设备,我的测试里 8GB 显存应该足以运行了。 先 Clone 源代码:
git clone https://github.com/XingangPan/DragGAN
源码里有 conda 的 environment.yml
,可以拿 Conda 的方式创建虚拟环境;但没有附带 requirements.txt
。如果你希望使用 pip 安装依赖,据我测试,应该需要安装的依赖有:
pip install torch torchvision Ninja gradio huggingface_hub hf_transfer
使用以下命令下载模型:
# 下载 human 模型
wget -O DragGAN/checkpoints/stylegan_human_v2_512.pkl --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1dlFEHbu-WzQWJl7nBBZYcTyo000H9hVm' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1dlFEHbu-WzQWJl7nBBZYcTyo000H9hVm" && rm -rf /tmp/cookies.txt
# 下载更多类型的模型
cd DragGAN && sh scripts/download_model.sh
然后直接运行
cd DragGAN && python visualizer_drag_gradio.py
即可用 Gradio 打开;或者参考官方的 README 执行 visualizer_drag.py
Google Colab云端
这里选择的是 Google Colab,门槛只需要一个 Google 账号。注意,运行时一定要选 GPU 类型的。
搭建之前,首先要开启科学上网环境,并且已经打开Google Colab官方网站,登录账号
Google Colab可以在浏览器窗口中运行DragGAN。只需要在在Notebook设置中选择GPU并运行安装代码,然后运行演示代码块。
下图就是通过设置原点和目标点,点击“Drag it”(通过“Setup Handle Points”菜单),选择一个模型和图像来测试DragGAN。
代码在这里(有中文的部署文档哦):
请登录后查看评论内容