NovelAI 与本地 Stable Diffusion 出图差异的对比测试方法

文章导读
要从 NovelAI 迁移到本地 Stable Diffusion,或让两套工具混用,先要有一套能重复执行的对比流程。直接凭印象比较不靠谱,因为 NovelAI 是闭源在线服务,Stable Diffusion 是本地开源模型,两者的采样器、CFG Scale、模型版本、甚至 VAE 都会影响输出。建议按下述流程收集图片、耗时、资源占用和人工评分,再根据记录做决定。
📋 目录
  1. 确定对比测试的提示词与参数集
  2. 分别生成并保存结果图片
  3. 统计生成耗时与资源占用
  4. 按维度人工评分并交叉验证
  5. 归档结果并生成对比报告
A A

要从 NovelAI 迁移到本地 Stable Diffusion,或让两套工具混用,先要有一套能重复执行的对比流程。直接凭印象比较不靠谱,因为 NovelAI 是闭源在线服务,Stable Diffusion 是本地开源模型,两者的采样器、CFG Scale、模型版本、甚至 VAE 都会影响输出。建议按下述流程收集图片、耗时、资源占用和人工评分,再根据记录做决定。

判断方向:先固定提示词、参数和种子范围,再分别用 NovelAI 与本地 Stable Diffusion 出图,按构图、细节和画风三项人工评分,同时记录耗时与显存占用。适用场景是个人或小团队的选型评估;操作动作为准备统一提示词、执行生成、保存文件名、评分归档;验证方式为至少两人独立评分取平均;风险边界在于模型版本和采样器差异会让结果不可比,需要事先固定参数集。

确定对比测试的提示词与参数集

对比公平的前提是两边的提示词完全一致,并且把 NovelAI 的解析参数记录下来,再映射到 Stable Diffusion 的等效参数。不能只写一句“a girl”就开跑,那样风格差异会把模型差异完全淹没。

先准备 5 组覆盖不同风格的中性提示词,例如:写实人像、二次元半身像、风景远景、机械道具特写、暗调室内场景。每组建议包含主体描述、环境描述、画质词和负面提示词。负面提示词在 NovelAI 与 Stable Diffusion 中写法不同,需要先统一成都能识别的通用负面词。

以下是一组可用于 Stable Diffusion 的提示词样例,NovelAI 侧也要录入相同内容:

正向:1girl, upper body, school uniform, soft lighting, detailed face, masterpiece, best quality
负面:lowres, bad anatomy, bad hands, extra fingers, blurry
参数:Steps=30, Sampler=DDIM, CFG Scale=7, Seed=12345, Size=512x768

对每组提示词,记录 NovelAI 界面里能看到的采样器、Steps、CFG、Seed、分辨率、是否开启增强或 VAE。在 Stable Diffusion 侧使用同样的数字;如果 NovelAI 的采样器名称不同,优先选择行为接近的 DDIM 或 Euler。把每组提示词和参数整理成一张表格,方便后面逐个复现。

分别生成并保存结果图片

NovelAI 是网页操作,只能手动保存,所以需要约定文件命名规则;本地 Stable Diffusion 可以用命令行直接输出到同一目录,确保后续对照不混乱。

建议每张图的文件名包含:场景编号、工具名、种子、步骤、采样器。例如:scene01_novelai_seed12345_steps30_ddim.pngscene01_sd_seed12345_steps30_ddim.png。NovelAI 手动保存时按照这个规则改名;Stable Diffusion 侧可以直接用命令行参数控制输出文件名。

NovelAI 与本地 Stable Diffusion 出图差异的对比测试方法

一个可用的 Stable Diffusion 命令行调用骨架如下,需要按实际仓库结构调整路径:

