ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

使用 [特殊字符] Diffusers 驾驭 Kandinsky 系列多语言文生图模型:从 text-to-image 到 ControlNet 的完整实战指南

使用 [特殊字符] Diffusers 驾驭 Kandinsky 系列多语言文生图模型:从 text-to-image 到 ControlNet 的完整实战指南 使用 Diffusers 驾驭 Kandinsky 系列多语言文生图模型从 text-to-image 到 ControlNet 的完整实战指南【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers导读Kandinsky 是 Diffusers 中一组主打多语言 text-to-image 能力的扩散模型系列从 2.0 到 3 代其核心特色是引入了 image prior图像先验两阶段生成架构先用 prior 模型把文本/图像编码为图像嵌入再交给解码器 UNet 渲染图像。本文以 docs/source/ko/using-diffusers/kandinsky.md 为骨架结合仓库内src/diffusers/pipelines/kandinsky与src/diffusers/pipelines/kandinsky2_2的源码实现系统讲解 Kandinsky 2.1 / 2.2 / 3 在 text-to-image、image-to-image、inpainting、嵌入插值interpolation以及 Kandinsky 2.2 ControlNet 深度图控制等任务上的完整用法并给出推理期优化建议。读完本文你将掌握如何正确加载 prior 与解码器两级流水线、如何用 Combined Pipeline 与 AutoPipeline 简化调用以及如何在有限显存下运行这些模型。Kandinsky 家族架构演进从双编码器到两阶段生成Kandinsky 系列是一组多语言 text-to-image 扩散模型。从架构演进的视角看三代模型差异显著Kandinsky 2.0使用两个多语言文本编码器将它们的输出拼接后送入 UNet 进行条件生成。Kandinsky 2.1在架构中引入了一个image prior 模型对应CLIP的图像编码器负责建立文本与图像嵌入之间的映射关系。该映射显著改善了 text-image alignment图文对齐并在训练时与文本嵌入联合使用从而产出更高质量的结果。此外2.1 还加入了 spatial conditional 归一化层并使用 Modulating Quantized Vectors (MoVQ) 解码器把 latents 解码为图像提升了真实感。Kandinsky 2.2将 prior 模型的图像编码器替换为更大的CLIP-ViT-G模型以提升质量同时用不同分辨率与宽高比的图像重新训练 prior 模型使其能够生成更高分辨率、更多尺寸比例的图像。这一点在源码中直接可见KandinskyV22PriorPipeline见 pipeline_kandinsky2_2_prior.py将image_encoder声明为CLIPVisionModelWithProjection并设定model_cpu_offload_seq text_encoder-image_encoder-prior。Kandinsky 3大幅简化架构不再需要 prior 模型放弃了两阶段生成。它改用 Flan-UL2 编码文本、包含 BigGan-deep 块的 UNet 进行去噪、Sber-MoVQGAN 解码 latents。文本理解与生成质量主要靠更大的文本编码器和 UNet 达成其使用方法与 Stable Diffusion XL 等其他扩散模型完全一致。在仓库中Kandinsky 2.1 的实现位于 src/diffusers/pipelines/kandinsky/2.2 位于 src/diffusers/pipelines/kandinsky2_2/3.0 位于 src/diffusers/pipelines/kandinsky3/另见 API 文档 docs/source/en/api/pipelines/kandinsky.md、kandinsky_v22.md、kandinsky3.md。使用前必读两代模型的关键差异在动手前请先记住这条核心差异文档中反复强调[!WARNING]Kandinsky 2.1 与 2.2 的用法高度相似唯一区别是2.2 在解码 latents 时不再接收prompt作为输入只接收image_embeds。Kandinsky 3 架构更简洁不需要 prior 模型用法与其他扩散模型如 Stable Diffusion XL完全相同。运行示例前请确保依赖已安装# 在 Colab 中取消注释以安装所需库 #!pip install -q diffusers transformers accelerateText-to-image两阶段管线与端到端 Combined Pipeline为什么必须先跑 prior 管线对 Kandinsky 2.1 / 2.2 的任何任务第一步永远是加载 prior 管线用它把 prompt 编码并生成图像嵌入。prior 管线同时会生成与 negative prompt对应的negative_image_embeds。若想获得更好效果可以向 prior 管线传入真实的negative_prompt但副作用是prior 管线的有效 batch size 会翻倍因为无条件分支也参与计算。Kandinsky 2.1 的两步调用from diffusers import KandinskyPriorPipeline, KandinskyPipeline import torch prior_pipeline KandinskyPriorPipeline.from_pretrained(kandinsky-community/kandinsky-2-1-prior, dtypetorch.float16).to(cuda) pipeline KandinskyPipeline.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16).to(cuda) prompt A alien cheeseburger creature eating itself, claymation, cinematic, moody lighting negative_prompt low quality, bad quality # 传 negative prompt 是可选的但通常结果更好 image_embeds, negative_image_embeds prior_pipeline(prompt, negative_prompt, guidance_scale1.0).to_tuple()注意这里 prior 阶段使用了guidance_scale1.0即基本不做无分类器引导因为引导的主要工作在解码阶段进行。随后把 prompt 与两类嵌入一起交给KandinskyPipeline生成图像image pipeline(prompt, image_embedsimage_embeds, negative_promptnegative_prompt, negative_image_embedsnegative_image_embeds, height768, width768).images[0] imageKandinsky 2.2解码阶段不再需要 promptfrom diffusers import KandinskyV22PriorPipeline, KandinskyV22Pipeline import torch prior_pipeline KandinskyV22PriorPipeline.from_pretrained(kandinsky-community/kandinsky-2-2-prior, dtypetorch.float16).to(cuda) pipeline KandinskyV22Pipeline.from_pretrained(kandinsky-community/kandinsky-2-2-decoder, dtypetorch.float16).to(cuda) prompt A alien cheeseburger creature eating itself, claymation, cinematic, moody lighting negative_prompt low quality, bad quality image_embeds, negative_image_embeds prior_pipeline(prompt, guidance_scale1.0).to_tuple()生成图像时只传嵌入不再传 promptimage pipeline(image_embedsimage_embeds, negative_image_embedsnegative_image_embeds, height768, width768).images[0] imageKandinsky 3单阶段直连Kandinsky 3 无需 prior直接加载Kandinsky3Pipeline并传入 prompt 即可用法与常规扩散模型无异from diffusers import Kandinsky3Pipeline import torch pipeline Kandinsky3Pipeline.from_pretrained(kandinsky-community/kandinsky-3, variantfp16, dtypetorch.float16) pipeline.enable_model_cpu_offload() prompt A alien cheeseburger creature eating itself, claymation, cinematic, moody lighting image pipeline(prompt).images[0] image用 Combined Pipeline / AutoPipelineForText2Image 一步到位 Diffusers 提供了KandinskyCombinedPipeline与KandinskyV22CombinedPipeline这样的end-to-end API无需分别加载 prior 与 text-to-image 管线——组合管线会自动加载 prior 模型和解码器。若需要还可以通过prior_guidance_scale与prior_num_inference_steps两个参数单独控制 prior 阶段源码见 pipeline_kandinsky_combined.py其中prior_guidance_scale默认 4.0、prior_num_inference_steps默认 25。使用AutoPipelineForText2Image即可在底层自动选择合适的组合管线Kandinsky 2.1from diffusers import AutoPipelineForText2Image import torch pipeline AutoPipelineForText2Image.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16) pipeline.enable_model_cpu_offload() prompt A alien cheeseburger creature eating itself, claymation, cinematic, moody lighting negative_prompt low quality, bad quality image pipeline(promptprompt, negative_promptnegative_prompt, prior_guidance_scale1.0, guidance_scale4.0, height768, width768).images[0] imageKandinsky 2.2from diffusers import AutoPipelineForText2Image import torch pipeline AutoPipelineForText2Image.from_pretrained(kandinsky-community/kandinsky-2-2-decoder, dtypetorch.float16) pipeline.enable_model_cpu_offload() prompt A alien cheeseburger creature eating itself, claymation, cinematic, moody lighting negative_prompt low quality, bad quality image pipeline(promptprompt, negative_promptnegative_prompt, prior_guidance_scale1.0, guidance_scale4.0, height768, width768).images[0] imageImage-to-image以初始图像与文本共同引导生成Image-to-image 场景下需要同时传入初始图像和文本 prompt对管线进行 conditioning。同样先从加载 prior 管线开始import torch from diffusers import KandinskyImg2ImgPipeline, KandinskyPriorPipeline # Kandinsky 2.1 prior_pipeline KandinskyPriorPipeline.from_pretrained(kandinsky-community/kandinsky-2-1-prior, dtypetorch.float16, use_safetensorsTrue).to(cuda) pipeline KandinskyImg2ImgPipeline.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16, use_safetensorsTrue).to(cuda)Kandinsky 2.2 与 3 的加载方式遵循前文规则2.2 使用KandinskyV22Img2ImgPipeline与kandinsky-2-2-decoder权重3 不需要 prior直接用Kandinsky3Img2ImgPipeline加载kandinsky-community/kandinsky-3并配合enable_model_cpu_offload()。下载一张用于 conditioning 的示例图像from diffusers.utils import load_image # 下载图像 url https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg original_image load_image(url) original_image original_image.resize((768, 512))用 prior 管线生成image_embeds与negative_image_embedsprompt A fantasy landscape, Cinematic lighting negative_prompt low quality, bad quality image_embeds, negative_image_embeds prior_pipeline(prompt, negative_prompt).to_tuple()最后把原始图像、prompt 与嵌入一起交给管线。strength控制对初始图像的保留程度01越小越贴近原图from diffusers.utils import make_image_grid # Kandinsky 2.1 image pipeline(prompt, negative_promptnegative_prompt, imageoriginal_image, image_embedsimage_embeds, negative_image_embedsnegative_image_embeds, height768, width768, strength0.3).images[0] # Kandinsky 2.2无 prompt image pipeline(imageoriginal_image, image_embedsimage_embeds, negative_image_embedsnegative_image_embeds, height768, width768, strength0.3).images[0] make_image_grid([original_image.resize((512, 512)), image.resize((512, 512))], rows1, cols2)Kandinsky 3 的调用则是常规单管线风格例如image pipeline(prompt, negative_promptnegative_prompt, imageimage, strength0.75, num_inference_steps25).images[0]。同样地可以使用KandinskyImg2ImgCombinedPipeline/KandinskyV22Img2ImgCombinedPipeline组合管线或直接用AutoPipelineForImage2Image自动装配底层自动调用组合管线同样支持prior_guidance_scale、prior_num_inference_stepsfrom diffusers import AutoPipelineForImage2Image from diffusers.utils import make_image_grid, load_image import torch pipeline AutoPipelineForImage2Image.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16, use_safetensorsTrue) pipeline.enable_model_cpu_offload() prompt A fantasy landscape, Cinematic lighting negative_prompt low quality, bad quality url https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg original_image load_image(url) original_image.thumbnail((768, 768)) image pipeline(promptprompt, negative_promptnegative_prompt, imageoriginal_image, strength0.3).images[0] make_image_grid([original_image.resize((512, 512)), image.resize((512, 512))], rows1, cols2)Inpainting给模型戴顶帽子[!WARNING] ⚠️ Kandinsky 模型现在使用 ⬜️白色像素而非黑色像素表示掩码区域。若在生产环境使用KandinskyInpaintPipeline请将掩码改为白色像素# 对 PIL 输入 import PIL.ImageOps mask PIL.ImageOps.invert(mask) # 对 PyTorch 与 NumPy 输入 mask 1 - maskInpainting 需要三样东西原始图像、标记待替换区域的掩码以及描述补绘内容的文本 prompt。先加载 prior 管线from diffusers import KandinskyInpaintPipeline, KandinskyPriorPipeline from diffusers.utils import load_image, make_image_grid import torch import numpy as np from PIL import Image prior_pipeline KandinskyPriorPipeline.from_pretrained(kandinsky-community/kandinsky-2-1-prior, dtypetorch.float16, use_safetensorsTrue).to(cuda) pipeline KandinskyInpaintPipeline.from_pretrained(kandinsky-community/kandinsky-2-1-inpaint, dtypetorch.float16, use_safetensorsTrue).to(cuda)Kandinsky 2.2 对应改为KandinskyV22InpaintPipeline与权重kandinsky-community/kandinsky-2-2-decoder-inpaint。加载初始图像并构造掩码本例把猫头上方区域设为待重绘区域init_image load_image(https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png) mask np.zeros((768, 768), dtypenp.float32) # mask area above cats head mask[:250, 250:-250] 1用 prior 管线生成嵌入prompt a hat prior_output prior_pipeline(prompt)把初始图像、掩码、prompt 与嵌入一并传入完成补绘注意 2.2 版本同样不传 promptnum_inference_steps150是文档示例值可按需调小以加速# Kandinsky 2.1 output_image pipeline(prompt, imageinit_image, mask_imagemask, **prior_output, height768, width768, num_inference_steps150).images[0] # Kandinsky 2.2 output_image pipeline(imageinit_image, mask_imagemask, **prior_output, height768, width768, num_inference_steps150).images[0] mask Image.fromarray((mask*255).astype(uint8), L) make_image_grid([init_image, mask, output_image], rows1, cols3)使用KandinskyInpaintCombinedPipeline/KandinskyV22InpaintCombinedPipeline可以免去手动串联 prior 与解码器直接交给AutoPipelineForInpaintingimport torch import numpy as np from PIL import Image from diffusers import AutoPipelineForInpainting from diffusers.utils import load_image, make_image_grid pipe AutoPipelineForInpainting.from_pretrained(kandinsky-community/kandinsky-2-1-inpaint, dtypetorch.float16) pipe.enable_model_cpu_offload() init_image load_image(https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png) mask np.zeros((768, 768), dtypenp.float32) # 猫头上方掩码区域 mask[:250, 250:-250] 1 prompt a hat output_image pipe(promptprompt, imageinit_image, mask_imagemask).images[0] mask Image.fromarray((mask*255).astype(uint8), L) make_image_grid([init_image, mask, output_image], rows1, cols3)2.2 版本只需把权重换成kandinsky-community/kandinsky-2-2-decoder-inpaint。Interpolation在图像与文本嵌入之间插值插值Interpolation允许你在图像与文本嵌入构成的 latent space中漫游是观察 prior 模型中间结果、做图像混合/风格融合的绝佳方式。先加载 prior 管线与两张待插值图像from diffusers import KandinskyPriorPipeline, KandinskyPipeline from diffusers.utils import load_image, make_image_grid import torch prior_pipeline KandinskyPriorPipeline.from_pretrained(kandinsky-community/kandinsky-2-1-prior, dtypetorch.float16, use_safetensorsTrue).to(cuda) img_1 load_image(https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png) img_2 load_image(https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/starry_night.jpeg) make_image_grid([img_1.resize((512,512)), img_2.resize((512,512))], rows1, cols2)Kandinsky 2.2 仅需把KandinskyPriorPipeline换成KandinskyV22PriorPipeline。上面两张图分别是 a cat 与梵高《星月夜》。指定要参与插值的文本/图像并为每一项设置权重——权重对插值结果影响很大建议多实验几组images_texts [a cat, img_1, img_2] weights [0.3, 0.3, 0.4]调用 prior 管线的interpolate方法生成插值嵌入再交给解码管线生成图像# prompt 可留空 prompt prior_out prior_pipeline.interpolate(images_texts, weights) pipeline KandinskyPipeline.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16, use_safetensorsTrue).to(cuda) image pipeline(prompt, **prior_out, height768, width768).images[0] image从源码看pipeline_kandinsky_prior.py 的interpolate方法字符串条件会走self(...)的 prior 扩散得到image_embedsPIL 图像会先经self.image_processor预处理再由image_encoder提取image_embeds随后每个嵌入乘以对应权重并求和torch.cat(image_embeddings).sum(dim0, keepdimTrue)。因此权重之和为 1 是常见做法它决定各条件在最终嵌入中的占比。2.2 的插值实现见 pipeline_kandinsky2_2_prior.py。ControlNet仅 Kandinsky 2.2用深度图约束生成结构[!WARNING] ⚠️ControlNet 仅在 Kandinsky 2.2 中支持ControlNet 允许用 depth map、边缘检测等额外条件输入来引导预训练大扩散模型。例如可以用深度图对 Kandinsky 2.2 进行 conditioning使模型理解并保持深度图所描绘的结构。先加载图像并提取深度图。深度图可以通过 Transformers 的depth-estimationpipeline 获得from diffusers.utils import load_image img load_image( https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinskyv22/cat.png ).resize((768, 768)) imgimport torch import numpy as np from transformers import pipeline def make_hint(image, depth_estimator): image depth_estimator(image)[depth] image np.array(image) image image[:, :, None] image np.concatenate([image, image, image], axis2) detected_map torch.from_numpy(image).float() / 255.0 hint detected_map.permute(2, 0, 1) return hint depth_estimator pipeline(depth-estimation) hint make_hint(img, depth_estimator).unsqueeze(0).half().to(cuda)make_hint的作用是把单通道深度图复制为三通道、归一化到 01并重排为(C, H, W)的张量格式作为 ControlNet 的hint输入。ControlNet Text-to-image加载 prior 管线与KandinskyV22ControlnetPipeline深度版权重from diffusers import KandinskyV22PriorPipeline, KandinskyV22ControlnetPipeline prior_pipeline KandinskyV22PriorPipeline.from_pretrained( kandinsky-community/kandinsky-2-2-prior, dtypetorch.float16, use_safetensorsTrue ).to(cuda) pipeline KandinskyV22ControlnetPipeline.from_pretrained( kandinsky-community/kandinsky-2-2-controlnet-depth, dtypetorch.float16 ).to(cuda)用 prompt 与 negative prompt 生成图像嵌入固定随机种子以便复现prompt A robot, 4k photo negative_prior_prompt lowres, text, error, cropped, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature generator torch.Generator(devicecuda).manual_seed(43) image_emb, zero_image_emb prior_pipeline( promptprompt, negative_promptnegative_prior_prompt, generatorgenerator ).to_tuple()把图像嵌入与深度图hint一起交给 ControlNet 管线image pipeline(image_embedsimage_emb, negative_image_embedszero_image_emb, hinthint, num_inference_steps50, generatorgenerator, height768, width768).images[0] imageControlNet Image-to-imageControlNet 版 image-to-image 需要两个管线配合KandinskyV22PriorEmb2EmbPipeline由文本 prompt 与初始图像共同生成图像嵌入KandinskyV22ControlnetImg2ImgPipeline由初始图像与图像嵌入生成最终图像。import torch import numpy as np from diffusers import KandinskyV22PriorEmb2EmbPipeline, KandinskyV22ControlnetImg2ImgPipeline from diffusers.utils import load_image from transformers import pipeline img load_image( https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinskyv22/cat.png ).resize((768, 768)) # 复用上面的 make_hint 提取深度 hint depth_estimator pipeline(depth-estimation) hint make_hint(img, depth_estimator).unsqueeze(0).half().to(cuda) prior_pipeline KandinskyV22PriorEmb2EmbPipeline.from_pretrained( kandinsky-community/kandinsky-2-2-prior, dtypetorch.float16, use_safetensorsTrue ).to(cuda) pipeline KandinskyV22ControlnetImg2ImgPipeline.from_pretrained( kandinsky-community/kandinsky-2-2-controlnet-depth, dtypetorch.float16 ).to(cuda)向 prior 管线传入文本 prompt 与初始图像分别生成正向与负向嵌入strength控制嵌入中保留原图信息的比例负向分支通常取 1prompt A robot, 4k photo negative_prior_prompt lowres, text, error, cropped, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, username, watermark, signature generator torch.Generator(devicecuda).manual_seed(43) img_emb prior_pipeline(promptprompt, imageimg, strength0.85, generatorgenerator) negative_emb prior_pipeline(promptnegative_prior_prompt, imageimg, strength1, generatorgenerator)最后运行KandinskyV22ControlnetImg2ImgPipelineimage pipeline(imageimg, strength0.5, image_embedsimg_emb.image_embeds, negative_image_embedsnegative_emb.image_embeds, hinthint, num_inference_steps50, generatorgenerator, height768, width768).images[0] make_image_grid([img.resize((512, 512)), image.resize((512, 512))], rows1, cols2)推理优化把算力花在刀刃上Kandinsky 的特殊之处在于需要prior 管线生成映射 第二条管线把 latents 解码为图像。绝大多数计算发生在第二条管线因此优化重点应放在第二条管线上。以下是文档给出的四条实践建议1. PyTorch 2.0启用 xFormers 内存高效注意力from diffusers import DiffusionPipeline import torch pipe DiffusionPipeline.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16) pipe.enable_xformers_memory_efficient_attention()2. PyTorch 2.0用torch.compile自动启用 SDPApipe.unet.to(memory_formattorch.channels_last) pipe.unet torch.compile(pipe.unet, modereduce-overhead, fullgraphTrue)这等价于把 attention processor 显式设置为AttnAddedKVProcessor2_0from diffusers.models.attention_processor import AttnAddedKVProcessor2_0 pipe.unet.set_attn_processor(AttnAddedKVProcessor2_0())3. 防止显存不足启用模型 CPU offloadfrom diffusers import DiffusionPipeline import torch pipe DiffusionPipeline.from_pretrained(kandinsky-community/kandinsky-2-1, dtypetorch.float16) pipe.enable_model_cpu_offload()Kandinsky 2.1 的 prior 管线源码中定义了model_cpu_offload_seq text_encoder-prior见 pipeline_kandinsky_prior.py2.2 则为text_encoder-image_encoder-prioroffload 会按照这一序列把模块逐个移入 GPU 执行、用毕即移回 CPU从而显著降低峰值显存。4. 替换调度器探索速度与质量的平衡text-to-image 管线默认使用DDIMScheduler可以替换为DDPMScheduler等观察推理速度与图像质量的变化from diffusers import DDPMScheduler from diffusers import DiffusionPipeline scheduler DDPMScheduler.from_pretrained(kandinsky-community/kandinsky-2-1, subfolderddpm_scheduler) pipe DiffusionPipeline.from_pretrained(kandinsky-community/kandinsky-2-1, schedulerscheduler, dtypetorch.float16, use_safetensorsTrue).to(cuda)小结围绕 docs/source/ko/using-diffusers/kandinsky.md 的完整脉络本文覆盖了 Kandinsky 系列三代模型的架构差异、五种核心任务text-to-image / image-to-image / inpainting / interpolation / ControlNet的完整可运行代码以及推理优化四板斧。其实现均可在仓库中直接对照2.1 系列管线见 src/diffusers/pipelines/kandinsky/2.2 系列见 src/diffusers/pipelines/kandinsky2_2/对应测试见 tests/pipelines/kandinsky/如 test_kandinsky.py、test_kandinsky_prior.pyAPI 参考见 docs/source/en/api/pipelines/kandinsky.md 与 docs/source/en/api/pipelines/kandinsky_v22.md。抓住2.x 先 prior 后解码、2.2 解码不吃 prompt、3 无 prior 单阶段这三条主线即可在各类任务中灵活组合这些管线。【免费下载链接】diffusers Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.项目地址: https://gitcode.com/GitHub_Trending/di/diffusers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进