DragGAN:interactive point-based manipulation on the generative image manifold

news2024/11/26 2:54:59

AI绘画可控性研究与应用清华美院课程的文字稿和PPThttps://mp.weixin.qq.com/s?__biz=MzIxOTczNjQ2OQ==&mid=2247484794&idx=1&sn=3556e5c467512953596237d71326be6e&chksm=97d7f580a0a07c968dedb02d0ca46a384643e38b51b871c7a4f89b38a04fb2056e084167be05&scene=21#wechat_redirectGAN“家族”又添新成员——EditGAN,不但能自己修图,还修得比你我都好 - 知乎作者 | 莓酊,链接: GAN新成员EditGAN 欢迎关注 @机器学习社区 ,专注学术论文、机器学习、人工智能、Python技巧首先想让大家猜一猜,这四张图中你觉得哪张是P过的?小编先留个悬念不公布答案,请继续往下看。 生…https://zhuanlan.zhihu.com/p/435400695StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery 阅读笔记 - 知乎论文:StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery code: https://github.com/orpatashnik/StyleCLIP 效果: 由于StyleGAN、StyleGAN2在生成图像上的优秀表现,越来越多的paper基于styleGAN来对图像…https://zhuanlan.zhihu.com/p/368134937https://ai.plainenglish.io/draggan-an-interactive-point-based-manipulation-technique-for-deep-generative-models-343c9be6cf6ehttps://ai.plainenglish.io/draggan-an-interactive-point-based-manipulation-technique-for-deep-generative-models-343c9be6cf6eAI 图像编辑技术 DragGAN 问世,该技术有哪些亮点功能值得关注? - 知乎出品人:Towhee 技术团队 作者:张晨DragGAN介绍合成满足用户需求的视觉内容往往需要对生成对象的姿势、…https://www.zhihu.com/question/602358712/answer/3045167594

DragGAN主要还是应用于图像编辑领域,在图像编辑领域之前有代表性的可控生成的作品包括editgan和styleclip,前者是通过分割图去定点控制生成图,后者是通过文本来实现控制,DragGAN将控制的方式变成了人工交互,通过点移动的方式,draggan的理论框架:点在图像空间中的移动对应于GAN的潜在空间中的移动,利用这一观察结果,制定了一个优化问题,旨在最小化用户输入和生成的图像之间的差异,该优化问题通过一种基于梯度的方法解决,该方法调整GAN的latent code以匹配用户的输入。DragGAN包括三个步骤,初始化:将用户输入映射到GAN的潜在空间中,跟踪涉及跟踪用户输入点在图像上的移动,优化涉及调整GAN的latent code已匹配用户输入。

1.abstract

生成对象的姿态、形状、表情和布局通常需要灵活和精确的可控性,现有的方法通过手动注释的训练数据或3D模型获得GAN的可控性,本文控制GAN的方式,即以用户交互的方式控制图像中的点,以精确达到目标点(sam中提供了点,框,mask和text),为了实现这一点,draggan由两个部分组成,1.基于特征的运动监督,驱动控制点向目标位置移动,2.一种新的点跟踪方法。

2.introduction

理想的可控图像合成应具备以下特点:1.灵活性,能够控制生成物体的不同空间属性,包括位置,姿态,形状,表情和布局;2.精度,它应该能高精度的控制空间属性;3.普遍性:能用于不同的对象类别,但不局限于某个特定类别。

        文本引导合成,在空间属性编辑上,文本引导缺乏精度和灵活性,无法将对象移动特定数量的像素,本文允许用户在图像上点击任意数量的处理点和目标点,目标是驱动处理点达到相应的目标点,这种基于点的操作允许用户控制歌各种空间属性,并且与对象类别无关。

        GAN的高保真,EditGAN不是对条件分布进行建模,而是通过寿险建模图像和分割图的联合分布,然后计算与编辑分割图相对应的新图像来实现定性编辑。UserControllabeLT。扩散模型在文本输入下可以实现丰富的图像,然后文本无法对图像进行细致的控制,因此受到高级语义编辑的限制。

