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()),得到目标所需的编辑图像

相关推荐
m4Rk_几秒前
【论文阅读】Agent 记忆机制(22):FluxMem——根据对话结构动态选择记忆组织方式
论文阅读·人工智能·学习
YHL6 分钟前
🤖 Agent 智能体开发实战 · RAG 实战 —— 从零搭建检索增强生成系统
人工智能
ambition23715 分钟前
WorkBuddy迁移至D盘完整操作指南
人工智能
科技圈快迅35 分钟前
在机场与高铁站:智能服务机器人正在深度对接业务系统,实现从信息孤岛到移动服务窗口的转变
大数据·人工智能·机器人
小企鹅么么44 分钟前
【AI应用开发工程师】第七章:Agent 工程与实践
人工智能
CIO_Alliance1 小时前
AI+iPaaS解决方案:跨系统业务流程自动化助力企业AI化转型
运维·人工智能·自动化
综合资讯1 小时前
2026年打开设备ETF的产品清单:八只同类,两只能买
人工智能·科技·芯片·半导体·科创
声讯电子1 小时前
A-59 双麦双通道语音处理模块:重新定义全双工通话的极限性能
人工智能·语音识别·ai降噪·usb接口·回音消除
菜鸟‍1 小时前
【论文学习】Frontiers in Physics 2024 || Cap2Seg:基于文本描述生成的 COVID-19 医学图像分割性能提升方法
人工智能·学习
陕西企来客1 小时前
生成式引擎优化(GEO)行业白皮书:从流量分配到认知占有的战略跃迁
人工智能·算法·机器学习·技术好geo优化