文生图学习步骤


好的,既然你是初学者,我给你设计一个"边学边做"的计划。

核心思路是:

每个学习阶段结束后,都能产出一个可运行的小成果,最终组合成完整的 MVP。


一、学习路线总览

整个学习分 6 个阶段,每个阶段大约 1-2 周

阶段 1:先跑通一张图(体验文生图)
  ↓
阶段 2:学会控制风格(LoRA)
  ↓
阶段 3:学会控制构图(ControlNet)
  ↓
阶段 4:学会 Prompt 优化(LLM + SD)
  ↓
阶段 5:学会角色一致性(IP-Adapter)
  ↓
阶段 6:搭建 MVP 平台(Web + API + 队列)

二、分阶段详细计划


阶段 1:先跑通一张图

目标

在本地或云端跑通文生图,输入一句话,输出一张图。

你要学什么

  • Stable Diffusion 是什么
  • 扩散模型的基本原理(不用深入数学,知道"加噪→去噪"即可)
  • 怎么安装和运行

用什么技术

方案 A:零代码体验(推荐先用这个)

安装 ComfyUIWebUI(A1111)

  • ComfyUI:节点式操作,更灵活
  • WebUI:界面更直观,适合入门

方案 B:代码方式

用 Python + HuggingFace Diffusers:

from diffusers import StableDiffusionXLPipeline
import torch

pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
)
pipe = pipe.to("cuda")

image = pipe("a cat wearing sunglasses on a beach").images[0]
image.save("output.png")

硬件要求

  • 至少 8GB 显存 GPU
  • 推荐 12GB 以上
  • 如果没有本地 GPU,用云 GPU(AutoDL、Google Colab)

阶段产出

  • 能输入一句英文描述,生成一张图
  • 理解 positive prompt 和 negative prompt 的作用
  • 能调整基本参数(步数、CFG scale、尺寸)

阶段 2:学会控制风格(LoRA)

目标

学会用 LoRA 切换不同的画风。

你要学什么

  • LoRA 是什么(一个小的风格插件)
  • 怎么下载别人训练好的 LoRA
  • 怎么加载 LoRA
  • 怎么调节 LoRA 权重
  • 怎么叠加多个 LoRA

用什么技术

下载 LoRA

去这些网站找现成的 LoRA:

  • Civitai(最大的 SD 模型社区)
  • HuggingFace
  • LiblibAI(国内)

加载 LoRA

ComfyUI 里直接拖节点。

代码方式:

from diffusers import StableDiffusionXLPipeline

pipe = StableDiffusionXLPipeline.from_pretrained(...)
pipe.load_lora_weights("path/to/ink_painting_lora.safetensors")

image = pipe("一个少女站在山水之间, 水墨风格").images[0]

实践任务

  • 下载 3 个不同风格的 LoRA(水墨、动漫、写实)
  • 用同一段文字描述,分别加载不同 LoRA,对比效果
  • 尝试调节 LoRA 权重(0.3 / 0.5 / 0.8 / 1.0)

阶段产出

  • 能用 LoRA 切换风格
  • 理解 LoRA 权重对效果的影响
  • 建立一个小型"风格库"(3-5 个 LoRA)

阶段 3:学会控制构图(ControlNet)

目标

学会用 ControlNet 控制生成图片的构图、姿势、边缘。

你要学什么

  • ControlNet 是什么
  • 常用的控制类型:
    • Canny(边缘线条)
    • OpenPose(人体姿势)
    • Depth(深度图)
    • Lineart(线稿)
  • 怎么使用 ControlNet

用什么技术

ComfyUI 里有现成的 ControlNet 节点。

代码方式:

from diffusers import ControlNetModel, StableDiffusionXLControlNetPipeline

controlnet = ControlNetModel.from_pretrained("controlnet-canny-sdxl")
pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    controlnet=controlnet
)

# 传入一张 canny 边缘图作为构图参考
image = pipe("a warrior in armor", image=canny_image).images[0]

