Drag Your GAN论文解读,基于点的交互式操作拖动到生成图像[DragGAN]

只需要鼠标的点击就可以自动修图的产品,火爆问世,可以说是超越PS,神一般的存在了,而且没有门槛,对于普通大众来说直接可以上手使用,这个是PS完全不具备的。更关键的是,这款产品跟PS明显区别在于,PS一般来说是做美化处理为主,而Drag Your GAN可以让眼睛真的睁开和闭上,嘴角上扬是可以露出牙齿的,姿态的改变跟真人在摆POSE一般,非常有趣。
大家可以点击下面两个视频感受下,如何神奇的修图:
DragGAN视频1
DragGAN视频2

因为这个DragGAN是基于StyleGAN2的模型,所以在看这篇文章之前,建议先看下StyleGAN系列,熟悉它们的架构:NVIDIA的StyleGAN、StyleGAN2、StyleGAN3系列论文解读,梳理基于风格的生成器架构
论文中的一张图开始介绍:

用户只需要点击图像上的几个手柄点(红点)和目标点(蓝点),我们的方法就会移动手柄点,精确到达相应的目标点。用户可以选择绘制灵活区域(较亮的区域)的掩码,保持图像的其余部分固定。这种灵活的基于点的操作可以控制许多空间属性,如姿态、形状、表情和跨不同对象类别的布局。

主要有三大特点:
    1.灵活性:能够控制生成对象的位置、姿态、形状、表情、布局等不同的空间属性
    2.精度:能够对空间属性进行高精度控制
    3.通用性:适用于不同的对象类别,而不局限于某一类别

对于GAN可以分为无条件GAN和有条件GAN

1.无条件的GAN:将低维随机采样的潜在向量转换为逼真图像的生成模型。它们使用对抗性学习进行训练,可用于生成高分辨率的逼真图像,比如大多数像StyleGAN这样的GAN模型,这些模型不能直接对生成的图像进行可控编辑。

2.有条件的GNA:对图像和分割图的联合分布进行建模,然后计算与编辑后的分割图相对应的新图像,从而实现可以编辑。

虽然目前的文字生成图片很火,但是语义控制输出,也只能在一个粗糙的高级语义层面的控制,不能对图像的空间属性进行细粒度控制。
总的来说这篇论文还是比较简单,DragGAN模型主要分为两大块:运动监督和手柄点跟踪。

1、Motion Supervision运动监督

基于特征的运动监督,驱动手柄点(红点)向目标位置(蓝点)移动,从而在这个迭代过程中进行特征的更新。具体来说,运动监督是通过移位特征补丁损失来实现的,从而优化了潜在代码(同StyleGAN系列中讲述的隐藏代码)
DragGAN还允许用户选择性地绘制感兴趣的区域,以执行特定于区域的编辑。由于DragGAN不依赖于任何额外的网络,如RAFT,它实现了高效的操作,在大多数情况下,单块RTX 3090 GPU上只需要几秒钟。这允许实时的交互式编辑会话,用户可以在不同的布局上快速迭代,直到实现所需的输出。
跟简单地应用扭曲的传统形状变形方法不同,我们的变形是在GAN的学习图像流形上执行的,它倾向于服从底层对象结构。例如,我们的方法可以使闭塞的内容产生幻觉,就像狮子嘴里的牙齿一样,也可以随着物体的刚性而变形,就像马腿的弯曲一样。
视频中看到的那样,还给用户开发了一个GUI,通过简单地单击图像来交互式地执行操作。定性和定量比较都证实了我们的方法优于UserControllableLT(通过转换GAN的潜在向量实现基于点的编辑,但是它的这种方法只支持在图像上拖动单个点进行编辑,而不能很好地处理多点约束。另外,控制不精确,即编辑后往往达不到目标点),下面是两者的对比图:

2、Point Tracking手柄点跟踪

在特征空间中通过最近邻搜索进行点跟踪。然后重复这个优化过程,直到手柄点达到目标点。为了跟踪手柄点,一种显而易见的方法是在连续帧之间进行光流估计(估计两幅图像之间运动场的经典问题),比如用的最广的RAFT。还有一种就是采用“particle video”,粒子视频流获得视频序列中的特征点运动轨迹,并对获得的运动轨迹进行提取,然后利用最长共同子序列LCS(Longest Common Subsequence)聚类轨迹,得到运动的主流方向,这种方法叫做PIPsPIPs考虑跨多个帧的信息,因此比以前的方法更好地处理远距离跟踪。
而在DragGAN中,我们将不使用任何上述方法或额外的神经网络的情况下对GAN生成的图像进行点跟踪。因为GAN的特征空间具有足够的判别性,使得跟踪可以简单地通过特征匹配来实现。尽管我们的方法很简单,但是在实验中的结果,优于最先进的点跟踪方法,包括RAFT和PIPs。 