DragGAN解决了两个问题,1.监督处理点向目标点移动,2.跟踪点移动。我们的技术建立在一个关键的观察上,即GAN的特征空间足够有区别性,可以实现运动监督和精确点跟踪,具体而言,通过一种shifted feature patch loss优化latent code,每次优化都会使处理点跟接近目标,在特征空间中执行最近邻搜索来进行点跟踪,这个过程不断重复,直到handle点到达目标点,还允许用户选择特定的区域进行编辑,不依赖任何额外的网络,在大多数情况下,在单个RTX 3090上一张图只需要几秒,其实也挺慢的。与传统的应用于图像上的变形warm操作不同,draggan的变形操作是作用在latent code上的,再通过latent code反演(生成器)到图像上。

        在视频中跟踪点的方法是通过连续帧之间的光流估计来实现。RAFT通过迭代计算估计光流,PIPs考虑了做个帧之间的信息,更好的处理长距离跟踪。本文在GAN生成的图像上进行点跟踪时,不需要任何神经网络,GAN的特征空间具有足够的区分度,可以通过特征匹配来简单的实现跟踪。

3.方法

stylegan,一个512维latent code通过mapping network被映射到一个中间潜在编码w,再将w送到生成器的不同层中来控制不同的属性。stylegan是后续几乎所有的可控图像编辑的pipeline,因为在产生的潜空间w被送入到不同生成器的层中认为可以改变生成图像的对应属性,stylegan的两个最主要的贡献,1.产生了latent space w,2.将w放入到生成器中每层结构中,真实数据不是高斯,输入是高斯,很难匹配起来,w是隐变量空间,可以是任意的空间,更好的匹配真实数据。

3.1 interactive point-based manipulation

红色是处理点,蓝色是目标点,运动监督,使用handle点向目标点移动的损失来优化latent code w,经过一次优化,得到一个新的latent code w‘和一个新的图像I‘,更新会导致图像中物体轻微移动,从复现代码看,是进行一次梯度优化就进行一次点追踪,运动监督仅将每个控制点向其目标移动一小步,但确切步长不知道,取决于复杂的优化过程,或者理解成使用梯度优化从w中找到一个合适的路到w',而w’即是图像上满足要求的图,找到了分布中和图对应的映射关系,损失之所以在图像层面是因为好算,在图像层面通过F,即生成器就可以拿到对应点的特征值,对应点特征值相减来控制点的不变形,前提就是点的不变性在隐空间中有对应关系,而stylegan的隐空间其实学到了很好的和原图对应的映射关系。更新控制点的位置以跟踪物体上的相应点,如果没有准确跟踪,在下一步运动监督中就会产生错误的监督,点追踪其实和运动监督不同的是,运动监督更新点后只计算loss,用隐形latent生成更好的图像,不更新点,且实际计算loss时,也不是只取一个点,而是以该点为中心,r=3,在点追踪中,取r=12,并且进行点更新,优化通常需要30-200次迭代。

3.2 motion supervision

        不依赖任何额外网络,关键思想是生成器的中间特征非常具有区分性,选择latent的前6组,并且在计算loss时,通过双线性差值恢复到原图,损失函数:

损失函数很简单,qi表示移动前原图所在点,qi+di表示移动后原图上点,F即是生成器函数,F(qi)是在qi点处产生的特征值,在前向时只会给latent一个梯度回传,后半部分是考虑mask之外的不要动,但实际并不一定,也会因为GAN产生新东西。

3.3 point tracking

使点变得更精准。

3.4 Implementation Details

生成能力来源于stylegan2,但是stylegan2是在特定场景数据中进行训练和生成的,FFHQ(人脸,1024x1024)、AFQCat(猫,512x512)、SHHQ(自然风景、城市风景、人类图像)、LSUN Car(汽车,256x256)、LSUN Cat、Landscapes HQ(风景图,山、沙漠和海洋)、microscope(显微镜下图)、Lion、Dog、Elephant。

代码:

