Sign In

Style Loss能否作为评价Stable Diffusion模型对LoRA模型兼容性的指标?

Style Loss能否作为评价Stable Diffusion模型对LoRA模型兼容性的指标?

By:zakp

Style loss may not serve as a metric to evaluate the compatibility of SD model with LoRA model | Civitai

[779仅作转载发布]

————————————

虽然用肉眼可以直接检验Stable Diffusion(以下简称SD)模型对LoRA模型的兼容性(通过同时使用SD模型和LoRA模型进行图像生成并用肉眼直接比对生成图和画师原画),但有时会因为视觉疲劳造成误判。这时就会想有没有一种方法可以将这种兼容性量化,最近看到一篇文章(Ghost Review),文章中使用Style Loss作为SD模型对LoRA模型兼容性的评价指标,为了验证Style Loss是否能作为评价SD模型对LoRA模型兼容性的指标,展开以下实验:

研究问题

● Style Loss能否作为评价SD模型对LoRA模型兼容性的指标?

研究方法

本文中使用的Style Loss的计算方法与Pytorch官方说明文档(Neural Transfer Using PyTorch)中给出的教程方法一致,首先将输入图像和风格图像送进VGG19模型计算,然后随机提取模型中几个卷积层的输出,计算这些输出的Gram矩阵,随后计算输入图像的Gram矩阵与风格图像的Gram矩阵之间的均方差(MSE Loss),最后将每个计算得到的均方差求和得到总的Style Loss。例如,将一张输入图片送进VGG19模型计算,之后随机提取模型中的5个卷积层输出,那么将计算得到5个Gram矩阵。将这5个矩阵分别对风格图像的5个Gram矩阵进行均方差计算,会得到5个损失值,将这5个损失值进行求和便是一张输入图片的Style Loss。其中Gram矩阵的计算方法与官方说明文档一致:

def gram_matrix(input):
    a, b, c, d=input.size()     # a, b, c, d = Batch, Channel, Width, Height
    features=input.view(a*b, c*d)
    G=torch.mm(features, features.t())
    return G.div(a*b*c*d)

具体研究细节如下:

样本生成:

使用三个SD模型(Yesmix V3.5Aing Diffusion V10.5DreamShaper V7)和一个LoRA模型(Liang Xing Style)分别生成20张图作为样本。其中Yesmix V3.5Aing Diffusion V10.5为二次元风格模型,DreamShaper V7为写实模型,参与实验的LoRA模型基于NovelAI训练,因此也算是二次元LoRA模型。

样本生成参数:

  • 提示词:1girl, raiden shogun,portrait,beautiful detailed eyes,(shiny skin:1.14),(mature female:1.3),(masterpiece:1.2),(best quality:1.2)

  • 负面提示词:lowres,ugly, worst quality, low quality, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, jpeg artifacts, signature, watermark, username, blurry, bad feet, poorly drawn hands, poorly drawn face, mutation

  • VAE:kl-f8-anime2

  • 分辨率:640×960,未使用Hires Fix

  • 采样器:DPM++2M Karras

  • 生成步数:30

  • 提示词相关性:8

  •  随机种子:-1

  •  LoRA权重:0.8

  • ○为了防止其他因素的影响,图片的生成除使用上述SD模型和LoRA模型外,未使用其他辅助模型(Embedding、LoRA)

风格样本选取:

选取以下三张图作为风格图,如图1所示,从左到右分别为:画师Liang Xing的原画,画师Sakimichan的原画,我自己用PS瞎画的随机图(用于极端化测试条件)。其中测试用的LoRA模型使用画师Liang Xing的多张原画作为数据集进行训练。

图1三张风格图(从上到下):Liang Xing的原画、Sakimichan的原画,自己瞎画的随机图。

图像预处理方法:

使用Pytorch的transforms对图像进行预处理:

rgb_mean = torch.tensor([0.485, 0.456, 0.406])
rgb_std = torch.tensor([0.229, 0.224, 0.225])

transform=transforms.Compose([
    transforms.Resize((512, 512)),
    transforms.ToTensor(),
    transforms.Normalize(mean=rgb_mean, std=rgb_std)
])

先将图像resize成512×512的正方形图像,然后用ToTensor()将图像转换成tensor形式并将每个矩阵元数值限制在[0, 1]之间,最后对图像进行Normalize,使用的均值和方差为vgg19模型训练时的默认值,虽然这种操作不太严谨(因为测试样本的总体均值和方差不一定接近这个默认值),但为了控制变量,图像预处理方法与Ghost Review源代码(Source Code)中的方法保持一致。

