课程1-人脸属性编辑基础


1.属性向量获取



过程:将e.g.微笑表情和无表情的图像(x)都经过encoder转换为潜在向量(z),通过潜在向量再生成图片,经过判别器
而微笑表情和无微笑表情的潜在向量的差值就是对应于微笑属性的值,当需要该属性时就将这个属性的值和无表情的人脸进行叠加就可以可控的添加笑脸(获取任何属性向量,将向量和无表情叠加可以得到对应的表情图片)
优点:可以实现任意属性的编辑,而无需训练多个模型
缺点:人脸特征和属性特征没有解耦合,而各类属性之间也无法经过简单统计解耦(例如人的笑脸是和人的年龄,姿态存在耦合关系的)
2.属性条件控制


IcGAN:使用编码器完成从图像到属性条件的学习
过程:将输入的图像经过网络生成2个向量(1个是图像的特征向量,1个是标签向量,比如在标签向量中条件值1或0来表示是否female),2个向量结合来实现特定图像的生成
3.图像风格迁移


Pix2Pix,CycleGAN,StarGAN
使用场景:有成对数据的时候用Pix2Pix;没有成对的数据用CycleGAN,多个属性和复杂属性编辑使用StarGAN
思想:每个属性对应不同域,使用不同的模型实现不同域之间的切换,比如把A域的图像转换为B域的图像,这就可以看做是图像翻译的过程
课程2-StyleGAN人脸属性编辑
1.人脸向量生成

第一个关键问题:如何获得真实图像对应的向量z或w
获得style的方法2种:
1.基于模型的方法

基于训练集训练一个通用的编码器,用编码器获得z或w速度快,容易过拟合
图像生成时是输入向量生成图像,而想要获得向量可以输入图像生成向量,需要关注的是图像转换为向量的过程(怎么更好的获取特征),向量生成图像的生成器是固定的
2.基于图像优化的方法

基于每张图片优化出对应的z或w,学习输入本身,而不再学习模型的参数(学习w,不去学习生成器参数-用预训练好的生成器)
input:需要重建的图像,预训练好的生成器
output:重建一个latent code w*
process:
整体流程:将输入的图像经过encoder变成w,w用预训练的生成器生成图像,在判别器处获取loss,通过优化,梯度反传对w的值进行学习修正。
初始化 latent code w*=w 就是用获取到的风格信息去进行图像生成
目标:生成的图像足够真实,
LOSS=percept loss+base loss
percept损失:感知损失,判断图像生成高层特征的质量)
base loss:和输入图像在像素级别上的差距,就是一般的损失L1,L2等,低层的质量
获得:结合得到高低层的信息,实现高低层的重建,获得好的优化目标,可以较好的学习w向量,比如用梯度下降学习
注意:A(在AdaIn输入有18个,所以size=(18,512))
2.人脸属性编辑

怎么样去编辑w向量来获得我们希望的属性变化?
1.多人脸属性编辑

基于多张图的属性向量进行样式混合或者插值
案例:Image2StyleGAN
1.1风格迁移
将2个域的图像进行混合
1.2样式插值
从左边source图像(w1是其风格信息)到右边target图像(w2是其风格信息)逐步实现
=1到
=0来逐步插值
1.3表情添加/去除
现在拥有3张图片,1.需要添加笑容的图片 2.普通表情图片 3.2图像的笑容图像
对于3图像和2图像的差值就是笑容属性,往1中添加笑容属性即可添加表情,用来控制添加程度
反过来就是去除
2.单人脸属性编辑

对单张图的属性进行自由编辑
假设:线性的改变潜在编码(latent code)w,则生成的图像和语义内容也是线性变化
年轻图像 当前图像 老年图像
w0
线性模型:结果编码w=人脸特征码w0+偏移系数×方向向量n
怎么获取方向向量n?

任意一个二值问题都存在一个超平面作为语义类别的分类边界,在超平面的一侧改变潜在编码z不会改变对应的语义类别,这个超平面用单位法线矢量表示
图像向量:x ,超平面:y, :方向向量/法线,逻辑回归:
将有该属性和没有的分布在一个特征空间,可以通过逻辑回归二分类分开,找到一个超平面将他们分开后,这个超平面的法线就是代表了该属性有和没有的转换方向,而这个方向也就是我们需要的方向向量。整体问题也就变成了求逻辑回归模型的权重w

流程总结:
1.根据属性向量生成人脸,获得图片和对应的向量(获得训练数据)
2.训练CNN人脸属性分类器,给图片打标签(可以手动打标签,也可以训练分类模型,比如是不是微笑,是则打标签1,不是则0,给图片打的标签也就是对应属性向量的标签)
3.根据标签,对w向量训练出线性回归模型,获得方向向量(根据各类数据集)
最后根据方向向量得到我们希望得到的结果编码w,将w使用StyleGAN生成器生成图像
想法:这里存在一个问题,我们想要获取数据集不应该是通过生成器,毕竟一开始我们并没有各类属性向量,如果说是通过生成器前端的encoder来获取属性向量,那么你怎么保证你所设计的mapping network 是可以得到正确的属性向量的呢(也就是全连接层的权重需要取一个预训练好的),这应该是需要在整体训练包括mapping network ,synthesis network 乃至判别器部分训练整体优化,梯度反传逐步优化的。
课程3-StyleGAN人脸属性编辑实战
1.人脸向量生成
先从main函数开始:
1.定义解析器:需要预训练模型,size需要指定,lr,noise(正则化,提高模型泛化能力)
噪声衰减项:noise_ramp的default如果=0.75表示在前面75%的训练迭代次数都有噪声添加,到后面就不再添加,到后面我们希望得到的向量更加精确,所以不再添加噪声。
噪声正则项:为噪声正则项的权重
1143



被折叠的 条评论
为什么被折叠?