wrapped_model=ModelWrapper()->
sample_z=torch.randn([1,512])->
latent,noise=wrapped_model.g_ema.prepare([sample_z])->
sample,F=wrapped_model.g_ema.generate(latent,noise)->
on_drag->
model:wrappped_model,
points:target:[887,484],handle:[721,493],
state:latent:1x18x512,noise:17,F:,sample:1x3x1024x1024
size:2014,
mask:
max_iters:20->
drag_gan->
r1,r2,lam,d=3,12,20,1->
F0=F.detach().clone()->1x128x1024x1024
latent_trainable=latent[:,:6,:].detach().clone().requires_grad_(True)->1x6x512
latent_untrainable=latent[:,6:,:].detach().clone().requires_grad_(False)->1x12x512
optimizer=torch.optim.Adam([latent_trainable],lr=2e-3)->
for iter in range(max_iter)->
optimizer.zero_grad()->
latent=torch.cat([latent_trainable,latent_untrainable],dim=1)->1x18x512
sample2,F2=g_ema.generate(latent,noise)->sample2:1x3x1024x1024,F2:1x128x1024x1024
pi,ti=handle_points[i],target_points[i]->[721,493],[887,484]
di=(ti-pi)/torch.sum((ti-pi)**2)->[0.0060,=0.0003]

for qi in neighbor(int(pi[0]),int(pi[0]),r1)->[718,490]
f1=bilinear_interpolate_torch(F2,qi[0],qi[1]).detach()->
f2=bilinear_interpolate_torch(F2,qi[0]+di[0],qi[1]+di[1])->
loss+=FF.l1_loss(f2,f1)->
loss+=((F2-F0)*(1-mask)).abs().mean()*lam->
loss.backward()->
optimizer.step()->

sample2,F2=gma.generate(latent,noise)->
pi=handle_points0[i]->
f0=bilinear_interpolate_torch(F0,pi[0],pi[1])->
f2=bilinear_interpolate_torch(F2,qi[0],qi[1])->
v=torch.norm(f2-f0,p=1)->
handle_points[i][0]=minx->
handle_points[i][1]=miny->

从代码上看,latent在梯度优化中是始终保持反向传播的,通过优化latent,在生成图上每次前进一个di,来实现运动监督。

stylegan2预训练数据集:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于html+css的图展示97

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

测量平差实习心得精选三篇(合集)

测量平差实习心得精选三篇 测量平差实习心得一为期两周的实习在不断地学习、尝试、修正的过程中圆满结束了。这次实习让我对许多问题有了深刻的认识。我认识到编程的重要性,认识到自学能力的重要性,认识到从书本到实践还有很长一段路要走。 熟练掌握一门…

探索C++非质变算法:如何更高效地处理数据

前言 📖欢迎大家来到小K的c专栏,本节将为大家带来C非质变算法的详解 🎉欢迎各位→点赞👏 收藏💞 留言🔔​ 💬总结:希望你看完之后,能对你有所帮助,不足请指…

随机数发生器设计(二)

一、软件随机数发生器组成概述 密码产品应至少包含一个随机比特生成器。 软件随机数发生器应遵循GM/T 0105-2021《软件随机数发生器设计指南》要求,使用SM3或SM4算法作为生成随机比特算法。 本文以SM3算法为例描述软件随机数发生器的一个设计实例。需要注意的是&a…

如何在华为OD机试中获得满分?Java实现【猜字谜】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

python爬虫——pandas的简单使用

