Stable Diffusion 入门指南:零基础 AI 绘图实战
Stable Diffusion 入门指南:零基础 AI 绘图实战 为何难以生成高质量的赛博朋克风格图像?关键在于理解模型原理 先说个案例:上周一位纯文科生,连 PS 图层都没摸过,拿笔记本 30 分钟整出一张 4K 猫娘,发到群里直接 99+。 我当场社死——调了三天参数,结果对方靠「可爱,喵喵,赛博,霓虹,8K」五个词秒杀我。 后来我悟了:Stable Diffusion 这玩意儿跟谈恋爱一样…

Stable Diffusion 入门指南:零基础 AI 绘图实战 为何难以生成高质量的赛博朋克风格图像?关键在于理解模型原理 先说个案例:上周一位纯文科生,连 PS 图层都没摸过,拿笔记本 30 分钟整出一张 4K 猫娘,发到群里直接 99+。 我当场社死——调了三天参数,结果对方靠「可爱,喵喵,赛博,霓虹,8K」五个词秒杀我。 后来我悟了:Stable Diffusion 这玩意儿跟谈恋爱一样…

先说个案例:上周一位纯文科生,连 PS 图层都没摸过,拿笔记本 30 分钟整出一张 4K 猫娘,发到群里直接 99+。 我当场社死——调了三天参数,结果对方靠「可爱,喵喵,赛博,霓虹,8K」五个词秒杀我。 后来我悟了:Stable Diffusion 这玩意儿跟谈恋爱一样,方向错了,越努力越徒劳。 今天就把我踩过的坑、熬过的夜、烧掉的电费,一次性打包成指南教程,保你少走弯路,快速上手。
别被「扩散」「潜空间」这些黑话吓到,本质就三步:
原理像小时候玩的「猜画小歌」,只不过它背了 50 亿张图的数据库,手速比你快 10086 倍。 官方说法叫「Latent Diffusion Model」,翻译成人话:先在压缩的小仓库(潜空间)里把噪声搓成草稿,再放大成高清图,省显存又不掉质量,资本家看了都说香。
先上一张动图(脑补):一坨 64×64 的马赛克 → 128×128 → 512×512 → 突然猫娘眨眼。 背后其实是「去噪流水线」在打工:
代码层面长这样,我加注释到姥姥家:
# stable_diffusion_pipeline.py
import torch
from diffusers import StableDiffusionPipeline
# 1. 加载模型,本地路径或 HuggingFace ID 都行
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16, # 半精度,省显存
safety_checker=None, # 别拦我,我要猫娘
requires_safety_checker=False
).to("cuda")
# 2. prompt 越具体,AI 越不摆烂
prompt = "cyberpunk catgirl, neon city background, leather jacket, glowing eyes, masterpiece, 8k"
# 3. 负面 prompt 直接告诉它「别整活」
negative_prompt = "lowres, bad anatomy, extra fingers, jpeg artifacts"
# 4. 生成!batch_size 别作死,8G 显存就 1 张
with torch.no_grad():
image = pipe(
prompt,
negative_prompt=negative_prompt,
num_inference_steps=25, # 步数少→快但糊;多→慢但细
guidance_scale=7.5, # 值越大越听你的话,太高又死板
generator=torch.Generator().manual_seed(42) # 固定种子,方便复现
).images[0]
image.save("catgirl_42.png")
跑通这段,你就已经领先 80% 的「一键包」用户。
再给每个打工人立个人设,方便你吹水:
# unet_idea.py(伪代码,帮你理解)
def unet_step(noisy_latent, prompt_emb, t):
# 预测噪声
noise_pred = unet(noisy_latent, t, encoder_hidden_states=prompt_emb)
# 去噪
less_noisy = scheduler.step(noise_pred, t, noisy_latent).prev_sample
return less_noisy
我 3060 12G 曾经因为 batch_size=2 直接黑屏,风扇转得跟直升机似的。 后来学会三招,电费瞬间腰斩:
fp16 半精度 + safety_checker=None,显存立减 30%。
再狠一点上 SD 1.5 pruned 版本,体积从 5G 变 2G,画质肉眼难辨。pip install nvidia-pyindex
pip install nvidia-tensorrt
# 一键转换
python convert_stable_diffusion_to_tensorrt.py --model runwayml/stable-diffusion-v1-5
# colab_stable_diffusion.ipynb
!pip install diffusers transformers accelerate
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
prompt = "your_prompt_here"
image = pipe(prompt, num_inference_steps=20).images[0]
image.save("/content/sample.png")
先放一张翻车对比: 左边「girl」→ 路人脸;右边「1girl, long hair, detailed eyes, light smile, upper body, soft lighting, masterpiece」→ 直接私聊我要原图。 秘诀就三句话:
我常用的「万能模板」直接抄:
正面: masterpiece, best quality, 1girl, long silver hair, detailed eyes, cyberpunk city, leather jacket, neon lights, depth of field, sharp focus, 8k
负面: lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
再进阶一点:用括号加权 (word:1.2),想强调就加 1.2,想弱化就 0.8。
示例:(detailed eyes:1.3) 让眼睛细节卷死隔壁。
模型仓库现在比 Steam 游戏还多,别一股脑全装,硬盘会哭。 按需求点菜:
| 需求 | 插件 | 一句话攻略 |
|---|---|---|
| 姿势控制 | ControlNet | 上传骨架图,猫娘姿势随你摆 |
| 画风切换 | LoRA | 下一个小模型 10-200M,秒变吉卜力、像素风 |
| 私人物件 | Textual Inversion | 给 AI 看 3-5 张自家猫,就能生成「我家猫娘」 |
ControlNet 安装实录:
# 1. 装插件
git clone https://github.com/Mikubill/sd-webui-controlnet.git extensions/sd-webui-controlnet
# 2. 下模型(openpose 骨架)
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth -O models/ControlNet/control_v11p_sd15_openpose.pth
webui 里上传一张 pose 图,勾选「Enable」,prompt 照样写,猫娘就照着你的骨架蹦迪。
LoRA 用法更无脑,把 .lora 文件扔 models/Lora,prompt 里加语法:
<lora:ghibliStyle_offset:0.8> 1girl, ghibli background
权重 0-1 可调,值越大越吉卜力。
vae-ft-mse-840000-ema-pruned.ckpt,webui 里「设置-VAE」手动选它,再生成脸不崩。# -*- coding: utf-8 -*-,或直接把中文 prompt 写 txt 再读。再送一段批量跑图脚本,适合熬夜调参党:
# batch_grid.py
from diffusers import StableDiffusionPipeline
import itertools, os
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
prompt = "1girl, cyberpunk, detailed eyes"
seeds = [42, 123, 666]
cfgs = [7, 9]
samplers = ["DPM++ 2M Karras", "DPM++ SDE Karras"]
for seed, cfg, sampler in itertools.product(seeds, cfgs, samplers):
image = pipe(
prompt,
num_inference_steps=25,
guidance_scale=cfg,
generator=torch.Generator().manual_seed(seed)
).images[0]
fname = f"grid_s{seed}_c{cfg}_{sampler.replace(' ', '_')}.png"
image.save(os.path.join("outputs", fname))
第二天起床直接挑图,爽翻。
写完这篇,我回头看自己最早的图——猫娘脸像被门夹过,配色赛狗屁。 现在至少能骗一波「大佬求原图」。 秘诀无它:把 SD 当成一个嘴硬心软的对象,多试、多骂、多哄,它迟早给你惊喜。 教程到这里,代码包我全扔上去了,再翻车别骂我,去群里甩图 @ 我,一起笑。 祝各位都能把脑内的老婆画出来,下回见。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online