
Diffusion
文章平均质量分 86
多恩Stone
聚焦时尚 AIGC -> https://github.com/wendashi/Cool-GenAI-Fashion-Papers
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Flux 中的 cross-attention / mm-attention / joint-attention 详解,附代码和图片参考
重点解读了joint-attention机制,它由四部分组成:图像自注意力、图像-文本交叉注意力、文本-图像交叉注意力和文本自注意力。原创 2025-06-09 11:21:00 · 416 阅读 · 0 评论 -
【Flux 中的 attention】缩放点积注意力机制的具体实现
本文介绍了一个基于PyTorch的注意力机制实现代码。该代码实现了缩放点积注意力机制,包含三个核心概念:Query(查询当前关注信息)、Key(可被查询信息)和Value(实际使用信息)。处理流程包括:计算Query和Key的点积,应用缩放因子与注意力偏置,通过softmax获取权重后与Value加权求和。该机制优势在于动态关注信息、捕捉长距离依赖、高效并行计算及良好的可解释性。代码来自GitHub上的attention-map-diffusers项目。原创 2025-06-09 10:47:20 · 123 阅读 · 0 评论 -
【Stable Diffusion 1.5 】在 Unet 中每个 Cross Attention 块中的张量变化过程
特征图保存图像语义特征,通过UNet架构逐层下采样(如512→64),而注意力图作为关系矩阵需更高计算效率,通常在16×16分辨率处理。原创 2025-05-29 20:13:23 · 1014 阅读 · 0 评论 -
【diffusers 进阶之 PEFT 入门(五)】LoRA 权重如何接着训练?踩坑总结和解决方案
通过使用 PEFT 的标准机制并注意初始化顺序,我们可以避免训练状态被意外重置的问题。这个经验也提醒我们,在深度学习工程实践中,有时看似简单的操作顺序调整可能会对训练结果产生重大影响。保持良好的代码组织和清晰的状态管理可以帮助我们避免类似的问题。:确保加载时使用的配置(如 alpha 值)与训练时保持一致,这对模型行为的一致性很重要。:PEFT 库提供了标准的 adapter 加载机制,能够正确处理权重的加载和初始化。要特别注意初始化和加载的顺序。在我们的解决方案中,实际的 LoRA 加载是通过。原创 2025-04-30 17:08:37 · 1203 阅读 · 0 评论 -
【扩散模型(十三)】Break-A-Scene 可控生成,原理与代码详解(中)Cross Attn Loss 代码篇
上篇介绍了 Break-A-Scene 的整体技术要点,本文则分析其对应的关键代码。方法采用的 base model 是 stable-diffusion-2-1-base。之前说了这个方法主要是 Textual Inversion + Dream Booth(从训练到的模型参数),再从 Attention loss 的角度来看,还参考了 P2P (Prompt-to-Prompt Image Editing。原创 2025-04-16 22:03:19 · 765 阅读 · 0 评论 -
【已解决】ModuleNotFoundError: No module named ‘imwatermark‘
配置 ConceptAttention 环境, https://github.com/helblazer811/ConceptAttention。参考论坛:https://github.com/CompVis/stable-diffusion/issues/332。原创 2025-04-16 13:00:53 · 392 阅读 · 1 评论 -
【扩散模型(十二)】Break-A-Scene 可控生成,原理与代码详解(上) 原理篇
这个项目名为 “Break-A-Scene: Extracting Multiple Concepts from a Single Image”,发表于 SIGGRAPH Asia 2023,旨在从单张图像中提取多个概念,并使用自然语言引导在各种上下文中重新合成这些概念或它们的组合。一句话解释:Textual Inversion(TI) + DreamBooth(DB) + Loss(下图的 3 和 4)原创 2025-04-11 16:04:23 · 919 阅读 · 0 评论 -
【diffusers 进阶之 PEFT 入门(四)】load_lora_weight 的踩坑总结以及解决方案
那如果之前未设置 adapter_name 时训练获得的权重,就是想用这个权重推理怎么办?因此可以写出将 lora 权重对应地更新到原模型权重上的代码,如下所示。本文作者的 lora 的 key 如下,从这里可以知道去掉。通过以下代码获取 lora 的 key。就能够对应会我们原模型的参数。此时推理即可获得正常结果。原创 2025-04-10 20:09:11 · 739 阅读 · 0 评论 -
【diffusers 进阶(十四)】权重读取,查看 Lora 具体加在哪里和 Rank ‘秩’ 是多少?以 OminiControl 为例
读取并打印 lora_A 的输出特征数(即 rank)或者 lora_B 的输入特征数即可。打印出想要的权重后,可以清楚地看出 lora 加在哪些层上。原创 2025-04-02 20:20:28 · 842 阅读 · 0 评论 -
【整流模型(三)】Flux 中 MM-DiT 和 Single-DiT 中的具体区别
处理流程:MM-DiT 同时处理两个输入流并让它们相互交互Single-DiT 处理单一输入流 (MM-DiT 的双流合并后的单流)并行注意力机制:Single-DiT 块里用到了并行注意力层,而 MM-DiT 是串行的。主要指 MLP 和 Attention 的关系(并行 or 串行)并行注意力层是在文章中提出的。如下图所示,这项技术很好理解,只不过是把注意力和线性层之间的串联结构变成并联结构。好处是,由于数据在过**注意力层前后本身就要各过一次线性层,在并联后,这些。原创 2025-03-27 12:31:37 · 1126 阅读 · 0 评论 -
【diffusers 进阶(十三)】AdaLayerNormZero 与 AdaLayerNormZeroSingle 代码详细分析
是自适应层归一化(Adaptive Layer Normalization)的变体,特别是 AdaLN-Zero 方法的实现。这种归一化技术在生成模型(如扩散模型)中非常重要,它允许模型根据条件信息动态调整归一化参数。与传统的 AdaIN(Adaptive Instance Normalization)不同,AdaLN-Zero 在初始状态下对原始特征的影响接近于零,这使得训练更加稳定。这种归一化方法是实现高质量条件生成的关键组件之一,使模型能够根据不同的条件生成多样化且可控的输出。原创 2025-03-26 16:58:31 · 1103 阅读 · 0 评论 -
【diffusers 进阶(十二)】Lora 具体是怎么加入模型的(推理代码篇下)OminiControl
对于空字典对禁用 LoRA(因为,上下文管理器将缩放因子设为0)对启用 LoRA(因为在上下文外,LoRA 已恢复原始状态)处理时不使用LoRA处理时使用LoRA(如果原本有启用的话)实际上是只对应用 LoRA,而对禁用了 LoRA。原创 2025-03-26 16:41:06 · 1355 阅读 · 0 评论 -
【diffusers 进阶(十一)】Lora 具体是怎么加入模型的(推理代码篇)OminiControl
由于 transformer_norm_state_dict 和 text_encoder_state_dict 为空,说明不向 transformer 中加入 norm 后的权重,也不对 text encoder 加入 lora。以其中的 /path/OminiControl/examples/subject_1024.ipynb 为具体代码示例。,而 3 是在 /path/OminiControl/src/flux/generate.py 中的。原创 2025-03-25 20:27:08 · 845 阅读 · 0 评论 -
【Python 进阶-1】Python 上下文管理器(Context Manager),with 语句
类是一个上下文管理器(Context Manager),这是 Python 中用于资源管理的一种设计模式,通常与。这种模式允许在特定代码块中临时修改 LoRA 的行为,而不影响其他代码,是一种优雅的资源管理方式。推理与训练行为差异化,这允许在训练和推理阶段有不同的 LoRA 使用策略。Python 上下文管理器中的。原创 2025-03-25 11:27:24 · 402 阅读 · 0 评论 -
【扩散模型思考记录(三)】分类、回归与扩散模型的关联
对比维度分类问题回归问题扩散模型任务目标预测离散类别标签预测连续数值学习数据分布并生成新样本输入/输出输入:特征向量输出:类别概率输入:特征向量输出:连续值输入:含噪数据xt(x_t)xt+ 时间步 (t)输出:预测噪声ϵθϵθ损失函数交叉熵损失(CrossEntropyLoss)均方误差损失(MSELoss)均方误差损失(MSELoss,预测噪声)或变分下界损失模型结构逻辑回归、CNN、Transformer等线性回归、决策树、SVM回归等。原创 2025-03-24 15:57:10 · 1194 阅读 · 0 评论 -
【可视化必备技能(1)】SD / Flux 文生图模型的 Attention Map 可视化
即在推理(去噪过程)就自动跳到 hook_function 的 forward_hook 中。- 两个函数都在 attention-map-diffusers/attention_map_diffusers/utils.py。是PyTorch的一个内置方法,用于注册一个前向传播钩子。这个钩子会在模块的前向传播完成后被调用。这种替换机制配合之前的hook机制,共同实现了完整的注意力图捕获和存储功能。这个替换的主要目的是为了在模型的前向传播过程中捕获注意力图。这是实现注意力图可视化的关键部分。原创 2025-03-06 21:40:07 · 1329 阅读 · 0 评论 -
【diffusers极速入门(十)】Flux-pipe 推理,完美利用任何显存大小,GPU显存节省终极方案(附代码)
Flux-pipe 推理,完美利用任何显存大小,GPU显存节省终极方案(附代码)原创 2025-02-20 14:30:02 · 857 阅读 · 1 评论 -
【diffusers极速入门(九)】GPU 显存节省(减少内存使用)代码总结
【代码】【diffusers极速入门(九)】GPU 显存节省(减少内存使用)代码总结。原创 2025-02-19 20:52:55 · 938 阅读 · 0 评论 -
【diffusers极速入门(八)】GPU 显存节省(减少内存使用)技巧总结
函数名作用在VRAM有限时解码大批量图像,一次只解码一张图像的潜在向量,搭配可进一步减少内存占用在有限VRAM下处理大尺寸图像,将图像分割成有重叠小块分别解码再融合,搭配可降低内存占用将模型权重卸载到CPU,只在执行前向传递时加载到GPU,可节省内存,但推理速度会变慢将整个模型移到GPU,相比顺序CPU卸载对推理时间影响小,同时节省一些内存应用内存高效注意力机制,提升速度并降低GPU内存用量,安装PyTorch>1.12、有可用CUDA和xFormers后可使用。原创 2025-02-07 20:44:54 · 1357 阅读 · 0 评论 -
【整流模型(二)】RF-inversion/ Flux 中 free lunch / training-free 的 Editing 和 Style Transfer (Inversion)
背景:生成模型的本质将随机噪声转换为图像;相反过程 - Inversion(反演)目的是将图像转换回结构化噪声,以便于对其恢复和编辑。问题:扩散模型(DMs)由于漂移和扩散的非线性(DDPM, DDIM 过程),它们的反演提出了可靠性和可编辑性的挑战 ion.现有的最先进的DM反演方法依赖于对附加参数的训练或对潜在变量的测试时间优化;这两者在实践中都是昂贵的。贡献:提出了利用线性二次调节器(linear quadratic regulator)得到的动态最优控制进行 RF (整流) 反演。原创 2025-02-06 22:07:03 · 1112 阅读 · 0 评论 -
【整流模型(一) / 扩散模型(十一)】SD1.5 / SDXL / SD3 / Flux 整体区别梳理汇总,扩散与整流(Rectified Flow)的区别
相关论文整理如下:可以把 SD1.5 和 SDXL 放为一类,而 SD3 和 Flux 则为另外一类,关键差异如下:左边为 SD3 (medium)右边为 Flux (dev)关键输入是指,从上方 c 哪里进入 DiT,即和 Latent 一起同时进入 joint attention。而不是从左侧 y 哪里进入 DiT,仅仅作为 Layer Norm 的一个弱约束。原创 2025-02-06 17:49:09 · 1345 阅读 · 0 评论 -
【权重小技巧(3) 】权重替换—训练 A 模型去替换 B 模型中的对应权重
本文则总结权重的结构化读取和替换方法,以实现在框架 1 中训练后的部分模型 A 的权重,去替换掉框架 2 中推理时模型 B 中对应的权重。需要模型 A 和模型 B 是相同的结构。原创 2025-02-06 17:02:26 · 870 阅读 · 0 评论 -
【Domain Generalization(4)】领域泛化与文生图之 -- CDGA 跨域生成式数据增强 Cross Domain Generative Augmentation
Image Classification 上的领域泛化,重点是用 LDM 来做数据增强,关键是补充了 Cross Domain (两种 Domain 之间)的数据。原创 2025-01-14 21:23:33 · 821 阅读 · 0 评论 -
【Domain Generalization(3)】领域泛化与文生图之 -- QUOTA 任意领域中的生成物体的数量可控
任务是文生图,重点在生成图像中物体数量的准确性/可控性。关键是 Any Domain,在两阶段(不同 Domain) 的数据上对新增的 token 优化/训练,实现领域泛化。原创 2025-01-13 16:55:58 · 1111 阅读 · 0 评论 -
【Flux 拆解(1)】CLIP 和 T5 的 Tokenizer 异同
本系列将以 Flux-dev 为例,详细拆解各个部分的细节和重点。Flux 整体框架图如下,来源于: 《Stable Diffusion 3「精神续作」FLUX.1 源码深度前瞻解读》原创 2024-10-19 15:53:22 · 2730 阅读 · 0 评论 -
【分布式训练(2)】深入理解 DeepSpeed 的 ZeRO 内存优化策略 (三阶段的区别)
在深度学习领域,分布式训练是一个重要的研究方向,它允许我们利用多个GPU来加速模型的训练过程。然而,随着模型规模的增大,单个GPU的内存限制成为了一个瓶颈。为了解决这个问题,DeepSpeed 提供了一种名为 Zero Redundancy Optimizer(简称 ZeRO)的技术,它通过不同的阶段(stage)来优化内存使用,从而使得训练更大的模型成为可能。原创 2024-10-12 21:28:13 · 1183 阅读 · 0 评论 -
【Hugging Face 下载中断】Git LFS 如何下载指定文件、单个文件夹?
在处理大型模型或数据集时,我们经常使用 Git Large File Storage (LFS) 来管理这些大文件。然而,下载过程中可能会遇到中断,需要重新下载特定文件或文件夹。本文将介绍如何在 Hugging Face 上使用 Git LFS 下载指定文件或单个文件夹。原创 2024-09-20 11:05:48 · 1118 阅读 · 0 评论 -
【扩散模型(十)】IP-Adapter 源码详解 4 - 训练细节、具体训了哪些层?
IP-Adapter 训的就是 image_proj_model(或者对于 plus 来说是 resampler) 和 adapter_modules 两块。在 adapter_modules 中,实际只训了 IPAttnProcessor2_0 的 to_k_ip 和 to_v_ip。adapter_modules 是在每个有含有 cross attention 的 unet block 里进行的替换,如下图所示。原创 2024-09-06 18:25:20 · 1472 阅读 · 2 评论 -
【扩散模型(九)】IP-Adapter 与 IP-Adapter Plus 的具体区别是什么?
从下图中可以很直观地看出有两处不同,第一是使用 image encoder 的方式不同、得到了不同的图像特征,第二是将原有的简单 ImageProjModel 替换成了更加复杂的 Resampler 以提取更多的图像信息。(2) .hidden_states[-2]:这行代码调用self.image_encoder时,通过 output_hidden_states=True 参数指示编码器输出除了。是一个简单的投影模型,可能用于将图像特征投影到一个多维空间以便于与其他类型的数据结合。原创 2024-08-27 22:08:23 · 2618 阅读 · 0 评论 -
【扩散模型(六)】IP-Adapter 是如何训练的?2 源码篇(IP-Adapter Plus)
在 IP-Adapter Plus 中,采用的是 Resampler 作为img embedding 到 ip_tokens 的映射网络,对图像(image prompt)中信息的抽取更加细粒度。从以下代码可以看出,IPAdapter 主要由 unet, image_proj_model, adapter_modules 3 个部分组成,而权重需要被优化的(训练到的)只有 ip_adapter..parameters(), 和 ip_adapter.,本文的重点是后续训练的实现。原创 2024-08-27 17:22:24 · 2086 阅读 · 0 评论 -
【扩散模型(八)】Stable Diffusion 3 diffusers 源码详解2 - DiT 与 MMDiT 相关代码(下)
中的 JointTransformerBlock 类,其中 hidden_states (noisy latent)和 encoder_hidden_states (text prompt) 分别通过 norm1 和 norm1_context 后,进入了第四层。transformer_sd3.py 中的 forward 函数中以下片段进入 for 循环,如果不训练 backbone的话,那么就是从 else 分支进入 block 中。下方画出的图片和对应代码即为文图融合的核心关键,在原论文中。原创 2024-08-26 10:34:27 · 2386 阅读 · 3 评论 -
【炼丹经验积累(一)】梯度消失 学习率自动调节 附代码
(1)先 warm up,在前 1/10 个训练步中,学习率从 0 调节到设定的 1e-5。自动调节学习率的方式很多,本文先从最简单地尝试起来,即“线性调节”(2)再衰减,在后续的训练步中,线性地从 1e-5 逐渐减为 0。原创 2024-08-22 15:03:18 · 803 阅读 · 0 评论 -
【问题解决与原理解释】Attempting to unscale FP16 gradients.
在使用 accelerate 训练模型时遇到以下报错,其实本质是没有理解训练过程中的各种精度设置的原理,本文将从等基础概念进行解释。原创 2024-08-18 18:03:11 · 4133 阅读 · 1 评论 -
【扩散模型(七)】Stable Diffusion 3 diffusers 源码详解2 - DiT 与 MMDiT 相关代码(上)
虽然这些变量来自于同一个线性层的输出,但由于 nn.Linear 层的权重在训练过程中是可学习的,并且是随机初始化的,因此这些权重会在训练过程中被更新为不同的值。原创 2024-08-12 15:52:35 · 2734 阅读 · 0 评论 -
【diffusers极速入门(七)】Classifier-Free Guidance (CFG)直观理解以及对应代码
由于 Classifier-Free Guidance (CFG) 相关的理论解释博客已经很多了,本文不涉及理论推导,而侧重直观理解和对应的 diffusers 代码。原创 2024-08-12 12:38:53 · 3742 阅读 · 0 评论 -
【可控图像生成系列论文(六)】ECCV24-Glyph-ByT5 微软亚研院、清华、北大合作工作(上)
现有 “文字渲染的不准确” 的问题,主要归因于 Text Encoder 的局限。例如,最初的 CLIP 文本编码器是为。层面的广泛视觉语言语义对齐而定制的,而 T5/ByT5 文本编码器则侧重于深度语言理解。然而,尽管最近的研究表明 T5/ByT5 文本编码器有利于视觉文本渲染任务,但两者都。缺乏定制的文本编码器设计可能会导致各种应用中的文本渲染不准确。原创 2024-08-08 17:32:43 · 1193 阅读 · 0 评论 -
【扩散模型思考记录(二)】什么是隐空间?为什么要引入隐空间?
引入隐变量空间(latent space)是生成模型中常用的技术,如变分自编码器(VAE)和生成对抗网络(GAN)。通过这种方法,可以将复杂的高维数据分布映射到一个相对简单的低维隐变量空间,从而简化采样过程。引入隐变量空间的核心思想是通过一个相对简单的低维表示来捕捉数据的复杂分布。这使得我们可以从标准分布中采样,并通过生成函数将其映射回原始数据空间,从而生成符合复杂分布的新样本。这种方法不仅简化了采样过程,还提高了生成数据的质量和多样性。原创 2024-07-31 15:46:25 · 1701 阅读 · 0 评论 -
【扩散模型思考记录(一)】图像生成的本质是什么?什么是适合采样的复杂分布?
适合采样的复杂分布指的是一种能够真实且高效地生成新样本的分布。高保真度生成的样本应与真实数据集中的样本相似度高,能够保留数据集的各种重要特征和模式。高多样性生成的样本应具有足够的多样性,能够涵盖数据集中的不同模式和变异性,而不是仅生成几种重复的样本。平滑性分布应当是平滑的,即在高维空间中没有过多的奇异点或异常值。这样的分布有助于模型在未见过的数据点上进行合理的插值和外推。可采样性分布应该是容易采样的。即我们能够设计有效的算法,从这个分布中高效地生成样本。原创 2024-07-31 15:40:08 · 636 阅读 · 0 评论 -
【diffusers极速入门(六)】缓存梯度和自动放缩学习率以及代码详解
缓存梯度(Gradient Checkpointing): 通过在前向传播过程中存储部分中间激活值,减少显存占用,代价是反向传播速度变慢。适用于需要训练非常深或大的模型的情况。自动放缩学习率(Learning Rate Scaling): 根据训练配置(如 GPU 数量(num_processes)、梯度累积步数和批量大小)自动调整学习率,以适应不同的训练环境和配置,确保训练的稳定性和效果。原创 2024-07-30 11:51:20 · 1261 阅读 · 0 评论 -
【diffusers极速入门(五)】扩散模型中的 Scheduler(noise_scheduler)的作用是什么?
Scheduler 在扩散模型中扮演着重要的角色,它通过控制噪声的添加和去除,影响着模型的训练和生成效果。不同的 Scheduler 有不同的特点和适用场景,研究者可以根据具体任务选择合适的 Scheduler。原创 2024-07-29 22:25:44 · 3524 阅读 · 0 评论