实践任务

  • 找一张人物照片,提取 OpenPose 骨架
  • 用骨架 + 文字描述生成新图片
  • 对比有 ControlNet 和没有 ControlNet 的效果差异

阶段产出

  • 能用 ControlNet 控制人物姿势
  • 能用线稿控制构图
  • 理解不同 ControlNet 类型的适用场景

阶段 4:学会 Prompt 优化(LLM + SD)

目标

用大模型(LLM)把作家的中文文学描述,自动转化为高质量的 SD prompt。

你要学什么

  • 为什么作家的文字不能直接当 prompt
  • 怎么用 LLM 做 prompt 优化
  • 怎么设计 prompt 优化的 System Prompt

用什么技术

LLM 选型

  • 本地:Qwen(通义千问)
  • API:GPT-4o / Claude / Qwen API / DeepSeek

Prompt 优化模板

[System Prompt]
你是一个专业的 Stable Diffusion prompt 工程师。
用户会给你一段中文文学描述,请你将其转化为高质量的英文 SD prompt。

要求:
1. 输出 positive_prompt(正面描述)
2. 输出 negative_prompt(负面排除)
3. 建议的风格标签
4. 建议的画面比例

用户输入:
"暮色四合,残阳如血,少女倚在斑驳的城墙上,
 风吹起她银白色的长发,远处的山脉在薄雾中若隐若现"

LLM 输出

{
  "positive_prompt": "a girl leaning on ancient weathered city wall, 
    sunset, blood-red sky, silver white long hair blowing in wind, 
    mountains in distant mist, cinematic lighting, 
    masterpiece, best quality, fantasy illustration",
  "negative_prompt": "ugly, deformed, blurry, low quality, 
    bad anatomy, extra limbs",
  "style": "fantasy_illustration",
  "aspect_ratio": "16:9"
}

实践任务

  • 写一个 Python 脚本
  • 输入:一段中文文学描述
  • 中间:调用 LLM API 优化 prompt
  • 输出:调用 SD 生成图片
  • 实现完整的 文学描述 → prompt → 图片 链路

阶段产出

  • 一个可运行的脚本
  • 输入中文,输出图片
  • 体验到 LLM 优化 prompt 对生成质量的巨大提升

阶段 5:学会角色一致性(IP-Adapter)

目标

让同一个角色在不同场景中保持外貌一致。

你要学什么

  • IP-Adapter 是什么
  • 怎么用参考图控制生成角色
  • 怎么结合 LoRA + IP-Adapter

用什么技术

IP-Adapter

用一张角色参考图,控制生成图中角色的外貌特征。

from diffusers import StableDiffusionXLPipeline
from diffusers.utils import load_image

# 加载 IP-Adapter
pipe.load_ip_adapter("h94/IP-Adapter", subfolder="sdxl_models")

# 角色参考图
ref_image = load_image("character_reference.png")

# 生成不同场景,但角色一致
image1 = pipe("the girl standing in a forest", 
              ip_adapter_image=ref_image).images[0]
image2 = pipe("the girl fighting a dragon", 
              ip_adapter_image=ref_image).images[0]

实践任务

  • 准备一张角色参考图
  • 用 IP-Adapter 生成同一角色在 3 个不同场景中的图片
  • 对比角色是否保持一致

阶段产出

  • 能用 IP-Adapter 保持角色一致性
  • 理解参考图对生成效果的影响
  • 能结合 LoRA(风格)+ IP-Adapter(角色)同时使用

阶段 6:搭建 MVP 平台

目标

把前面学到的所有能力,组装成一个可用的 Web 平台。

MVP 功能清单

必须有的功能

  1. 作家输入中文描述
  2. 选择风格(从预设风格库选)
  3. 可选上传角色参考图
  4. 点击生成
  5. 一次生成 4 张供选择
  6. 可以下载图片

可以先不做的

  • 用户注册登录(先单用户)
  • 计费
  • 大规模并发
  • 角色管理系统

技术架构

前端(Web)
  ↓
