DragGAN图像生成原理与实现

news2024/11/29 1:56:55

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模型是什么呢

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

Dog

在这里插入图片描述
实现如上面视频那样符合用户需求的视觉内容通常需要对生成对象的姿态、形状、表情和布局具有灵活和精确的可控性。在现有的方法通过手动注释的训练数据或先前的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.coloradmin.cn/o/590129.html

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

相关文章

衡量有效的质量保证过程的10个基本指标

作者 | Tania Zhydkova 在开发的世界中&#xff0c;有一个永恒的规则&#xff0c;那就是你无法改进无法衡量的东西。当然&#xff0c;这条规则也适用于质量保证。 所生产软件的阵列呈指数级增长&#xff0c;这意味着保证质量所需的测试覆盖率也在以同样的程度增长。这也导致了…

浅谈Web渗透测试

目录 背景介绍 漏洞挖掘 渗透测试 个人看法 Web 渗透测试方法构想 PTES 简介 Web “PTES” 前期交互 信息收集 漏洞建模 漏洞分析 渗透利用 测试报告 Web渗透测试实例 前期交互 信息收集 漏洞建模 漏洞分析 渗透利用 报告 本文包括 背景介绍&#xff0c;We…

上传作品并投票的小程序微信中的微信投票微信小程序

现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情&#xff0c;又可以让商家和企业实现推广的目的&am…

IDEA 创建 Springmvc 项目

一、概述 在18年的时候就开始接触 SpringBoot &#xff0c;然后就一直在使用它。众所周知 SpringBoot 内嵌 Tomcat&#xff0c;后续再也没有单独新建过Web 项目。作为IDEA 的用户&#xff0c;总想要用它来建一个Web 项目自己跑一跑&#xff0c;但建项目不是我最终目的~~ &…

为什么那么多人劝退软件测试?月薪1万以上的就别点进来了

2023年已经过了快一半了&#xff0c;今天跟大家聊一聊软件测试薪资这个话题 和大家说一句掏心窝的话&#xff1a;直到现在&#xff0c;软件测试依旧是寒门改变命运的一个最佳选择之一&#xff0c;要不是怕被喷&#xff0c;我都想把之一去掉&#xff0c;因为想了半天&#xff0…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

uni-app生命周期有哪些?怎么理解?

uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f; uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f; 文章目录 uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f;前言一、什么是生命周期函数&#xff1f;二、uni-app生命周期分类总结 前言 UNI-APP学习系…

Spring概述、Spring的优势和体系结构

Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和 AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层 Sprin…

【重磅】“饶派杯”XCTF车联网安全挑战赛明日开赛!

2023年5月31日&#xff0c;由江西省委网信办、江西省工信厅、上饶市人民政府主办的“饶派杯”XCTF车联网安全挑战赛即将重磅开赛。来自国内外知名高校、自动驾驶汽车企业和科研院所的21支CTF精英战队齐聚上饶&#xff0c;聚焦车联网安全行业的典型漏洞及风险&#xff0c;面向车…

借助chatgpt做一个pdf转word的小工具

因 中午我在一篇公众号文章中发现了一个名为 pdf2docx 的 Python 包&#xff0c;可以将 PDF 文件转换成 Word 文件。但是&#xff0c;这个包不支持将图片型 PDF 转换成 Word&#xff0c;而且需要自己编写代码来实现转换功能。 于是我想&#xff0c;将这个包制作成一个小工具&a…

企业仓库管理系统的设计与实现(ASP.NET,SQL)

开发环境&#xff1a;Microsoft Visual Studio 数据库&#xff1a;Microsoft SQL Server 程序语言&#xff1a;asp.NET(C#)语言 本系统的开发使各大公司所的项目管理更加方便快捷&#xff0c;同时也促使项目的管理变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作。…

食物储藏信息管理系统的设计与实现(ASP.NET,SQLServer)

需求分析 食物储藏信息管理系统是一个典型的数据库开发应用程序&#xff0c;由基础信息维护、用户信息维护、食物提醒管理、用户管理、食物管理、系统管理、食物储藏等功能模块组成。 具体功能实现如下&#xff1a; 食物管理&#xff1a;食物管理部门自行添加食物&#xff0c;可…

华为OD机试真题B卷 Java 实现【24点游戏算法】,附详细解题思路

一、题目描述 给出4个1-10的数字&#xff0c;通过加减乘除运算&#xff0c;得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求&#xff0c;但每个数字仅允许使用一次&#xff0c;且需考虑括号运算 此题允许数字重复&#xff…

Ubuntu22.04部署K8S1.27.2版本集群

一、设置主机名并在 hosts 文件中添加条目 1、登录节点使用 hostnamectl 命令设置 hostname #在master中&#xff1a; 172.18.10.11 $ sudo hostnamectl set-hostname "k8s-master" #在work1节点中&#xff1a; 172.18.10.12 $ sudo hostnamectl set-host…

“百亿生态”背后,拼多多的初心

哈佛商学院教授、“颠覆性创新”理论的提出者克莱顿克里斯坦森&#xff0c;在《繁荣悖论》中将创新分为三类&#xff1a;第一类是效率创新&#xff0c;即生产更便宜、更优质的产品&#xff1b;第二类是持续性创新&#xff0c;即不断对产品进行改进&#xff1b;第三类是市场创造…

cuda编程学习——卷积计算CUDA、Pytorch比较 干货向(六)

前言 参考资料&#xff1a; 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 CUDA编程&#xff1a;基础与实践 樊哲勇 参考B站&#xff1a;蒙特卡洛加的树 文章所有代码可在我的GitHub获得&#xff0c;后续会慢慢更新 文章、讲解视频同步更新公众《AI知识物语》&#…

勿踩,电商实时聊天常见错误

实时聊天现在在电商企业与SaaS行业已经是必备的服务&#xff0c;他的实施很简单&#xff1a;您找到适合您的工具&#xff0c;将其打开并将其放在所有客户都可以看到的地方。但是无休止的互动冲击&#xff0c;措辞不佳或沟通不畅的问题&#xff0c;客户的24/7期望&#xff0c;在…

【Apache网页与安全优化】

一.介绍 在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的配置已经不适用当今互联网时代。为了适应企业需求&#xff0c;就需要考虑如何提升Apache的性能与稳定…