MoreRSS

site iconLeo Van | 范叶亮修改

京东、美团。现从事数据科学在安全风险领域的技术应用和产品设计。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Leo Van | 范叶亮的 RSS 预览

大语言模型微调 (Fine-tuning Large Language Models)

2025-08-09 08:00:00

什么是微调

微调(Fine-tuning)是深度学习中迁移学习的一种方法,其将现有模型已经学到的知识作为学习新任务的起点。虽然微调表面上是模型训练中使用的一种技术,但它与传统意义上的“训练”截然不同。为了消除歧义,在这种情况下通常将传统意义上的“训练”称为预训练(Pre-training)。1

与微调类似的另一个概念称之为后训练(Post-training),两者均发生在预训练之后,其目的也都是为了进一步提升模型的效果,通常两者可以理解为相同的概念。从优化的发起人角度出发:当终端用户希望模型可以更好的适配自己的领域知识,则需要进行的操作称之为微调;当模型开发者希望可以更好的将模型与人类的价值、道德和预期保持一致,则需要进行的操作称之为后训练。2

为什么微调

从本质上讲,磨练一个预训练基础模型的能力要比从头开始训练一个新模型更容易,也更省钱,因为预训练已经获得了与当前任务相关的广泛知识。对于具有数百万甚至数十亿个参数的深度学习模型尤其如此,例如在自然语言处理(NLP)领域的大语言模型(LLM)或卷积神经网络(CNN)和视觉转换器(ViT)(用于计算机视觉任务,例如图像分类、对象检测或图像分割等)。

通过迁移学习利用先前的模型训练,微调可以减少获得适合特定用例和业务需求的大模型所需的昂贵算力和标记数据量。例如,微调可用于调整预训练大语言模型的对话语气或预训练图像生成模型的图片样式,还可用于使用专有数据或领域特定的专业知识来补充模型的原始训练数据集。

如何去微调

微调是需要进一步训练模型的技术,模型的权重已经通过先前的预训练得到了更新。使用基础模型的先前知识作为起点,通过在任务特定的较小数据集上进行训练来对模型进行微调。

虽然从理论上讲,任务特定的数据集都可以用于初始训练,但在小数据集上从头开始训练一个大模型可能会存在过拟合的风险:模型可能会在训练示例中学习得到良好的表现,但对新数据的泛化能力却很差。这会导致模型不适合给定的任务,也违背了模型训练的初衷。 因此,微调可以兼具两者的优势:利用对大量数据进行预训练所获得的广泛知识和稳定性,并训练模型对更详细、更具体概念的理解。

微调方法分类

参数角度

从参数角度,我们可以将微调分为全参数微调(Full Fine-tuning)和部分参数微调(Repurposing):

  • 全参数微调:即对模型的所有参数进行微调。这种微调方法通常适用于任务与预训练模型之间存在较大差异的情况。全参数微调需要耗费较大的计算资源和时间,通常可以获得更好的性能,但在数据不足时容易出现过拟合问题。
  • 部分参数微调:即仅对模型的部分参数或额外的模型参数进行微调。相比于全参数微调,部分参数微调可以在较少的计算资源和时间的情况下,在一些特定任务上提高模型的性能。

数据角度

从数据角度,我们可以将微调分为监督微调(Supervised Fine-tuning)和无监督微调(Unsupervised Fine-tuning):

  • 监督微调:在进行微调时使用有标签的训练数据集。通过使用这些标签来指导模型的微调,可以使模型更好地适应特定任务。
  • 无监督微调:在进行微调时使用无标签的训练数据集。通过学习数据的内在结构或生成数据来进行微调,以提取有用的特征或改进模型的表示能力。

方式角度

从方式角度,我们可以将微调划分为指令微调(Instruction Fine-tuning)和对齐微调(Alignment Fine-tuning):

  • 指令微调:利用格式化的实例以有监督的方式微调大语言模型。通过指令微调不仅可以改善模型的性能,同时也可以增强模型的泛化能力。
  • 对齐微调:为了避免大语言模型的幻觉问题,以及同人类的价值观和偏好对齐,提高伦理表现,将人类整合到模型的训练过程中。例如基于人类对结果的反馈,模型通过强化学习从而与人类对齐。

显存消耗

