生成器的输入是一个低维向量,输出是一张图片。向量的每一维可能对应着图像的某个特征,改变的值就可以调整图像内容。那么:
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的方法得到一个的初始值(用现有图片和生成器训练编码器,然后把该图片输入编码器就会得到对应的),然后再用方法一。此时要解的一个优化式子为:
找到要令最小,是判别函数,判断是否符合限制条件;要求编码不能偏离原图片过多,保证了内容的相似性;越大越好,保证生成的图片真实。