🤗
入门 免费 English

Diffusion Course

Diffusion Course

Hugging Face · Hugging Face 团队 · 待确认

[待填写] Diffusion Course — 来自 Hugging Face 的免费课程

📖 你将学到

  • [待填写]

01 初识扩散模型

欢迎来到 Diffusion Course!这门课是 Hugging Face 官方出品、完全免费的 AI 课程,专门带你从零上手扩散模型(Diffusion Models)。别被名字吓到,扩散模型其实就是现在最火的“文生图”技术——你输入一句话,它就能生成一张图片。像 Stable Diffusion、Midjourney、DALL·E 这些工具,背后都是扩散模型。

这一章,我们不讲复杂的数学公式,先让你搞懂扩散模型到底在干嘛。你可以把它想象成一个“反向去噪”的过程:
1)首先,模型学习如何给一张图片逐步添加噪声,直到它变成纯随机噪点。
2)然后,模型再学习如何从纯噪点中一步步还原出清晰图片。
3)当你输入一段文字(Prompt),模型会根据文字描述,引导这个“去噪”过程生成对应的图像。

听起来很玄乎?别担心,我们马上动手体验。因为国内访问 Hugging Face 在线服务可能不太稳定,我推荐你使用 Hugging Face 的官方镜像站 hf-mirror.com,或者直接使用 国内的 Modelscope(魔搭社区) 来跑代码。

下面是一个最简单的实操步骤,用 Python 调用 Hugging Face 的 Diffusers 库生成一张图:

1)安装依赖库(在终端或 Jupyter Notebook 里运行):
```
pip install diffusers transformers accelerate torch
```
如果你在国内,建议加上镜像源:
```
pip install diffusers transformers accelerate torch -i https://pypi.tuna.tsinghua.edu.cn/simple
```

2)写一段代码,加载一个轻量级模型(比如 runwayml/stable-diffusion-v1-5):
```python
from diffusers import StableDiffusionPipeline
import torch

# 使用 Hugging Face 镜像站加载模型
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16,
use_auth_token=False # 免费课程不需要 token
)
pipe = pipe.to("cuda") # 如果你有 NVIDIA 显卡,用 GPU 加速;没有的话可以去掉这行,但会慢很多

# 输入你的 Prompt
prompt = "a cute cat sitting on a table, digital art"
image = pipe(prompt).images[0]
image.save("my_first_diffusion_image.png")
print("图片已保存!")
```

3)运行代码,等几分钟(取决于你的电脑配置),你就能在文件夹里看到生成的图片了!

实用技巧:
- 如果 GPU 显存不足(比如只有 4GB),可以加上 `pipe.enable_attention_slicing()` 来减少显存占用。
- 第一次运行会下载模型文件(约 2GB),请确保网络稳定。如果下载失败,可以手动从 hf-mirror.com 下载模型放到本地目录。
- 想要更快的生成速度?试试 TinySD 或 Latent Diffusion 等轻量模型。

现在你已经跑通了第一个扩散模型!下一章我们会深入 Prompt 的写法,让你生成更精准的图片。

02 写好 Prompt 的秘诀

上一章你成功生成了一张猫图,但可能效果不够理想——比如猫的颜色不对、背景太乱、画风不喜欢。这不是模型的问题,而是你的 Prompt(提示词)没写对。写 Prompt 就像跟 AI 对话,说得越清楚,它越懂你。

这一章,我会给你一套 万能 Prompt 模板,并拆解每个部分的含义。你直接套用,就能稳定输出高质量图片。

万能 Prompt 模板:
```
[主体] + [细节描述] + [环境/背景] + [艺术风格] + [画质关键词]
```

举个例子:
```
a cute cat, wearing a red bow tie, sitting on a wooden table in a cozy cafe, digital art, highly detailed, 4k, trending on ArtStation
```

拆解一下:
- 主体:a cute cat(一只可爱的猫)
- 细节描述:wearing a red bow tie(戴着红色蝴蝶结)
- 环境/背景:sitting on a wooden table in a cozy cafe(坐在温馨咖啡馆的木桌上)
- 艺术风格:digital art(数字艺术)
- 画质关键词:highly detailed, 4k, trending on ArtStation(高细节、4K、ArtStation 热门)

实操步骤:
1)打开你的 Python 环境,用上一章的代码,但把 Prompt 换成这个:
```python
prompt = "a cute cat, wearing a red bow tie, sitting on a wooden table in a cozy cafe, digital art, highly detailed, 4k, trending on ArtStation"
```
2)生成后对比上一张图,你会发现细节丰富很多。
3)试着修改其中一个部分,比如把“cat”改成“dog”,或者把“cafe”改成“beach”,看看效果变化。

进阶技巧:
- 使用“否定 Prompt”(Negative Prompt):告诉模型你不想要什么。在 Diffusers 中这样写:
```python
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
prompt = "a beautiful girl, portrait, photorealistic"
negative_prompt = "ugly, deformed, blurry, low quality, extra limbs"
image = pipe(prompt, negative_prompt=negative_prompt).images[0]
```
- 调整“引导尺度”(guidance_scale):数值越高,模型越严格遵循 Prompt,但可能失去创意。默认是 7.5,你可以试试 10 或 5:
```python
image = pipe(prompt, guidance_scale=10.0).images[0]
```
- 国内用户如果不想写代码,可以用 WebUI(Stable Diffusion WebUI) 的在线版,比如 LiblibAI(哩布哩布)SeaArt(海艺),这些平台都支持中文界面和 Prompt 输入。

