DragGAN图像生成原理与实现

DragGAN图像生成原理与实现

  • DragGAN模型是什么呢
  • 1. DragGAN背景介绍
  • 2. 模型方法
    • 2.1 算法原理
    • 2.1.1 Motion Supervision
    • 2.1.2 点跟踪
  • 3. 实现部署步骤
    • 3.1 安装PyTorch
    • 3.2 安装 DragGAN
    • 3.3 运行 DragGAN Demo
    • 3.4 功能介绍

在这里插入图片描述

项目地址:https://github.com/Zeqiang-Lai/DragGAN
论文地址:https://vcai.mpi-inf.mpg.de/projects/DragGAN/
代码地址:https://github.com/XingangPan/DragGAN

它说6月份发布
在这里插入图片描述

DragGAN模型是什么呢

简单来说就是可以通过用鼠标扮演手柄的角色,在图片中实现图像点拖拽,进而来实现人动物的五官,形态变换。如下图一样,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实现如上面视频那样符合用户需求的视觉内容通常需要对生成对象的姿态、形状、表情和布局具有灵活和精确的可控性。在现有的方法通过手动注释的训练数据或先前的3D模型来获得生成对抗网络(GANs)的可控性,但这往往缺乏灵活性、精确性和普适性,因此提出了DragGAN模型

DragGAN模型,探索了一种强大但鲜为人知的控制GANs的方法,即以用户交互的方式“拖动”图像中的任何点以精确达到目标点,如图1所示。为了实现这一目标,我们提出了DragGAN,它由两个主要组件组成:

  1. 基于特征的运动监督:驱动手柄点向目标位置移动
  2. 一种新的点跟踪方法,利用判别式生成器特征来不断定位手柄点的位置。通过DragGAN,任何人都可以对图像进行变形,并精确控制像素的位置,从而操纵姿态、形状、表情等。由于这些操作是在GAN的学习生成图像流形上执行的,它们倾向于在挑战性场景下产生逼真的输出,例如幻想遮挡内容和形变形状,同时保持对象的刚性。定性和定量比较证明了DragGAN在图像操作和点跟踪任务中相对于先前方法的优势。

这里的手柄点就是我们的鼠标点,通过鼠标点击需要拖拽的位置,进行向目标位置移动

1. DragGAN背景介绍

深度生成模型,如生成对抗网络(GANs),在合成逼真图像方面取得了重大进展。然而,在实际应用中,对合成图像内容的可控性是一个关键需求。为了满足用户的多样化需求,理想的可控图像合成方法应该具备灵活性、精确性和普适性。

先前的方法只能满足其中一些特性,因此我们的目标是在本研究中实现所有这些特性。先前的方法通常通过3D模型或依赖手动注释数据的监督学习来实现对GANs的可控性。然而,这些方法无法推广到新的对象类别,且在编辑过程中缺乏精确控制。最近,文本引导的图像合成引起了关注,但在编辑空间属性方面缺乏精确性和灵活性。

为了实现GANs的灵活、精确和通用的可控性,本研究探索了一种强大但较少被探索的交互式基于点的操作方法。我们允许用户在图像上选择手柄点和目标点,并旨在通过这些点使手柄点达到相应的目标点。这种基于点的操作方法允许用户灵活地控制空间属性,且不受对象类别的限制。

2. 模型方法

在这里,我们先简要的介绍一下图像生成模型中必备的基础知识 - 图像潜在空间向量

潜在空间向量:在StyleGAN中,潜在空间向量是一种表示图像特征的潜在变量。这些向量被用作输入,通过生成器网络来生成逼真的图像。潜在空间向量在StyleGAN中扮演着关键的角色,它们决定了生成的图像的外观、风格和特征。

潜在空间向量的每个元素都代表了生成图像的某种特征。通过修改潜在向量的不同元素,可以控制生成图像的各个方面,如颜色、纹理、形状等。这使得潜在空间向量成为一种强大的工具,可以实现对生成图像的可控编辑。

也可以说潜在空间就是图像在计算机视角下的特征表示

2.1 算法原理

在这里插入图片描述

在DragGAN算法流程概览如上图所示。

算法流程用一句话来说