pandas作为爬虫中最重要的包之一,我们要想学好爬虫,就必须要深入了解pandas 直接上代码 import pandas as pd import numpy as npdata pd.DataFrame(np.arange(16).reshape((4,4)),index[a,b,c,d],#如果不写列索引默认为0,1,…

基于html+css的图展示96

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【源码解析】Nacos配置热更新的实现原理

使用入门 使用RefreshScopeValue,实现动态刷新 RestController RefreshScope public class TestController {Value("${cls.name}")private String clsName;}使用ConfigurationProperties,通过Autowired注入使用 Data ConfigurationProperti…

警惕AI换脸技术:近期诈骗事件揭示的惊人真相

大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、读书和自媒体。 目录 1. deepswap 2. faceswap 3. swapface 总结 📣通知 近日,包头警方公布了一起用AI进行电信诈骗的案件,其中福州科技公…

医院PACS系统:三维多平面重建操作使用

三维多平面重建(MPR\CPR)界面工具栏: 按钮1:点击此按钮,用鼠标拖动正交的MPR定位线,可以动态浏览MPR图像。 按钮2:点击此按钮,按下鼠标左键在图像上作任意勾边,弹起鼠标…

python3.8安装rpy2

python3.8安装rpy2 rpy2是一个可以让r和python交互的库,非常强大,但是安装过程有些坎坷。 安装r语言 安装时首先需要安装r语言。 官网下载链接:https://www.r-project.org/ 选择与自己电脑相应的版本就好。 安装rpy2 然后需要安装rpy2库…

Radxa ROCK 5A RK3588S 开箱 vs 树莓派

Rock5 Model A 是一款高性能的单板计算机,采用了 RK3588S (8nm LP 制程)处理器,具有 4 个高达 2.4GHz 的 ARM Cortex-A76 CPU 核心、4 个高达 1.8GHz 的 Cortex-A55 内核和 Mali-G610 MP4 GPU,支持 8K 60fps 视频播放&#xff0c…

光力转债上市价格预测

光力转债 基本信息 转债名称:光力转债,评级:A,发行规模:4.0亿元。 正股名称:光力科技,今日收盘价:22.53元,转股价格:21.46元。 当前转股价值 转债面值 / 转股…

Redis的常用数据结构之字符串类型

redis中的数据结构是根据value的值来进行区别的,主要分了String、Hash、List、Set(无序集合)、Zset(有序集合) 字符串(String) String类型是redis中最基础的数据结构,也可以理解为…

Java基础面试题突击系列6

👩🏻 作者:一只IT攻城狮 ,关注我不迷路 ❤️《java面试核心知识》突击系列,持续更新… 💐 面试必知必会学习路线:Java技术栈面试系列SpringCloud项目实战学习路线 📝再小的收获x365天…

一、CNNs网络架构-基础网络架构(LeNet、AlexNet、ZFNet)

目录 1.LeNet 2.AlexNet 2.1 激活函数:ReLU 2.2 随机失活:Droupout 2.3 数据扩充:Data augmentation 2.4 局部响应归一化:LRN 2.5 多GPU训练 2.6 论文 3.ZFNet 3.1 网络架构 3.2 反卷积 3.3 卷积可视化 3.4 ZFNet改…

Integer源码

介绍 Integer是int类型的包装类,继承自Number抽象类,实现了Comparable接口。提供了一些处理int类型的方法,比如int到String类型的转换方法或String类型到int类型的转换方法,当然也包含与其他类型之间的转换方法。 Comparable提供…

3ds MAX 基本体建模,长方体、圆柱体和球体

3ds MAX基本页面如下: 生成新的几何体在右侧: 选择生成的对象类型即可,以下为例子: 1、长方体建模 选择建立的对象类型为长方形 在 任意一个窗口绘制,鼠标滑动 这里选择左上角的俯视图 松开鼠标后,可以…

单片机GD32F303RCT6 (Macos环境)开发 (二十九)—— GD32通过蓝牙透传模块 IAP升级

GD32通过蓝牙透传模块 IAP升级 1、思路 上一节手机App可以通过HC-08模块控制mcu的开锁,关锁的动作,那么我们是不是可以将mcu的升级文件通过hc-08模块发送给gd32,完成gd32程序的自升级呢? 2、命令协议 蓝牙透传模块每次只能发2…

Selenium的使用

一、基础 1、特点 selenium 是web中基于UI的自动化测试工具,它支持多平台、多语言、多浏览器,还有丰富的API。 2、原理 自动化脚本代码会创建一个http请求发送给浏览器驱动进行解析,浏览器驱动会操控浏览器执行测试,浏览器接着…