cd /path/to/stable-diffusion-webui
python webui.py `--ckpt` /path/to/model.safetensors \
  `--prompt` "1girl, upper body, school uniform, soft lighting, detailed face, masterpiece" \
  `--negative`_prompt "lowres, bad anatomy, bad hands" \
  `--steps` 30 `--sampler` DDIM `--cfg`_scale 7 `--seed` 12345 \
  `--width` 512 `--height` 768 \
  `--outdir` ./compare/scene01 \
  `--output`_filename scene01_sd_seed12345_steps30_ddim.png

如果当前环境的脚不支持 `--output`_filename,可以在生成后手动重命名。注意,NovelAI 输出尺寸可能与本地模型不同,为了避免比例差异影响评分,先统一分辨率或注明原图尺寸。

统计生成耗时与资源占用

效率对比要记两个东西:单张出图耗时和显存占用(如果是本地)。NovelAI 作为在线服务,耗时包含排队和网络传输,无法精确测量生成本身,只能记录从点击生成到图片可下载的完整时间;本地 Stable Diffusion 可以用 time 命令包裹调用,测出端到端耗时。

使用 time 的示例:

/usr/bin/time -v python webui.py `--prompt` "..." \
  `--steps` 30 `--sampler` DDIM `--cfg`_scale 7 `--seed` 12345 \
  `--width` 512 `--height` 768 `--outdir` ./compare/scene01

运行结束后查看输出中的 Elapsed (wall clock) time 作为生成耗时。显存占用建议单独用 nvidia-smi 记录:生成前执行一次 nvidia-smi `--query-gpu`=memory.used `--format`=csv 得到初始值,生成中再采样几次,峰值减去初始值就是模型加载和推理带来的额外占用。NovelAI 无法获得显存数据,只记录网络耗时即可,并把这点写入归档备注。

NovelAI 与本地 Stable Diffusion 出图差异的对比测试方法

按维度人工评分并交叉验证

图片质量没有统一客观数值,只能靠人看。建议至少让两人以上独立评分,然后取平均值,减少单人的口味偏差。不要用“喜欢/不喜欢”这种粗糙判断,给三个可打分的维度:构图、细节、画风。

下面是可用的评分表模板,每个维度 1-5 分,5 为最好:

| 文件 | 构图 | 细节 | 画风 | 总分 | 备注 |
| scene01_novelai_*.png | 4 | 3 | 5 | 12 | 边缘有些不自然 |
| scene01_sd_*.png       | 3 | 4 | 4 | 11 | 手部崩坏,但光影好 |

评分时建议把两边的图片放在同一屏幕或同一画册中,打乱顺序、隐藏文件名,减少先入为主的预期。每个人独立打分,不要互相讨论;最后把同一文件的多份评分相加后除以评分人数,得到该文件的平均分。

归档结果并生成对比报告

把图片、参数、耗时、资源占用和评分散落在多个地方会失去对比价值。建议每个场景建一个目录,用 Markdown 写一个简单的归档文档,方便以后回溯。

Markdown 模板可以直接复制:

# 场景 01:写实人像

## 提示词与参数
- 正向:1girl, upper body, ...
- 负向:lowres, ...
- Steps:30,Sampler:DDIM,CFG:7,Seed:12345,分辨率:512x768

## NovelAI
- 图片:scene01_novelai_seed12345_steps30_ddim.png
- 耗时:13.2 秒(含排队与网络)
- 显存:不适用
- 评分:构图 4,细节 3,画风 5,平均 4.0

## Stable Diffusion
- 图片:scene01_sd_seed12345_steps30_ddim.png
- 耗时:4.8 秒
- 显存:峰值 5.2 GB,初始 1.1 GB
- 评分:构图 3,细节 4,画风 4,平均 3.67

## 备注
- NovelAI 画风更稳定,但本地细节纹理更丰富。

完成后,把所有场景的 Markdown 汇总成一份总报告。最终对比不只是看总分,还要看哪些场景差异大、哪些差异小。判断是否迁移时,再结合显存、耗时和评分的权重去权衡。整个过程不依赖固定结论,数据收集得越完整,迁移决策越有依据。