先将原始的图像生成为潜在空间 w w w I ∈ R 3 × H × W I \in R^{3 \times H \times W} IR3×H×W,并通过Motion Supervision实现图像的拖拽交互转换,映射为新的潜在空间 w ′ w' w,并由潜在空间转换为生成后的图像

图像潜在空间的转换,其实就是每一个像素点的移动,转换。

在这里我们可以假设原始图像的潜在空间像素点为:
p i = ( x p , i , y p , i ∣ i = 1 , 2 , . . , n ) {p_i = (x_{p,i},y_{p,i}|i=1,2,..,n)} pi=(xp,i,yp,ii=1,2,..,n)

对应到交互转换后的潜在空间像素点为:
t i = ( x t , i , y t , i ∣ i = 1 , 2 , . . , n ) {t_i = (x_{t,i},y_{t,i}|i=1,2,..,n)} ti=(xt,i,yt,ii=1,2,..,n)
(即 𝒑𝑖 的对应目标点是 𝒕𝑖)。

目的是移动图像中的对象,使得这些点达到它们相应的目标点

还可以允许用户选择性地绘制一个二进制掩码 M,指示图像中可移动的区域。

DragGAN算法步骤包括两个子步骤

  1. Motion Supervision
  2. 点跟踪。

在Motion Supervision中,使用使控制点向目标
点移动的损失函数来优化潜在空间 w w w。经过一次优化步骤,我们得到一个新的潜在空间 w ′ w' w和一个新的图像 I ′ I' I。更新会导致图像中对象轻微移动。

需要注意的是,运动监督步骤只会使每个控制点向其目标点移动一小步,但具体步长不清楚,因为它受到复杂的优化动态的影响,因此对于不同的对象和部分来说是不同的

因此,我们更新控制点的位置 p i p_i pi,以跟踪对象上的相应点。这个跟踪过程是必要的,因为如果控制点(例如,狮子的鼻子)没有准确跟踪,那么在下一个运动监督步骤中,会监督错误的点(例如,狮子的脸),导致不期望的结果。在跟踪之后,我们基于新的控制点和潜在空间重复上述优化步骤。这个优化过程会一直持续,直到控制点 p i p_i pi达到目标点 t i t_i ti的位置,在我们的实验中通常需要30-200次迭代。用户也可以在任何中间步骤停止优化。编辑完成后,用户可以输入新的控制点和目标点,并继续编辑,直到满意为止。

2.1.1 Motion Supervision

如何计算GAN生成图像中二个点之间的损失呢

在这里插入图片描述

在计算损失中,论文提出了一种Motion Supervision损失。具体而言,使用StyleGAN2第6个块后的特征图F,它在所有特征中表现最好,因为在分辨率和辨别性之间取得了良好的平衡。我们通过双线性插值将F调整为与最终图像具有相同的分辨率,

然后通过将图中的(蓝色圆圈)围绕 p i p_i pi(红色圆圈)的一个小区域移动 t i t_i ti。我们使用 Ω 1 ( p i , r 1 ) \Omega_1 (p_i,r_1) Ω1(pi,r1)表示到 p i p_i pi的距离到 r 1 r_1 r1的像素点,然后我们的运动监督损失为:

L = ∑ i = 0 n ∑ q i ∈ Ω 1 ( p i , r 1 ) ∣ ∣ F ( q i ) − F ( q i + d i ) ∣ ∣ 1 + λ ∣ ∣ ( F − F 0 ) ⋅ ( 1 − M ) ∣ ∣ 1 L=\sum_{i=0}^n \sum_{q_i \in \Omega_1(p_i,r_1)} ||F(q_i)-F(q_i+d_i)||_1+\lambda||(F-F_0) \cdot (1-M)||_1 L=i=0nqiΩ1(pi,r1)∣∣F(qi)F(qi+di)1+λ∣∣(FF0)(1M)1

其中, F ( q ) F(q) F(q)表示q处F的特征值, d i = t i − p i ∣ ∣ t i − p i ∣ ∣ 2 d_i=\frac{t_i-p_i}{||t_i-p_i||_2} di=∣∣tipi2tipi是从 p i p_i pi指向 t i t_i ti的归一化向量(如果 t i = p i t_i=p_i ti=pi,则 d i d_i di=0),

