分享好友 最新动态首页 最新动态分类 切换频道
【AIGC】如何使用自编码器完成人脸生成
2024-12-25 13:32

自编码器是一个非常简单的网络,早在上世纪90年代就提出了自编码器的概念。当时使用受限的玻尔兹曼机分层训练,在硬件强大的今天可以实现端到端的训练。自编码器有许多变种,比如变分自编码器、去噪自编码器、正则自编码器等。由于自编码器采用的是自监督学习,因此使用自编码器可以使用较低成本得到较好的效果。

【AIGC】如何使用自编码器完成人脸生成

今天我们将训练一个自编码器。自编码器训练完成后可以进行各种有趣的实验,像编辑一个人的表情、让人脸A渐渐变成人脸B、让一个人从小慢慢变老、生成人脸等。

Amazon SageMaker是一个完全托管的机器学习服务平台,包含了机器学习的各个流程,从标注到部署。开发人员可以快速构建模型并训练,还可以部署到托管环境。Amazon SageMaker提供了Jupyter笔记本,而且可以执行各种流行框架,不止是MXNet,还可以使用PyTorch、TensorFlow等主流框架。

在数据标注时,Ground Truth可以用来团队标注,在标注一定数据后,Ground Truth可以自动标注,当对标注不确定时才会让人工进行标注。

Amazon SageMaker提供了数据存储,模型部署等服务,完成这些操作都可以一键式完成。

同时Amazon SageMaker提供了许多高阶API,可以使用Amazon Auto Pilot自动训练模型与调优模型。同时还可以对模型的情况进行监控,以便更好地改善模型。

在开始使用Amazon SageMaker完成机器学习任务前,先熟悉一下机器学习的流程。机器学习的流程分为一下几个步骤

  1. 获取数据
  2. 数据清洗
  3. 将数据处理成模型的输入
  4. 训练模型
  5. 评估模型
  6. 部署模型
  7. 监控、收集数据、评估模型

上述步骤整体是一条直线,但是经常会回到前面几个步骤重新往下执行。如下图所示

(1)数据处理