在进行模型微调时我们需要关注显存的消耗,以确保在当前的硬件环境中可以正常进行微调。在进行模型微调时,显存消耗主要同如下因素有关:

  • 参数精度:决定了每个参数占用的实际显存大小,例如 FP32(单精度)占用 4 字节,FP16(半精度)占用 2 字节,INT8 占用 1 字节等。
  • 模型参数:微调所需显存的基础决定因素,例如微调一个 1B 模型,其参数总量则为 10 亿。
  • 梯度:在微调过程中需要存储反向传播计算得到的梯度信息,这部分大小同模型参数相同,精度同训练精度一致。
  • 优化器状态:优化器所需的额外信息,例如动量、方差等,不同的优化器占用的显存大小也不尽相同,保守估计为模型参数所需显存的 4 倍。
  • 激活值:用于储存前向传播过程中的中间结果,所需显存大小主要受到批大小和序列长度的影响,量级相比前面可以忽略不计。

以全参数微调一个 1B 模型为例,所需的显存大致为 12GB(模型参数:2GB,梯度:2GB,优化器状态:8GB)。在使用部分参数微调时,模型参数本身不变,需要微调的参数会大幅度减少,因此梯度和优化器状态所需的显存也会大幅度减少。在应用一些量化技术后,例如使用 INT8 精度进行微调,则所有部分的显存占用均会相应的减少。

参数高效微调

参数高效微调部分主要参考了 llm-action 项目。

参数高效微调(Parameter-Efficient Fine-Tuning)是指固定大部分预训练模型的参数,仅微调少量或额外的模型参数的微调方法,从而可以极大的降低计算成本。参数高效微调可以从方法的角度可以分为三类 3:引入新参数(Addition-based),微调部分参数(Selection-based)和重参数化(Reparametrization-based),其中引入新参数又可以划分为适配器方法和软提示方法两种。

参数高效微调方法分类
参数高效微调方法分类

在实战过程中我们可以使用 Huggingface 开源的 PEFT 扩展库进行参数高效微调,作为 Huggingface 开源项目其可以与 TransformersAccelerateDiffusers 等多个开源库无缝衔接使用。在官方文档中我们可以查看支持的微调类型任务类型

Prefix Tuning

Prefix Tuning 4 是在输入的 token 前构造与任务相关的 virtual token 作为前缀,在微调的时候仅更新前缀部分的参数。

针对不同的模型结构,构造的前缀也有所不同:

  • 自回归结构:添加前缀后,得到 $z = \left[\text{PREFIX}; x; y\right]$。
  • 编码器-解码器结构:在编码器和解码器前均添加前缀,得到 $z = \left[\text{PREFIX}; x; \text{PREFIX}’; y\right]$。

作者发现直接更新前缀的参数会导致训练不稳定,因此在前缀之前添加了 MLP 结构,在训练完成后 MLP 部分的参数无需保留,仅保留前缀的参数即可。同时作者也针对前缀使用多少个 virtual token 以及前缀放置的位置对于微调的性能影响进行了相关实验,细节请参考论文原文。

Prompt Tuning

Prompt Tuning 5 可以看作是 Prefix Tuning 的简化版本,其为每个任务定义不同的 Prompt,然后拼接到数据上作为输入。

Prompt Tuning 仅在输入层添加 token,不需要像 Prefix Tuning 那样添加 MLP 结构解决训练问题。通过实验发现,随着模型参数的增加,Prompt Tuning 的效果会逼近全参数微调的效果。

实验还发现,与随机和使用样本词汇表的初始化相比,采用类标签初始化的微调效果更好,但随着模型参数的增加,效果差异会消失。同时 Prompt 的 token 长度在 20 左右可以获得不错的效果,同样随着模型参数的增加,token 长度带来的增益会消失。

P-Tuning

P-Tuning 6 将 Prompt 转换为可学习的 Embedding 层,再通过 MLP+LSTM 结构对 Prompt Embedding 进行处理。

对比 Prefix Tuning,P-Tuning 增加了可微的 virtual token,但仅作用于输入层,没有在每一层都添加。同时,virtual token 的位置也不一定是前缀,其插入的位置是可选的,目的是将传统人工设计的 Prompt 模板中的真实 token 替换为可微的 virtual token。

实验发现随机初始化 virtual token 容易陷入局部最优,因此通过一个 Prompt Encoder(即 MLP+LSTM 结构)对其进行编码可以获得更好的效果。

P-Tuning v2

