StyleGAN-Human:面向全身人像生成的数据工程实战——SHHQ 数据集、训练、生成与编辑全流程
2026/9/6 16:41:39 网站建设 项目流程

StyleGAN-Human:面向全身人像生成的数据工程实战——SHHQ 数据集、训练、生成与编辑全流程

【免费下载链接】DragGANOfficial Code for DragGAN (SIGGRAPH 2023)项目地址: https://gitcode.com/GitHub_Trending/dr/DragGAN

StyleGAN-Human 是一个以"数据为中心"(data-centric)视角研究无条件全身人像生成的开源项目,隶属 DragGAN 仓库的stylegan_human/子目录。本文基于该目录下的 README 与 SHHQ 数据集说明,完整覆盖环境搭建、SHHQ-1.0 数据集获取、StyleGAN2/3 训练、图像生成、插值、风格混合、真实图像对齐、PTI 反演与属性编辑的全流程命令与参数细节,并结合仓库源码解析各脚本的底层实现,帮助读者从零复现一套高保真人体生成与编辑流水线。

研究视角:为什么是"数据工程"而不是"网络工程"

原论文的摘要指出,已有研究大多聚焦于"网络工程"(设计新组件与新目标函数),而本项目反其道而行,从数据工程角度系统研究了三个关键因素:

  • 数据规模(data size):实验表明,用原版 StyleGAN 训练高保真无条件人体生成模型,需要超过40K张图像的大规模数据;
  • 数据分布(data distribution):均衡的训练集能提升罕见人脸姿态下的生成质量,相比长尾分布有明显优势;但单纯均衡服装纹理分布并不能带来有效改善;
  • 数据对齐(data alignment):以"身体中心"作为对齐锚点的人体 GAN 模型,优于使用"脸部中心"或"骨盆点"作为锚点的模型。

围绕这三点,项目贡献了:一个超过 23 万样本的全身人像数据集(分版本释放)、一个模型库(model zoo)、以及若干人体编辑应用脚本。

SHHQ 数据集:规模、来源与获取方式

数据集详情记录在 Dataset.md 中:

  • SHHQ-1.0目前释放40K张图像,分辨率1024 × 512(即全身竖幅比例),包含对齐后的原始图像与机器计算的人体分割掩码;
  • 数据来源分两类:一是通过官方 API 的爬虫从 Flickr、Pixabay、Pexels 等网络抓取(使用时需满足 CC0、Pixabay License 与 Pexels License 等许可);二是从摄影师、模特机构等数据供应商处购买,并经法务团队审查确认可用于研究;
  • SHHQ-1.0 的组成为:上述来源的图像 + 9991 张 DeepFashion 处理图(仅保留全身图)+ 1940 张来自 InFashAI 的非洲人像图像(用于增加多样性)。

许可与协议要点:数据仅面向非商业研究用途;禁止复制、出售、转售或以任何商业目的利用数据及衍生数据;禁止将数据向第三方分发(同一组织内部副本除外)。

获取步骤(依据 Dataset.md):

  1. 下载 数据释放协议,仔细阅读并妥善填写、签署(签名须为手写);
  2. 使用机构邮箱将签署后的表格发送给协议中列明的联系人,主题标题为 "SHHQ Dataset Release Agreement";
  3. 审核通过后,官方会联系你提供数据集下载链接与解压密码。

由于申请量大、需逐一审验,等待时间可能较长。此外项目还提供了一个 100 张随机采样图像的预览包(SHHQ-1.0_samples,可从 Dataset.md 中的链接获取),方便快速上手测试;SHHQ-1.0若已下载,训练脚本默认假设其放置在data/SHHQ-1.0/下。数据集还提供 bg_white.py 脚本,可基于分割掩码将原图背景填白。

Model Zoo:预训练模型与 FID 指标

README 给出了主模型库(训练于论文完整数据集):

结构1024x512指标得分512x256指标得分
StyleGAN1stylegan_human_v1_1024.pklfid50k3.79待发布--
StyleGAN2stylegan_human_v2_1024.pklfid50k_full1.57stylegan_human_v2_512.pklfid50k_full1.97
StyleGAN3待发布--stylegan_human_v3_512.pklfid50k_full2.54

而在 Dataset.md 中还单独列出了仅用 SHHQ-1.0(40K)训练的模型:

结构1024x512指标得分512x256指标得分
StyleGAN2SHHQ-1.0_sg2_1024.pklfid50k_full3.56SHHQ-1.0_sg2_512.pklfid50k_full3.68

下载所得的模型权重统一放置到pretrained_models/目录(相对stylegan_human/)。注意:后文所有插值、风格混合、编辑示例均基于StyleGAN2 版本stylegan_human_v2_*.pkl);若要使用 V1 或 V3 模型查看效果,需要调整对应模型的加载方式。

