StyleCLIP global direction详解

2023-10-19 20:36

本文主要是介绍StyleCLIP global direction详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

StyleCLIP中global direction的实现原理

  • 前言
  • 第一阶段:预计算
  • 第二阶段:计算与文本的对应关系

前言

基于的假设:
CLIP中虽然图像特征与文本特征不存在一一对应的关系,但相同的语义下,图像特征的变化方向与文本特征的变化方向是一致的,如下图右侧的man,woman所示
核心观点:
可以将stylegan中隐空间的语义变化方向投影至CLIP空间(下图左下角),这样若命令为man->woman,则可以首先计算CLIP中文本特征对应的变化方向 Δ t \Delta t Δt,再计算该 Δ t \Delta t Δt与CLIP中间中所有图像变化方向 Δ i \Delta i Δi的共线程度(即变化方向一致),取出共线程度大的 Δ i \Delta i Δi,可以反推是stylegan中哪些维度改变得到的该变化。
实际应用时,如下图中的黑框所示,找到文本变化与stylegan隐空间特征的对应后,就能在逆向化的隐向量 s s s上施加对应的改变,得到与文本语义一致的图像编辑结果。
在这里插入图片描述

第一阶段:预计算

这一阶段的核心思想:将stylegan中隐空间每个维度数值变化对应的图像语义变化方向投影至CLIP空间。
主要代码位于 SingleChannel.py中,计算完成后得到文件 fs3.npy (shape: [num_layers * channels_per_layer, 512]),该文件保存的内容可以理解为:单独改变一个latent code的channel,其对应图像的语义改变在CLIP空间中的方向。
举例:
因为stylegan的latent code具备良好的可分离性,因此假设对于每个channel值的改变都对应了一个图像特征的改变,例如layer1_channel2的值增加2,对应的图像是头发长一点;多个channel改变时可以得到high-level特征的变化,例如layer1_channel2的值增加2,layer3_channel1的值减少3,总体的效果就是一个图像变成女性。将每个channel变化带来的图像差异用clip编码,就能量化每个latent code中每个channel对应的语义

生成latents

这一步主要是stylegan中的东西,即将高斯噪声分布映射到style space中,style space中的latent code,具备了比较好的特征可分离性,可编辑性,以及可插值性等,比较适合图像编辑任务。
对应代码:Manipulator.GenerateS()

整体流程如下图所示,实际代码中用了100张图做计算(为了计算均值与标准差),下图以1张图为例,即随机噪声为(1,512)
在这里插入图片描述

计算均值与标准差

对应代码:Manipulator.GetCodeMS()
计算的是,所有图片在layer_i, channel_j上的均值与标准差,如下图所示,以三张图像为例,计算layer0,channel1上的均值和标准差
(26, 100, 512)-->GetCodeMS()-->(26, 512)
(ps:实际上有的层dim=256或更小,实际计算时是一层一层来的)
在这里插入图片描述

计算 Δ i \Delta i Δi

核心思想如下图所示,下图是以某一层layer为例,假设该layer的dim=512:
在这里插入图片描述
对于每一层,每个channel的初始值为上一步预先计算好的channel均值。为了得到每一个channel会对最终的图像语义有怎样的影响,采用了如下的方案:
1、遍历每一层,取出layer
2、每次改变layer的某一个channel,以channel=0为例
3、改变方法为,对于该channel分别加上与减去 5*标准差,其余channel的值保持均值不变(manipulate.py Manipulator.MSCode())
4、用上一步得到的两个latents: s 0 + s_0^+ s0+, s 0 − s_0^- s0输入stylegan的生成器G,得到对应的图像
5、上述两个图像由CLIP的图像编码器进行编码,得到对应的特征: i 0 + i_0^+ i0+, i 0 − i_0^- i0 (SingleChannel.py GetImgF())
6、特征相减,得到图像改变对应在CLIP空间中的变化方向: Δ i 0 \Delta i_0 Δi0 (SingleChannel.py GetFs())

第二阶段:计算与文本的对应关系

计算命令文本( “person”->“person with smile”)的在CLIP空间中的变化方向(StyleCLIP.py GetDt())与第一阶段计算得到的图像变化方向的共线程度(StyleCLIP.py GetBoundary()),共线程度大的图像变化方向为我们需要的结果(而该结果由latent code每个channel改变值计算得到的),取出对应latent code change index,即可对任意的输入图像逆向化后,给latent code对应的index上施加变化(Manipulator.GenerateImg()),得到目标所需的编辑图像

这篇关于StyleCLIP global direction详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五