Prompt Tuning 和 P-Tuning 存在如下问题:

  • 缺乏规模通用性:Prompt Tuning 在模型超过 100 亿时可以与全量微调媲美,但对于较小参数的模型与全量微调的效果有很大的差距。
  • 缺乏任务普遍性:Prompt Tuning 和 P-Tuning 在一些 NLU 基准测试中表现出优势,但对序列标注任务的有效性尚未得到验证。
  • 缺少深度提示优化:在 Prompt Tuning 和 P-Tuning 中,提示仅被插入到输入中,后续插入提示位置的嵌入是通过之前层计算得到。这可能导致插入提示对模型最终效果的影响有限,同时由于序列长度限制可调参数的数量也是有限的。

考虑到上述问题,P-Tuning v2 7 利用深度提示优化(例如:Prefix Tuning)对 Prompt Tuning 和 P-Tuning 进行改进,类似 Prefix Tuning,其在每一层都加入了 Prompt token 作为输入。

P-Tuning v2 还通过移除重参数化编码器、针对不同任务采用不同提示词长度、引入多任务学习、使用传统分类标签范式等方法进行模型改进。实验表明 P-Tuning v2 可以在不同规模和不同任务中实现与全量微调相媲美的效果。

Adapter Tuning

Adapter Tuning 8 设计了一个 Adapter 模块,并在每个 Transformer 层中插入两个 Adapter 模块,在微调时仅更新增加的 Adapter 模块和 Layer Norm 层中的参数。

Adapter 模块由两个前馈层和一个非线性层组成。第一个前馈层将 Transformer 的输入从 $d$ 维(高维)映射到 $m$ 维(低维),其中 $m \ll d$。通过控制 $m$ 的大小可以限制 Adapter 模块的参数量。中间通过非线性层后,第二个前馈层再将 $m$ 维映射回 $d$ 维作为 Adapter 模块的输出。同时通过 Skip Connection 将 Adapter 的输入也添加到 Adapter 的输出中,这样可以保证即便 Adapter 最开始的参数值接近 0,通过 Skip Connection 的设置也可以保证训练的有效性。

LoRA

神经网络包含很多全连接层,其通过矩阵乘法实现。很多全连接层的权重矩阵是满秩的,针对特定任务微调后,模型的权重矩阵其实具有很低的本征秩(intrinsic rank),因此将参数矩阵投影到更小的空间仍可以得到有效的学习。LoRA 9 的核心思想就是通过低秩分解降低特征矩阵的参数量,从而以较小的参数量来实现大模型的间接训练。

在涉及到矩阵相乘的模块中,在其旁边增加一个新的通路,通过第一个矩阵 $A$ 将维度从 $d$ 降至 $r$,在通过一个矩阵 $B$ 将维度从 $r$ 升回 $d$,其中 $r \ll d$。

在微调时,仅更新上述两个矩阵的参数,再将两条通路的结果相加作为最终的结果,即 $h = W_0 x + B A x$。训练时矩阵 $A$ 通过高斯函数初始化,矩阵 $B$ 初始化为零矩阵,这样训练开始时 $B A = 0$,从而可以确保新的通路对模型的结果没有影响。

在 Attention 模块中,权重矩阵包括用于计算 Q,K,V 的 $W_q$,$W_k$,$W_v$ 以及多头注意力的 $W_o$,实验表明保证权重矩阵的种类数量比增加秩 $r$ 的大小更为重要,通常情况下 $r$ 选择 4,8,16 即可。

IA3

IA3 10 不同于 LoRA 学习低秩权重,而是通过学习向量($l_k$,$l_v$,$l_{ff}$)对模型的部分参数进行加权实现对一些激活层的抑制或放大,同时优化损失函数以适应少样本学习。


  1. https://www.ibm.com/cn-zh/think/topics/fine-tuning ↩︎

  2. Huyen, Chip. AI Engineering: Building Applications with Foundation Models. O’Reilly Media, Incorporated, 2024. ↩︎

  3. Lialin, Vladislav, Vijeta Deshpande, and Anna Rumshisky. “Scaling down to scale up: A guide to parameter-efficient fine-tuning.” arXiv preprint arXiv:2303.15647 (2023). ↩︎

  4. Li, Xiang Lisa, and Percy Liang. “Prefix-tuning: Optimizing continuous prompts for generation.” arXiv preprint arXiv:2101.00190 (2021). ↩︎

  5. Lester, Brian, Rami Al-Rfou, and Noah Constant. “The power of scale for parameter-efficient prompt tuning.” arXiv preprint arXiv:2104.08691 (2021). ↩︎

  6. Liu, Xiao, et al. “GPT Understands, Too.” arXiv preprint arXiv:2103.10385 (2021). ↩︎

  7. Liu, Xiao, et al. “P-tuning v2: Prompt tuning can be comparable to fine-tuning universally across scales and tasks.” arXiv preprint arXiv:2110.07602 (2021). ↩︎

  8. Houlsby, Neil, et al. “Parameter-efficient transfer learning for NLP.” International conference on machine learning. PMLR, 2019. ↩︎

  9. Hu, Edward J., et al. “Lora: Low-rank adaptation of large language models.” ICLR 1.2 (2022): 3. ↩︎

  10. Liu, Haokun, et al. “Few-shot parameter-efficient fine-tuning is better and cheaper than in-context learning.” Advances in Neural Information Processing Systems 35 (2022): 1950-1965. ↩︎

