ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Stable Diffusion v2 完整实践指南:从文本到图像、深度条件生成到图像修复的推理与配置解析

Stable Diffusion v2 完整实践指南:从文本到图像、深度条件生成到图像修复的推理与配置解析 计算机视觉媒体生成深度学习基础模型【免费下载链接】stablediffusionHigh-Resolution Image Synthesis with Latent Diffusion Models项目地址https://gitcode.com/GitHub_Trending/st/stablediffusion点击查看免费下载Stable Diffusion v2 是本仓库Stable Diffusion Version 2的核心主题一系列从零训练、持续更新的潜空间扩散模型Latent Diffusion Models涵盖 768×768 文本生成图像、深度条件生成、x4 超分辨率、图像修复与 Stable unCLIP 图像变体等能力。本文以仓库根目录 README.md 为主体骨架结合 scripts/txt2img.py、scripts/img2img.py 等推理脚本与configs/stable-diffusion/下的完整配置逐项讲解环境搭建、命令行采样、核心参数含义、底层架构与配置原理帮助你直接复现并深入理解这套模型体系的每一个推理入口。一、模型家族与版本演进README 以 News 时间线记录了 v2 系列模型的关键里程碑理解这些版本差异是正确选择权重与配置文件的前提。1.1 v2.0从零训练的起点2022-11-24Stable Diffusion 2.0-v768×768 分辨率U-Net 参数量与 1.5 相同但文本编码器换成了 OpenCLIP-ViT/H并且是从零训练。它是所谓的v-prediction模型参见 arXiv:2202.00512即模型预测的不是噪声本身而是速度分量v。Stable Diffusion 2.0-base512×512 分辨率标准的噪声预测noise-prediction模型2.0-v 在其基础上微调而来。同时发布了三类下游模型x4 潜空间文本引导超分辨率模型、深度引导扩散模型基于 MiDaS 单目深度估计用于保持结构的 img2img 与形状条件合成、文本引导图像修复模型由 2.0-base 微调。1.2 v2.1更宽松的过滤策略2022-12-07Stable Diffusion 2.1-v768×768与Stable Diffusion 2.1-base512×512参数量与架构与 2.0 完全一致只是在 LAION-5B 数据集更宽松的 NSFW 过滤子集上微调。一个重要的推理细节当未安装xformers时模型的注意力操作默认以全精度fp32计算。若希望启用 fp16在 v2.1 模型上原生注意力模块可能引发数值不稳定需以环境变量方式运行脚本ATTN_PRECISIONfp16 python thescript.py1.3 Stable unCLIP 2.12023-03-24基于 SD2.1-768 微调的新模型支持图像变体image variations与混合操作原理见Hierarchical Text-Conditional Image Generation with CLIP Latents本文第九节也会展开。1.4 v2 的架构定位README 明确给出 v2 的定义性配置下采样因子 8 的自编码器AutoencoderKL 865M 参数的 U-Net OpenCLIP ViT-H/14 文本编码器SD 2-v 模型输出 768×768 像素图像。文本编码器取penultimate倒数第二层嵌入作为条件这一点在 configs/stable-diffusion/v2-inference-v.yaml 的cond_stage_config中写为layer: penultimate对应 ldm/modules/encoders/modules.py 中FrozenOpenCLIPEmbedder的实现。仓库在 8 组无分类器引导尺度1.5、2.0、3.0、4.0、5.0、6.0、7.0、8.0与 50 步 DDIM 采样下评估了各 checkpoint 的相对提升结果见下图二、环境准备与依赖安装2.1 基础依赖README 给出的安装路径是直接复用已有的 latent diffusion 环境核心命令如下conda install pytorch1.12.1 torchvision0.13.1 -c pytorch pip install transformers4.19.2 diffusers invisible-watermark pip install -e .对照仓库根目录的 environment.yaml 可以看到完整的推荐环境python3.8.5、cudatoolkit11.3、pytorch1.12.1、torchvision0.13.1、transformers4.19.2、open_clip_torch2.0.2、invisible-watermark0.1.5、streamlit1.12.1、omegaconf2.1.1、pytorch-lightning1.4.2等。其中invisible-watermark用于给输出打不可见水印streamlit与streamlit-drawable-canvas用于 Web Demoopen_clip_torch提供 v2 所需的 OpenCLIP 文本编码器。2.2 xformers 高效注意力README 强烈推荐安装 xformers 以获得 GPU 上的效率与速度提升官方在 A100 CUDA 11.4 上测试。安装需要较新的nvcc与gcc/gexport CUDA_HOME/usr/local/cuda-11.4 conda install -c nvidia/label/cuda-11.4.0 cuda-nvcc conda install -c conda-forge gcc conda install -c conda-forge gxx_linux-649.5.0然后编译安装编译最长约 30 分钟cd .. git clone https://github.com/facebookresearch/xformers.git cd xformers git submodule update --init --recursive pip install -r requirements.txt pip install -e . cd ../stablediffusion安装成功后代码会自动将 U-Net 与自编码器中的自注意力、交叉注意力层切换为 memory efficient attention 实现。这一机制可以从 scripts/txt2img.py 的采样流程中得到印证整个推理在torch.no_grad()下执行注意力精度行为受环境变量与依赖共同决定。三、Text-to-Image 文本生成图像3.1 权重与配置准备首先下载SD2.1-v与SD2.1-base权重。仓库提供了两套推理配置configs/stable-diffusion/v2-inference-v.yamlSD2-v768pxv-predictionconfigs/stable-diffusion/v2-inference.yamlSD2-base512px标准噪声预测。3.2 采样命令从SD2.1-v模型采样python scripts/txt2img.py --prompt a professional photograph of an astronaut riding a horse --ckpt path/to/768model.ckpt/ --config configs/stable-diffusion/v2-inference-v.yaml --H 768 --W 768从 base 模型采样python scripts/txt2img.py --prompt a professional photograph of an astronaut riding a horse --ckpt path/to/model.ckpt/ --config path/to/config.yaml/默认使用DDIM 采样器arXiv:2010.02502以 50 步渲染 768×768 图像。经验上v 系列模型可以配合更高的引导尺度使用。下面两张是 README 展示的 txt2img 示例输出3.3 命令行参数全解scripts/txt2img.py 中的parse_args()提供了完整的采样控制项整理如下参数默认值含义--prompta professional photograph of an astronaut riding a triceratops渲染用的提示词--outdiroutputs/txt2img-samples结果输出目录--steps50DDIM 采样步数--plmsFalseflag改用 PLMS 采样arXiv:2202.09778--dpmFalseflag改用 DPM-Solver(2) 采样器arXiv:2206.00927--fixed_codeFalseflag所有样本使用相同的起始噪声码便于对照--ddim_eta0.0DDIM 的 eta 值0.0对应确定性采样--n_iter3重复采样轮数--H/--W512/512输出图像的高/宽像素空间--C4潜空间通道数--f8下采样因子通常为 8 或 16--n_samples3每个提示词生成的样本数即 batch size--n_rows0网格图行数默认为n_samples--scale9.0无分类器引导尺度eps eps(x, empty) scale * (eps(x, cond) - eps(x, empty))--from-file无从文本文件按行读取提示词--configconfigs/stable-diffusion/v2-inference.yaml构建模型的配置文件--ckpt无模型 checkpoint 路径--seed42随机种子用于可复现采样--precisionautocastfull或autocast--repeat1文件中每条提示词重复的次数--devicecpucpu或cuda--torchscript/--ipex/--bf16FalseflagIntel CPU 优化相关见第四节采样器选择逻辑在main()中--plms优先于--dpm否则回退到DDIMSampler。三条采样路径分别对应 ldm/models/diffusion/ddim.py、ldm/models/diffusion/plms.py 与 ldm/models/diffusion/dpm_solver/sampler.py。输出时脚本会把每个 batch 的样本保存为独立 PNGsamples/子目录同时用make_grid拼接成网格图grid-XXXX.png。3.4 推理配置逐项解析以 configs/stable-diffusion/v2-inference-v.yaml 为例逐项说明关键字段注释已内嵌于配置中parameterization: vv-prediction 参数化这是 2.0-v / 2.1-v 与 base 模型该行缺失即噪声预测的核心区别linear_start: 0.00085/linear_end: 0.0120扩散噪声调度表的边界值timesteps: 1000为总扩散步数image_size: 64潜空间特征图尺寸512 ÷ 8 64768 分辨率时相应为 96channels: 4潜空间通道数即上面的--Cconditioning_key: crossattn使用交叉注意力注入文本条件scale_factor: 0.18215潜空间缩放因子在get_first_stage_encoding阶段对编码结果做缩放use_ema: False这是推理专用配置的关键。README 明确说明所有版本的推理配置都设计为配合EMA-only checkpoint使用因此必须保持use_emaFalse否则代码会尝试从非 EMA 权重切换到 EMA 权重而报错unet_configUNetModelmodel_channels: 320、channel_mult: [1,2,4,4]、num_res_blocks: 2、attention_resolutions: [4,2,1]、num_head_channels: 64并开启use_spatial_transformer: True、use_linear_in_transformer: True、transformer_depth: 1context_dim: 1024与 OpenCLIP 倒数第二层嵌入维度对齐first_stage_configAutoencoderKLembed_dim: 4、z_channels: 4、resolution: 256、ch: 128、ch_mult: [1,2,4,4]——即下采样因子 8 的自编码器cond_stage_configFrozenOpenCLIPEmbedderfreeze: True、layer: penultimate。值得注意的是scripts/txt2img.py 在 TorchScript 路径中构造的上下文张量形状为(2, 77, 1024)印证了文本侧按 77 token 截断、嵌入维度 1024 的约定。3.5 不可见水印txt2img.py 在保存每张图片前调用put_watermark()将字节串SDV2通过dwtDct算法编码进图像imwatermark.WatermarkEncoder。配套的验证脚本是 scripts/tests/test_watermark.py它用WatermarkDecoder(bytes, 136)解码并打印水印内容可用来确认输出确实为机器生成python scripts/tests/test_watermark.py path-to-image四、Intel CPU 上的推理优化IPEX如果你计划在 Intel CPU 上运行 Text-to-ImageREADME 提供了基于 TorchScript Intel® Extension for PyTorch*IPEX的优化路径将算子内存布局优化为 Channel Last、利用机器上最先进的指令集、优化算子实现等。4.1 依赖安装apt-get install numactl libjemalloc-dev pip install intel-openmp pip install intel_extension_for_pytorch -f https://software.intel.com/ipex-whl-stable官方在Ubuntu 20.04上验证过该路径。对应的推理配置位于 configs/stable-diffusion/intel/与 GPU 配置的关键差异是use_checkpoint: False、use_fp16: Falsebf16 版额外增加use_bf16: True。4.2 fp32 采样命令从SD2.1-v模型采样--ninstance指定并发实例数MALLOC_CONFoversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance number of an instance --enable_jemalloc scripts/txt2img.py --prompt a corgi is playing guitar, oil on canvas --ckpt path/to/768model.ckpt/ --config configs/stable-diffusion/intel/v2-inference-v-fp32.yaml --H 768 --W 768 --precision full --device cpu --torchscript --ipexbase 模型同理使用 configs/stable-diffusion/intel/v2-inference-fp32.yamlMALLOC_CONFoversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance number of an instance --enable_jemalloc scripts/txt2img.py --prompt a corgi is playing guitar, oil on canvas --ckpt path/to/model.ckpt/ --config configs/stable-diffusion/intel/v2-inference-fp32.yaml --n_samples 1 --n_iter 4 --precision full --device cpu --torchscript --ipex4.3 bf16 采样命令若 CPU 支持bfloat16可用 bf16 获得额外性能提升# SD2.1-v MALLOC_CONFoversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance number of an instance --enable_jemalloc scripts/txt2img.py --prompt a corgi is playing guitar, oil on canvas --ckpt path/to/768model.ckpt/ --config configs/stable-diffusion/intel/v2-inference-v-bf16.yaml --H 768 --W 768 --precision full --device cpu --torchscript --ipex --bf16 # SD2.1-base MALLOC_CONFoversize_threshold:1,background_thread:true,metadata_thp:auto,dirty_decay_ms:9000000000,muzzy_decay_ms:9000000000 python -m intel_extension_for_pytorch.cpu.launch --ninstance number of an instance --enable_jemalloc scripts/txt2img.py --prompt a corgi is playing guitar, oil on canvas --ckpt path/to/model.ckpt/ --config configs/stable-diffusion/intel/v2-inference-bf16.yaml --precision full --device cpu --torchscript --ipex --bf16从源码角度看scripts/txt2img.py 中--bf16仅在torchscriptipex组合下受支持若 bf16 配置搭配 fp16 权重或反之脚本会抛出明确的 ValueError提示使用configs/stable-diffusion/intel/下对应的 bf16/fp32 配置。五、深度条件生成Depth-Conditional Stable Diffusion经典的 img2img 会引入相对初始图像较明显的语义变化。如果希望保持形状结构README 提供了深度条件模型由 MiDaS 推断单目深度再以相对深度输出作为扩散模型的条件。5.1 准备与运行下载 depth-conditional stable diffusion 模型权重以及dpt_hybridMiDaS 模型权重将后者放入midas_models文件夹然后运行 Gradio Demopython scripts/gradio/depth2img.py configs/stable-diffusion/v2-midas-inference.yaml path-to-ckpt或 Streamlit Demostreamlit run scripts/streamlit/depth2img.py configs/stable-diffusion/v2-midas-inference.yaml path-to-ckpt该方法可直接用于 base 模型自己生成的样本。以 assets/stable-samples/depth2img/old_man.png 为例depth2img.py先让 MiDaS 推断单目深度再让扩散模型以该相对深度为条件重绘。该模型尤其适合写实风格当强度达到最大值 1.0 时模型会丢弃所有像素级信息只依赖文本提示与推断出的单目深度。仓库给出了完整的端到端演示动图5.2 配置要点configs/stable-diffusion/v2-midas-inference.yaml 中模型目标为LatentDepth2ImageDiffusionconditioning_key: hybrid新增depth_stage_config指定MiDaSInference且model_type: dpt_hybridU-Net 的in_channels变为54 通道潜变量 1 通道深度图这正是深度条件在架构上的直接体现。六、经典 img2imgimg2img本质上是 SDEdit 的一个应用作者 Chenlin Meng 来自斯坦福 AI Lab。命令python scripts/img2img.py --prompt A fantasy landscape, trending on artstation --init-img path-to-img.jpg --strength 0.8 --ckpt path/to/model.ckpt并相应调整 checkpoint 与 config 路径。从 scripts/img2img.py 的源码可看清其工作原理load_img()先把输入图缩放到 64 的整数倍w - w % 64归一化到[-1, 1]model.encode_first_stage()将图像编码到潜空间再经get_first_stage_encoding()缩放得到init_latentt_enc int(strength * ddim_steps)——--strength决定加噪步数占比取值必须在[0.0, 1.0]1.0对应初始图像信息的完全破坏sampler.stochastic_encode()对潜变量加噪到t_enc再由sampler.decode()在文本条件下逐步去噪输出同样经过SDV2不可见水印。img2img.py的其余参数与txt2img.py基本一致--scale默认 9.0、--ddim_steps默认 50、--ddim_eta默认 0.0、--seed默认 42但它只使用DDIMSampler。你可以在 assets/stable-samples/img2img/ 看到官方提供的 img2img 与超分辨率示例输入/输出。七、x4 文本引导超分辨率下载 x4 upscaler 权重后运行 Gradio Demopython scripts/gradio/superresolution.py configs/stable-diffusion/x4-upscaling.yaml path-to-checkpoint或 Streamlit Demostreamlit run scripts/streamlit/superresolution.py -- configs/stable-diffusion/x4-upscaling.yaml path-to-checkpoint该模型既可用于真实输入也可用于模型合成图。对合成图README 建议设置更高的noise_level例如noise_level100。配置 configs/stable-diffusion/x4-upscaling.yaml 的技术要点目标类LatentUpscaleDiffusionlow_scale_key: lrparameterization: vimage_size: 128scale_factor: 0.08333low_scale_config使用ImageConcatWithNoiseAugmentation其max_noise_level: 350定义了注入噪声的强度上限——这就是 GUI 中noise_level滑杆的物理含义U-Netin_channels: 74 通道潜变量 低分辨率图通道 噪声级条件num_classes: 1000用于噪声级时间步条件model_channels: 256、channel_mult: [1,2,2,4]、disable_self_attentions: [True,True,True,False]。示例输出见 assets/stable-samples/upscaling/如merged-dog.png、sampled-bear-x4.png、snow-leopard-x4.png。八、文本引导图像修复Inpainting下载 SD 2.0-inpainting checkpoint后运行python scripts/gradio/inpainting.py configs/stable-diffusion/v2-inpainting-inference.yaml path-to-checkpoint或streamlit run scripts/streamlit/inpainting.py -- configs/stable-diffusion/v2-inpainting-inference.yaml path-to-checkpoint该 Demo 添加了不可见水印源自 RunwayML 仓库 的做法但两者与对应的 checkpoints/configs 可以互换使用。示例效果从 scripts/gradio/inpainting.py 与 configs/stable-diffusion/v2-inpainting-inference.yaml 可以确认其实现目标类为LatentInpaintDiffusionconditioning_key: hybridU-Netin_channels: 9对应4 通道原图潜变量 4 通道遮罩图潜变量 1 通道二值遮罩的拼接输入前端把遮罩二值化mask[mask 0.5] 0mask[mask 0.5] 1并构造masked_image image * (mask 0.5)传入模型配置中附带的data段展示了训练时的数据管线LAION tar 分片 AddMask后处理mode: 512train-large、p_drop: 0.25可作为理解该模型训练机制的参考推理时无需理会。九、Stable unCLIP图像变体与 Stable Karlodoc/UNCLIP.MD 是 README 中 unCLIP 条目的完整展开。unCLIP 是 OpenAI DALL·E 2 背后的方法训练模型反转 CLIP 图像嵌入。Stable Diffusion 2.1 微调后可以额外接受一个 CLIP ViT-L/14 图像嵌入从而既能做图像变体也能与文本到图像的嵌入先验组合成完整的 768×768 文本到图像模型。9.1 图像变体两个模型基于 OpenAI CLIP-L 与 OpenCLIP-H 图像嵌入训练从 https://huggingface.co/stabilityai/stable-diffusion-2-1-unclip 的提示。变体效果示例9.2 Diffusers 集成unCLIP 变体已集成进 diffusers 库可用StableUnCLIPImg2ImgPipeline直接使用#pip install githttps://github.com/huggingface/diffusers.git transformers accelerate import requests import torch from PIL import Image from io import BytesIO from diffusers import StableUnCLIPImg2ImgPipeline #Start the StableUnCLIP Image variations pipeline pipe StableUnCLIPImg2ImgPipeline.from_pretrained( stabilityai/stable-diffusion-2-1-unclip, torch_dtypetorch.float16, variationfp16 ) pipe pipe.to(cuda) #Get image from URL url https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/tarsila_do_amaral.png response requests.get(url) init_image Image.open(BytesIO(response.content)).convert(RGB) #Pipe to make the variation images pipe(init_image).images images[0].save(tarsila_variation.png)9.3 Streamlit UI 与 noise_level也可以直接启动本仓库自带的 Streamlit 脚本streamlit run scripts/streamlit/stableunclip.py它支持同时用 CLIP-L 与 OpenCLIP-H 两个模型做图像变体。两个模型都接受noise_level参数指定添加到 CLIP 嵌入上的高斯噪声量用于增大输出方差9.4 Stable Karlo与 KARLO 组合KakaoBrain 开源的 Karlo 是 unCLIP 的大规模复现。Stable Karlo即 Karlo CLIP 图像嵌入先验与 Stable Diffusion v2.1-768 的组合。运行前先下载 KARLO checkpointmkdir -p checkpoints/karlo_models cd checkpoints/karlo_models wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/096db1af569b284eb76b3881534822d9/ViT-L-14.pt wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/0b62380a75e56f073e2844ab5199153d/ViT-L-14_stats.th wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/85626483eaca9f581e2a78d31ff905ca/prior-ckpt-step%3D01000000-of-01000000.ckpt cd ../../再下载微调后的 SD2.1 unCLIP-L checkpoint 并放入checkpoints文件夹随后运行streamlit run scripts/streamlit/stableunclip.py在 GUI 中勾选use_karlo选项。脚本还支持采样完整的 Karlo 模型需额外下载 64×64 decoder 与 64→256 upscalercd checkpoints/karlo_models wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/efdf6206d8ed593961593dc029a8affa/decoder-ckpt-step%3D01000000-of-01000000.ckpt wget https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/4226b831ae0279020d134281f3c31590/improved-sr-ckpt-step%3D1.2M.ckpt cd ../../仓库中的 assets/stable-samples/stable-unclip/panda.jpg 与 ldm/modules/karlo/ 目录含 CLIP 编码器、prior、decoder、超分模块即为该组合路径的样例与实现。十、使用注意事项与许可通用免责声明Stable Diffusion 属于通用的文本到图像扩散模型会镜像训练数据中的偏见与误解。虽然训练中已努力减少露骨色情内容但 README 明确建议不要在没有额外安全机制与考量的情况下将提供的权重用于服务或产品。权重是研究产物应如此对待。训练流程、数据与预期用途详见对应的 model card。权重许可权重通过 StabilityAI。代码许可本仓库代码以 MIT License 发布。引用方式使用本模型请引用论文High-Resolution Image Synthesis with Latent Diffusion ModelsRombach 等CVPR 22 Oral仓库 README.md 底部提供了完整的 BibTeX 条目。推理配置约束所有推理配置均面向 EMA-only checkpoint 设计务必保持use_emaFalse未安装 xformers 时注意力默认全精度v2.1 上启用 fp16 请使用ATTN_PRECISIONfp16前缀见第一节。赞分享计算机视觉媒体生成深度学习基础模型【免费下载链接】stablediffusionHigh-Resolution Image Synthesis with Latent Diffusion Models项目地址https://gitcode.com/GitHub_Trending/st/stablediffusion点击查看免费下载相关推荐Stable Diffusion v2高级特性深度条件与图像修复技术Stable Diffusion v2高级特性深度条件与图像修复技术 本文详细解析了Stable Diffusion v2在深度条件图像生成和图像修复方面的突计算机视觉媒体生成深度学习基础模型SQL Tabs连接配置全攻略从本地数据库到云服务的完整连接指南SQL Tabs连接配置全攻略从本地数据库到云服务的完整连接指南 SQL Tabs是一款功能强大的开源数据库管理工具支持多种数据库类型的快速连接和查询。无论lsw与pfwwmutils/core窗口列表工具的5个实用技巧 lsw与pfwwmutils/core窗口列表工具的5个实用技巧 在X窗口系统中 lsw与pfw 是wmutils/core项目中两个强大的窗口列表工桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表