Safetensors 扩散模型的结构解析(checkpoint & diffusers)

Safetensors 模型的结构解析:Checkpoint 与 Diffusers 的差异

你是否遇到过下载的Stable Diffusion Safetensors模型缺少VAE和CLIP模型?

你是否想知道下载的几十GB的模型文件是否损坏?

本文给出解答!


在 Stable Diffusion 的生态里,模型有两种常见的封装形式:Checkpoint 格式 与 Diffusers 格式

一、Checkpoint 格式(传统 SD 封装)

在 CompVis 原版 Stable Diffusion 中,所有组件(UNet、CLIP、VAE)通常打包在一个 .ckpt 或 .safetensors 文件里。键名的命名习惯如下:

  • UNet :model.diffusion_model.*
  • CLIP/Text Encoder :cond_stage_model.*
  • VAE :first_stage_model.*

这种命名方式直接对应论文里的"阶段"概念:

  • 第一阶段(first stage):VAE,负责图像 ↔ 潜空间转换
  • 第二阶段(diffusion model):UNet,负责潜空间去噪
  • 条件阶段(cond stage):CLIP,负责文本条件编码

优点是下载即用,缺点是难以替换单个模块。


二、Diffusers 格式(工程化封装)

Hugging Face 的 Diffusers 库采用模块化设计,将各组件拆分到不同目录中,并用 model_index.json 描述组合关系。常见目录结构:

复制代码
├── unet/
├── vae/
├── text_encoder/
├── scheduler/
├── model_index.json

实例:

UNET模型在unet目录里,CLIP和VAE在text_encoder 和 vae目录里。

这种方式更透明,方便替换和扩展,但文件较多。要下载全部文件才能使用。


三、如何验证 safetensors 文件结构

你可以用 Python 代码快速查看 safetensors 文件的键和模块前缀,来判断你下载的是一个checkpoint模型还是单独的Unet模型:

复制代码
from safetensors import safe_open

model_path = "E:\\xxx_ckptsafetensors"

with safe_open(model_path, framework="pt", device="cpu") as f:
    keys = f.keys()
    print("键数量:", len(keys))
    rs = []
    for k in list(keys):
        nn = str(k).split(".")
        nm_prefix = ""
        if len(nn) >= 2:
            nm_prefix = nn[0] + "." + nn[1]
        else:
            nm_prefix = str(k)
        if nm_prefix not in rs:
            rs.append(nm_prefix)
    print(rs)

如果是 Checkpoint 格式,你会看到 model.diffusion_model.*, first_stage 等前缀。

比如:

复制代码
键数量: 2515
['conditioner.embedders', 'first_stage_model.decoder', 'first_stage_model.encoder', 'first_stage_model.post_quant_conv', 'first_stage_model.quant_conv', 'model.diffusion_model']

如果是 Diffusers 格式的UNET模型,你只会看到 down_blocks.*、up_blocks.* 等模块化命名的前缀。

具体前缀和模块对应如下

模块 Checkpoint 格式 Diffusers 格式
UNet model.diffusion_model.* down_blocks.*, up_blocks.*, mid_block.*
VAE first_stage_model.* vae.*
CLIP cond_stage_model.* text_encoder.*
调度器 无单独存储 scheduler.*

总结

  • Checkpoint 格式:单文件打包,命名体现"阶段"概念,下载即用但不透明。
  • Diffusers 格式:模块化目录,命名直观,方便替换与扩展,更适合工程化和社区共享。
  • 命名差异 :Checkpoint 用 first_stage_model 表示 VAE,而 Diffusers 直接用 vae。UNet 在 Checkpoint 中是 model.diffusion_model,在 Diffusers 中则拆分为 down_blocks、up_blocks、mid_block。
相关推荐
全栈探索者17 小时前
给视频配一段完整 BGM:一次生成还是分段拼?
人工智能·comfyui·音频生成·stable audio
全栈探索者4 天前
从素材到成片:ffmpeg 拼接、转码与字幕,一条流水线交付
macos·ffmpeg·aigc·comfyui·视频剪辑
福大大架构师每日一题4 天前
ComfyUI v0.43.0发布:MOSS-Image、Fibo 2.0、Qwen 3.x、动态显存缓存与海量合作节点全面升级
comfyui
又过二十5 天前
Qwen-Image2.1游戏素材工坊:让角色真的走起来(三)
ai·aigc·comfyui·game·qwen-image
全栈探索者6 天前
一枚 162MB 的挂件,改写一只猫的画风:LoRA 实战——风格定制与人脸保持
人工智能·macos·lora·aigc·stablediffusion·comfyui
又过二十7 天前
Qwen-Image2.1游戏素材工坊:把整套素材拼成"模拟游戏画面"逐张体检 (二)
aigc·comfyui·game·qwen-image·游戏素材
Daneas8 天前
10分钟搭建ComfyUI Z-image-turbo参考骨架图和人脸生图
comfyui·提示词生成·z-image-turbo生图·3060显卡生图效果
全栈探索者8 天前
出图模型怎么选?同一只猫的四场实测:Z-Image、Qwen-Image 2.1、SD1.5 三维对决
人工智能·macos·aigc·stablediffusion·comfyui
又过二十8 天前
Qwen-Image2.1游戏素材工坊:一句话,生成一整套游戏美术素材(一)
ai·aigc·comfyui·game·qwen-image·游戏素材
全栈探索者9 天前
模型去哪下、放哪里、怎么选:Mac 玩 ComfyUI 的模型管理全图景(附我的实盘清单)
人工智能·macos·aigc·stablediffusion·comfyui