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):
- 下载 数据释放协议,仔细阅读并妥善填写、签署(签名须为手写);
- 使用机构邮箱将签署后的表格发送给协议中列明的联系人,主题标题为 "SHHQ Dataset Release Agreement";
- 审核通过后,官方会联系你提供数据集下载链接与解压密码。
由于申请量大、需逐一审验,等待时间可能较长。此外项目还提供了一个 100 张随机采样图像的预览包(SHHQ-1.0_samples,可从 Dataset.md 中的链接获取),方便快速上手测试;SHHQ-1.0若已下载,训练脚本默认假设其放置在data/SHHQ-1.0/下。数据集还提供 bg_white.py 脚本,可基于分割掩码将原图背景填白。
Model Zoo:预训练模型与 FID 指标
README 给出了主模型库(训练于论文完整数据集):
| 结构 | 1024x512 | 指标 | 得分 | 512x256 | 指标 | 得分 |
|---|---|---|---|---|---|---|
| StyleGAN1 | stylegan_human_v1_1024.pkl | fid50k | 3.79 | 待发布 | - | - |
| StyleGAN2 | stylegan_human_v2_1024.pkl | fid50k_full | 1.57 | stylegan_human_v2_512.pkl | fid50k_full | 1.97 |
| StyleGAN3 | 待发布 | - | - | stylegan_human_v3_512.pkl | fid50k_full | 2.54 |
而在 Dataset.md 中还单独列出了仅用 SHHQ-1.0(40K)训练的模型:
| 结构 | 1024x512 | 指标 | 得分 | 512x256 | 指标 | 得分 |
|---|---|---|---|---|---|---|
| StyleGAN2 | SHHQ-1.0_sg2_1024.pkl | fid50k_full | 3.56 | SHHQ-1.0_sg2_512.pkl | fid50k_full | 3.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.15environment.yml 中固定了关键版本:python=3.8、pytorch=1.9.1、cudatoolkit=11.1、numpy>=1.20、pillow=8.3.1,并通过 pip 安装imgui、glfw、dlib、opencv-python、moviepy、imutils等依赖(后者用于可视化窗口与图像对齐流程)。
常见坑:若调用 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 专属改动:
- 基础配置枚举中新增了
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; - 新增了
--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_base、channel_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 1走legacy.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)。
依赖模型下载
运行对齐脚本前需要放置以下模型:
- 下载
body_pose_model.pth放到 openpose/model/ 下; - 下载并解压
deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax(导出版)到PP_HumanSeg/export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax; - 下载并解压
deeplabv3p_resnet50_os8_humanseg_512x512_100k(预训练版)到PP_HumanSeg/pretrained_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k; - 安装 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 = 350、first_inv_steps = 450、LPIPS_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_ema;mean_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.py、run_pti.py、edit.py三条命令链,即可复现从原始照片对齐、模型训练、生成插值到真实人体属性编辑的完整闭环。
【免费下载链接】DragGANOfficial Code for DragGAN (SIGGRAPH 2023)项目地址: https://gitcode.com/GitHub_Trending/dr/DragGAN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考