Diffusers StableCascadeUNet 模型完全指南:Stable Cascade 级联架构中的 Stage B/C 去噪骨干 人工智能媒体生成深度学习音频【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址https://gitcode.com/GitHub_Trending/di/diffusers点击查看免费下载导读StableCascadeUNet是 Diffusers 中 Stable Cascade 图像生成管线Stable Cascade Pipeline所依赖的 UNet 去噪模型它在级联架构中分别承担 Stage Cprior文本→图像嵌入与 Stage Bdecoder图像嵌入→图像潜在码两个关键角色。本文以 stable_cascade_unet.md 文档为主线结合模型源码、管线实现与单文件加载测试带你掌握该模型的完整结构、全部构造参数、前向调用协议以及如何通过from_pretrained、from_single_file两种方式加载官方与 Lite 版本权重并完成端到端文生图。StableCascadeUNet 在 Stable Cascade 中的角色Stable Cascade 沿用了 Würstchen 架构的级联思想由 Stage A、Stage B、Stage C 三部分构成Stage A 与 Stage B 负责压缩图像相当于 Stable Diffusion 中 VAE 的职责Stage C 负责根据文本提示生成极小的 24×24 潜在码。与 Stable Diffusion 8 倍空间压缩1024×1024 → 128×128不同Stable Cascade 实现了 42 倍压缩可将 1024×1024 图像编码为 24×24从而大幅降低训练与推理成本。在这个级联中StableCascadeUNet以同一套模型类承载了两个职责Stage Cprior运行在 24×24 的极小潜在空间上根据文本/图像条件去噪生成图像嵌入由StableCascadePriorPipeline调用Stage Bdecoder接收 prior 生成的图像嵌入将其解码放大为 VQ 潜在码由StableCascadeDecoderPipeline调用。从源码看两者的区别完全由配置驱动是否设置clip_text_in_channels、effnet_in_channels、pixel_mapper_in_channels等条件分支模型主体网络结构完全共享这正是StableCascadeUNet设计上的一大特点。网络架构与核心构建块StableCascadeUNet定义于 unet_stable_cascade.py继承自ModelMixin、ConfigMixin与FromOriginalModelMixin并声明了_supports_gradient_checkpointing True意味着它可以配合激活内存优化进行梯度检查点训练。整体结构可划分为如下几层输入嵌入embedding先经nn.PixelUnshuffle(patch_size)做像素重排再经 1×1 卷积将通道数映射到block_out_channels[0]最后接一层SDCascadeLayerNorm条件映射层根据配置选择性构建effnet_mapper、pixels_mapper、clip_txt_pooled_mapper、clip_txt_mapper、clip_img_mapper与clip_norm下采样编码路径down blocks每个层级由down_downscalers降采样器、down_blocks模块列表与down_repeat_mappers可选的 1×1 卷积重复映射构成上采样解码路径up blocks对称地由up_upscalers、up_blocks、up_repeat_mappers构成并在第一层残差块处通过c_skip引入跳跃连接输出头clf经SDCascadeLayerNorm→ 1×1 卷积输出out_channels * patch_size²通道→nn.PixelShuffle(patch_size)恢复空间尺寸。网络中最核心的三种可配置模块对应block_types_per_layer参数分别是SDCascadeResBlock深度可分离卷积nn.Conv2d(..., groupsc) 无仿射参数的SDCascadeLayerNorm 通道级 MLPLinear → GELU → GlobalResponseNorm → Dropout → Linear的残差块SDCascadeTimestepBlock通过mapper线性层将时间步条件投影为c * 2维的缩放/平移参数支持多条件conds叠加——这正是sca、crp条件注入的实现位置SDCascadeAttnBlock基于Attention的标准注意力块先经kv_mapperSiLU → Linear映射条件向量再与自身特征拼接做联合注意力支持可选的自注意力self_attn。此外还有两个值得注意的细节模块SDCascadeLayerNorm把nn.LayerNorm应用于NCHW布局时先permute到NHWC归一化后再还原回NCHWGlobalResponseNormGRN源于 ConvNeXt-V2用 L2 范数聚合全局响应并做归一化缩放是残差块中通道级 MLP 的关键组件UpDownBlock2d根据mode决定上采样双线性 2×或下采样双线性 0.5×与 1×1 映射卷积的组合顺序enabledFalse时退化为恒等映射。构造参数详解完整参数表StableCascadeUNet.__init__中所有参数均通过register_to_config注册进模型配置以下为源码 docstring 中给出的完整默认值与语义参数默认值说明in_channels16输入样本的通道数out_channels16输出样本的通道数timestep_ratio_embedding_dim64时间步比例嵌入的投影维度patch_size1像素重排pixel unshuffling层使用的 patch 大小conditioning_dim2048图像与文本条件嵌入的维度block_out_channels(2048, 2048)每个块的输出通道元组num_attention_heads(32, 32)每个注意力块的头数若某层不含注意力可设为-1down_num_layers_per_block(8, 24)每个下采样块的层数up_num_layers_per_block(24, 8)每个上采样块的层数down_blocks_repeat_mappers(1, 1)每个下采样块中重复的 1×1 卷积层数up_blocks_repeat_mappers(1, 1)每个上采样块中重复的 1×1 卷积层数block_types_per_layer((SDCascadeResBlock, SDCascadeTimestepBlock, SDCascadeAttnBlock), ...)每个上/下采样块中各层使用的块类型clip_text_in_channelsNoneCLIP 文本条件输入通道数prior/Stage C 使用clip_text_pooled_in_channels1280池化后 CLIP 文本嵌入的输入通道数clip_image_in_channelsNoneCLIP 图像条件输入通道数clip_seq4池化嵌入被切分的序列长度effnet_in_channelsNoneEffNet 条件输入通道数decoder/Stage B 使用pixel_mapper_in_channelsNone像素映射器条件输入通道数kernel_size3卷积层使用的卷积核大小dropout(0.1, 0.1)每个块的 dropout 比例传入float时自动广播为元组self_attnTrue是否在块中使用自注意力传入bool时自动广播为元组timestep_conditioning_type(sca, crp)时间步条件类型switch_levelNone指示每个块是否进行上/下采样的元组为None时改用stride2卷积/转置卷积源码在构造时会对元组长度做严格校验down_num_layers_per_block、up_num_layers_per_block、down_blocks_repeat_mappers、up_blocks_repeat_mappers、block_types_per_layer的长度都必须与block_out_channels一致否则直接抛出ValueError。这一点在自定义小型变体时需要格外注意。前向传播协议与调用链forward方法的签名与参数语义如下完整定义见 unet_stable_cascade.py参数类型/默认值说明sampletorch.Tensor加噪输入样本timestep_ratiotorch.Tensor用于计算时间步嵌入的时间步比例clip_text_pooledtorch.Tensor池化后的 CLIP 文本嵌入必填clip_texttorch.Tensor可选序列级 CLIP 文本嵌入clip_imgtorch.Tensor可选CLIP 图像嵌入effnettorch.Tensor可选作为附加条件的 EfficientNet 特征图pixelstorch.Tensor可选像素级条件张量为None时使用(B, 3, 8, 8)的零张量scatorch.Tensor可选用于构建时间步嵌入的sca条件值crptorch.Tensor可选用于构建时间步嵌入的crp条件值return_dictbool True为True返回StableCascadeUNetOutput否则返回普通tuple前向流程按以下顺序执行时间步嵌入get_timestep_ratio_embedding基于max_positions10000生成正弦/余弦位置编码并根据timestep_conditioning_type默认sca、crp把各条件缺失时用零替代的时间步嵌入拼接到主嵌入之后CLIP 条件融合get_clip_embeddings将池化文本嵌入经clip_txt_pooled_mapper映射并按clip_seq重塑当同时提供clip_text与clip_img时三者拼接后经clip_norm归一化否则仅使用池化文本嵌入嵌入与条件相加sample经embedding后若存在effnet_mapper/pixels_mapper则把相应条件双线性插值到相同分辨率后逐元素相加编码-解码_down_encode逐级降采样并记录每级输出_up_decode反向逐级上采样在首个残差块处利用level_outputs做跳跃连接当空间尺寸不匹配时源码会用双线性插值把特征对齐到 skip 的尺寸输出头经clfLayerNorm 1×1 卷积 PixelShuffle得到最终sample。值得注意整个编码/解码路径对三种块类型做了分发——SDCascadeResBlock(x)、SDCascadeAttnBlock(x, clip)、SDCascadeTimestepBlock(x, r_embed)当启用gradient_checkpointing且处于梯度计算状态时全部改为经_gradient_checkpointing_func执行以显存换时间。权重初始化策略_init_weights中有一套针对性初始化卷积/线性层用xavier_uniform_且偏置置零clip_txt_pooled_mapper、clip_txt_mapper、clip_img_mapper及条件映射器用std0.02的正态分布输出头clf的卷积权重直接置零残差块末层权重按sqrt(1 / sum(blocks))缩放SDCascadeTimestepBlock的mapper权重置零。这套初始化是模型稳定训练的重要前提。与管线的协作Prior 与 Decoder 的调用差异StableCascadeUNet在两条管线中以前向参数的不同组合被调用源码见 pipeline_stable_cascade_prior.py 与 pipeline_stable_cascade.pyPrior 管线prior(samplelatents, timestep_ratio..., clip_text_pooledtext_encoder_pooled, clip_texttext_encoder_hidden_states, clip_imgimage_embeds)。CFG 开启时会把条件与无条件样本torch.cat成一批去噪输出后用torch.lerp(uncond, text, guidance_scale)完成引导Decoder 管线decoder(samplelatents, timestep_ratio..., clip_text_pooledprompt_embeds_pooled, effnetimage_embeddings)。prior 产出的image_embeddings作为effnet条件输入解码后的潜在码再经PaellaVQModel的vqgan.decode得到最终图像。此外pipeline_stable_cascade_combined.py 中的StableCascadeCombinedPipeline将 prior 与 decoder 两个子管线打包为一个端到端文生图入口内部同样各持一个StableCascadeUNet实例prior_prior与decoder。三条管线都继承了DeprecatedPipelineMixin且_last_supported_version 0.35.2说明该系列管线在当前版本中已被标记为弃用deprecated阅读本文时应了解这一现状迁移到更新的模型时需另行评估。数据类型限制重要提醒官方文档对 dtype 有明确限制务必遵守StableCascadePriorPipeline的官方检查点不支持torch.float16请使用torch.bfloat16StableCascadeDecoderPipeline使用torch.bfloat16需要PyTorch ≥ 2.2.0源码 pipeline_stable_cascade.py 会在版本不足时直接抛出ValueError若环境无法安装 PyTorch 2.2.0decoder 可单独以torch.float16运行下载全精度或 bf16 权重后自行转换组合管线StableCascadeCombinedPipeline因内部调用 decoder同样要求 PyTorch ≥ 2.2.0。端到端使用示例标准流程Prior Decoder 两段式生成import torch from diffusers import StableCascadeDecoderPipeline, StableCascadePriorPipeline prompt an image of a shiba inu, donning a spacesuit and helmet negative_prompt prior StableCascadePriorPipeline.from_pretrained(stabilityai/stable-cascade-prior, variantbf16, dtypetorch.bfloat16) decoder StableCascadeDecoderPipeline.from_pretrained(stabilityai/stable-cascade, variantbf16, dtypetorch.float16) prior.enable_model_cpu_offload() prior_output prior( promptprompt, height1024, width1024, negative_promptnegative_prompt, guidance_scale4.0, num_images_per_prompt1, num_inference_steps20, ) decoder.enable_model_cpu_offload() decoder_output decoder( image_embeddingsprior_output.image_embeddings.to(torch.float16), promptprompt, negative_promptnegative_prompt, guidance_scale0.0, output_typepil, num_inference_steps10, ).images[0] decoder_output.save(cascade.png)prior 默认num_inference_steps20、guidance_scale4.0decoder 默认num_inference_steps10、guidance_scale0.0decoder 阶段通常无需 CFG。StableCascadePriorPipelineOutput中除image_embeddings外还返回prompt_embeds、prompt_embeds_pooled及对应的 negative 版本便于复用嵌入或做提示词加权。使用 Lite 版本Stage B/C 轻量版官方还提供了prior_lite与decoder_lite子目录的轻量检查点可通过StableCascadeUNet.from_pretrained(..., subfolder...)单独加载后注入管线import torch from diffusers import ( StableCascadeDecoderPipeline, StableCascadePriorPipeline, StableCascadeUNet, ) prompt an image of a shiba inu, donning a spacesuit and helmet negative_prompt prior_unet StableCascadeUNet.from_pretrained(stabilityai/stable-cascade-prior, subfolderprior_lite) decoder_unet StableCascadeUNet.from_pretrained(stabilityai/stable-cascade, subfolderdecoder_lite) prior StableCascadePriorPipeline.from_pretrained(stabilityai/stable-cascade-prior, priorprior_unet) decoder StableCascadeDecoderPipeline.from_pretrained(stabilityai/stable-cascade, decoderdecoder_unet) prior.enable_model_cpu_offload() prior_output prior( promptprompt, height1024, width1024, negative_promptnegative_prompt, guidance_scale4.0, num_images_per_prompt1, num_inference_steps20, ) decoder.enable_model_cpu_offload() decoder_output decoder( image_embeddingsprior_output.image_embeddings, promptprompt, negative_promptnegative_prompt, guidance_scale0.0, output_typepil, num_inference_steps10, ).images[0] decoder_output.save(cascade.png)使用from_single_file加载原始检查点StableCascadeUNet通过继承FromOriginalModelMixin支持直接加载 Stable Cascade 原始格式的单个 safetensors 文件。加载注册表见 single_file_model.py权重转换函数convert_stable_cascade_unet_single_file_to_diffusers定义于 single_file_utils.py转换器会先检测 checkpoint 中是否含clip_txt_mapper.weight以区分 Stage C 与 Stage B将原始attn.in_proj_weight/in_proj_bias/out_proj.weight/out_proj.bias按 3 段切分或直接映射为 diffusers 的to_q/to_k/to_v/to_out.0命名对 Stage B 额外把clip_mapper重命名为clip_txt_pooled_mapper。import torch from diffusers import ( StableCascadeDecoderPipeline, StableCascadePriorPipeline, StableCascadeUNet, ) prompt an image of a shiba inu, donning a spacesuit and helmet negative_prompt prior_unet StableCascadeUNet.from_single_file( https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_bf16.safetensors, dtypetorch.bfloat16, ) decoder_unet StableCascadeUNet.from_single_file( https://huggingface.co/stabilityai/stable-cascade/blob/main/stage_b_bf16.safetensors, dtypetorch.bfloat16, ) prior StableCascadePriorPipeline.from_pretrained(stabilityai/stable-cascade-prior, priorprior_unet, dtypetorch.bfloat16) decoder StableCascadeDecoderPipeline.from_pretrained(stabilityai/stable-cascade, decoderdecoder_unet, dtypetorch.bfloat16) prior.enable_model_cpu_offload() prior_output prior( promptprompt, height1024, width1024, negative_promptnegative_prompt, guidance_scale4.0, num_images_per_prompt1, num_inference_steps20, ) decoder.enable_model_cpu_offload() decoder_output decoder( image_embeddingsprior_output.image_embeddings, promptprompt, negative_promptnegative_prompt, guidance_scale0.0, output_typepil, num_inference_steps10, ).images[0] decoder_output.save(cascade-single-file.png)源码与测试层面的印证针对单文件加载的正确性仓库提供了专门的慢速测试 test_model_sd_cascade_unet_single_file.py需要 GPU 加速器标注slowtest_single_file_components_stage_b加载stage_b_bf16.safetensors与stabilityai/stable-cascade的decoder子目录权重逐项比对两者config排除torch_dtype、_name_or_path等元数据键test_single_file_components_stage_b_lite比对stage_b_lite_bf16.safetensors与decoder_litetest_single_file_components_stage_c比对stage_c_bf16.safetensors与stabilityai/stable-cascade-prior的prior子目录test_single_file_components_stage_c_lite比对stage_c_lite_bf16.safetensors与prior_lite。这四组测试覆盖了官方全部四种权重变体验证了from_single_file与from_pretrained两条加载路径产出的模型配置完全一致是你在生产中放心使用单文件加载的依据。小结StableCascadeUNet是一个以配置驱动、可同时充当 Stage Cprior与 Stage Bdecoder的双角色 UNet得益于 42 倍空间压缩它让 Stable Cascade 在极小的 24×24 潜在空间上完成文本条件去噪。本文从构造参数、模块结构、前向协议、管线协作、dtype 限制到单文件加载与测试验证完整覆盖了该模型的实操与原理。进一步阅读可参考 Stable Cascade 管线文档 与模型实现源码 unet_stable_cascade.py后者包含全部默认配置与块级实现细节。赞分享人工智能媒体生成深度学习音频【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址https://gitcode.com/GitHub_Trending/di/diffusers点击查看免费下载相关推荐从噪点到清晰Diffusers图像去噪技术完全指南从噪点到清晰Diffusers图像去噪技术完全指南 你是否曾为AI生成图像中的模糊边缘、色块噪点而困扰是否想知道那些惊艳的AI绘画作品如何从随机噪点中诞生人工智能媒体生成深度学习音频黑苹果OpenCore EFI自动配置指南OpCore-Simplify配置工具全流程拆解黑苹果OpenCore EFI自动配置指南OpCore Simplify配置工具全流程拆解 很多黑苹果新手的旅程卡在EFI这一步config.plist几百开发工具CLIDiffusers 中的 QwenImageTransformer2DModelQwen-Image 双流 DiT 骨干详解与加载指南Diffusers 中的 QwenImageTransformer2DModelQwen Image 双流 DiT 骨干详解与加载指南 导读 QwenImag人工智能媒体生成深度学习音频上一篇3DS宝可梦ROM编辑器pk3DS从零开始打造个性化游戏体验下一篇用 RSpec 为 Rails 应用编写行为测试Rails Girls 测试指南testing-rspec实战解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考