【深度学习】AI修图——DragGAN原理解析

2024-04-16 13:20

本文主要是介绍【深度学习】AI修图——DragGAN原理解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、前言

上一篇,我们讲述了StyleGAN2。这一篇,我们就来讲一个把StyleGAN2作为基底架构的DragGAN。DragGAN的作用主要是对图片进行编辑,说厉害点,可能和AI修图差不多。这篇论文比较新,发表自2023年

原论文:Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold

参考代码:https://github.com/skimai/DragGAN

视频:AI修图——DragGAN原理解析-哔哩哔哩

演示(随意选择红点,让红点对应位置的像素移动到蓝点):

demo

2、DragGAN运行原理:

前置知识:StyleGAN(请确保你已经知道这个模型)

DragGAN模型的原理,是构建在StyleGAN的基础上。以下,为StyleGAN的模型图

在这里插入图片描述

首先,你要有一个训练好的StyleGAN,然后通过该模型,获得一个风格信息w latent Code。接着,用这个风格信息合成图像,如上图的演示,得到狮子的图像。

接着,我们在狮子图像上,选择数量对等的红色点(初始点)和蓝色点(目标点),每一个红色点周围的像素点慢慢移动到对应蓝色点的位置,从而达到修图的效果

在这里插入图片描述

3、实现方法

DragGAN使用的是StyleGAN2,所里里面的风格信息记作w+ latent Code

StyleGAN2的w+ latent Code代表的是风格信息。对图像位置进行移动等等,其实就是风格信息的修改,因此,DragGAN其实就是通过优化w来实现图像的变化。并且,作者通过实验,发现这种空间属性的变化,主要由前6层的w+ latent Code控制,所以作者只优化前6层的w+。

除此之外,作者通过衡量合成网络特征图之间的差异来判断是否初始点达到了目标点。(为了方便,以下所有的w都表示w+)

来看具体流程

①对生成的图像狮子,其有对应风格信息 w latent Code。在图像上选择红色点(初始点,记为p)跟蓝色点(目标点,记为t)。

②找到256x256分辨率的输出特征图(feature map),然后通过双线性插值的方法,将分辨率采样成1024x1024(假设狮子的像素是1024)。如下图的Feature,记为F

在这里插入图片描述

③把在狮子的红色点p和蓝色点t,也同样标记在Feature中,记为 F ( p ) F(p) F(p) F ( t ) F(t) F(t),计算 p p p指向 t t t的方向向量 d = t − p ∣ ∣ t − p ∣ ∣ 2 d=\frac{t-p}{||t-p||_2} d=∣∣tp2tp(分母是对向量归一化).

④在F§这个位置点,画一个半径为 r 1 r_1 r1的红色小圆,取特征图F里面位置在圆内的所有像素点(红色区域),记其中某一个像素点为 q i q_i qi,并把这个像素点根据方向向量移动,即 F ( q i + d ) F(q_i+d) F(qi+d)

⑤最小化 ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i + d ) ∣ ∣ 1 ||F(q_i).detach()-F(q_i+d)||_1 ∣∣F(qi).detach()F(qi+d)1。detach代表 F ( q i ) F(q_i) F(qi)不反向传播,这会激励 q i + d q_i+d qi+d这个位置的值尽量等于 F ( q i ) F(q_i) F(qi),而 F ( q i ) F(q_i) F(qi)代表的刚好是狮子对应位置的特征,所以更新之后会产生移动

⑥对于红色圆区域内的所有点,我们希望它都朝着d的方向移动,所以有最小化
∑ q i ∈ Ω 1 ( p , r 1 ) ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i + d ) ∣ ∣ 1 \sum\limits_{q_i\in \Omega_1(p,r_1)}||F(q_i).detach()-F(q_i+d)||_1 qiΩ1(p,r1)∣∣F(qi).detach()F(qi+d)1
​ 其中 Ω \Omega Ω表示的是红色圆, q i q_i qi表示属于圆内的像素点。

⑦在实际中,可能不止有一个红色点和蓝色点,可能存在n个,所以
∑ j = 1 n ∑ q i ∈ Ω 1 ( p j , r 1 ) ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i + d j ) ∣ ∣ 1 \sum\limits_{j=1}^n\sum\limits_{q_i\in \Omega_1(p_j,r_1)}||F(q_i).detach()-F(q_i+d_j)||_1 j=1nqiΩ1(pj,r1)∣∣F(qi).detach()F(qi+dj)1
⑧DragGAN还允许用户选择图像哪些区域不变,哪些区域改变,则设定区域不变性
∑ j = 1 n ∑ q i ∈ Ω 1 ( p j , r 1 ) ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i + d j ) ∣ ∣ 1 + λ ∣ ∣ ( F − F 0 ) ∗ ( 1 − M ) ∣ ∣ 1 \sum\limits_{j=1}^n\sum\limits_{q_i\in \Omega_1(p_j,r_1)}||F(q_i).detach()-F(q_i+d_j)||_1 +\lambda||(F-F_0)*(1-M)||_1 j=1nqiΩ1(pj,r1)∣∣F(qi).detach()F(qi+dj)1+λ∣∣(FF0)(1M)1
​ 其中M是一张与特征图F一样大的矩阵,取值0或1,0代表图像的这个区域不改变,1代表可改变。

⑨对上面的损失函数进行优化更新w风格信息,得到新的 w ′ w' w,新的特征图 F ′ F' F。由于梯度下降和方向向量d的正则化的原因,并不能使初始点p一步到位走到目标点t,所以需要从新的特征图 F ′ F' F找到初始点p已经走到哪里了,我们记初始点为在原始特征图上为 f i = F 0 ( p i ) f_i=F_0(p_i) fi=F0(pi)

⑩取新的特征图 F ′ F' F,在初始点p这个位置画一个变长为 r 2 r_2 r2红色正方形(图中第二个特征图),把正方形内的像素点与 F 0 ( p i ) F_0(p_i) F0(pi)作最近邻搜索,长得最像的那个就是皮卡丘,将其作为新的初始点,即
p i : = arg ⁡ min ⁡ q i ∈ Ω 2 ( p i , r 2 ) ∣ ∣ F ′ ( q i ) − f i ∣ ∣ 1 p_i:=\mathop{\arg\min}\limits_{q_i\in\Omega_2(p_i,r_2)}{||F'(q_i)-f_i||_1} pi:=qiΩ2(pi,r2)argmin∣∣F(qi)fi1
: = := :=表示将右边的所得最小对应变量值赋给等式左边

迭代更新,最终使得初始点到达点t点,结束

看不明白?那就看视频吧,文字所能传达的信息有限。我尽力了,私密马赛

4、结束

以上就是DragGAN这篇论文的全部内容了,如有问题,还望指出,阿里嘎多!
在这里插入图片描述

这篇关于【深度学习】AI修图——DragGAN原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908902

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

解析 XML 和 INI

XML 1.TinyXML库 TinyXML是一个C++的XML解析库  使用介绍: https://www.cnblogs.com/mythou/archive/2011/11/27/2265169.html    使用的时候,只要把 tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.

AI儿童绘本创作

之前分享过AI儿童绘画的项目,但是主要问题是角色一致要花费很长的时间! 今天发现了这款,非常奈斯! 只需输入故事主题、风格、模板,软件就会自动创作故事内容,自动生成插画配图,自动根据模板生成成品,测试效果如下图。 变现方式:生成儿童绘本发布到各平台,吸引宝妈群体进私域。  百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全