- 人工智能
- 深度学习
- 计算机视觉
- 媒体生成
- 视频处理
- 图像处理
【免费下载链接】PaddleGAN
PaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.
导读
Pixel2Style2Pixel(pSp)是一类「图像编码(Image Encoding)」方法:它用一个规模较大的编码器把输入图像映射到 StyleGAN V2 的风格向量空间,再借助 StyleGAN V2 生成器作为解码器还原图像,从而让编码前与解码后的图像保持强关联。本文基于 PaddleGAN 仓库中的 docs/en_US/tutorials/pixel2style2pixel.md 编写,结合 applications/tools/pixel2style2pixel.py、ppgan/apps/pixel2style2pixel_predictor.py 与 ppgan/models/generators/generator_pixel2style2pixel.py 的源码实现,完整讲解其原理、命令行用法、全部参数含义与底层推理链路。读完本文,你将掌握如何用一条命令完成人像重建与卡通化推理,并能理解 pSp 的渐进式风格编码器(Gradual Style Encoder)与 StyleGAN V2 解码器的协作机制。
Pixel2Style2Pixel 原理
Pixel2Style2Pixel 的核心任务可以概括为Image Encoding(图像编码)。它不同于传统的「直接生成」式 GAN 任务:pSp 首先训练一个规模相当大的编码器,把输入图像整体编码为 StyleGAN V2 的风格向量(style vector),然后将风格向量送入 StyleGAN V2 生成器完成解码。由于编码与解码发生在同一个风格空间中,编码前的输入图像与解码后的输出图像之间存在强关联,模型天然具备图像到图像(image-to-image)翻译的能力。
pSp 编码器输出的是一个W+ 空间的风格码序列:对于 1024×1024 分辨率的 StyleGAN V2 生成器,其n_latent = log2(size) * 2 - 2 = 18,即解码过程需要 18 个 512 维的风格码,分别控制生成网络不同层级的特征(粗糙结构、中等结构、精细纹理)。编码器要做的,就是从一张人脸图像中回归出这一组 18×512 的风格码。
主要功能
从原文档的定位出发,Pixel2Style2Pixel 可用于以下四类任务:
- 将图像转成隐藏编码(Convert image to hidden codes):得到输入图像对应的 18 个风格码,可用于后续编辑、融合等操作;
- 将人脸转正(Turn face to face):对侧脸、偏转姿态的人像进行重建,输出正视化的人脸;
- 根据草图或分割结果生成图像(Generate images based on sketches or segmentation results):在风格空间内完成条件式图像合成;
- 将低分辨率图像转成高清图像(Convert low-resolution images to high-definition images):借助 StyleGAN V2 的先验完成超分式的重建。
PaddleGAN 中已实现的模型
目前 PaddleGAN 开放了两种可直接使用的预训练模型类型,对应 pixel2style2pixel_predictor.py 中model_cfgs字典的配置:
| model_type | 用途 | 内置模型配置 |
|---|---|---|
ffhq-inversion | 人像重建(Portrait reconstruction) | 输入 Resize 至 256×256、归一化至 [-1, 1],size=1024,style_dim=512,n_mlp=8,channel_multiplier=2 |
ffhq-toonify | 人像卡通化(Portrait cartoonization) | 与ffhq-inversion相同的结构与预处理配置,使用卡通化权重 |
两种模型的预训练权重均由 PaddleGAN 官方模型仓库提供:当命令行传入上述model_type且未指定weight_path时,predictor 会自动下载对应权重并按其内置配置覆盖 size、style_dim、n_mlp、channel_multiplier 等模型参数。
使用方法:一行命令完成推理
进入仓库的applications/目录,选择一张本地图像作为输入,运行:
cd applications/ python -u tools/pixel2style2pixel.py \ --input_image <YOUR INPUT IMAGE> \ --output_path <DIRECTORY TO STORE OUTPUT IMAGE> \ --weight_path <YOUR PRETRAINED MODEL PATH> \ --model_type ffhq-inversion \ --seed 233 \ --size 1024 \ --style_dim 512 \ --n_mlp 8 \ --channel_multiplier 2 \ --cpu提示:若在仓库根目录执行,等价命令为
python -u applications/tools/pixel2style2pixel.py ...。命令末尾的--cpu表示使用 CPU 推理,若在 GPU 环境运行则删去该参数。模型推理依赖 PaddlePaddle 环境,安装方式见仓库的 docs/en_US/install.md 与根目录 requirements.txt。
参数详解(含源码默认值)
入口脚本 applications/tools/pixel2style2pixel.py 使用argparse解析参数,各参数的作用、默认值如下表:
| 参数 | 含义 | 源码默认值 |
|---|---|---|
--input_image | 输入图像的文件路径(必填) | 无 |
--output_path | 生成图片存放的文件夹 | 'output_dir' |
--weight_path | 预训练模型路径;若指定了内置model_type,该参数失效 | None |
--model_type | PaddleGAN 内置模型类型,当前可用ffhq-inversion、ffhq-toonify;未指定时按default处理 | None |
--seed | 随机数种子,用于固定推理过程中的随机噪声 | None |
--size | 模型参数,输出图像分辨率 | 1024 |
--style_dim | 模型参数,风格 z 的维度 | 512 |
--n_mlp | 模型参数,风格 z 经过的多层感知机(MLP)层数 | 8 |
--channel_multiplier | 模型参数,通道乘积,影响模型大小与生成图片质量 | 2 |
--cpu | 是否使用 CPU 推理,若不用请从命令中去除 | False |
从源码看,各模型参数的真实默认值与命令行默认值保持一致:
--size决定输出分辨率,对应 StyleGAN V2 生成器的输出尺寸;--style_dim决定风格码维度,二者在 predictor 构造生成器时直接传给Pixel2Style2Pixel(opts)。--n_mlp控制风格 MLP 的层数(style_mlp由NormStyleCode + n_mlp 层 Linear+LeakyReLU组成,见 stylegan2_clean_arch.py)。--channel_multiplier通过生成器内部的channels字典决定各分辨率层级的通道数(如 64×64 层为256 * channel_multiplier、1024×1024 层为16 * channel_multiplier,见 stylegan2_clean_arch.py),因此它直接影响模型体积与生成质量。--seed传入 predictor 后,会同时执行paddle.seed(seed)、random.seed(seed)与np.random.seed(seed)(见 predictor),用于固定噪声注入,保证多次推理结果可复现。--model_type与--weight_path的优先级:当weight_path is None且model_type命中内置配置时,predictor 自动下载权重并读取内置超参;否则直接加载weight_path指向的权重文件(见 predictor)。
源码级推理流程解析
命令行只是外壳,完整的推理链路位于 ppgan/apps/pixel2style2pixel_predictor.py。其run()方法依次完成四件事:人脸对齐 → 图像预处理 → 编码与解码 → 结果落盘。
第一步:人脸对齐(run_alignment)
run_alignment(image_path)(predictor)是 pSp 推理的前置步骤,直接决定重建质量:
- 人脸检测与关键点提取:使用
ppgan.faceutils.dlib检测人脸并提取 68 点 landmarks;若未检测到人脸,会抛出Could not find a face in the given image.异常(predictor)。 - 定向裁剪:基于左右眼中心、嘴部中心计算眼睛-眼睛向量与眼睛-嘴部向量,构造一个按人脸姿态定向的四边形裁剪框(
quad),并对图像做缩放、裁剪、边界 padding。 - 反射填充与模糊:在边缘 padding 区域使用
'reflect'反射填充,配合高斯模糊与中值平滑,使裁剪区域边界自然过渡(predictor)。 - 透视变换:最终将裁剪结果变换到 4096×4096(
transform_size)的四边形投影空间,为后续缩放到 256×256 做准备(predictor)。
第二步:图像预处理
对齐后的图像会经过model_cfgs[model_type]['transform']的标准化流水线(predictor):
T.Resize((256, 256)) # 缩放到 256×256 T.Transpose() # HWC -> CHW T.Normalize([127.5]*3, [127.5]*3) # 归一化到 [-1, 1]也就是说,尽管最终输出是 1024×1024,编码器实际接收的是 256×256 的输入。
第三步:编码-解码与结果保存
predictor 调用生成器前向:
dst_img, latents = self.generator(paddle.to_tensor(transformed_image[None, ...]), resize=False, return_latents=True)resize=False表示不解码后不做 256×256 的平均池化,直接保留 1024×1024 输出;return_latents=True同时返回编码器输出的 18 个风格码(latents);- 输出图像经
(dst_img * 0.5 + 0.5) * 255反归一化到 [0, 255] 像素范围。
结果保存到--output_path目录(predictor):
| 输出文件 | 内容 |
|---|---|
src.png | 对齐(裁剪)后的人脸图像 |
dst.png | 重建/卡通化后的 1024×1024 结果图 |
dst.npy | 编码器输出的风格码(latents,形状约 [18, 512]),可用于后续编辑 |
这也是「将图像转成隐藏编码」能力的直接体现:dst.npy就是输入图像在 StyleGAN V2 风格空间中的表示。
编码器与解码器架构:从源码看实现
模型主体 generator_pixel2style2pixel.py 以@GENERATORS.register()注册为 PaddleGAN 生成器,由两部分组成:
self.encoder = self.set_encoder() # 编码器 self.decoder = StyleGANv2Generator(opts.size, opts.style_dim, opts.n_mlp, opts.channel_multiplier) # 解码器编码器:GradualStyleEncoder(渐进式风格编码器)
默认encoder_type为GradualStyleEncoder(generator_pixel2style2pixel.py),要点如下:
- 主干网络:50 层的 ResNet 变体(
mode='ir_se'),由BottleneckIRSE残差块堆叠而成(generator_pixel2style2pixel.py),每个残差块内嵌 SE 注意力模块。 - 18 路风格输出:
style_count = 18,与 StyleGAN V2 生成器所需的风格码数量一一对应。其中前 3 个(coarse_ind = 3)来自最粗糙的特征层(16×16 空间分辨率),中间 4 个(middle_ind = 7)来自中等层(32×32),后 11 个来自精细层(64×64)。 - 特征融合:通过
_upsample_add(双线性上采样 + 逐元素相加)把深层特征逐步回拼到浅层,保证粗糙到精细的多尺度信息都被编码进对应层级的风格码。 - 代码中还提供了
BackboneEncoderUsingLastLayerIntoW、BackboneEncoderUsingLastLayerIntoWPlus两种备选编码器(generator_pixel2style2pixel.py),分别将最后一层特征池化后映射为单个 512 维码或 18×512 码。
前向时,若启用start_from_latent_avg,编码器输出的风格码还会加上latent_avg(平均人脸风格中心)进行归一化(generator_pixel2style2pixel.py),使解码起点落在合理的人脸先验区域内。
解码器:StyleGAN V2 生成器
解码端直接复用 PaddleGAN 的StyleGANv2Generator(generator_styleganv2.py)。生成器把 18 个风格码按层级注入到从 4×4 常量输入开始的逐级上采样卷积中:
- 风格码先经
style_mlp(n_mlp层 MLP)映射; - 每一级
StyleConv通过调制卷积(Modulated Convolution)与解调(Demodulate)将风格作用于特征图,并叠加随机噪声(见 stylegan2_clean_arch.py); ToRGB模块逐级生成 RGB 分支并累加为最终图像(skip 连接),最终输出size×size的结果(见 stylegan2_clean_arch.py)。
正是「ResNet 编码器回归 18×512 风格码 + StyleGAN V2 逐级解码」的组合,让 pSp 在重建人像的同时保留了 StyleGAN V2 的生成质量与编辑能力。
生成结果展示
以下结果来自仓库 docs/imgs 目录,直观展示 pSp 的典型输出形态:
输入人像:
裁剪(对齐)人像、重建人像、卡通化人像依次如下:
可以看到:ffhq-inversion忠实重建输入人像(保持身份与姿态),而ffhq-toonify将重建结果进一步卡通化——两者共享同一套编码器架构,区别仅在于训练目标与预训练权重。
训练(TODO)
pSp 编码器的训练需要成对/非成对的人脸数据集与精心设计的损失函数(重建损失、感知损失、身份损失等),训练链路较为复杂。当前 PaddleGAN 仅提供推理能力,官方文档中标注了训练部分为 TODO(见 docs/en_US/tutorials/pixel2style2pixel.md),后续将补充训练脚本,便于用户训练更多类型的 Pixel2Style2Pixel 图像编码器。在训练脚本开放前,用户可通过ffhq-inversion/ffhq-toonify预训练模型直接完成推理,并将dst.npy导出的风格码用于下游任务。
参考资料
本文所述原理与论文出处为 Richardson 等人提出的 Pixel2Style2Pixel(Encoding in Style):
@article{richardson2020encoding, title={Encoding in Style: a StyleGAN Encoder for Image-to-Image Translation}, author={Richardson, Elad and Alaluf, Yuval and Patashnik, Or and Nitzan, Yotam and Azar, Yaniv and Shapiro, Stav and Cohen-Or, Daniel}, journal={arXiv preprint arXiv:2008.00951}, year={2020} }PaddleGAN 中的实现位于 ppgan/models/generators/generator_pixel2style2pixel.py,推理入口与配置见 ppgan/apps/pixel2style2pixel_predictor.py 与 applications/tools/pixel2style2pixel.py,中文文档可参考 docs/zh_CN/tutorials/pixel2style2pixel.md。
- 人工智能
- 深度学习
- 计算机视觉
- 媒体生成
- 视频处理
- 图像处理
【免费下载链接】PaddleGAN
PaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.
相关推荐
PaddleGAN 人像重建与卡通化实战:Pixel2Style2Pixel 图像编码器原理与推理指南
PaddleGAN 人像重建与卡通化实战:Pixel2Style2Pixel 图像编码器原理与推理指南 本文以 PaddleGAN 中的人像重建(ffhq in
人工智能深度学习计算机视觉媒体生成视频处理图像处理PaddleGAN StyleGAN V2 Editing 实战指南:基于属性方向向量的生成图像语义编辑
PaddleGAN StyleGAN V2 Editing 实战指南:基于属性方向向量的生成图像语义编辑 导读 StyleGAN V2 擅长以风格向量(late
人工智能深度学习计算机视觉媒体生成视频处理图像处理PaddleGAN图像生成艺术:StyleGAN V2实战指南
PaddleGAN图像生成艺术:StyleGAN V2实战指南 本文详细介绍了PaddleGAN框架中StyleGAN V2的完整实战指南,包括架构改进、FFH
人工智能深度学习计算机视觉媒体生成视频处理图像处理
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考