环境搭建

系统要求

  • 代码基座来自 NVIDIA 官方的 stylegan (TensorFlow)、stylegan2-ada (PyTorch)、stylegan3 (PyTorch) 三个仓库;
  • 官方测试环境为Python 3.8.5 + PyTorch 1.9.1 + CUDA 11.1

安装步骤

conda env create -f environment.yml conda activate stylehuman # [可选] 仅当需要运行 StyleGAN1 时才需安装 tensorflow 1.x pip install nvidia-pyindex pip install nvidia-tensorflow[horovod] pip install nvidia-tensorboard==1.15

environment.yml 中固定了关键版本:python=3.8pytorch=1.9.1cudatoolkit=11.1numpy>=1.20pillow=8.3.1,并通过 pip 安装imguiglfwdlibopencv-pythonmoviepyimutils等依赖(后者用于可视化窗口与图像对齐流程)。

常见坑:若调用 CUDA 时出现版本冲突,可以尝试临时清空LD_LIBRARY_PATH再运行:

LD_LIBRARY_PATH=; python generate.py --outdir=out/stylegan_human_v2_1024 --trunc=1 --seeds=1,3,5,7 \ --network=pretrained_models/stylegan_human_v2_1024.pkl --version 2

训练:为 SHHQ 定制的shhq配置

训练脚本基于官方 stylegan1/2-ada/3 做了少量改动,仓库中随附了修改后的 SG2 与 SG3 训练脚本(SG1 未随附,需用原始脚本替换文件)。

训练 StyleGAN2-ada(SHHQ-1.0)

python train.py --outdir=training_results/sg2/ --data=data/SHHQ-1.0/ \ --gpus=8 --aug=noaug --mirror=1 --snap=250 --cfg=shhq --square=False