1-3为数据处理部分,主要是数据从无到有、从杂乱到规范,在此步骤中,我们会用到诸如爬虫、正则、归一化、标准化等技术。处理后的数据通常表示为一个张量(多维数组,不同类型的数据的形状有所不同。图像数据通常为,各维度含义分别为样本数、通道数、高、宽,有时候通道数会放在最后一个维度。表格数据被处理为,分别为样本数、特征数。文本数据则是,分别为样本数和文本长度。还有时间序列、视频、立体图片等数据都会处理成固定形状的张量。

数据处理成张量后还可以做一些特征工程,比如特征选择、标准化、归一化等。这一步操作有利于模型训练。

(2)训练模型

4-5为训练评估部分,在处理好数据后就可以开始训练模型了。训练模型需要我们确定几样东西,分别是模型结构(选取上面算法)、对应的超参数、优化器等。在此过程通常会训练多个模型,选取一个最优模型作为最终模型。

为了选择较优的超参数,会使用到网格搜索交叉验证。在sklearn模块中,提供了对应的实现。SageMaker中也有类似更强的功能,后面有具体体验。

(3)部署及维护

当选取一个最优模型后,既可以将模型部署上线,模型的部署可以作为API、Web、小程序、APP等。在部署上线后,模型可能会出现各种问题,也会慢慢落后,因此还需要对模型进行监控维护。在上线后,可以继续收集一些用户授权的数据,然后把这些数据重复之前的步骤,对模型进行迭代优化。

SageMaker中机器学习流程于上面一致,下面我们来实际看看各个步骤如何操作。

(1)数据处理

Amazon SageMaker中可以创建Jupyter Notebook,创建的Notebook可以执行pip、wget等指令。我们可以使用以往使用的所有方式处理数据,也可以使用SageMaker自带的SDK。在SageMaker中有一个sklearn子模块,可以用来处理数据。

SKLearnProcessor可以执行sklearn脚本来处理数据,首先需要创建SKLearnProcessor对象,然后调用run方法对数据进行处理,示例代码如下

 

在创建调用run方法时,需要先创建好用于处理数据的文件,对应code参数。命令行参数由arguments给出。

可以用sklearn来做具体处理。处理完成后,处理结果等信息保存在preprocessing_job_description中,可以通过preprocessing_job_description[‘Outputs’]拿到处理结果。

(2)训练模型

模型的训练与处理数据一样,需要准备好对应的训练脚本。处理好数据并准备好脚本后,使用下面的代码就可以进行训练了,这里的实例类型要和数据处理的实例类型一致。

 

评估模型的代码也是一样的风格

 

(3)部署

构建和训练模型后,您可以将模型部署至终端节点,以中获取预测推理结果。部署使用下面代码即可完成

 

可以根据任务要求选择实例类型。

下面使用SageMaker完成自编码相关的实验。

自编码器是一个非常简单网络,通常由编码器和解码器两个部分组成。编码器解码器的结构可以用全连接,也可以用卷积,或者其它一些网络。在早期自编码器的编码器解码器需要分开训练,而现在通常是端到端的训练。

编码器部分会将输入逐步降维,最后得到一个固定长度的向量,这个向量可以作为输入数据的编码。解码器部分接收编码器的输出,结果解码器会得到一个形状与编码器输入一样的数据。自编码器训练的目的就是输出与数据尽可能接近。

整体上看自编码器使用的是监督学习方法,但是目标值和特征值是一样的,像这种标签由数据自身给出的学习方法又被称为自监督学习。

自编码器结构简单,但是有一些非常好的性质。比如训练简单,不需要人工标记数据等。使用自编码器可以对数据进行降维,创建新数据等。假设对人脸图像数据进行编码,编码器会得到1024维的向量。那么编码器得到的这个向量每一个维度可能代表着一种特征,比如第n个维度可能代表表情、第k个维度可能代表性别等。如果能知道这些信息,就可以做一些有趣的事情。

这里使用Amazon SageMaker的笔记本实例进行实验,创建笔记本实例,创建时使用默认选项即可。在创建时需要记住使用的实例类型,后续训练需要对应正确的类型。

创建好环境后,可以在笔记本中运行下面代码获取当前角色以及S3桶

 

下面就可以开始数据的准备了。

这里使用PyTorch完成数据的处理和训练,下面是需要用到的一些模块

 

本实验使用的是CelebA Dataset,可以在mmlab.ie.cuhk.edu.hk/projects/Ce…下载。数据集里面包含了10万修正好的人脸图片。将图片下载到电脑上后,再把数据上传到笔记本中。为了方便加载,创建一个Dataset类,完成数据的加载

 

下面创建DataLoader用于加载数据

 

另外,可以通过下面代码将数据上传至S3桶

 

数据准备好后,需要编写模型以及训练脚本。

本文以人脸数据训练一个自编码器,而后用这个自编码器做一些其它事情,首先训练一个自编码器。网络结构由卷积和转置卷积组成,代码如下

 

编码器部分将64×64的图片转换成1024维的向量,而解码器则是利用转置卷积将1024维的向量转换成64×64的图像。现在我们的目标是模型输入与数据越接近越好,所有可以用均方误差作为损失函数,同时输入和目标为同一批数据。下面编写一个训练脚本,代码如下

 

我们可以使用argparse设置一些参数。脚本准备好后,可以开始进行训练,因为使用的是PyTorch,所以要改用sagemaker.pytorch中的PyTorch来进行训练,代码如下

 

其中entry_point就是前面的训练脚本。然后等待模型训练,训练完成后可以得到模型文件model.pth,这里只包含decoder部分。下面是输出的结果

训练完成后使用下面一句就可以对模型进行部署

 

不过自编码器本身只是还原原有数据而已,要生成人脸需要使用Decoder部分,进行推理。

在前面提到自编码器的一个优点就是可以把对输入的操作改为对编码的操作,现在我们训练了一个人脸的自编码。假设人脸A被编码成z1,人脸B被编码成z2,现在想让人脸由A到B渐变。现在可以把这个问题转换为向量z1和z2之间的渐变,向量的渐变可以直接使用插值算法,我们在两个向量见插入n个向量,再把这些向量输入解码器,得到的人脸图像就是介于A和B之间的人脸。现在人脸渐变就变为了插值。

首先实现插值算法,插值的实现很简单,具体代码如下

 

上面函数输入两个长度一样的向量,输出num个向量。这num个向量将作为Decoder的输入。接下来使用Decoder部分进行推理

 

下面是实现的效果

可以看到人脸转变的很自然。现在可以将这一部分部署,部署代码如下

 

其中inference.py是推理脚本,具体代码如下

 

然后使用传入2 × 3 × 64 × 64的张量就可以完成模型的推理,返回插值后的人脸图像。

自编码器除了实现人脸渐变外,还可以用来生成人脸,关键点依然在编码部分。

自编码器生成人脸的原理比较简单,在训练自编码器时,把人脸编码成一个长度为1024维的向量。现在我们假设人脸服从高斯分布,如果能求出均值和方差,就可以知道这个高斯分布的具体样子。在知道高斯分布的具体表达式后,就可以对从中采样人脸向量,把这个向量交给decoder就可以生成人脸。

均值和方差可以用统计的方式获取,具体代码如下,把结果保存为一个npz文件

 
 

生成人脸的操作就是从前面的高斯分布中进行采样,然后把采样的向量交给decoder进行编码即可。具体代码

 

下面是生成的一些人脸,五官部分可以看的很清楚,但是背景部分有一些模糊。

现在前面Amazon SageMaker部署的代码可以复用,只需要修改推理的代码即可。把inference.py中predict_fn函数修改成下面的样子

 
 

在前面,我们使用Amazon SageMaker,围绕自编码器实现了人脸渐变和人脸生成的实验。自编码器并非主流的生成模型,对于图像生成,现在更流行Stable Diffusion模型,相比之下Stable Diffusion的能力更强,生成的图像更逼真。Amazon官方给出了Stable Diffusion相关实验:catalog.us-east-1.prod.workshops.aws/workshops/3…。我们可以使用Amazon SageMaker直接运行,详细的实践可以参考实验手册

每次生成的图片是不一样的,大家可以多尝试一些有趣的东西。

自编码器的结构非常简单,训练起来相比GAN等要更容易,但是功能特别强大。在前面的实验中,我们都是把对结果的调整转为对编码的处理。在自编码器中有一个非常理想的设想,就是每个维度控制一个特征,但是实际上没有这么简单。自编码器还有一些其它变形,比如变分自编码器,ALAE等,可以实现更加强大的功能,甚至可以媲美StyleGAN,生成逼真的网络。

除了直接使用自编码器,在其它网络中也可以插入与自编码器类似的结构,比如Stable Diffusion中就有Unet网络,也是一种编码解码结构。

用于机器学习的平台有很多,Amazon SageMaker是比较全面,且面向应用的一个。在Amazon SageMaker中包括了机器学习的各个流程,在以往Python中的开发习惯可以在Amazon SageMaker中完全适用,另外Amazon SageMaker提供了更高阶的API,可以让用户更专注于算法的研究。

Amazon SageMaker支持Sklearn、PyTorch、TensorFlow、Hugging Face等,对这些主流模块和框架都有相应的封装。另外Amazon SageMaker提供了非常便捷的部署方式。

为了方便训练模型,Amazon SageMaker中提供了Amazon AutoPilot可以自动对各种模型以及各组超参数进行搜索,训练最优模型。

器中有一个非常理想的设想,就是每个维度控制一个特征,但是实际上没有这么简单。自编码器还有一些其它变形,比如变分自编码器,ALAE等,可以实现更加强大的功能,甚至可以媲美StyleGAN,生成逼真的网络。

除了直接使用自编码器,在其它网络中也可以插入与自编码器类似的结构,比如Stable Diffusion中就有Unet网络,也是一种编码解码结构。

用于机器学习的平台有很多,Amazon SageMaker是比较全面,且面向应用的一个。在Amazon SageMaker中包括了机器学习的各个流程,在以往Python中的开发习惯可以在Amazon SageMaker中完全适用,另外Amazon SageMaker提供了更高阶的API,可以让用户更专注于算法的研究。

Amazon SageMaker支持Sklearn、PyTorch、TensorFlow、Hugging Face等,对这些主流模块和框架都有相应的封装。另外Amazon SageMaker提供了非常便捷的部署方式。

为了方便训练模型,Amazon SageMaker中提供了Amazon AutoPilot可以自动对各种模型以及各组超参数进行搜索,训练最优模型。

关于云上探索实验室的活动可以参考dev.amazoncloud.cn/experience?…,里面有许多有趣的实验案例。通过云上探索实验室,开发者可以学习实践云上技术,同时将自己的技术心得分享给其他开发者小伙伴。一同创造分享,互助启发,玩转云上技术。云上探索实验室不仅是体验的空间,更是分享的平台”

如果大家对相关技术感兴趣,可以关注下面公众号,会持续更新分享AGIC,java基础面试题, netty, spring boot,spring cloud,系列文章,干货满满,赶紧关注吧

最新文章
CUBEAI详细使用教程(STM32运行神经网络)---以手写识别为例
CUBEAI(Cube Artificial Intelligence)是一种人工智能(AI)中间件,旨在为嵌入式系统提供高效、灵活的神经网络推理能力。该中间件的设计目标是在资源有限的嵌入式设备上实现深度学习推理,从而为物
AI智习室的独特之处:全面揭秘!
如今,科技快速发展,学习方式也在不断改变。虽然传统教室和自习室仍然很重要,但AI智习室正以其独特的优点,吸引越来越多的学习者。那么,AI智习室到底有什么特别之处呢?AI智习室的最大特色就是它的智能化学习环境。它不像传统自习室那样
2024手机性能排行榜前十名有哪些(最建议买的手机推荐)
php小编西瓜为您带来2024年手机性能排行榜前十名推荐。随着科技不断发展,手机性能也在不断提升。在这份排行榜中,我们将为您推荐性能强劲、功能齐全的手机,让您更好地选择适合自己的设备。从处理器性能到摄像头表现,这份排行榜将为您提
2024溪门正版资料免费大全,传统解答解释落实_V版57.284
随着互联网的飞速发展,获取知识变得越来越便捷。2024年,溪门资料库以其丰富的正版资料和免费大全而备受瞩目。本文旨在为读者提供一个全面的溪门资料免费大全的介绍,包括其传统解答解释的落实情况。溪门资料库是一个集合了多种学科领域资
2022新手谷歌SEO优化基础推广知识
2022年的谷歌搜索引擎优化怎么做呢(Search Engine Optimization,SEO)? 通过对网站进行针对谷歌搜索引擎的优化,可以让您的网站在不做谷歌竞价的情况下也能排名到谷歌首页,这个是一个关于谷歌优化新手入门基础知识的学习专题,让我们一
4. 利用拼多多平台的推广工具
拼多多直播:自然流量究竟有无,该如何有效获取?一、拼多多直播自然流量存在与否拼多多直播作为一种新兴的电商营销方式,自然流量是确实存在的。自然流量主要是指非付费渠道带来的流量,如搜索引擎、社交媒体、用户分享等。在拼多多直播中
AI��γ�Ϊ��ͨ�����ߵĵ�һ������
�׾Թ�϶������֮�꣬��ҵʱ�������ڼ���֮�۵��������Խ��ԽԶ����ǰ��ѧϰ�������ijһ����/���Բ�֪ͬʶ���ѧϰ�������
AI系统平台开发搭建开发搭建
标题:迈特AI创作系统:AI系统平台开发搭建,源码交付,Java,PHP双版本助力正文:在当今这个数据驱动、智能化转型的时代,AI技术的已经成为企业提升效率降低成本的关键。南阳迈特网络科技有限公司,一家专注于AI研究和应用的高新技术,致
GitHub的AI写代码翻车了,会在注释里给你写上what the f***,因为...
以下文章来源方志朋的博客,回复”666“获面试宝典来源 | 新智元GitHub Copilot凭借着自动生成代码这个强有力的噱头,推出之后就成为了讨论的焦点。 Copilot建立在OpenAI全新的Codex算法之上,其中Codex接受了从GitHub
ai写论文的网站有哪些?试试这2款在线ai写作工具
ai写论文的网站有哪些?在现今的数字时代,人工智能技术已经在各个领域得到了广泛的应用,写作领域也不例外。随着越来越多的语言模型投入写作生产力,我们或许不再需要完成写作的每一个部分,就以论文来说,AI工具可以为我们快速整理语言,
相关文章
推荐文章
发表评论
0评