星辰大海 AI星辰大海 AI
首页
  • ChatGPT
  • Claude
  • Midjourney
  • Stable Diffusion
  • 大语言模型
  • 图像生成模型
  • 语音模型
Demo 示例
开发笔记
GitHub
首页
  • ChatGPT
  • Claude
  • Midjourney
  • Stable Diffusion
  • 大语言模型
  • 图像生成模型
  • 语音模型
Demo 示例
开发笔记
GitHub
  • AI 模型

    • 大语言模型研究笔记
    • 图像生成模型研究笔记
    • 语音模型研究笔记

图像生成模型研究笔记

简介

图像生成模型能够根据文本描述生成图像,主要包括扩散模型(Diffusion Models)和生成对抗网络(GAN)两大类。这是我研究图像生成模型时整理的笔记。

图像生成模型能够根据文本描述生成图像,主要包括扩散模型(Diffusion Models)和生成对抗网络(GAN)两大类。

主流模型

Stable Diffusion

  • 类型: 潜在扩散模型(Latent Diffusion Model)
  • 特点: 开源,可在消费级 GPU 运行
  • 版本: SD 1.5, SD 2.1, SDXL
  • 应用: 艺术创作、设计辅助

DALL-E 系列

DALL-E 2

  • 开发公司: OpenAI
  • 特点: 高质量图像生成
  • API: 通过 OpenAI API 访问

DALL-E 3

  • 改进版本
  • 更好的文本理解
  • 更安全的输出

Midjourney

  • 类型: 专有模型
  • 特点: 艺术风格强,质量高
  • 访问: 通过 Discord 机器人

Imagen

  • 开发公司: Google
  • 特点: 高质量,但未公开
  • 应用: Google 内部使用

技术原理

扩散模型(Diffusion Models)

前向过程(Forward Process)

逐步向图像添加噪声:

x₀ → x₁ → x₂ → ... → xₜ (纯噪声)

反向过程(Reverse Process)

从噪声生成图像:

xₜ (噪声) → xₜ₋₁ → ... → x₁ → x₀ (清晰图像)

潜在空间(Latent Space)

Stable Diffusion 在潜在空间操作,降低计算成本:

文本 → 编码器 → 潜在空间 → 解码器 → 图像

模型架构

U-Net

扩散模型的核心组件:

import torch.nn as nn

class UNet(nn.Module):
    def __init__(self):
        # 编码器(下采样)
        # 解码器(上采样)
        # 注意力机制
        pass

VAE(Variational Autoencoder)

  • 编码器: 图像 → 潜在表示
  • 解码器: 潜在表示 → 图像

CLIP

文本-图像对齐模型:

import clip

model, preprocess = clip.load("ViT-B/32")
text_features = model.encode_text(clip.tokenize(["a cat"]))
image_features = model.encode_image(image)

使用示例

Stable Diffusion

from diffusers import StableDiffusionPipeline
import torch

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

prompt = "a beautiful landscape, mountains, sunset"
image = pipe(prompt).images[0]
image.save("output.png")

DALL-E API

import openai

response = openai.Image.create(
    prompt="a cat sitting on a windowsill",
    n=1,
    size="1024x1024"
)

image_url = response['data'][0]['url']

参数调优

采样器(Sampler)

  • DDPM: 原始扩散采样
  • DDIM: 确定性采样,可逆
  • DPM++: 改进的采样方法
  • Euler: 快速采样

采样步数

  • 20-30: 标准范围
  • 50+: 高质量,但慢
  • <20: 快速,但质量下降

CFG Scale

  • 7-9: 标准范围
  • 10-12: 更严格遵循 prompt
  • <7: 更创意

种子值(Seed)

generator = torch.Generator().manual_seed(42)
image = pipe(prompt, generator=generator).images[0]

高级技术

ControlNet

精确控制生成图像的构图:

from diffusers import ControlNetModel, StableDiffusionControlNetPipeline

controlnet = ControlNetModel.from_pretrained(
    "lllyasviel/sd-controlnet-canny"
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    controlnet=controlnet
)

# 使用边缘图控制
image = pipe(prompt, image=edge_image).images[0]

LoRA 微调

轻量级模型微调:

from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained("base-model")
pipe.load_lora_weights("path/to/lora")

image = pipe("prompt with lora style").images[0]

Inpainting

局部重绘:

from diffusers import StableDiffusionInpaintPipeline

pipe = StableDiffusionInpaintPipeline.from_pretrained(
    "runwayml/stable-diffusion-inpainting"
)

image = pipe(
    prompt="a red car",
    image=original_image,
    mask_image=mask_image
).images[0]

Img2Img

图像到图像转换:

from diffusers import StableDiffusionImg2ImgPipeline

pipe = StableDiffusionImg2ImgPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5"
)

image = pipe(
    prompt="anime style",
    image=original_image,
    strength=0.75
).images[0]

Prompt 工程

结构

[主体], [动作/状态], [环境], [风格], [质量], [参数]

风格关键词

  • 艺术风格: watercolor, oil painting, sketch
  • 摄影风格: photorealistic, cinematic, bokeh
  • 数字艺术: digital art, 3D render, concept art

质量标签

masterpiece, best quality, highly detailed, 8k, sharp focus

负面提示

blurry, low quality, distorted, watermark, text

性能优化

内存优化

# 使用 CPU offload
pipe.enable_model_cpu_offload()

# 使用注意力切片
pipe.enable_attention_slicing()

# 使用 VAE 切片
pipe.enable_vae_slicing()

速度优化

# 使用 xFormers
pipe.enable_xformers_memory_efficient_attention()

# 使用编译
pipe.unet = torch.compile(pipe.unet)

量化

from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16  # 半精度
)

评估指标

客观指标

  • FID (Fréchet Inception Distance): 图像质量
  • IS (Inception Score): 图像质量和多样性
  • CLIP Score: 文本-图像对齐度

主观评估

  • 人工评分
  • A/B 测试
  • 用户反馈

应用场景

  1. 艺术创作: 概念设计、插画
  2. 内容生成: 社交媒体、营销素材
  3. 设计辅助: UI/UX 设计、产品设计
  4. 教育: 可视化教学材料
  5. 娱乐: 游戏资产、虚拟场景

最佳实践

  1. 详细描述: 越详细的 prompt 效果越好
  2. 迭代优化: 根据结果调整 prompt 和参数
  3. 批量生成: 生成多张图像并筛选
  4. 后处理: 使用图像编辑工具优化
  5. 版权注意: 注意生成内容的版权问题

相关资源

  • Hugging Face Diffusers
  • Stable Diffusion WebUI
  • Civitai - 模型和资源
在 GitHub 上编辑此页
Prev
大语言模型研究笔记
Next
语音模型研究笔记