从 sg2/train.py 源码可以看到两个 SHHQ 专属改动:

  1. 基础配置枚举中新增了shhq选项:click.Choice(['auto', 'stylegan2', 'paper256', 'paper512', 'paper1024', 'cifar', 'shhq'])。其规格定义为kimg=25000, map=8, ramp=0.05,其余超参(mb、mbstd、fmaps、lrate、gamma、ema)与auto一样根据分辨率和 GPU 数量动态计算,例如spec.mb = max(min(gpus * min(4096 // res, 32), 64), gpus),即 8 卡 1024 分辨率下总 batch 为 32;
  2. 新增了--square选项(True for square, False for rectangle),以支持 SHHQ 的非方形 1024×512 数据。

训练 StyleGAN3(SHHQ-1.0)

python train.py --outdir=training_results/sg3/ --cfg=stylegan3-r --gpus=8 --batch=32 --gamma=12.4 \ --data=data/SHHQ-1.0/ --square=False --snap=250

从 sg3/train.py 可见,SG3 的--cfg取值为stylegan3-t / stylegan3-r / stylegan2;当选择stylegan3-r时,源码会将卷积核改为 1×1(conv_kernel = 1)并将channel_basechannel_max翻倍,即论文中的"StyleGAN3-R"变体。

使用预训练模型生成全身人像

generate.py 同时支持 TensorFlow 版的 StyleGAN1 与 PyTorch 版的 StyleGAN2/3:

# 无截断(truncation=1)生成 python generate.py --outdir=outputs/generate/stylegan_human_v2_1024 --trunc=1 --seeds=1,3,5,7 \ --network=pretrained_models/stylegan_human_v2_1024.pkl --version 2 # 带截断(truncation=0.8)生成 python generate.py --outdir=outputs/generate/stylegan_human_v2_1024 --trunc=0.8 --seeds=0-10 \ --network=pretrained_models/stylegan_human_v2_1024.pkl --version 2 # StyleGAN V1 生成 python generate.py --outdir=outputs/generate/stylegan_human_v1_1024 --network=pretrained_models/stylegan_human_v1_1024.pkl --version 1 --seeds=1,3,5 # StyleGAN V3 生成 python generate.py --outdir=outputs/generate/stylegan_human_v3_512 --network=pretrained_models/stylegan_human_v3_512.pkl --version 3 --seeds=1,3,5

从源码实现看(generate.py):--version 1legacy.load_pkl加载 TF 图(因此需要 tensorflow 1.x 环境);V2/V3 则从 pickle 中取出G_ema,在 GPU 上以float64精度执行 mapping + synthesis(G.mapping(z, label, truncation_psi)G.synthesis(w, noise_mode=...)),--noise-mode可取const(默认)/random/none--seeds支持1,3,5这种逗号列表与0-10这种范围写法,输出为outdir/seed0001.png形式的逐图 PNG。

潜码插值

python interpolation.py --network=pretrained_models/stylegan_human_v2_1024.pkl --seeds=85,100 --outdir=outputs/inter_gifs

该脚本对指定两个种子的潜码做插值并输出 GIF,可用于观察模型在潜空间中的平滑度。

风格混合(Style Mixing)

图像风格混合

python style_mixing.py --network=pretrained_models/stylegan_human_v2_1024.pkl \ --rows=85,100,75,458,1500 --cols=55,821,1789,293 --styles=0-3 --outdir=outputs/stylemixing
  • --rows:作为底图的行种子列表;
  • --cols:提供风格列的种子列表;
  • --styles:混合所涉及的 style 通道范围(StyleGAN 合成网络中逐层的风格注入位置)。

视频风格混合

python stylemixing_video.py --network=pretrained_models/stylegan_human_v2_1024.pkl --row-seed=3859 \ --col-seeds=3098,31759,3791 --col-styles=8-12 --trunc=0.8 --outdir=outputs/stylemixing_video

视频版混合固定一行的行种子,让不同列种子的指定 style 通道(--col-styles)随时间变化,从而生成"换装/换纹理"式的视频,例如对 8-12 层做混合通常对应服装纹理变化。

真实图像对齐(Alignment)

SHHQ 数据的核心工程之一是对齐:把任意原始全身照裁剪、补边、缩放为 1024×512 的标准画布,且保证人物以身体中心水平居中。alignment.py 实现了该流程:

  • 人体关键点检测使用openpose-pytorch(openpose/ 目录,含src/body.py等);
  • 人体分割使用 PaddlePaddle 的PP-HumanSeg模型(PP_HumanSeg/deploy/infer.py)。

依赖模型下载

运行对齐脚本前需要放置以下模型:

  1. 下载body_pose_model.pth放到 openpose/model/ 下;
  2. 下载并解压deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax(导出版)到PP_HumanSeg/export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax
  3. 下载并解压deeplabv3p_resnet50_os8_humanseg_512x512_100k(预训练版)到PP_HumanSeg/pretrained_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k
  4. 安装 PaddleSeg:pip install paddleseg

运行

python alignment.py --image-folder img/test/ --output-folder aligned_image/

从 alignment.py 的源码可以看到"身体中心对齐"的具体做法:取肩中点(keypoint 1)与髋中点(keypoint 8 与 11 的中点)连线的中点作为水平中心mid_x,再据此计算 1:2(宽:高)目标裁剪框;若裁剪框需要越出原图边界则用BORDER_REPLICATE补边(刻意不做背景色填充),最后统一缩放到 512×1024 输出。此外脚本还做了前置检查:分割掩码触边时自动白色补边、只允许单个人(len(subset) != 1时跳过并提示)。这正是摘要中"身体中心对齐优于脸部中心/骨盆点"结论的工程落地——示例输入 img/test/test.jpg 即可直接跑通。

PTI 反演真实图像

反演部分基于 PTI,配置集中在pti/pti_configs/下:

前置准备

下载官方发布的 PTI 权重e4e_w+.pt放到pti/目录。

关键配置

paths_config.py:

e4e = './pti/e4e_w+.pt' stylegan2_ada_shhq = './pretrained_models/stylegan_human_v2_1024.pkl' input_data_path = 'aligned_image/' # 待反演的真实图像目录(alignment.py 的输出) input_data_id = 'test' # 反演结果标识 checkpoints_dir = './outputs/pti/checkpoints/' embedding_base_dir = './outputs/pti/embeddings'

hyperparameters.py:

  • first_inv_type = 'w+':使用预训练 e4e 编码器做初始反演;
  • first_inv_type = 'w':改用投影 + 优化的方式;
  • 其他可参考项:max_pti_steps = 350first_inv_steps = 450LPIPS_value_threshold = 0.04(以 LPIPS 作为收敛判据)、pti_learning_rate = 5e-4、局部正则use_locality_regularization(默认 False)。

运行

python run_pti.py

注意:官方以aligned_image/下的测试图作为输入示例;反演得到的潜码与微调后的生成器会保存到outputs/pti/下(潜码在outputs/pti/embeddings/test/PTI/test/中,微调生成器如outputs/pti/checkpoints/model_test.pkl)。

属性编辑:InterfaceGAN / StyleSpace / SeFa

edit.py 提供三种编辑方法(InterfaceGAN、StyleSpace、SeFa)在人体潜码方向上的编辑演示:

# 用随机种子编辑生成图 python edit.py --network pretrained_models/stylegan_human_v2_1024.pkl --attr_name upper_length \ --seeds 61531,61570,61571,61610 --outdir outputs/edit_results # 用 PTI 反演出的潜码编辑真实图像 python edit.py --network outputs/pti/checkpoints/model_test.pkl --attr_name upper_length \ --outdir outputs/edit_results --real True \ --real_w_path outputs/pti/embeddings/test/PTI/test/0.pt --real_img_path aligned_image/test.png

--attr_name目前支持两个方向:

  • upper_length:上身(躯干/衣长上半段)长短;
  • bottom_length:下身(腿长)长短。

控制层与编辑强度在 edit/edit_config.py 中定义:

attr_dict = dict( interface_gan={ # strength 'upper_length': [-1], 'bottom_length': [1] }, stylespace={ # layer, strength, threshold 'upper_length': [5, -5, 0.0028], 'bottom_length': [3, 5, 0.003] }, sefa={ # layer, strength 'upper_length': [[4, 5, 6, 7], 5], 'bottom_length': [[4, 5, 6, 7], 5] } )

即 StyleSpace 在 3/5 层施加强度 ±5 的扰动、SeFa 作用于 4-7 层、InterfaceGAN 按单位方向向量做正负向移动(upper_length为负方向表示缩短)。仓库中还附带了统计得到的方向资源 latent_direction/ss_statics/(如upper_length_statis/5/statis.csv),可结合 edit/edit_helper.py 自行替换方向向量做更多属性实验。

从 edit.py 源码看,脚本会先把.pkl权重经legacy.convert转为.pth,再以latent=512, n_mlp=8, channel_multiplier=2的 StyleGAN2 生成器结构加载g_emamean_latent(3000 个样品的均值潜码)会缓存到edit/mean_latent.pkl以加速后续运行。--real True模式下--seeds被强制为[0],即只处理反演出的真实图像。

InsetGAN 演示:面部 + 身体联合生成

insetgan.py 实现了 InsetGAN 思路的快速演示:将 FFHQ 人脸模型生成的人脸与本项目的人体生成结果组合,并联合优化人脸与身体的潜码,得到协调一致的全身图像。运行前需准备:

  • FFHQ 人脸模型(ffhq.pkl,或使用自有人脸模型);
  • 预训练人脸关键点模型;
  • dlib 用的预训练 CNN 人脸检测模型。
python insetgan.py --body_network=pretrained_models/stylegan_human_v2_1024.pkl \ --face_network=pretrained_models/ffhq.pkl --body_seed=82 --face_seed=43 \ --trunc=0.6 --outdir=outputs/insetgan/ --video 1

已知限制与后续计划

README 的 TODO 列表说明了当前边界:

  • 尚未发布基于 StyleGAN3 的 1024x512 版本与基于 StyleGAN1 的 512x256 版本;
  • InsetGAN 演示尚无"用户真实人脸反演 → 与 StyleGAN-Human 身体融合"的完整接口;
  • SHHQ 完整数据集仍在分批释放中(当前为 40K 的 SHHQ-1.0)。

此外,项目提供了 Web Demo(基于 Gradio 的 Hugging Face Spaces)与 Colab notebook,前者可直接体验生成与插值,后者会引导安装环境并下载预训练模型,输出保存在./StyleGAN-Human/outputs/下。

引用

如果该工作对你的研究有帮助,请引用:

@article{fu2022styleganhuman, title={StyleGAN-Human: A Data-Centric Odyssey of Human Generation}, author={Fu, Jianglin and Li, Shikai and Jiang, Yuming and Lin, Kwan-Yee and Qian, Chen and Loy, Chen-Change and Wu, Wayne and Liu, Ziwei}, journal = {arXiv preprint}, volume = {arXiv:2204.11823}, year = {2022} }

小结

StyleGAN-Human 的价值不在于新网络结构,而在于把"数据规模、数据分布、数据对齐"三个数据工程问题在全身人像生成场景中量化验证:40K+ 规模是 StyleGAN 达到高保真人体生成的门槛;均衡数据分布对罕见姿态有效、对纹理则不然;以身体中心(肩髋中点)为锚点的对齐策略显著优于脸部或骨盆锚点。仓库内的 alignment.py、training_scripts/sg2/train.py 中的shhq配置与 edit/edit_config.py 的编辑方向配置,正是这些结论对应的可复现实现;结合generate.pyrun_pti.pyedit.py三条命令链,即可复现从原始照片对齐、模型训练、生成插值到真实人体属性编辑的完整闭环。

【免费下载链接】DragGANOfficial Code for DragGAN (SIGGRAPH 2023)项目地址: https://gitcode.com/GitHub_Trending/dr/DragGAN

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询