提升图片分辨率和质量

2025-07-05 08:00:00

本节将介绍如何将一张低分辨率的图片转换成一张高分辨率高质量的图片。

为了对比提升分辨率后的图片质量,我们先下载一张原始的高清图片 1,通过 ImageMagick 命令将其转换为一个低分辨率低质量的图片,未来基于这张转换后的图片进行分辨率和质量的提升,再与原始图片进行对比验证提升的效果。

magick toucan-raw.jpg -resize 512x -quality 10 toucan-low-res.jpg
原始图片
原始图片
低分辨率图片
低分辨率图片

基础操作

单击左侧 按钮进入 Upscaling 界面,将上面生成的低分辨率图片拖入 Assets 中,之后再拖入到 Upscale 面板的图片区域。

基础操作
基础操作

安装的 SDXL 模型包中包含一个 SwinIR 分辨率提升模型。选择该模型并添加如下的正向和负向提示词:

正向提示词
a vibrant bird, detailed, a high contrast, inviting warmth, sunlit elements, dynamic composition, 35mm lens, 1/2.8, environmental context, detailed har photography
负向提示词
blurry, out of focus, over saturated, text+++

CreativityStructure 保持默认值 0,单击 按钮生成图片。生成完毕后在 Assets 中的低分辨图片上右键,单击 按钮选择进行对比,单击 Images 选项卡回到新生成的图片页面查看对比效果。

对比图片
对比图片

从如下的对比中可以看出,生成的图片具有更多的细节,这样我们就可以在更高的分辨率下获得更加清晰锐利的图像。

单击画布上方的 Exit Compare 退出对比,在生成的图片上右键,单击 按钮可以在新窗口中打开图片,之后则可以使用鼠标进行放大来观察图片细节。

进阶操作

除了基础的分辨率提升以外,还有一些高级选项可以用来控制分辨率提升后的图片与原始图片的相似程度以及在提升分辨率过程中的创意性。Creativity 参数用于设置提示词控制图像生成的创意性,从而控制与原始图像的差异程度,值越大表示越具有创意性。Structure 参数用于确保分辨率提升过程中图像中的元素与原始图像中的元素的形状和位置匹配,值越大表示越会严格遵守原始图片的结构。

Upscale
Upscale

同时也可以调整生成的模型及其相关参数,例如:SchedulerCFG Scale 等。

风格调整

如果在提升分辨率的过程中还希望调整图片的风格,你可以尝试使用不同的提示词,例如下面是一个绘画风格的提示词:

a painting of a vibrant bird, oil painting, deep impasto, glazed brushstrokes

我们适当增加 Creativity 的值到 8,减少 Structure 的值到 -4,这样可以给到模型更多的自由度重新构思一些细节。最后我们来综合对比原始图片、低分辨率图片、提升分辨率后的图片以及调整风格的图片:

至此,我们 Invoke AI 101 系列的 6 节课程就全部结束了,希望大家能够通过这 6 节课程对 Invoke AI 的功能有一个基础的认知。也期待大家能够进一步探索 Invoke AI 的高级功能,去创造更多自己喜欢的图片。

原始图片
原始图片
低分辨率图片
低分辨率图片
提升分辨率图片
提升分辨率图片
提升分辨率图片(风格调整)
提升分辨率图片(风格调整)

使用画布创建和组合生成新的图片

2025-06-28 08:00:00

本节将介绍在使用画布进行创建和组合生成新的图片的过程中使用到的核心工具。

首先,我们使用 Juggernaut XL v9 模型和如下提示词生成一张基础图片留作备用:

基础图片
基础图片

提示词模板

Environment Art

正向提示词

