生成器的输入是一个低维向量,输出是一张图片。向量
的每一维可能对应着图像的某个特征,改变
的值就可以调整图像内容。那么:
1. 对于一张已有的生成图像,如何得到它对应的向量?
2. 又如何知道中的每个元素/维度对应着图像中哪个特征?
3. 该维度是以怎样的具体值控制着该特征的表现呢?
回答1:利用GAN+Autoencoder的结构得到。如下图所示:已有生成器(同时相当于解码器),加入一个编码器将现有图像编码至
,然后由生成器解码还原,减小重建误差,这就是一个Autoencoder的结构;生成器/编码器是固定的(因为我们的目的是找到用该生成器产生该图片所需要的编码
),同时由于编码器作用接近判别器(判别器输出标量,编码器输出向量而已),因此编码器可以用训练好的判别器初始化(引入了GAN的结构),训练后编码器就可以由图像生成其对应的编码
。
回答2:通过比较某一特征不同的两组图片的向量,对组内所有的
求element-wise的均值,两组均值的结果做差求得控制该特征的
的维度。如下图所示:
表示长发的图片,
表示短发的图片,
分别表示它们对应的编码(
),对两组图片的
求均值(
或者
),做差后得到
,就表示了长发特征对应的
中的维度(这里
可能不是一个标量/一个维度吧,可能是多个维度的,长发特征是隐含在多个维度内共同作用的,当然最多不会超过
的维度)。
回答3:对短发的图片(下面的图中标错了),通过
得到编码向量后,加上之前的到的
就可以得到长发图像对应的编码
,给到同一个生成器就可得到长发图像了。进一步,通过缩放
应该可以控制头发长短了,这其实就是一个可以依据要求从
改变图像内容的方法。
应用:Editing Photos
假设有一组商品图片,想要在一定的条件/限制下生成与某个商品图类似的图片。如下图所示:在红色的限制下,从黑色的衣服生成样式基本不变的红色衣服图片。
首先利用训练好的生成器将所有图片映射到编码的空间,每一个图片就是该空间中的一个采样点,我们就在该空间内寻找想要的图像。将黑色衣服的图片输入生成器得到对应的编码
,以较小的半径在该
点周围采样(这个半径和具体采样的位置应该都和条件/限制有关),就应该得到符合限制的相近的红色衣服图像。至于为什么在编码空间内操作,应该是因为低维空间内更好采样吧,更容易找到需要的点(否则空间中只有极少极少的点是我们需要的)。
具体做法:
1. 直接在编码空间内寻找,其经过生成器产生的图像和输入图像接近(L为损失函数,可以是像素差,可以是分类器网络embedding的输出)。
2. 第二个方法就是本文开头的方法:GAN+Autoencoder。
3. 上面的方法一由于使用了Gradient Descent的方法优化,可能会出现陷入局部最小值的问题(该现象受初始值的影响),因此可以先利用这种GAN+Autoencoder的方法得到一个
的初始值(用现有图片和生成器训练编码器,然后把该图片输入编码器就会得到对应的
),然后再用方法一。此时要解的一个优化式子为:
找到要令
最小,
是判别函数,判断
是否符合限制条件;
要求编码
不能偏离原图片过多,保证了内容的相似性;
越大越好,保证生成的图片真实。