后端 API(FastAPI)
  ├── Prompt 优化服务(调 LLM)
  ├── 风格选择(加载对应 LoRA)
  ├── 角色参考(IP-Adapter)
  └── 图片生成(SD Pipeline)
  ↓
GPU(本地或云)
  ↓
图片存储(本地文件 / OSS)
  ↓
返回图片给前端

技术选型

前端

  • Gradio(最快,Python 写前端)
  • 或 Streamlit
  • 后期可换 React/Vue

后端

  • FastAPI(Python)

模型推理

  • Diffusers(HuggingFace)
  • ComfyUI API 模式

图片存储

  • 先本地文件系统
  • 后期换 OSS / S3

核心代码骨架

from fastapi import FastAPI
from diffusers import StableDiffusionXLPipeline
import torch

app = FastAPI()

# 加载基础模型(启动时加载一次)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

# 预加载风格 LoRA 映射
STYLE_LORAS = {
    "水墨风": "loras/ink_painting.safetensors",
    "动漫风": "loras/anime.safetensors",
    "写实风": "loras/realistic.safetensors",
}

@app.post("/generate")
async def generate(
    text: str,           # 作家的中文描述
    style: str,          # 风格选择
    ref_image: str = None  # 角色参考图(可选)
):
    # 1. LLM 优化 prompt
    sd_prompt = llm_optimize_prompt(text)
    
    # 2. 加载对应风格 LoRA
    pipe.load_lora_weights(STYLE_LORAS[style])
    
    # 3. 如果有角色参考图,加载 IP-Adapter
    if ref_image:
        pipe.load_ip_adapter(...)
    
    # 4. 生成 4 张图
    images = pipe(
        sd_prompt["positive"],
        negative_prompt=sd_prompt["negative"],
        num_images_per_prompt=4
    ).images
    
    # 5. 保存并返回
    paths = save_images(images)
    return {"images": paths}

阶段产出

  • 一个可运行的 Web 应用
  • 作家输入中文 → 选风格 → 生成图片
  • 支持角色参考图
  • 一次出 4 张供选择

三、时间规划建议

阶段 内容 建议时间 产出
1 跑通第一张图 3-5 天 能生成图片
2 LoRA 风格控制 3-5 天 能切换风格
3 ControlNet 构图 3-5 天 能控制构图
4 LLM Prompt 优化 3-5 天 中文→图片链路
5 IP-Adapter 角色一致 3-5 天 角色一致性
6 MVP 平台搭建 1-2 周 可用的 Web 产品

总计大约 5-8 周,你就能从零搭出一个可演示的 MVP。


四、硬件建议

学习阶段

  • Google Colab(免费 GPU,够学习用)
  • AutoDL(国内云 GPU,便宜)
  • 自己的 GPU(至少 8GB 显存)

MVP 阶段

  • 一台 24GB 显存的 GPU(如 RTX 4090 / A5000)
  • 或云 GPU(A10 / L40)

五、学习资源推荐

入门

  • Stable Diffusion WebUI 官方文档
  • ComfyUI 官方教程
  • HuggingFace Diffusers 文档

进阶

  • Civitai(看别人怎么用 LoRA / ControlNet)
  • ControlNet 官方 GitHub
  • IP-Adapter 官方 GitHub

社区

  • Reddit: r/StableDiffusion
  • B 站搜"Stable Diffusion 教程"
  • GitHub 上各种 ComfyUI workflow

六、一句话总结

从"跑通第一张图"开始,逐步叠加 LoRA(风格)→ ControlNet(构图)→ LLM(Prompt 优化)→ IP-Adapter(角色一致)→ FastAPI + Gradio(Web 平台),大约 5-8 周就能从零搭出一个"作家输入中文描述,自动生成插画"的 MVP。


如果你愿意,我下一步可以直接给你:

  1. 阶段 1 的详细操作步骤(手把手跑通第一张图)
  2. 阶段 4 的 LLM Prompt 优化模板(可直接用)
  3. 阶段 6 的 MVP 完整代码骨架

你想从哪个开始?

posted @ 2026-03-27 08:46  向着朝阳  阅读(13)  评论(0)    收藏  举报