StyleCLIP项目由以色列的耶路撒冷希伯来大学、特拉维夫大学和Adobe研究所共同完成,它用对比语言—图像预训练(CLIP)模型的力量,为StyleGAN2 图像处理开发一个基于文本的输入界面,利用StyleGAN2的潜在空间来操纵生成的StyleGAN2图像,而不需要人工去操作或修饰图像。简单地说,就是写一段文字,指导StyleGAN2生成具备指定特征的图像。
论文地址:https://arxiv.org/abs/2103.17249
Github项目:https://github.com/orpatashnik/StyleCLI
全局指向(Global Direction)这部分的开发工作,看起来与潜码向量优化、潜码映射器不同,它采用的是官方的基于tensorflow 1.14的StyleGAN2架构,因此建议重新创建一个虚拟环境,以方便调试和运行。
【原理简介】
全局指向(Global Direction)是基于这样一个假设:在共享向量空间中存在一个方向,其中图像的某个属性变化很大,而其他属性保持不变;如果能找到这个方向,我们可以使用一个指向这个方向的向量,把它作为风格编辑向量(即:全局指向)添加到待编辑图像向量中以实现图像风格的编辑。
论文中给出的方法是:取100个图像,对StyleGAN2输出的feature maps中的具体某一个channel,先求出其在100个图像上的平均值,保持其他channel不变,在该channel上分别加上正/负五倍均方差大小的扰动,对应生成100x2=200个图像,分别计算其在CLIP模型中的feature,算出100对图像feature的差值,并进行规格化,得到StyleGAN2输出的feature maps中的每一个channel变化时与图像CLIP语义的关联系数,即论文中提到的下面这个公式中的Δic:
这样,当输入一段有变化的CLIP文本时,首先生成图像CLIP语义的变化量,然后用这个变化量与上文提到的关联系数 Δic 相乘,得到StyleGAN2 feature maps中的每一个channel上的变化值,将该变化值与原始图片的feature maps相加,最后用预训练模型生成风格编辑后的新图像。
通过对源代码的分析,论文中用到了26个StyleGAN2的feature maps,它们是:
#0 [<tf.Tensor 'G_synthesis_1/4x4/Conv/add:0' shape=(?, 512) dtype=float32>,
#1 <tf.Tensor 'G_synthesis_1/4x4/ToRGB/add:0' shape=(?, 512) dtype=float32>,
#2 <tf.Tensor 'G_synthesis_1/8x8/Conv0_up/add:0' shape=(?, 512) dtype=float32>,
#3 <tf.Tensor 'G_synthesis_1/8x8/Conv1/add:0' shape=(?, 512) dtype=float32>,
#4 <tf.Tensor 'G_synthesis_1/8x8/ToRGB/add:0' shape=(?, 512) dtype=float32>,
#5 <tf.Tensor 'G_synthesis_1/16x16/Conv0_up/add:0' shape=(?, 512) dtype=float32>,
#6 <tf.Tensor 'G_synthesis_1/16x16/Conv1/add:0' shape=(?, 512) dtype=float32>,
#7 <tf.Tensor 'G_synthesis_1/16x16/ToRGB/add:0' shape=(?, 512) dtype=float32>,
#8 <tf.Tensor 'G_synthesis_1/32x32/Conv0_up/add:0' shape=(?, 512) dtype=float32>,
#9 <tf.Tensor 'G_synthesis_1/32x32/Conv1/add:0' shape=(?, 512) dtype=float32>,
#10 <tf.Tensor 'G_synthesis_1/32x32/ToRGB/add:0' shape=(?, 512) dtype=float32>,
#11 <tf.Tensor 'G_synthesis_1/64x64/Conv0_up/add:0' sh