F 0 F_0 F0是对应于初始图像的特征图。需要注意的是,第一项是在所有控制点 p i p_i pi上求和。由于 q i + d i q_i+d_i qi+di的分量不是整数,因此 F ( q i + d i ) F(q_i + d_i) F(qi+di)是通过双线性插值获得的。

如果给定了二值掩码M,就需要使用损失函数的第二项的重构损失来固定未被掩码覆盖的区域。在每个运动监督步骤中,使用此损失来优化潜在空间 w w w的一个步骤。 w w w可以在 w w w空间或 w + w^+ w+空间中进行优化。

2.1.2 点跟踪

在之前的Motion Supervision中,我们得到了一个新的潜在空间 w ′ w′ w,新的特征图 F ′ F′ F 和新的图像 I ′ I′ I。由于Motion Supervision步骤不能直接提供手柄点的精确新位置,我们的目标是更新得到每个手柄点 p i p_i pi,使其跟踪物体上的相应点。

因此,论文为GAN提出了一种新的点跟踪方法。其关键思想是GAN的判别特征很好地捕捉到了密集对应关系,论文通过在特征周围进行最近邻搜索来,找到最邻近的那个点,来有效地执行跟踪。

这里有点像卡曼滤滤波 sort目标跟踪一样,通过前后两帧检测框的中心点的距离来判断是否是同一个目标

具体而言,我们将初始手柄点的特征表示为 f i = F 0 ( p i ) f_i = F_0(p_i) fi=F0(pi)

p i p_i pi的周围点可以表示为
Ω 2 ( p i , r 2 ) = { ( x , y ) ∣ ∣ x − x p , i ∣ < r 2 , ∣ y − y p , i ∣ < r 2 } \Omega_2(p_i,r_2) = \lbrace (x,y)| \space |x − x_{p,i} | < r_2, |y − y_{p,i} | < r_2 \rbrace Ω2(pi,r2)={(x,y) xxp,i<r2,yyp,i<r2}

然后通过在 Ω 2 ( p i , r 2 ) \Omega_2(p_i,r_2) Ω2(pi,r2) 中搜索与 f i f_i fi 最近的邻居来获取跟踪点:

p i = a r g m i n q i ∈ Ω 2 ( p i , r 2 ) ∣ ∣ F ′ ( q i ) − f i ∣ ∣ 1 p_i=argmin_{q_i \in \Omega_2(p_i,r_2)} ||F′(q_i)-f_i||_1 pi=argminqiΩ2(pi,r2)∣∣F(qi)fi1

通过这种方式, p i p_i pi被更新以跟踪物体。对于多个手柄点,我们对每个点应用相同的过程。

大白话来说,我感觉原理就是,先通过对多个目标,多角度多形态拍摄,然后有监督的,学习这些变化,最后为了使每个图像生成出的图像每个五官位置细节都能对应上,用了一种最近邻的跟踪匹配算法

3. 实现部署步骤

项目环境要求python3.7

进入到终端环境中

conda create -n draggan python=3.7

3.1 安装PyTorch

激活一下刚刚创建的环境,输入以下指令即可

conda activate draggan

参考PyTorch的 官方安装教程
在这里插入图片描述
我的GPU环境是CUDA11.2
在这里插入图片描述

pip install torch torchvision torchaudio -f https://download.pytorch.org/whl/cu112/torch_stable.html

没有GPU的用户用这个指令安装

pip install torch torchvision torchaudio

3.2 安装 DragGAN

安装完成之后,我们安装DragGAN,这可以通过以下指令进行、

pip install draggan

3.3 运行 DragGAN Demo

你可以通过以下指令运行 DragGAN 的 Demo

python -m draggan.web

没有GPU的用户,使用

python -m draggan.web --device cpu

当出现这个网址的时候 http://127.0.0.1:7860 ,说明程序已经成功运行
在这里插入图片描述
将这个网址输入到浏览器里就可以访问到 DragGAN 的 Demo 了
在这里插入图片描述

3.4 功能介绍

界面功能介绍如下

在这里插入图片描述