3、整个迭代流程

我们先来看输入图像经过上述的两大块(运动监督和点跟踪)的处理之后,得到新的图像的过程图:

初始化图像,通过GAN的生成器生成潜在编码w,通过鼠标点击手柄点(红点)和需要达到位置的目标点(蓝点),然后运动监督将驱动手柄点往目标点位置靠近,并更新潜在编码w为w'。在这个过程中我们需跟踪手柄点位置,通过特征空间具备的判别性来更新手柄点的位置,当然这个时候也会同时更新迭代潜在编码,一直迭代直到目标点为止或者满意了也可提前终止。
更详细的介绍,如下图:

运动监督是通过在生成器的特征映射上移动补丁损失来实现,我们通过最近邻搜索对相同的特征空间进行点跟踪。
其中手柄点定义为\begin{Bmatrix} p_i = (x_{p,i},y_{p,i}) | i = 1,2,..., n \end{Bmatrix} 

对应的目标点\begin{Bmatrix} t_i = (x_{t,i}, y_{t,i}) | i = 1,2,...,n \end{Bmatrix}

4、技术实现细节

4.1、运动监督

先来看下运动监督是怎么具体操作的,需要用到哪些数学公式。
我们考虑StyleGAN2的第6块之后的特征映射F,由于在分辨率和判别性之间有良好的权衡,在所有特征中表现最好。我们通过双线性插值来调整F的大小,使其具有与最终图像相同的分辨率。其中想了解双线性插值的,刚好可以看下前几天发的一篇博文:LIBSVM与LIBLINEAR支持向量机库对模式识别与回归的可视化代码实践
当然对于双线性插值,熟悉StyleGAN3就更清晰了,简单来说就是在X,Y方向相邻像素之间分别采样,然后在采样点之间插入数值。这个也是StyleGAN3对StyleGAN2的一个改进,前面的链接也有介绍,欢迎查阅。

将一个手柄点p_i移动到目标点t_i,我们的想法是监督p_i外围的一小块区域(红圈)朝p_i向前移动一小步(蓝圈)。我们使用\Omega _1(p_i,r_i)表示到p_i的距离小于r_1的像素,则我们的运动监督损失公式:

其中F(q)表示F在像素q处的特征值,F_0为初始图像对应的特征映射,d_ip_it_i的归一化向量,公式: d_i=\frac{t_i-p_i}{||t_i-p_i||_2}

另外在给定二进制掩码M的情况下,我们保持没有掩码的区域固定,重建损失表示为第二项。

4.2、点跟踪

我们在前面也说了,不使用光流估计和粒子视频流,因为在GAN中的判别特征能够很好地捕获密集的对应关系,因此可以通过特征补丁中的最近邻搜索有效地进行跟踪。我们将初始处理点的特征表示为f_i = F_0(p_i)
我们将p_i周围的补丁表示为:\Omega _2(p_i,r_2)=\begin{Bmatrix} (x,y) | |x-x_{p,i}|<r_2 , |y-y_{p,i}|<r_2 \end{Bmatrix}

然后在\Omega _2(p_i,r_2)中搜索f_i的最近邻,就可以得到跟踪点p_i,公式:

通过这种方式,更新p_i,就能够一直跟踪手柄点了,对于多个手柄点,我们对每个点应用相同的过程即可。

4.3、超参设置

代码是基于PyTorch实现的,目前暂时还没有开放源码。难道要到月末最后一天去了?哈哈
我们使用Adam优化器对FFHQ的潜在代码进行优化,步长为0.002,AFHQCat,LSUN Car和其他数据集的步长设置为0.001。超参数设置为 λ=20,r_1=3,r_2=12。在我们的实现中,当所有手柄点与相应目标点的距离不超过d像素时,我们停止优化过程,其中,不超过5个手柄点将d设置为1,否则设置为2。

来一张跟PIPs和RAFT的对比实验图:

可以看到我们的方法更精确地跟踪了点,从而产生更精确的编辑。

5、缺陷

前面都显示了DragGAN的强大,当然也会存在缺点,就是当创建偏离训练分布的人体姿势可能导致伪影。此外,无纹理区域的手柄点在跟踪过程中有时会出现更大的漂移,这个一般是在纹理丰富区域效果就会呈现的很好。如下图: 

 

虽然我们的方法具有一定的外推能力,可以在训练图像分布之外创建图像,比如下面这张图,一个极度张开的嘴巴和一个大轮子。但是由于分布在了训练数据集之外,这样容易失真,可以看到车轮变形了。

好了,更多细节可以查阅原论文,相对来说这篇是在StyleGAN2基础上的改进,熟悉StyleGAN的来看就显得很清晰明了。

引用:

论文地址:Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold
源码说是6月发布,眼看6月已快过完,暂时还没有公布源码:
github:https://github.com/XingangPan/DragGAN

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

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

相关文章

【yarn】 ‘husky install‘ fails if ‘.git‘ directory does not exists解决方法

问题描述 环境&#xff1a;win10 yarn 1.22.19 问题&#xff1a;在使用yarn安装前端依赖时&#xff0c;yarn install 出现错误: .git can’t be found (see https://git.io/Jc3F9) error Command failed with exit code 1. 截图 原因分析 根据设计&#xff0c;husky安装必…

开启visual studio,git for windows 疯狂占用内存的解决

1、开启visual studio&#xff0c;git for windows 疯狂占用内存的解决 最近开启visual studio写代码的时候&#xff0c;IDE总是会莫名奇妙的卡住然后闪退&#xff0c;今天打开任务管理器看了下原因&#xff0c;发现是visual studio所占磁盘内存不断疯涨&#xff0c;每秒几十M…

【软件设计原则】系统设计面试基础:CAP 与 PACELC

什么是 CAP 定理以及 PACELC 如何扩展它&#xff1f; 在分布式系统中&#xff0c;可能会发生不同类型的故障&#xff0c;例如&#xff0c;服务器可能会崩溃或永久故障&#xff0c;磁盘可能会损坏导致数据丢失&#xff0c;或者网络连接可能会丢失&#xff0c;导致系统的一部分无…

Java字符串比较的方法(3种)

1.equals()方法 equals()方法将两个字符串每个字符是否相同进行逐一比较&#xff0c;若相同返回true反之返回false&#xff0c;对于字符的大小写也在检查范围内&#xff0c;equals()方法格式如下&#xff1a;str1.equals(str2); 程序实例 public class Demo {public static voi…

【C语言督学营 第十八天】考研408排序大题初探(将排序思想融入题目)

文章目录 题目一分析代码实战 题目二分析代码实战 补充(快排与归并)数据结构大题注意点&#xff01;&#xff01;&#xff01;(评分标准) 题目一 分析 (1&#xff09;算法的基本设计思想 由题意知&#xff0c;将最小的nl2个元素放在Ai中&#xff0c;其余的元素放在A2中&#x…

JavaScript--改变 HTML 的值

要改变 HTML 元素的值&#xff0c;可以使用以下方法&#xff1a; 1.使用元素节点的 innerText 属性来改变元素的文本内容。 例如&#xff1a;element.innerText 新的文本内容; 2.使用元素节点的 innerHTML 属性来改变元素的 HTML 内容。 例如&#xff1a;element.innerHTML …

《分布式中间件技术实战:Java版》学习笔记(三):Redis实现点赞、取消赞功能

用户在发布内容&#xff08;包括博客、想法、日记等等&#xff09;时&#xff0c;后台数据入库后&#xff0c;要往Redis的有序集合添加一条分数为0的记录。这个有序集合是用来对内容点赞量做排序的。同时&#xff0c;可以记录用户操作日志。 Override public String insertArt…

react使用SVGA特效 常用api

