【深度学习】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这篇论文的全部内容了,如有问题,还望指出,阿里嘎多!
在这里插入图片描述

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

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

相关文章

【零基础学数据结构】链表

目录 1.链表的概念 ​编辑 2.链表的雏形 ​编辑 3.链表的组成 ​编辑 4.链表代码 4.1创建节点 4.2链表的打印 4.3链表的尾插 4.4链表的头插 4.5链表的尾删 4.6链表的头删 4.7链表的查找 4.8链表在指定位置之前插⼊数据 4.9链表在指定位置之后插⼊数据 4.9-1删除pos节点 4.9…

Python(11):网络编程

文章目录 一、一些基本概念二、软件的开发架构(c/s架构和b/s架构)三、OSI模型四、socket套接字编程1.socket编程过程2.python中的socket编程 一、一些基本概念 来了解一些网络的基本概念 名词解释IP(互联网协议地址)IP用来标识网…

基于Java+SpringBoot+vue+node.js的图书购物商城系统详细设计和实现

基于JavaSpringBootvuenode.js的图书购物商城系统详细设计和实现 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各…

OpenCV——SUSAN边缘检测

目录 一、SUSAN算法二、代码实现三、结果展示 OpenCV——SUSAN边缘检测由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、SUSAN算法 Susan边缘检测是一种经典的边缘检测算,它由Susan Smith…

Spring Cloud+Uniapp 智慧工地云平台源码 智慧工地云平台AI视频分析应用

目录 AI应用与环境治理 设备管理与危大工程 塔吊安全监管 智慧工地APP端 智慧工地硬件设备 智慧工地主要功能模块 智慧工地可以通过以下几个方面为建筑行业赋能: 1.提高工程效率 2.提高工程安全性 3.提高工程质量 4.提高工程管理效率 绿色施工 质量管理…

面试算法-174-二叉树的层序遍历

题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 解 class Solut…

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用 1、什么是亲和性?2、节点亲和性(Node Affinity)2.1 硬性节点亲和性规则(required)…

【Linux】进程的优先级环境变量

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 进程的优先级2.1 什么是优先级2.2 为什么要有优先级2.3 优先级的查看方式2.4 对优先级调整 3. 命令行参数4. 环境变量4.1 环境变量与配置文件4.1.1 环境变量初步介绍4.1.2 配置文件 4.2 更多环境变量4.3 整…

SpringBoot删除菜品模块开发(SpringMVC分割参数、事务管理、异常处理、批量删除)

需求分析与设计 一:产品原型 在菜品列表页面,每个菜品后面对应的操作分别为修改、删除、停售,可通过删除功能完成对菜品及相关的数据进行删除。 删除菜品原型: 业务规则: 可以一次删除一个菜品,也可以批…

【Zabbix】zabbix 软件监控

使用zabbix监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态 利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控…

MongoDB 初识

1.介绍 什么是Mong MongoDB是一种开源的文档型数据库管理系统,它使用类似于JSON的BSON格式(Binary JSON)来存储数据。与传统关系型数据库不同,MongoDB不使用表和行的结构,而是采用集合(Collection&#x…

家庭网络防御系统搭建-虚拟机安装siem/securityonion网络连接问题汇总

由于我是在虚拟机中安装的security onion,在此过程中,遇到很多的网络访问不通的问题,通过该文章把网络连接问题做一下梳理。如果直接把securityonion 安装在物理机上,网络问题则会少很多。 NAT无法访问虚拟机 security onion虚拟…

从零搭建部署最新AI系统源码ChatGPT网站AI绘画系统,图文详细搭建部署教程文档,Suno-AI音乐生成大模型

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持…

(八)C++自制植物大战僵尸游戏植物基类讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 在植物大战僵尸游戏中,最重要的两个类别就是植物与僵尸。植物可以对僵尸进行攻击,不同的植物攻击方式千差万别,但是不同植物又有许多相同的属性。在基类(父类&#xf…

【C语言基础】:预处理详解(二)

文章目录 一、宏和函数的对比二、#和##运算符2.1 #运算符2.2 ##运算符 三、#undef四、命令行定义五、条件编译六、头文件的包含1. 头文件包含的方式2. 嵌套文件包含 上期回顾: 【C语言基础】:预处理详解(一) 一、宏和函数的对比 宏通常被应有于执行简单…

数图智慧零售解决方案,赋能零售行业空间资源价值最大化

数图智慧零售解决方案 赋能零售行业空间资源价值最大 在激烈的市场竞争中,如何更好地提升空间资源价值,提高销售额,成为行业关注的焦点。近日,NIQ发布的《2024年中国饮料行业趋势与展望》称,“在传统零售业态店内&…

单片机STM32中断与事件的区别

【转】1-单片机STM32---中断与事件的区别 - Engraver - 博客园 (cnblogs.com) 路径不同,处理方式不同,是否有程序不同,是否有cpu参与不同。 事件是比中断更新的升级产物。

3_2Linux中内核级加强型火墙的管理

### 一.Selinux的功能 ### 观察现象 ①当Selinux未开启时 在/mnt中建立文件被移动到/var/ftp下可以被vsftpd服务访问 匿名用户可以通过设置后上传文件 当使用ls -Z /var/ftp查看文件时显示"?" ps auxZ | grep vsftpd 时显示: - root 8546 0.0 0.0 26952 …

【QT+QGIS跨平台编译】181:【QGIS+Qt跨平台编译】—【错误处理:找不到_DEBUGA】

点击查看专栏目录 文章目录 一、找不到_DEBUGA二、原因分析三、错误处理 一、找不到_DEBUGA 报错信息: 二、原因分析 采用了非UNICODE: DEFINES - UNICODE没法识别 _DEBUGA 但可以识别 _DEBUG 三、错误处理 修改 _DEBUGA 为 _DEBUG

简单的车牌号识别

目录 处理流程与界面各接口编写时遇到的一些问题上传图片识别结果标签显示中文 处理流程与界面 首先点击“上传图片”按钮,可以选择文件夹中含有汽车车牌的图片,并显示在“图片框”中。 点击“检测车牌”按钮,会先对“图片框”中即含有汽车车…