stylegan-encoder代码执行步骤和解释

目录

(一)从图片中抽取并对齐人脸:

(二)找到对齐人脸图片的latent表达:

(三)从对齐的人脸头像提取特征码并生成StyleGAN头像:

(四)用别人的特征码修饰你的照片特征码,并生成混合后的StyleGAN头像:


在github.com 上有若干开源项目提供了源代码,我选用的开源项目是:pbaylies/stylegan-encoder,对应的网址是:https://github.com/pbaylies/stylegan-encoder

他们把解决办法称之为“stochastic clipping”(随机剪裁),其基本原理大致是:
特征码(特征向量)中每个数值通常处于一个有限的空间内,论文指出通常分布在[-1.0, 1.0]这个变动区间内,因此可以从某个特征向量开始(甚至于从全零向量开始),

  1. 先把超出[-1.0, 1.0]范围的数值剪裁到[-1.0, 1.0]区间,
  2. 然后以这个特征向量为基准值(平均值),在[-1.0, 1.0]这个变动区间内,按正态分布的规律随机取得新向量,
  3. 计算新向量通过GAN生成的新图片与原图片之间的损失函数,然后用梯度下降的方法寻找使损失函数最小的最优解。

论文指出,他们可以使损失函数降低到0,这样就找到了真实人脸对应的“相当精确”的特征码。

在这个开源项目里,作者把变动区间调整为[-2.0, 2.0]。有读者指出更好的变动区间是 [-0.25, 1.5],在这个区间内能够取得更优的质量。

这个开源项目实现的效果如下图所示(左一为源图;中间是基于预训练ResNet从源图“反向”生成dlatents,然后再用这个dlatents生成的“假脸”图片;右一是经随机剪裁方法最终找到的人脸dlatens,并用这个人脸dlatents生成的极为接近源图的“假脸”)

下面介绍具体执行步骤:

在工作目录下,新建.\raw_images目录,并把需要提取特征码的真实人脸图片copy到这个目录下。

使用时,可以按一下步骤操作:

(一)从图片中抽取并对齐人脸:

python align_images.py raw_images/ aligned_images/

(二)生成对齐人脸图片的生成的图片和latent表达:

python encode_images.py aligned_images/ generated_images/ latent_representations/

(三)从对齐的人脸头像提取特征码并生成StyleGAN头像:

python encode_images.py aligned_images/ generated_images/ latent_representations/ --iterations 300 --use_mssim_loss 300

(四)用别人的特征码修饰你的照片特征码,并生成混合后的StyleGAN头像:

python mixed_image.py

注意:这里的mixed_image.py是https://blog.csdn.net/weixin_41943311/article/details/103348865下的复制的代码的我自己起的文件名


这个StyleGAN Encoder的核心代码结构如下图所示:

其中一些具体的修改步骤参考:https://blog.csdn.net/weixin_41943311/article/details/103030194

如果你有网关可以在goole等连接,那么上述步骤可以省略

备注:

(2.1)预训练的resnet50模型,用于从源图生成优化迭代的初始dlatents,
对应于karras2019stylegan-ffhq-1024x1024.pkl的反向模型finetuned_resnet.h5

(2.2)预训练的StyleGAN模型,用于从dlatents生成“假”的人脸图片
           预训练的StyleGAN人脸生成模型karras2019stylegan-ffhq-1024x1024.pkl

(2.3)预训练的VGG16模型,用于从图片提取features
用于评估图片相似性的vgg16_zhang_perceptual.pkl

  1. Pre-trained VGG16 network is used for transforming a reference image and generated image into high-level features space

反算潜码并重生成人脸这步主要使用encode-image.py

流程大概是:

  1. 使用反投影模型(RestNet50)将原始图片反投影出一个初始latent_code.
  2. 生成器模型(pkl文件)根据初始latent_code生成一张图片.
  3. 使用vgg16对比生成图和原图的差距作为loss,反向传播优化latent_code.
  4. 用生成器模型根据新的latent_code生成一张图片.

第3,4步默认迭代100次,可以用--iterations参数进行更改.
 

 

 


参考:https://blog.csdn.net/weixin_41943311

原文链接:https://blog.csdn.net/DLW__/article/details/104161387

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马鹏森

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值