AI绘画默认的512×512或768×768出图通常只适合预览构图,一旦需要打印、壁纸或二次创作,分辨率不足带来的模糊、伪影会立刻暴露。Hi-Res Fix(高清修复)是Stable Diffusion WebUI中解决出图尺寸过低的核心功能,它不直接拉伸成品图,而是先在小尺寸潜空间生成、再放大后重绘,保留构图的同时补充细节。不过这一过程对显存的需求成倍增加,很多用户在打开Hi-Res Fix后遇到CUDA out of memory。本文从参数含义、显存估算、优化手段三个层面,拆解如何在高分辨率与硬件限制之间找到可落地的方案。

一、Hi-Res Fix的工作机制与核心参数
Hi-Res Fix并不是在文生图结束后直接对成品做超分辨率处理,而是在第一次去噪完成后、VAE解码前插入一个“放大再重绘”的步骤。此时得到的是潜空间表示,还没有被解码成三通道图片。系统会根据放大算法类型,要么在潜空间内直接进行维度扩展,要么先解码再在像素空间放大后重新编码回潜空间,然后送入Unet执行第二轮去噪。两轮去噪共用一个提示词和种子,因此整体构图可以保持稳定,同时第二轮去噪会补充高频细节,减少直接放大产生的锯齿和涂抹感。
这里面最关键的参数是放大算法、放大倍数、去噪强度和Hires steps。放大算法决定“在哪里放大”:Latent系列在低维潜空间完成尺寸扩展,速度快、显存占用低,但细节增加有限;R-ESRGAN 4x+、SwinIR等算法在像素空间工作,锐度和纹理更真实,代价是需要额外加载放大模型并占用更多显存。放大倍数通常设置在1.5到2倍之间,超过2倍后潜空间尺寸会快速增长,显存占用接近平方级上升。去噪强度Denoising strength控制第二轮去噪的重绘幅度:低于0.3时修复效果不明显,0.4到0.55是大多数场景的平衡区间,超过0.7后画面结构可能被重新解释,出现与原图不一致的细节。Hires steps若设为0则沿用第一步的步数,如果显存紧张可以手动设成10到15,减少推理次数。
参数之间的关系可以用下表粗略归纳:
| 放大算法 | 工作域 | 细节表现 | 显存压力 | 适合显存 |
|---|---|---|---|---|
| Latent | 潜空间 | 柔和、少伪影 | 较低 | 4GB-6GB |
| SwinIR | 像素空间 | 细节扎实 | 中等 | 8GB以上 |
| R-ESRGAN 4x+ | 像素空间 | 锐利、适合写实 | 较高 | 8GB-12GB |
| 4x-UltraSharp | 像素空间 | 适合二次元 | 中等偏高 | 8GB以上 |
理解了这些参数的影响,下一步就是根据实际显卡显存去组合设置,而不是照搬某张截图里的参数。同一套参数在12GB显卡上能跑,在6GB笔记本上很可能直接触发OOM。
二、不同显卡配置下的参数选择
6GB显存属于高清修复的入门级别。此时不建议使用像素空间的大型放大器,而应优先选择Latent或Latent (nearest),放大倍数控制在1.5倍左右,去噪强度放在0.35到0.45之间,Hires steps设置为8到12。这样既能让二次去噪带来可见的细节提升,又不至于让显存瞬间被大尺寸潜空间占满。同时启动器需要加上--medvram参数,尽可能把模型模块在显存和内存之间动态交换。8GB显存可以更自由一些,使用SwinIR或R-ESRGAN 4x+,放大倍数1.5到2倍,去噪强度0.4到0.5,多数情况下可以在1024×1536左右稳定出图。
12GB显存基本可以覆盖大部分写实或二次元模型的高清修复需求。此时瓶颈往往不是显存总量,而是碎片导致的分配失败。建议在启动参数中加入--opt-split-attention或使用PyTorch 2.0的SDPA注意力,减少峰值分配。放大算法可以放开了选,但要避免一步从512×768跳到2048×3072这类极端尺寸,最好先用1.5倍,确认稳定后再尝试2倍。24GB及以上的显存可以同时考虑Tiled VAE与高分辨率放大,不过仍然不建议盲目把去噪强度拉到0.7以上,因为那会明显改变原始构图,失去Hi-Res Fix“保持构图”的意义。
除了显存,显存带宽和采样器类型也会影响高清修复的速度。二次去噪通常复用第一步的采样器,DPM++ 2M Karras和UniPC在步数较少时表现更稳定,适合Hires steps有限的场景。如果打开高清修复后出图时间成倍增加,可以优先降低Hires steps,而不是降低原图步数,因为第一步的低分辨率采样对构图影响更大,过早减少步数会导致基础结构不稳定。
三、显存溢出的常见原因与优化方法
高清修复阶段的OOM通常发生在三个位置:一是放大后潜空间尺寸超出当前可用显存;二是像素空间放大器模型加载时与主体模型同时驻留显存;三是最终VAE解码为高分辨率RGB图像时出现峰值占用。很多用户观察到任务管理器里显存还有空闲,却仍然报错,这往往是因为PyTorch的缓存分配器没有及时归还碎片,或者某个大块连续分配失败。使用nvidia-smi可以更准确地查看进程级显存占用,但更重要的是让分配器更积极地进行垃圾回收。
最直接的缓解手段是降低放大倍数和原始分辨率。例如原始512×768直接放大2倍,潜空间尺寸接近1024×1536;如果改为原始384×576再放大2倍,最终得到768×1152,峰值占用会显著下降。另一个容易被忽略的开关是WebUI设置里的Persistent cond cache和VAE dtype,在低显存设备上关闭持久条件缓存、使用fp16 VAE可以减少数百MB占用。对于VAE解码导致的峰值,推荐使用Tiled VAE扩展,在解码时把大图切成512或768像素的瓦片逐块处理,能明显降低峰值,代价是增加少量拼接处理时间。
下面是一个Windows启动脚本优化示例,适用于8GB以下显存的设备。内容放在webui-user.bat中,核心是启用中低显存模式、拆分注意力计算,并设置PyTorch的显存分配策略:
@echo off set PYTHON= set GIT= set VENV_DIR= set COMMANDLINE_ARGS=--medvram --opt-split-attention --xformers set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:512 call webui.bat
如果使用了PyTorch 2.0以上版本,可以将--xformers替换为--opt-sdp-attention,后者在现代NVIDIA显卡上兼容性更好,且不需要额外安装xformers。对于12GB以上显存但依然偶发OOM的情况,建议把max_split_size_mb调小到256或128,虽然会增加分配次数,但可以降低大块连续显存分配失败的概率。也可以尝试在WebUI启动后先用一个小分辨率任务“热身”,让缓存分配器完成初始化,再跑高清修复任务。
更进一步的显存优化需要借助分块重绘扩展,例如Ultimate SD Upscale。它可以在高清修复第二步时把图像分割成小块,分别重绘后再拼接回来。这种方案突破了单次处理大图的显存限制,让6GB设备也能输出2K级别的图片。不过分块重绘会带来拼接缝或局部风格不一致的问题,需要在瓷砖重叠宽度和提示词描述上做一定补偿,通常把重叠设为64到128像素能减轻接缝。
四、从低分辨率到高分辨率实战流程
假设目标是为一张竖版插画生成1024×1536的清晰图像,使用8GB显存显卡。先在文生图界面把宽高设为512×768,步数20,采样器DPM++ 2M Karras,正常生成一张基础构图。确认构图满意后,再开启Hi-Res Fix,放大算法选择R-ESRGAN 4x+,放大倍数设为2,去噪强度0.45,Hires steps设为15。此时系统会先生成512×768的中间结果,然后放大到1024×1536进行二次去噪。这种分步方式比直接在1024×1536尺寸下文生图更快,也更不容易崩溃,因为第一步低分辨率阶段已经锁定了主体结构。
如果上述设置在运行时报OOM,不要一次把所有参数都调低。建议按以下顺序排查:先把放大倍数从2降到1.5,如果依然报错,再把R-ESRGAN 4x+换成SwinIR或Latent,第三步才降低Hires steps到10。很多时候只需要改变放大器,显存就能从峰值临界点降下来,而画质损失相对较小。若所有方法都无效,再在启动参数中加入--medvram或--lowvram重启WebUI,但后两者会明显降低速度,不建议作为日常默认配置。
出图完成后,如果仍有轻微模糊,可以在图生图模式下进行局部重绘,只针对面部、眼睛或复杂纹理区域补充细节,而不用重新生成整张图。这与Hi-Res Fix的思路一致:把计算资源集中在最影响观感的区域。对于已经成品的图片,还可以使用Real-ESRGAN或Topaz Gigapixel等纯超分工具做后处理,但它们不会引入新的语义信息,无法像Hi-Res Fix那样在需要时“补出”合理的细节。因此更推荐在可控阶段完成高清修复,而不是等缩图后再依赖外部超分。
高分辨率出图从来不是单一参数的取舍,而是放大算法、去噪强度、显存预算和任务目标之间的平衡。理解了潜空间放大与像素空间放大的差异,再配合分块处理和启动优化,多数中低显存设备都能稳定输出满足实际使用的图片。遇到OOM时不必急着换显卡,先降低放大倍数和去噪步数,再换轻量放大器,往往就能找到可运行的组合。
Hi-Res Fix高清修复显存溢出修改时间:2026-09-26 12:50:45