选择模型:目前我们提供了10个模型(在web界面选择后会自动下载),不同模型输出图片分辨率,和对显存要求不一样,具体如下

模型信息汇总
在这里插入图片描述

  • 最大迭代步数:有些比较困难的拖拽,需要增大迭代次数,当然简单的也可以减少。
  • 设置拖拽点对,模型会将蓝色的点拖拽到红色点位置。记住需要在 Setup handle points 设置拖拽点对。
  • 设置可变化区域(可选):这部分是可选的,你只需要设置拖拽点对就可以正常允许。如果你想的话, 你可以在 Draw a mask 这个面板画出你允许模型改变的区域。注意这是一个软约束,即使你加了这个mask,模型还是有可能会改变超出许可范围的区域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/50468.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验六 UML建模工具应用

一、实验目的 1.掌握面向对象开发思想及实现机制 2.理解并掌握UML常用图&#xff08;重点&#xff1a;类、对象图、用例图&#xff09; 3.掌握并常见UML建模工具&#xff0c;并绘制UML各种图 二、实验准备与要求 1.StarUML(简称SU)&#xff0c;是一种创建UML类图&#xff0c…

【Android项目开发】聊天功能-主界面设计(对标企业需求)

文章目录 一、引言二、详细设计1、解决需求&#xff08;1&#xff09;图形问题&#xff08;2&#xff09;文本长度问题&#xff08;3&#xff09;时间转换问题 2、UI设计&#xff08;1&#xff09;主界面&#xff08;2&#xff09;适配器 3、Adapter适配器4、测试参数 三、附录…

软件建模概述 UML模型图

软件建模 什么是软件建模 将想法通过模型可视化地表达出来&#xff0c;方便记忆和进一步分析&#xff0c;方便团队/同事交流&#xff0c;口语交流容易失真。 软件建模体现了软件设计的思想&#xff0c;在需求和实现之间架起了一座桥梁&#xff0c;通过模型指导软件系统的具体…

ChatGPT-4竟已经学会说谎——聪明又危险的AI

时间回到2023年3月&#xff0c;OpenAI正式发表GPT-4的最新模型&#xff0c;除了展示聊天机器人如何完成各种任务&#xff0c;还在官网发了一份90多页报告&#xff0c;提及各项特性与可能存在的风险。同时&#xff0c;OpenAI为了检测它可能带来的“潜在的威胁”&#xff0c;而让…

前 Twitter CEO 炮轰 Web 3,马斯克也来“掺和一脚”

前 Twitter CEO 的 Jack Dorsey 今日又登上了外网头条&#xff0c;但与上个月宣布辞任时的祝福不同&#xff0c;这次 Jack Dorsey 引起了很大的争议&#xff1a;他连续发推批评 Web 3 及加密风投&#xff0c;引得许多加密行业人士不满并反驳。 “你们并不拥有 Web 3&#xff0…

马斯克特斯拉内部邮件火了:痛恨开会,少说黑话

金磊 羿阁 发自 凹非寺量子位 | 公众号 QbitAI 马斯克给员工的一封内部邮件火了。 鼓励员工拒绝开会、公司规定不合理可以不遵守……俨然一个为员工着想的好老板。 一开始人们还奇怪马斯克的画风怎么变这么快&#xff0c;后来才发现原来这是他6年前写的。 对象也不是推特员工&a…

对csdn inscode产品对工作3年内的程序员的体验改进与思考

前言&#xff1a; inscode 的初衷就 在线IDE运行环境 ai辅助 &#xff0c;能够通过云原生运行项目&#xff0c;帮助用户实现分享和学习创意。 InsCode支持AI编程,代码提问 、添加注释、优化代码应有尽有 inscode slogan 让你的灵感立刻落地 编程可以很有趣 InsCode 是一个无需…

20+ Prompt工具网站汇总;我用AI工具开了一家「无人公司」;如何10分钟上线一个AI导航网站;第一部AIGC中英双语图文辞典 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『MidJourney Prompt工具网站』加速生成与优化&#xff0c;持续更新中 ShowMeAI知识星球 | 资源标签&#xff1a;找工具 这是一个总结…