futuristic terraced structure built into a mountain at dusk, twilight hues, lush greenery illuminated by soft glowing lights, multiple levels, pathways, vast mountain range, distant winding roads, glowing city lights below, towering otherworldly rock formations

为了保证可复现性,在生成这张图片时可以将随机数种子 Seed 固定,此处设置为 42

边界框

将生成的图片拖入画布并创建一个新的 Raster Layer。在画布上单击 Bbox 按钮,此时图片的周围将显示一个边界框,使用鼠标按住可以拖动边界框的位置,放在边界框的四角可以调整边界框的大小。

将边界框移动到画布的一个完全空白的区域,此时边界框中没有任何 Raster Layer 的内容,单击 会生成一张新的图片。

生成前
生成前
生成后
生成后

将边界框移动到画布的一个包含部分 Raster Layer 内容的区域,单击 会将空白的部分补全,通常称之为 Out Painting 或 Infilling。

生成前
生成前
生成后
生成后

如果边界框和 Raster Layer 完全重合,单击 将会基于当前 Raster Layer 中的内容重新生成新的图片,通常称之为图像到图像(Image2Image)。

修复蒙版

修复蒙版(Inpaint Mask)用于控制在边界框中哪些区域会被修改。在图层中单击 + 新建一个 Inpaint Mask 图层。单击画布上的 按钮后,则可以在画布上绘制所需要修改的区域。

修复蒙版
修复蒙版

此时可以将边界框进行缩放并移动到关注的指定区域。从左侧的 Image 面板中可以看到边界框的大小为 320x320

边界框缩放
边界框缩放

但在图片生成过程中,仍然会以 1024x1024 分辨率进行生成,再通过缩放填充到边界框中。由于先生成了分辨率更高的图片,再进行的缩放,此时生成的部分可以具有更多的细节。这使得我们可以在不牺牲图片质量的前提下,对于图片的复杂区域进行优化。

修复蒙版可以让我们很方便的在图片中添加、移除和改变元素。例如,我们希望在楼梯台阶上添加两个人,可以按照如下步骤进行操作:

  1. 将边界框调整到一个合适的大小和位置。
  2. 创建一个 Inpaint Mask 图层,使用画笔勾勒出需要修改的区域。
  3. 返回 Raster Layer,选择一个颜色,使用画笔勾勒出两个人的大概位置。
  4. 在提示词的前面添加 two people
  5. 选择一个合适的 Denoising Strength,此处设置为 0.7,单击 按钮启动生成。
生成前
生成前
生成后
生成后

可以看出,在修复蒙版区域内,根据 Raster Layer 的修改和提示词的修改成功的在台阶上添加了两个人。

探索 AI 模型和概念适配器

2025-06-20 08:00:00

本节将介绍图片生成使用到的 AI 模型和概念适配器,我们将讨论提示词和模型的训练方式是如何最终决定提示词对生成图片的有效性。

在图片生成过程中你需要认识到提示词并非在任何时候都是有效的。相同的提示词在一个模型上可以获得很好的生成效果,但在另一个模型上可能无法生成所需的图片。这是由于模型训练所使用的图片和图片的标注文本不同所导致的,因此模型的提示词指南会格外重要。这也是为什么训练自己的模型会更好,因为你完全清楚在训练模型时所使用的标注文本。

在本节教程中我们不会讨论如何训练模型,我们将重点介绍不同模型之间的差异,展示它们如何影响图片生成的过程。除此之外我们还会讨论概念适配器(通常也称为 LoRA),来帮助你更好的理解相关工具。

模型比较

进入模型管理页面,在添加模型选项卡处选择 HuggingFace,输入 cagliostrolab/animagine-xl-4.0 下载 Animagine XL 4.0 模型。Animagine XL 模型与其他的通用模型有很大的不同,Animagine XL 模型是一个动漫主题的 SDXL 微调模型。Animagine XL 4.0 基于 Stable Diffusion XL 1.0 进行重新训练所得,它使用了 840 万张不同来源不同动漫风格的图片进行微调。

Animagine XL 模型使用了一套自有的数据标注方法进行训练,提示词指南如下图所示:

Animagine 提示词指南
Animagine 提示词指南

整个提示词包含 6 个部分:

  1. 性别。例如:1girl/1boy/1other
  2. 角色。例如:remilia scarlet
  3. 来源作品。例如:touhou
  4. 分级。例如:safe, sensitive, nsfw, explicit
  5. 一般标签。
  6. 质量标签。例如:masterpiece, high score, great score, absurdres

建议的负向提示词如下:

lowres, bad anatomy, bad hands, text, error, missing finger, extra digits, fewer digits, cropped, worst quality, low quality, low score, bad score, average score, signature, watermark, username, blurry

Animagine XL 模型支持一些特殊的标签用于控制图片生成。质量标签直接影响生成图像的整体质量和细节水平。可用的质量标签有:masterpiece,best quality,low quality,worst quality

masterpiece, best quality
masterpiece, best quality
low quality, worst quality
low quality, worst quality

与质量标签相比,分数标签可以对图像质量进行更细致的控制。在 Animagine XL 模型中,它们对输出质量的影响更大。可用的分数标签有:high score,great score,good score,average score,bad score,low score

high score, great score
high score, great score
bad score, low score
bad score, low score

时间标签允许根据特定时间段或年份来控制生成图片的艺术风格。这对于生成具有特定时代艺术特征的图像非常有用。支持的年份标签有:year 2005,year {n},year 2025

year 2007
year 2007
year 2023
year 2023

利用如下正向和负向提示词分别使用 Animagine XL 4.0 模型和 Juggernaut XL v9 模型生成图片。

正向提示词
1boy, black hoodie, white spiky punk hair, nose piercing, standing against a brick wall, masterpiece, best quality, high score, great score
负向提示词
lowres, bad anatomy, bad hands, text, error, missing finger, extra digits, fewer digits, cropped, worst quality, low quality, low score, bad score, average score, signature, watermark, username, blurry

同时,为了比较提示词在不同模型中对生成图片的影响,再利用如下正向和负向提示词分别使用 Animagine XL 4.0 模型和 Juggernaut XL v9 模型生成图片。

正向提示词
1boy, black hoodie, white spiky punk hair, nose piercing, standing against a brick wall
负向提示词
lowres, bad anatomy, bad hands, text, error, missing finger, extra digits, fewer digits, cropped, signature, watermark, username, blurry

为了确保可复现,手动将随机数种子固定设置为 42,生成的图片如下:

Animagine XL 4.0
Animagine XL 4.0
Juggernaut XL v9
Juggernaut XL v9
Animagine XL 4.0 (删除部分提示词)
Animagine XL 4.0 (删除部分提示词)
Juggernaut XL v9 (删除部分提示词)
Juggernaut XL v9 (删除部分提示词)

不难看出,从正向和负向提示词中删除关于图片质量的关键词后,Animagine XL 4.0 模型生成的图片有显著的画质降低,而 Juggernaut XL v9 模型生成的图片质量变化并不大。实验说明提示词在不同的模型中效果存在差异,你必须了解模型的训练过程才能更好的使用提示词生成所需的图片。

概念适配器

上述问题就导致了概念适配器的诞生,通过自己训练概念适配器,你可以完全掌握对于模型的修改。进入模型管理页面,在添加模型选项卡处选择 HuggingFace,输入 nerijs/pixel-art-xl 下载 Pixel Art XL 概念适配器。利用如下正向和负向提示词分别使用 Animagine XL 4.0 模型和 Juggernaut XL v9 模型生成图片。

正向提示词
1boy, black hoodie, white spiky punk hair, nose piercing, standing against a brick wall, masterpiece, best quality, high score, great score, pixel art style
负向提示词
lowres, bad anatomy, bad hands, text, error, missing finger, extra digits, fewer digits, cropped, worst quality, low quality, low score, bad score, average score, signature, watermark, username, blurry

Generation 中添加概念适配器 pixel-art-xl 并启用:

概念适配器
概念适配器

Pixel Art XL 概念适配器用于生成像素风格的图片,生成的图片如下:

Animagine XL 4.0 (Pixel Art XL)
Animagine XL 4.0 (Pixel Art XL)
Juggernaut XL v9 (Pixel Art XL)
Juggernaut XL v9 (Pixel Art XL)

需要注意,LoRA 这类概念适配器与用于训练的原始模型之间存在关联。概念适配器可以理解为一个模型的上层封装,其扩展和增强了某些概念。将其放在另一个模型上,其仍可以将这个概念应用到新的模型上,但质量可能会有所下降。这是因为训练概念适配器的底层模型与当前应用的模型可能有着不同的架构和假设。也就是说 LoRA 这类模型并不是一个完全独立的模型,而是一个专门为某个基础模型构建的适配器,但如果两个模型本质上非常相似,则 LoRA 具有一定的可移植性。

理解图像到图像和降噪过程

2025-06-14 08:00:00

