三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Stable Diffusion实战:从提示词到ControlNet,打造可控AI人物图像生成工作流

Stable Diffusion实战:从提示词到ControlNet,打造可控AI人物图像生成工作流

最近在开发一个图像生成项目时,遇到了一个有趣的挑战:如何让AI模型生成既符合特定主题(如“黑T恤波点裙少女”),又具备生动、自然、富有“出战”动感的人物图像。网上关于Stable Diffusion、ControlNet等工具的教程很多,但往往侧重于基础操作或单一风格,对于“主题+风格+动态感”这种复合型需求,缺乏一套从构思到落地的完整工作流。

本文将围绕“黑T恤波点裙少女”这一具体形象,拆解如何使用主流AI绘画工具(以Stable Diffusion WebUI为例)实现高质量、可控的人物图像生成。内容涵盖从提示词工程、模型选择、ControlNet姿态控制,到后期微调的全流程实战。无论你是刚接触AI绘画的新手,还是想提升出图可控性的开发者,都能从中获得可直接复用的代码、配置和避坑指南。

1. 核心概念:可控图像生成与提示词工程

在开始实战前,我们需要理解两个核心概念:可控图像生成提示词工程。它们是实现我们目标的基础。

可控图像生成指的是用户能够通过输入(如文本、草图、姿态图、深度图等)精确地引导AI模型生成符合预期的图像。这超越了早期仅凭文本描述“抽卡”的随机性。实现可控性的关键技术包括:

  • LoRA/LyCORIS:用于微调模型,使其学会特定的人物特征、画风或服饰样式。
  • ControlNet:通过额外的条件输入(如边缘检测、姿态骨架、深度信息、语义分割等)严格控制图像的构图、姿态和结构。
  • IP-Adapter:通过参考图来影响生成图像的风格和内容。

提示词工程则是与AI模型沟通的语言艺术。一段好的提示词(Prompt)通常包含:

  1. 质量标签:如masterpiece, best quality, ultra-detailed, 8k,用于设定图像的基础质量。
  2. 主体描述:核心描述对象,如1girl, black T-shirt, polka dot skirt
  3. 细节刻画:对主体外观、神态、动作的细化,如long black hair, smiling, dynamic pose, running
  4. 场景与环境:如in a city street, sunset, cinematic lighting
  5. 风格与艺术家:如anime style, trending on artstation, by Studio Ghibli
  6. 负面提示词:明确不希望出现的内容,如lowres, bad anatomy, extra fingers, blurry

我们的目标“进化!黑T恤波点裙少女请求出战!”就包含了主体(黑T恤波点裙少女)动作与情绪(请求出战,带有动感和决心)以及一种“进化”或“升级”的叙事感。这需要我们将抽象概念转化为模型能理解的具体视觉元素和提示词。

2. 环境准备与工具说明

本次实战主要基于Stable Diffusion WebUI (Automatic1111),它是一个功能强大且插件生态丰富的开源项目。其他工具如ComfyUI原理相通,但节点式操作不同,本文以WebUI为例。

2.1 基础环境要求

  • 操作系统:Windows 10/11, Linux 或 macOS(需M系列芯片)。
  • Python:3.10.6 或 3.10.11(这是与PyTorch等库兼容性最好的版本)。
  • Git:用于克隆仓库。
  • CUDA(NVIDIA显卡用户):建议11.8版本,确保显卡驱动支持。
  • 显存:至少4GB,推荐8GB或以上以获得更好体验和生成更高分辨率图像。

2.2 主要工具与模型

  1. Stable Diffusion WebUI:我们将使用其官方安装脚本。
  2. 基础大模型:选择一个人物表现力强的模型。例如:
    • majicmixRealistic_v7.safetensors:擅长亚洲真实系人物。
    • chilloutmix_NiPrunedFp32Fix.safetensors:同样优秀的真实系模型。
    • ghostmix_v20Bakedvae.safetensors:偏向动漫风格。
    • 你可以根据想要的最终风格(真实感/动漫感)进行选择。
  3. LoRA模型:用于强化特定服饰或风格。我们可能需要寻找或训练与“波点裙”、“特定画风”相关的LoRA。
  4. ControlNet模型:用于控制姿态。必备模型为control_v11p_sd15_openpose.pth(姿态检测)。

2.3 安装Stable Diffusion WebUI

对于Windows用户,最简便的方式是使用一键安装包或运行官方脚本。

方式一:使用一键安装包(推荐新手)下载整合包(如秋叶启动器),解压后运行即可,内置了常用模型和插件。