根据以上研究细节所述,如果Style Loss能作为SD模型对LoRA模型的兼容性评价指标的话,那将SD模型配合LoRA模型生成的生成图与Liang Xing的原画进行Style Loss计算得到的结果应该最小(因为风格最接近)。那结果会是这样吗?

结果分析

在分析Style Loss的结果之前,先给出部分三个SD模型配合LoRA模型生成的生成图(图2),读者可凭肉眼评价一下哪些生成图看起来与图1中Liang Xing的原画风格更接近。

图2 三个SD模型部分生成图。从上到下:第一行为Yesmix V3.5生成图,第二行为AingDiffusion V10.5生成图,第三行为Dream Shaper V7生成图。

现在对计算的Style Loss进行分析,图3给出了三个SD模型生成图对三张风格图进行Style Loss计算得到的结果。其中横轴表示20张图像的序号,纵轴表示这20张图与风格图(见每个图的标题)的Style Loss(均方差,量级为)。第一列图表示的是三种SD模型在同一种风格图下Style Loss的计算结果;第二列图表示的是单个SD模型在三种风格图下Style Loss的计算结果。先看第一列的第一张图,可以看到在使用Liang Xing原画作为风格图时,三个模型的Style Loss计算结果都在一个数量级,虽然Dream Shaper V7的数值略高于另外两个模型,但考虑到的量级,这个差距基本可以忽略不计,而且仔细看还会发现Yesmix V3.5这个二次元模型的第二个生成图的Style Loss是与写实模型Dream Shaper V7几乎相等的,然而实际你用肉眼观察图2就会发现这两个模型的生成图仍然风格迥异。

再看第一列的第二张图,第二张图是三个模型生成图与Sakimichan风格图的计算结果,这个结果显示Dream Shaper V7具有更高的Style Loss,造成这一现象的原因目前未知,且Yesmix V3.5和AingDiffusion V10.5这两个二次元模型的Style Loss基本持平,然而实际你用肉眼比较一下图2和图1就会发现,即便两个模型的Style Loss持平且很小,但这两个模型的生成图与Sakimichan的原画相比仍然风格迥异。

再看第一列的第三张图,第三张图是三个模型生成图与随机图的计算结果,根据肉眼的观察结果,模型的生成图与随机图画的根本就不是一个东西(随机图是我乱画的,我也不知道这是什么风格),然而第三张图却显示三种模型生成图计算得到的Style Loss区别不大,再将这个图与第一列的前两张图进行比较后还会发现,第二和第三张图计算得到的Loss都比第一张图的低(且区别也不大),这与肉眼观察结果以及假设很不一致(肉眼观察到的生成图与Sakimichan原图和随机图相比风格完全不同)。为了更直观的显示这个结果,我又画了单个模型生成图与三种风格图的Style Loss计算结果(图3的第二列图),现象与刚才所述一致,造成这一现象的背后原因目前未知(期待大佬补充填坑)。

图3 三个SD模型生成图对三张风格图的Style Loss计算结果。第一列从上到下:三种模型在风格图为Liang Xing原画的计算结果、三种模型在风格图为Sakimichan原画的计算结果、三种模型在风格图为随机图的计算结果。第二列从上到下:Yesmix V3.5生成图在三种风格图下的Style Loss计算结果、AingDiffusion V10.5生成图在三种风格图下的Style Loss计算结果、Dream Shaper V7生成图在三种风格图下的Style Loss计算结果。

结论

根据以上分析,将Style Loss用于评价SD模型对LoRA的兼容性并不靠谱。因为以上结果表明Style Loss的计算结果与肉眼观察结果以及假设存在严重偏差,至少Style Loss不能作为评价SD模型对LoRA模型兼容性的唯一判据。这在LyCORIS的论文中也有所提及,文中指出虽然使用Style Loss来衡量风格相似性具有明显优势,但这种度量(Metric)可能仍然无法获得在比较不同模型复制的风格时应考虑的所有细微元素。其中一部分原因源于我们对“风格”的定义以及判断是模糊的。此外,文中还提到在训练风格模型的过程中,不同的风格需要不同的训练epochs和模型容量才能被正确学习。这一点也可间接说明“风格”是一种复杂的概念,目前无法通过单一的指标来进行衡量。

附录

本文所有结果均通过编程实现,因此如果源代码有误则本文所述的所有结果均为扯淡。为了保证本文结果的可重复性以及后续相关验证实验的便利,我将本次实验的测试图像数据以及源代码公开于附录,感兴趣者可自行下载:

百度网盘

Google Drive

11

Comments