百度正式推出“文心一言”

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 备受瞩目的中国版ChatGPT&#xff0c;百度“文心一言”今日正式发布了。由百度老大李彦宏亲自主持&#xff0c;亲自讲解。可见“文心一言”已经在百度得到了举足轻重的地位。 也是从3月16日起&am…

百度语音接口调用详解

1.获取的API Key及Secret Key 1.1 在控制台中选择语音 1.2 进入到如下界面进行创建应用(“接口选择”这一项不用填写) 1.3 创建应用之后在“应用列表”中查看对应应用的AppID、API Key、Secret Key的值。 2.调用接口 2.1 pycharm中新建一个python文件(voice1.py)&#xff0c;…

API网关|JD|pinduoduoAPI接入

API网关是什么 在日常工作中&#xff0c;不同的场合下&#xff0c;我们可能听说过很多次网关这个名称&#xff0c;这里说的网关特指API网关&#xff08;API Gataway&#xff09;。字面意思是指将所有API的调用统一接入API网关层&#xff0c;由网关层负责接入和输出。 那么在什…

主控全志R58-百度小度在家智能音箱拆解

*本文转自我爱音频网 作为一个还处于萌芽阶段的产品&#xff0c;近期智能音箱迎来了一种新的形态演化阶段&#xff0c;市面上不断出现像亚马逊Echo Show、京东叮咚Play等搭载触摸显示屏的智能音箱&#xff0c;屏幕的加入&#xff0c;让音箱的交互逐渐变得更加变得可视化&#…

拥有自我意识的AI:AutoGPT | 得物技术

1.引言 ChatGPT在当下已经风靡一时&#xff0c;作为自然语言处理模型的佼佼者&#xff0c;ChatGPT的优势在于其能够生成流畅、连贯的对话&#xff0c;同时还能够理解上下文并根据上下文进行回答。针对不同的应用场景可以进行快速定制&#xff0c;例如&#xff0c;在客服、教育…

移动端IM产品RainbowChat[专业版] iOS端 v6.0版已发布!

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架&#xff0c;超轻量级、高度提炼&#xff0c;一套API优雅支持UDP 、TCP 、WebSocket 三种协议&#xff0c;支持iOS、Android、H5、标准Java平台&#xff0c;服务端基于Netty编写。 工程开源地址是&…

Android与IOS的相爱相杀之客户端测试

一、Android Android 是google公司主导的一个开放的手机操作系统&#xff0c;不过目前已经超过了手机的局限&#xff0c;而定位于移动设备的操作系统。目前用于手机,平板,智能电视,智能导航,智能手环,智能眼镜以及智能家居设备 底层以Linux内核工作为基础&#xff0c;由C语言开…

[iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端三)

前两篇介绍了如何通过XMPP来发送消息和接收消息,这一篇我们主要介绍如何来美化我们的聊天程序,看一下最终效果呢,当然源程序也会在最后放出 好了,我们来看一下我们写的程序 这里我们自定义了TableViewCell 一行是显示发布日期,一行是显示发送的消息,还有一个是背景 -(id…

写综述如何降低查重率?

经过好几个月的打磨&#xff0c;论文终于写完了&#xff0c;你以为这就完事了&#xff1f;MO!下面就来到了很重要的一步——查重。很多小伙伴写完后还蛮开心的&#xff0c;可是看到这查重率&#xff0c;很多人是欲哭无泪。辛辛苦苦写的综述怎可重复率那么高&#xff01;重复率过…

多智能体强化学习-G2ANet

Multi-Agent Game Abstraction via Graph Attention Neural Network 论文地址 代码地址 摘要 本文通过一个完整的图来建模智能体之间的关系&#xff0c;并创新性地提出一种基于两阶段注意力网络&#xff08;G2ANet&#xff09;的游戏抽象机制&#xff0c;表明两个智能体之间…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万&#xff0c;但其中&#xff0c;轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…

爬取古诗文网的推荐古诗

爬取古诗文网的推荐古诗 思路分析完整代码结果展示 思路分析 本次的主要目的是练习使用正则表达式提取网页中的数据。 该网站的推荐古诗文一共有10页&#xff0c;页码可以在URL中进行控制&#xff0c;比如说&#xff0c;下面的URL指的是第一页。 https://www.gushiwen.org/def…