方式二:命令行安装

# 1. 克隆仓库 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui # 2. 运行启动脚本(Windows) webui-user.bat

首次运行会自动下载所需依赖和基础模型。启动后,在浏览器中打开http://127.0.0.1:7860即可访问WebUI界面。

2.4 安装ControlNet插件与模型

  1. 在WebUI的“Extensions”标签页,点击“Available”,点击“Load from”按钮加载扩展列表。
  2. 找到“sd-webui-controlnet”,点击其右侧的“Install”按钮。
  3. 安装完成后,回到“Installed”标签页,点击“Apply and restart UI”
  4. 重启后,在“Settings”->“ControlNet”中,可以设置模型下载路径。然后将下载好的control_v11p_sd15_openpose.pth模型文件放入stable-diffusion-webui/extensions/sd-webui-controlnet/models目录。
  5. 再次重启WebUI,在文生图或图生图页面的下方就能看到ControlNet折叠面板了。

3. 核心工作流拆解:从构思到出图

实现“黑T恤波点裙少女请求出战”需要一套组合拳。下面我们将流程分解为几个关键步骤。

3.1 步骤一:构思与参考图准备

“请求出战”是一个充满张力的动作。我们可以将其分解为:

  • 姿态:可能是奔跑起步、挥拳、持武器准备、回头凝望等动态姿势。
  • 表情:坚定、果敢、略带紧张或兴奋。
  • 氛围:可能有风扬起头发和裙摆,光影对比强烈,背景模糊突出主体。

行动:在Pinterest、花瓣网等网站搜索“dynamic pose female”、“action pose”、“anime running pose”等关键词,找到1-2张符合你心中“出战”姿态的图片作为参考。这张图将用于ControlNet的姿势控制。

3.2 步骤二:构建核心提示词

根据构思,编写正向和负向提示词。

正向提示词 (Prompt):

(masterpiece, best quality, ultra-detailed, 8k), 1girl, solo, black T-shirt, polka dot skirt, (long black hair:1.2), dynamic pose, running, determined expression, looking at viewer, wind blowing hair and skirt, motion lines, cinematic lighting, dramatic shadows, street at dusk, (neon lights:0.8), anime style, detailed background
  • (masterpiece...):质量标签,提高出图基础质量。
  • 1girl, solo:明确单个人物。
  • black T-shirt, polka dot skirt:核心服饰要求。
  • (long black hair:1.2):括号和:1.2表示加强权重(1.2倍)。
  • dynamic pose, running, determined expression:描述动作和表情。
  • wind blowing..., motion lines:增加动感细节。
  • cinematic lighting...:设置光影和氛围。
  • street at dusk, (neon lights:0.8):背景环境,0.8表示减弱权重,避免霓虹灯过于抢眼。
  • anime style:指定风格。如果想更真实,可换成photorealistic

负面提示词 (Negative Prompt):

(worst quality, low quality:1.4), (bad anatomy), (inaccurate limb:1.2), bad hands, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry, ugly, duplicate, morbid, mutilated, extra limbs, deformed hands, poorly drawn hands, poorly drawn face, mutation, disfigured, bad proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, (bad eyes:1.1)

负面提示词用于排除常见低质量图像缺陷,如畸形手脚、多余肢体、水印等。积累一套通用的负面提示词模板很有用。

3.3 步骤三:利用ControlNet锁定姿态

这是实现构图可控的关键。

  1. 在文生图页面,向下滚动找到ControlNet折叠面板,展开它。
  2. 勾选“Enable”“Pixel Perfect”
  3. “Control Type”下拉菜单中选择“OpenPose”
  4. 将你准备好的姿态参考图拖入ControlNet的图片上传区域。
  5. 预处理器选择“openpose”,模型选择“control_v11p_sd15_openpose [cab727d4]”
  6. 点击“Preview”按钮,你会看到提取出的白色骨架图。这确保了生成的人物将严格遵循参考图的姿态。
  7. 控制权重引导介入/终止时机可以先使用默认值(权重1.0,介入0.0,终止1.0)。如果姿态控制过强导致画面僵硬,可以适当降低权重(如0.8)。

3.4 步骤四:参数配置与生成