下载插件 npm install svgaplayerweb --save react中代码 import React, { useEffect } from react; import SVGA from svgaplayerweb const Svga () > {const bofang () > {var player new SVGA.Player(#demoCanvas);//创建实例var parser new SVGA.Parser(#demo…

AR增强现实技术解决企业远程协作需求

随着科技的不断发展&#xff0c;AR(增强现实)远程协同系统已经成为了一种新型的工作方式。这种系统利用AR技术将虚拟信息叠加到现实世界中&#xff0c;从而实现异地高效协作。 由广州华锐互动开发的AR远程协同系统&#xff0c;广泛应用于各个行业的远程协作场景中&#xff0c;…

Pycharm专业版连接远程GPU服务器+xshell7和xrtp7下载

这篇博客就带大家手把手用pycharm连接远端服务器&#xff0c;用服务器上的GPU跑代码。其中有很多雷点&#xff0c;都一一帮大家踩了&#xff0c;所以这也是一篇避雷篇。文章附pycharm专业版下载链接&#xff0c;xshell7和xrtp7的下载和使用说明&#xff0c;希望可以给大家带来帮…

js手动画平滑曲线,贝塞尔曲线拟合

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"…

postgresql 数据库 重建索引 所需时间测试

postgresql 数据库 重建索引 所需时间测试 文章目录 postgresql 数据库 重建索引 所需时间测试前言测试前准备重建索引前数据库状态测试计划重建索引命令测试开始1.先对表2进行测试2. 表3测试3. 表1测试 &#x1f308;后记 前言 众所周知&#xff0c;postgresql数据库使用久了…

layui入门

layui入门 一.ayui简介1.简单易用2.组件丰富3.高度定制化4.响应式布局5.轻量灵活 2.layui的入门基础操作3.登录实例4.注册实例 一.ayui简介 Layui&#xff08;流行音 “layui”&#xff0c;来自“领域的模块化”&#xff09;是一款前端UI框架&#xff0c;专注于提升 Web 开发效…

解决microsoft windows 恶意软件删除工具 占用内存高

1、winR快捷键&#xff0c;输入regedit&#xff0c;按回车键进入注册表编辑器 2、定位到 \HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\ 并创建新项MRT 3、 新建DWORD(32)值&#xff0c;命名为DontOffer ThroughWUAU,数值数据为1; 4、以管理员身份运行命令提示符&#x…

论文(1)——大家说SCI的一区二区和CCF中A类B类是什么意思?

文章目录 引言问题描述问题解决CCF 和A、B、C类CCF注意事项 SCI和一区、二区如何判定你找的论文所属的会议或期刊是几区或者几类&#xff1f;使用特定的网站查询使用浏览器插件 一年之内的应该投什么刊物&#xff1f; 总结参考 引言 已经研一暑假了&#xff0c;周围很多人已经…

【测试开发】Junit 框架

目录 一. 认识 Junit 二. Junit 的常用注解 1. Test 2. Disabled 3. BeforeAll 4. AfterAll 5. BeforeEach 6. AfterEach 7. 执行测试 三. 参数化 1. 引入依赖 2. 单参数 3. 多参数 3.1 通过CSV实现 3.2 通过方法实现 4. 测试用例的执行顺序 四. 断言 五…

系统架构设计师-项目管理

目录 一、盈亏平衡分析 二、进度管理 1、WBS工作分解结构 2、进度管理流程 &#xff08;1&#xff09;活动定义 &#xff08;2&#xff09;活动排序 &#xff08;3&#xff09;活动资源估算&#xff1a; &#xff08;4&#xff09;活动历时估算&#xff1a; &#xff08;5&…

ASP.NET版本泄露【原理扫描】

如果想屏蔽 Server&#xff0c;X-AspNet-Version&#xff0c;X-AspNetMvc-Version 和 X-Powered-By&#xff0c;需要增加&#xff1a; <httpProtocol><customerHeaders><remove name"Server" /><remove name"X-AspNet-Version" />…

volatile原理剖析和实例讲解

一、是什么 volatile是Java的一个关键字&#xff0c;是Java提供的一种轻量级的同步机制&#xff0c; 二、能做什么 保证了不同线程对这个变量进行操作时的可见性&#xff0c;有序性。 三、可见性 可见性主要是指一个线程修改了共享变量的值&#xff0c;另一个线程可以看见…

PLC远程控制模块的通讯方式有哪些?工业网关ZP4000的功能与特点

在工业场景中&#xff0c;我们PLC通常采用有线的方式进行数据通讯&#xff0c;这种通讯方式距离受到局限&#xff0c;随着科技进步发展&#xff0c;人们更依赖于远程控制&#xff0c;以无线通讯的方式能够以更低成本的方式实现PLC远程控制管理。 在不同区域的PLC场景中&#x…