本节将介绍「 图像到图像」和「降噪」两个重要概念,帮助大家更好的理解 Invoke 中的画布是如何工作的,或者说生成式 AI 图片生成是如何工作的。

在之前的图像生成示例中,单击 按钮后,整个图像生成过程会从一张静态噪声图像开始,模型会将噪声逐步转化为最终图片,整个过程如下图所示:

将噪声图像转化成最终图片的过程称之为降噪(Denoising)。

将示例图片拖拽至画布上,选择 New Raster Layer,示例图片如下 1

示例图片
示例图片

在图层中,可以找到 Denosing Strength 参数:

Denoising Strength
Denoising Strength

Denosing Strength 用于控制初始图片或 Raster Layer 在降噪过程中影响最终输出图片的程度。设置较高的值会使降噪过程从一个具有更多噪声数据的图片开始,此时模型会具有更高的自由度根据提示词生成新的内容。

图像到图像和文本到图像的最主要区别在于图像生成的起点。文本到图像时从纯噪声开始,并根据提示词逐步细化。图像到图像则会根据 Denosing Strength 跳过前面的一些步骤,使用提供的图像作为起点。

a porcelain teacup on a table 作为提示词,选择 Photography (General) 作为提示词模板,分别将 Denosing Strength 设置为 0.2 和 0.8,生成的图片和原始图片对比如下:

原始图片
原始图片
低 Denosing Strength
低 Denosing Strength
高 Denosing Strength
高 Denosing Strength

可以看出,较高 Denosing Strength 值可以让模型具有更高的自由度生成图片,而设置较低的 Denosing Strength 值时生成的图片仅有少量的变化。除此之外,在控制层和参考图片上也可以设置 Denosing Strength 来取得不同的效果。

使用控制层和指示控制图片的生成

2025-06-07 08:00:00

本节将介绍如何使用控制层和指示来精确控制图片的生成。

控制网络

控制层通常用作控制网络(ControlNet)在图片生成中以线或结构的形式来提供参考。在 SDXL 中,常用的预训练控制网络有 1

Contour Detection (scribble)

Scribble 模型可以根据输入的图片生成线条画,处理后的图片作为原始图片的简化版本可以精准的捕捉图片的轮廓。

输入
输入
分析
分析
生成
生成

Depth Map

Depth Map 可以生成图片的深度图,在图片生成中模拟深度效果,从而创建更加逼真的 3D 图片。

输入
输入
分析
分析
生成
生成

Hard Edge Detection (canny)

Canny 边缘检测的原理是通过寻找强度突变来识别图片中的边缘。它能够准确的检测边缘并减少噪声和伪边缘,通过降低阈值可以识别更多的信息。采用 Canny 模型时,将会生成与检测到的边缘匹配的图片。

输入
输入
分析
分析
生成
生成

Pose Detection (openpose)

Openpose 模型可以检测身体、手部、面部等多个部位的关键点,在生成图片时可以控制人体的姿态。

输入
输入
分析
分析
生成
生成

Soft Edge Detection (softedge)

Softedge 模型与 Scribble 模型类似,处理后的图片作为原始图片的简化版本仅保留形状的柔和边缘和一些浅阴影。

Tile

Tile 模型的主要功能可以归结为如下两点:

  1. 可以重新解读图片中的特定细节,并创建全新的元素。
  2. 当全局指令与图片的局部或特定部分存在差异时,可以忽略这些指令。在这种情况下,它可以使用局部上下文指示图片生成。

Tile 模型可以作为增强图片质量和细节的工具。如果在图片中存在一些不足的地方,例如调整图片大小导致的模糊,Tile 模型可以有效的消除此类问题从而获得更加清晰锐利的图片。此外 Tile 模型还可以添加更多细节,从而提升图片的整体质量。

控制层

在图层中单击 + Control Layer 添加控制层,或者在图片库中将图片拖拽至画布上,选择 New Control Layer

创建控制层
创建控制层

示例图片及其生成的提示词如下:

示例图片
示例图片

正向提示词

futuristic terraced structure built into a mountain at dusk, twilight hues, lush greenery illuminated by soft glowing lights, multiple levels, pathways, vast mountain range, distant winding roads, glowing city lights below, towering otherworldly rock formations, dreamy sky with soft clouds

负向提示词

painting, digital art, sketch, blurry
控制层
控制层

本教程以 Hard Edge Detection (canny) 模型为例,单击 Filter 中的 Advanced 可以进行更多的调整:

Canny Filter - Default
Canny Filter - Default
Canny Filter - Advanced
Canny Filter - Advanced

调整完毕各项参数后,单击 Apply 即可生成控制图片。

控制图片
控制图片

控制图片提供的线条可以为图片生成提供参考。在画布中,可以使用 等工具对控制图片进行添加或删除等微调操作。接下来对控制层进行设置:

  1. Weight:用于设置控制图层在图片生成过程中的权重,值越大则图片生成时越会严格遵守控制线条。
  2. Begin/End %:用于设置在图片生成过程中在何时使用控制图层,将其设置为 0% 至 100% 表示从图片生成开始至结束一直使用控制图层。调整开始和结束的百分比可以给到模型更多的灵活性,从而获得更好的生成图片。
  3. Control Mode:包含多种控制模式用于调节控制层的相关性(CFG scale):
    • Balanced:提示词和控制层同等重要。
    • Prompt:提示词更加重要。
    • Control:控制层更加重要。

不同的 Control Mode 的生成示例如下 2

输入
输入
Balanced
Balanced
Prompt
Prompt
Control
Control

单击 开始生成图片。此时可以看到模型在控制线条的指示下开始生成图片。

生成图片
生成图片

由于将结束百分比设置为了 70%,生成的图片也具有一定的灵活创意。单击 会将生成的图片添加到 Raster Layer。单击 可以将画布保存到图片库中。新生成的图片和用于生成控制层的图片对比如下:

新生成的图片
新生成的图片
生成控制层的图片
生成控制层的图片

参考图片

接下来我们将添加一个参考图片,也称为 IP Adapter。模型会根据参考图片的风格和结构来生成图片。首先将参考图片添加到图片库,本教程中使用的图片如下 3

参考图片
参考图片

将图片拖拽至左侧 Reference Image 上。

创建参考图片
创建参考图片

在左侧将会创建一个 Reference Image,并可以对其进行相关设置。

Global Reference Image
Global Reference Image
  1. 模型:在安装 SDXL 相关模型的情况下,选择 Standard Reference (IP Adapter ViT-H) 模型,这里可以选择 ViT-HViT-GViT-L 多种变种。
  2. ModeStyle and Composition 表示参考样式和结构,Style 表示仅参考样式,Composition 表示仅参考结构。
  3. Weight:类比控制层。
  4. Begin/End %:类比控制层。

在本教程中,将参考图片的 Weight 设置为 0.7,将结束百分比设置为 70%,从而给到模型更多的自由度。删除之前生成的 Raster Layer,单击 开始生成图片。应用参考图片生成的图片和之前生成的图片对比如下:

应用参考图片生成的图片
应用参考图片生成的图片
之前生成的图片
之前生成的图片

可以看出新生成的图片在遵循控制层的前提下同时应用了参考图片的白色风格。

局部指示

在新生成的图片中,可以看到左侧背景中的山峰也被应用了参考图片中的建筑风格。为了实现更精确的控制,可以选择局部参考图片,将图片拖拽至画布上,选择 New Regional Reference Image

创建局部参考图片
创建局部参考图片

在画布上选择 ,设置合适的笔刷宽度,在画布上勾勒出需要应用参考的区域,这里我们仅勾勒出建筑所在的区域。

勾勒需要应用参考的区域
勾勒需要应用参考的区域

单击 开始生成图片。应用局部参考图片生成的图片和应用参考图片生成的图片对比如下:

应用局部参考图片生成的图片
应用局部参考图片生成的图片
应用参考图片生成的图片
应用参考图片生成的图片

可以看出新生成的图片仅在勾勒的区域内与参考图片的白色风格保持了一致,背后的山峰仍根据提示词生成相应的风格。

基于文本的指示

除了基于图片的指示以外,还可以创建基于文本的局部指示。在图层中单击 +,选择 Reginal Guidance 创建局部指示。在画布上选择 ,设置合适的笔刷宽度,在画布上勾勒出需要应用参考的区域,这里我们勾勒出建筑后面的一座山峰。在 Reginal Guidance 中选择 + Prompt 并添加 lush greenery 提示词。

创建局部文本指示
创建局部文本指示

单击 开始生成图片。应用局部基于文本的指示的图片和应用局部参考图片生成的图片对比如下:

应用局部基于文本的指示的图片
应用局部基于文本的指示的图片
应用局部参考图片生成的图片
应用局部参考图片生成的图片

可以看出新生成的图片在勾勒的山峰区域增加了郁郁葱葱的树木。