语言:
- 英文
缩略图: ''
标签:
- 控制网
- laion
- 人脸
- 媒体管道
- 图像到图像
许可证: 开放轨道
基础模型: stabilityai/stable-diffusion-2-1-base
数据集:
- LAION-人脸
- LAION
管道标签: 图像到图像
FORK自 https://huggingface.co/CrucibleAI/ControlNetMediaPipeFace
ControlNet LAION 人脸数据集
目录:
- 概述: 样本、内容与构建
- 使用: 下载、训练与推理
- 许可证
- 致谢
概述:
本数据集专为训练带有人类面部表情的ControlNet而设计。包含瞳孔关键点以实现视线方向控制。训练已在Stable Diffusion v2.1基础版(512)和Stable Diffusion v1.5上测试。
样本:
精选自ControlNet + Stable Diffusion v2.1基础版
支持多人脸图像:
数据集内容:
- train_laion_face.py - ControlNet训练入口文件
- laion_face_dataset.py - 数据集迭代代码,包含裁剪和调整大小逻辑
- tool_download_face_targets.py - 读取metadata.json并填充目标文件夹的工具
- tool_generate_face_poses.py - 生成源图像的原始文件(为可复现性保留,训练非必需)
- training/laion-face-processed/prompt.jsonl - 包含图像提示文本
- training/laion-face-processed/metadata.json - LAION数据摘录,也用于下载目标数据集
- training/laion-face-processed/source/xxxxxxxxx.jpg - 带检测标记的图像(从目标图像生成)
- training/laion-face-processed/target/xxxxxxxxx.jpg - 选自LAION Face的图像
数据集构建:
源图像通过提取LAION Face的00000切片后,经特殊配置参数的MediaPipe人脸检测器处理生成。
MediaPipe使用的颜色和线条粗细配置如下:
线条粗细 = 2
半径 = 1
右虹膜绘制 = 绘图规范(颜色=(10,200,250), 粗细=线条粗细, 圆半径=半径)
右眼绘制 = 绘图规范(颜色=(10,200,180), 粗细=线条粗细, 圆半径=半径)
右眉绘制 = 绘图规范(颜色=(10,220,180), 粗细=线条粗细, 圆半径=半径)
左虹膜绘制 = 绘图规范(颜色=(250,200,10), 粗细=线条粗细, 圆半径=半径)
左眼绘制 = 绘图规范(颜色=(180,200,10), 粗细=线条粗细, 圆半径=半径)
左眉绘制 = 绘图规范(颜色=(180,220,10), 粗细=线条粗细, 圆半径=半径)
嘴部绘制 = 绘图规范(颜色=(10,180,10), 粗细=线条粗细, 圆半径=半径)
头部绘制 = 绘图规范(颜色=(10,200,10), 粗细=线条粗细, 圆半径=半径)
虹膜标记规范 = {468: 右虹膜绘制, 473: 左虹膜绘制}
我们实现了名为draw_pupils
的方法来修改MediaPipe部分功能,作为待合并变更前的临时方案。
使用说明:
ZIP文件应解压至ControlNet目录根路径,使.py
文件与tutorial_train.py
等文件同级。假设基于ControlNet仓库0acb7e5版本,但无直接依赖。
下载:
因版权限制,需使用tool_download_face_targets.py脚本读取metadata.json自动下载目标文件(需tqdm库)。
训练:
目标文件夹就绪后,需24GB以上显存设备运行。我们的模型在A6000上训练了200小时(4个epoch)。
python tool_add_control.py ./models/v1-5-pruned-emaonly.ckpt ./models/controlnet_sd15_laion_face.ckpt
python ./train_laion_face_sd15.py
推理:
提供gradio_face2image.py,需修改以下两行指向训练模型:
model = create_model('./models/cldm_v21.yaml').cpu() # SD2.1基础版微调时无需修改
model.load_state_dict(load_state_dict('./models/control_sd21_openpose.pth', location='cuda'))
注意: 模型在视线和嘴部跟踪上优于先前尝试,但仍可能忽略控制。提示词中加入"看向右侧"等细节可改善效果。
🧨 Diffusers
建议配合Stable Diffusion 2.1 - Base使用。实验性支持其他扩散模型如dreambooth微调版。
Stable Diffusion 1.5用户需在from_pretrained参数中添加subfolder="diffusion_sd15"
。提供v1.5半精度变体但未经测试。
- 安装依赖:
$ pip install diffusers transformers accelerate
- 运行代码:
from PIL import Image
import numpy as np
import torch
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from diffusers.utils import load_image
image = load_image(
"https://huggingface.co/CrucibleAI/ControlNetMediaPipeFace/resolve/main/samples_laion_face_dataset/family_annotation.png"
)
controlnet = ControlNetModel.from_pretrained("CrucibleAI/ControlNetMediaPipeFace", torch_dtype=torch.float16, variant="fp16")
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1-base", controlnet=controlnet, safety_checker=None, torch_dtype=torch.float16
)
controlnet = ControlNetModel.from_pretrained("CrucibleAI/ControlNetMediaPipeFace", subfolder="diffusion_sd15")
pipe = StableDiffusionControlNetPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", controlnet=controlnet, safety_checker=None)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_xformers_memory_efficient_attention()
pipe.enable_model_cpu_offload()
image = pipe("牙医广告中的快乐家庭", image=image, num_inference_steps=30).images[0]
image.save('./images.png')
许可证:
源图像: (/training/laion-face-processed/source/)
采用CC0 1.0许可,详见 http://creativecommons.org/publicdomain/zero/1.0
训练模型:
ControlNet检查点采用CreativeML Open RAIL-M许可。
源代码:
lllyasviel/ControlNet采用Apache 2.0许可,我们的修改沿用相同许可。
致谢:
特别感谢张等人(ControlNet)、Rombach等人(StabilityAI/Stable Diffusion)和Schuhmann等人(LAION)。
本文档样本图像来自Unsplash,采用CC0许可。
@misc{zhang2023adding,
title={为文本到图像扩散模型添加条件控制},
author={Lvmin Zhang和Maneesh Agrawala},
year={2023},
eprint={2302.05543},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@misc{rombach2021highresolution,
title={基于潜在扩散模型的高分辨率图像合成},
author={Robin Rombach等},
year={2021},
eprint={2112.10752},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@misc{schuhmann2022laion5b,
title={LAION-5B: 用于训练下一代图文模型的大规模开放数据集},
author={Christoph Schuhmann等},
year={2022},
eprint={2210.08402},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
本项目由Crucible AI支持实现。