AutoEncoder实现人脸渐变

一、前言

今天来分享如何从一张人脸自然地变换到另一张人脸,或者从年轻慢慢变老,使用AutoEncoder可以很容易实现这样的功能。

二、实现原理

AutoEncoder的目的是对输入进行编码,希望这个编码能够很好的还原原有数据。当AutoEncoder训练完成后,我们可以对任意的图像进行编码,这样就可以用一个低维的向量表示图片。

那这个低维向量有什么作用呢?假设我们使用AutoEncoder把图像编码成1024维的向量,通过修改该向量,就可以达到修改图像的效果,但是我们现在的问题是如何修改向量。

对于用人脸数据训练的AutoEncoder,如果我们胡乱修改编码向量,会导致Decoder解码的内容不像人脸。在今天的例子中,需要实现人脸的渐变效果。我们可以把人脸的渐变转换成向量的渐变,使用插值算法可以很简单的实现向量渐变。比如人脸A的向量为z1,人脸B的向量为z2,此时在z1和z2之间插值4个向量,然后把这几个向量用Decoder解码,得到的效果就是人脸渐变效果。

比如下面的图片,左上角和右下角的图像是用真实图像的向量解码出来的,而中间的图像则是通过插值算法生成的向量得到的图。即使性别不同也可以很自然的变换。

人脸渐变

三、插值算法

插值算法有很多,这里选择最简单的线性插值。就是让向量z1每一个都等距离变换,直到变换成向量z2。插值的代码非常简单,具体如下:

这里可以简单测试一下,代码如下:

输出结果如下:

可以看到,向量x1慢慢变成了向量x2。

四、代码实现

接下来就来实现人脸渐变的效果。这里需要用到之前训练的AutoEncoder模型,具体参考博客https://juejin.cn/post/7210684943252029498。 加载训练好的模型,配合插值算法实现人脸渐变。

其中FaceAutoEncoder和FaceDataset是上一篇博客实现的两个类。下面是几组生成效果:

在测试中发现,使用训练数据中的图片可以得到比较好的效果,而使用额外图片效果则差一点。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值