回到文生图顶部进行参数设置:

  • 大模型:选择你准备好的基础模型,如majicmixRealistic_v7.safetensors
  • 采样方法:DPM++ 2M Karras 或 Euler a 都是不错的选择,出图快且质量稳定。
  • 采样迭代步数:20-30步。
  • 图片尺寸:根据你的姿态图比例设置。常用比例如 512x768(竖版人像)或 768x512(横版)。可以勾选“Highres. fix”进行高清修复,先以较小尺寸生成构图,再放大到高清。
  • 提示词引导系数:7-9之间,数值越高越遵循提示词,但过高可能导致色彩饱和或画面僵硬。
  • 种子:保持为-1(随机)。如果生成了不错的图,可以固定种子进行微调。

点击“Generate”,等待片刻,你就能得到第一张结合了自定义姿态和文本描述的“黑T恤波点裙少女”了。

4. 完整实战案例:生成动态战斗少女

让我们通过一个更具体的例子,将上述流程串联起来。假设我们要生成一个“在废墟街道上,身着黑T恤波点裙,手持光剑,做出防御姿态的少女”。

4.1 项目结构与准备

  1. 准备好一张能体现“防御姿态”的参考图(例如,角色半蹲,单手前举仿佛格挡)。
  2. 将参考图命名为pose_reference.jpg
  3. 在WebUI中,确保已加载majicmixRealistic_v7模型和 ControlNet 的 OpenPose 模型。

4.2 编写进阶提示词

正向提示词:

(masterpiece, best quality, ultra-detailed), 1girl, solo, black T-shirt, (black polka dot miniskirt:1.3), thighhighs, long flowing black hair, fierce blue eyes, defensive stance, holding a glowing energy sword, sparks flying, in a ruined cyberpunk city street, raining, reflections on wet ground, (cinematic lighting:1.2), dynamic angle, from below, (anime key visual:1.1)

负面提示词:沿用上一节的通用模板。

4.3 配置ControlNet与生成参数

在ControlNet单元:

  • 上传pose_reference.jpg
  • Preprocessor:openpose
  • Model:control_v11p_sd15_openpose
  • Control Weight: 1.0
  • Starting Control Step: 0.0
  • Ending Control Step: 1.0

在文生图主界面:

# 这是一个参数设置的文字描述,实际在WebUI界面中操作 Stable Diffusion checkpoint: majicmixRealistic_v7.safetensors Sampling method: DPM++ 2M Karras Sampling steps: 25 Width: 512 Height: 768 Batch count: 4 # 一次生成4张,便于挑选 CFG Scale: 7.5 Seed: -1 Highres. fix: Enabled Upscaler: R-ESRGAN 4x+ Hires steps: 10 Denoising strength: 0.3

4.4 运行与迭代

点击生成后,你会得到4张基于同一姿态但细节各异的图像。

  • 第一轮观察:检查服饰(黑T恤、波点裙)是否准确,光剑是否合理,构图是否满意。
  • 迭代优化
    • 如果服饰不对:在提示词中增加权重,如(black T-shirt:1.4)。或者考虑使用LoRA。我们可以去C站(Civitai)搜索polka dot相关的LoRA模型,下载后放入stable-diffusion-webui/models/Lora目录。在提示词中加入<lora:polkadot_pattern_v1:0.7>来调用它。
    • 如果画面杂乱:提高CFG Scale到8.5,或在负面提示词中加入cluttered background
    • 如果喜欢某张图的构图但细节不佳:固定该图的种子(Seed),稍微调整提示词或使用“图生图”功能,以较低的“重绘幅度”(如0.3-0.5)进行微调。
    • 如果动态感不足:在提示词中加入motion blur, speed lines, action scene

4.5 结果后期处理

在WebUI的“Extras”标签页,可以对选定的最佳图片进行后期放大。

  1. 将图片拖入。
  2. 选择放大算法(如R-ESRGAN 4x+ESRGAN_4x)。
  3. 设置放大倍数(2x或4x)。
  4. 点击生成,获得更高分辨率的最终图像。

5. 常见问题与排查思路

在生成过程中,你可能会遇到以下问题:

问题现象可能原因解决思路
人物脸部崩坏1. 基础模型不擅长面部。
2. 分辨率太低。
3. 提示词冲突。
1. 换用以人物见长的模型(如chilloutmix)。
2. 启用Hires.fix,先低分辨率构图再高清修复。
3. 使用面部修复插件(如ADetailer),在生成后自动重绘脸部。
未生成波点裙或黑T恤1. 提示词权重不够或描述不清。
2. 模型不理解“polka dot”。
3. ControlNet姿态影响了服饰生成。
1. 增加关键词权重(polka dot skirt:1.5),或更具体描述white polka dots on black skirt
2. 使用相关的LoRA模型强化特征。
3. 适当降低ControlNet权重(如0.7),给模型一些自由发挥服饰的空间。
画面僵硬,动态感不足1. ControlNet姿态权重过高。
2. 提示词中动态描述不够。
3. 采样步数太少。
1. 逐步降低ControlNet权重至0.6-0.8。
2. 添加dynamic angle, motion blur, wind, flying hair等词。
3. 增加采样步数至30,并使用DPM++ 2M Karras等动态表现较好的采样器。
生成多人或人物畸形1. 提示词未限定人数。
2. 负面提示词未涵盖常见畸形。
1. 明确提示1girl, solo
2. 检查并强化负面提示词,确保包含extra limbs, bad anatomy, mutated hands等。
背景与主体融合生硬1. 提示词中背景与主体关联弱。
2. 景深效果不足。
1. 让背景与动作产生联系,如running on a rainy street
2. 添加depth of field, bokeh等词创造景深。或使用ControlNet的Depth模型单独控制背景深度。
图片模糊不清1. 未使用高清修复。
2. 模型本身分辨率低。
3. 迭代步数不足。
1. 务必启用“Hires. fix”
2. 尝试不同的高清放大算法。
3. 适当增加Hires steps(10-20)并调整Denoising strength(0.3-0.5)。

6. 进阶技巧与最佳实践

掌握了基础流程后,以下技巧能帮助你产出更专业、更稳定的作品。

6.1 使用LoRA精准控制风格与服饰

LoRA文件小,效果好,是定制化的利器。

  • 寻找LoRA:在Civitai等平台搜索clothing style,polka dot,specific character等关键词。
  • 安装与调用:将.safetensors文件放入models/Lora目录。在提示词中使用语法<lora:文件名:权重>调用,权重通常从0.5开始尝试。
  • 组合使用:可以同时使用多个LoRA,例如一个控制画风,一个控制发型,一个控制服饰。注意总权重不宜过高,避免冲突。

6.2 多ControlNet单元协同工作

WebUI支持同时启用多个ControlNet单元,实现更复杂的控制。

  • 场景:生成一个姿势准确(OpenPose)且构图符合草图(Canny)的图像。
  • 操作:在ControlNet面板,上传姿态图到单元1(启用OpenPose),上传简笔画草图到单元2(启用Canny)。通过调整各自的权重,让模型在满足姿态的同时,大致遵循你的构图草图。

6.3 利用图生图进行局部重绘和迭代优化

文生图得到基础图后,图生图是强大的优化工具。

  • 局部重绘:如果对图像的某个部分(如脸部、手中的武器)不满意,可以使用画笔工具涂抹该区域,然后在图生图中保持提示词不变,设置一个较低的重绘幅度(0.3-0.5),仅对该区域进行重新生成。
  • 风格迁移:将一张生成好的图送入图生图,在提示词中描述新的风格(如oil painting style),并提高重绘幅度(0.6-0.8),可以尝试改变整体画风。

6.4 提示词语法与权重的艺术

  • (word):将word的权重提高至1.1倍。
  • [word]:将word的权重降低至0.9倍。
  • (word:1.5):明确设置权重为1.5倍。
  • word1 AND word2:强调同时关注word1word2
  • [word1:word2:0.3]:在采样过程的30%时,将word1替换为word2(常用于改变角色年龄或表情)。

6.5 工程化与可重复性

对于需要批量生成或团队协作的项目:

  1. 保存工作流:使用WebUI的“保存”功能,将当前所有参数(模型、提示词、ControlNet设置、种子等)保存为一个.png图片或.json文件。
  2. 使用X/Y/Z图表:在“Script”下拉菜单中选择“X/Y/Z plot”,可以系统性地测试不同模型、采样器、CFG Scale、种子等参数组合,找到最优配置。
  3. 整理模型库:为模型、LoRA、VAE等文件建立清晰的文件夹结构和命名规范,例如models/Stable-diffusion/character/models/Lora/clothing/

从“黑T恤波点裙少女”这个简单的主题出发,我们实际上探索了一条通往可控AI图像生成的路径。这条路径的核心在于分解需求、善用工具、持续迭代。掌握提示词工程让你能与模型有效沟通,熟练运用ControlNet和LoRA则让你掌握了指挥视觉元素的画笔与橡皮。记住,第一张图很少是完美的,但它是一个重要的起点。通过分析问题、调整参数、利用图生图微调,最终让脑海中的画面跃然屏上。

← 返回列表