现在你已经掌握了 Prompt 的写法。下一章,我们学习如何控制图片的尺寸和生成数量,批量出图!

03 控制图片尺寸与批量生成

很多时候,你需要的不是一张图,而是十张、二十张,从中挑出最好的。或者你需要特定尺寸的图片,比如 512x512 的头像、1024x768 的壁纸。这一章就教你如何批量生成,以及如何调整图片尺寸。

核心参数:
- `height` 和 `width`:控制图片尺寸(像素)。注意:Stable Diffusion v1.5 默认是 512x512,如果你改成 768x768 或更大,可能会生成重复或变形的内容。建议保持 512 的倍数(如 512x512、512x768、768x512)。
- `num_images_per_prompt`:一次生成多少张图。注意:这个参数会成倍增加显存占用。

实操步骤(批量生成 4 张 512x768 的图):
1)复制以下代码:
```python
from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
pipe.enable_attention_slicing() # 节省显存

prompt = "a beautiful mountain landscape, sunset, photorealistic, 4k"
negative_prompt = "blurry, low quality, ugly"

# 生成 4 张图,尺寸为 512x768
images = pipe(
prompt,
negative_prompt=negative_prompt,
height=768,
width=512,
num_images_per_prompt=4,
guidance_scale=7.5
).images

# 保存所有图片
for i, img in enumerate(images):
img.save(f"landscape_{i+1}.png")
print(f"已保存 landscape_{i+1}.png")
```
2)运行后,你会得到 4 张不同构图的风景图。
3)如果你想一次生成更多,比如 8 张,但显存不够,可以分成两次调用,每次 4 张。

实用技巧:
- 如果你的 GPU 显存小于 8GB,建议一次只生成 1-2 张,或者使用 `pipe.enable_model_cpu_offload()` 把部分计算放到 CPU 上(但会变慢)。
- 批量生成时,可以设置不同的随机种子(seed)来获得更多变化。在 Diffusers 中,你可以手动指定种子:
```python
generator = torch.Generator(device="cuda").manual_seed(42)
images = pipe(prompt, generator=generator).images
```
把 42 换成其他数字,就能复现或变化结果。
- 国内用户如果不想折腾本地环境,推荐使用 AutoDL 算力云 租用 GPU 实例,按小时计费,便宜又方便。或者用 百度飞桨(PaddlePaddle) 的在线 Notebook。

进阶:用循环实现更灵活的批量生成
```python
prompts = [
"a red apple on a white table",
"a green apple on a wooden table",
"a yellow banana on a blue table"
]
for i, p in enumerate(prompts):
image = pipe(p).images[0]
image.save(f"fruit_{i+1}.png")
```

现在你学会了控制尺寸和批量出图。下一章,我们将介绍如何用 LoRA 模型微调风格,让你的图片独一无二。

04 用 LoRA 定制专属风格

标准的 Stable Diffusion 模型能生成各种图片,但风格比较“大众化”。如果你想生成特定角色、特定画风(比如宫崎骏风格、水墨画风),或者让模型认识某个物体(比如你的宠物),那就需要 LoRA(Low-Rank Adaptation)技术。

LoRA 是一个小型模型文件(通常只有几十到几百 MB),它不修改主模型,而是像“插件”一样叠加到主模型上,改变生成风格。你可以在 Civitai(国内访问需翻墙)LiblibAI(哩布哩布) 上找到成千上万个免费的 LoRA 模型。

实操步骤:加载并使用一个 LoRA 模型
1)先下载一个 LoRA 文件。比如从 LiblibAI 下载一个“宫崎骏风格”的 LoRA(.safetensors 格式),放到你的项目文件夹里。
2)写代码加载 LoRA:
```python
from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
)
pipe = pipe.to("cuda")

# 加载 LoRA 模型(假设文件名为 "miyazaki_style.safetensors")
pipe.load_lora_weights(".", weight_name="miyazaki_style.safetensors")

# 生成图片,Prompt 中最好加上触发词(trigger word),LoRA 作者通常会说明
prompt = "a cute girl walking in a forest, miyazaki style, anime, highly detailed"
image = pipe(prompt).images[0]
image.save("miyazaki_girl.png")
```
3)运行后,你会发现图片风格明显偏向宫崎骏动画。

实用技巧:
- 每个 LoRA 都有“触发词”,一般作者会在下载页面写明。不写触发词可能效果不明显。
- 可以同时加载多个 LoRA!比如同时加载“宫崎骏风格”和“水彩画风”:
```python
pipe.load_lora_weights(".", weight_name="miyazaki_style.safetensors", adapter_name="miyazaki")
pipe.load_lora_weights(".", weight_name="watercolor.safetensors", adapter_name="watercolor")
pipe.set_adapters(["miyazaki", "watercolor"], adapter_weights=[0.7, 0.3]) # 权重调整
```
- 国内用户下载 LoRA 推荐用 LiblibAI,搜索“LoRA”即可,不需要翻墙。
- 如果你有想定制的物体(比如你的猫),可以自己训练 LoRA!下一门进阶课程会教,但你需要至少 10-20 张图片和一张好显卡。

常见问题:
Q: 加载 LoRA 后图片变模糊了?
A: 可能是 LoRA 权重太高。尝试降低权重,比如 `adapter_

💡 想要更系统的 AI 学习路线?

去 ganhuo.ai 看完整路线图 →
🐑 小羊助手