Upscale comparation - Apkawa/stable-diffusion-wiki-awesome GitHub Wiki

Небольшой тест методов апскейла, их сравнение и анализ

За основу возьмем, допустим, такой промпт:

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1224271748, Size: 704x512, Model hash: 61e23e57ea, Model: mixProV4_v4, Clip skip: 2, ENSD: 31337

Used embeddings: bad-hands-5 [10ca], ng_deepnegative_v1_75t [1a3e], EasyNegative [119b]

image

Нужно сделать довольно много деталей и вот это все. Сейчас изображение 704x512

Все тесты проводятся на 3060 6Gb ноутбучной видеокарте.

Hires. fix в txt2img

Перед всеми остальными апскейлами базово нужно сначала сделать фикс хайреза.

Предварительно необходимо зафиксировать сид, покрутить нужное количество шагов и нажимаем на галочку Hires. fix

image

Получилась такая картинка. с руками и деталями конечно есть проблемы, весь наш тест будет заключаться в том как сильно сможем вытянуть детали.

SPOILER

image

Картинку отправляем в img2img со всеми промптами

Методы апскейла

Сравнение самих алгоритмов апскейлеров выходит за рамки этой статьи, за основу возьмем R-ESRGAN General WDN 4xV3.

Про алгоритмы можете почитать в SD upscale от анона.

Denoising strength везде выбираем в 0.4 для того чтобы добавить больше деталей и исправить руки.

Стандартный скрипт апскейла который уже есть в A1111

image

В img2img выбран Denoising strength: 0.4

Сделали первый прогон, увеличили с 1056x768 до 2112×1536

SPOILER

image

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 2757604515, Size: 1056x768, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, SD upscale overlap: 64, SD upscale upscaler: R-ESRGAN General WDN 4xV3, Noise multiplier: 1.05

Time taken: 8m 7.18s

Torch active/reserved: 3122/3782 MiB, Sys VRAM: 5492/5938 MiB (92.49%)

Вроде гостов нет. Отправляем то же изображение обратно в img2img, все остальные параметры без изменений. Получаем ошибку OutOfMemoryError: CUDA out of memory. . Упс.

На этом апскейл заканчивается, даже если выставить scale factor в 1.1

Сторонний скрипт апскейлера. Изображение то же самое. В img2img выбран Denoising strength: 0.4

image

Сделали первый прогон, увеличили с 1056x768 до 2112×1536

SPOILER

image

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1224271748, Size: 2112x1536, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Ultimate SD upscale upscaler: R-ESRGAN General WDN 4xV3, Ultimate SD upscale tile_width: 512, Ultimate SD upscale tile_height: 512, Ultimate SD upscale mask_blur: 8, Ultimate SD upscale padding: 32, Noise multiplier: 1.05

Time taken: 4m 1.64s

Torch active/reserved: 2538/2698 MiB, Sys VRAM: 4362/5938 MiB (73.46%)

Уже с первого прохода начинают лезть ухи вместо цветов. Это дело называют гостами. Нужно либо уменьшать денойз, либо менять промпт

image

Попытаемся увеличить еще раз в 2 раза. Остальные параметры и промпт не трогаем

c 2112×1536 до 4000×2909

SPOILER

00002-1224271748 0

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1224271748, Size: 4224x3072, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Ultimate SD upscale upscaler: R-ESRGAN General WDN 4xV3, Ultimate SD upscale tile_width: 512, Ultimate SD upscale tile_height: 512, Ultimate SD upscale mask_blur: 8, Ultimate SD upscale padding: 32, Noise multiplier: 1.05

Time taken: 15m 2.23s

Torch active/reserved: 2538/2698 MiB, Sys VRAM: 4370/5938 MiB (73.59%)

Картинка превращается в игру - найди лису. Провал. Дальнейший апскейл вижу нецелесообразным

Пробуем заново, но меняем промпт на detailed illustration, detailed face and eyes, masterpiece, best quality, highres, extremely detailed 8k wallpaper, very clear, негатив оставляем таким же.

SPOILER

Первый проход. Гостов поменьше, но удаленные клумбы пытаются во что то превратиться, и руки тоже меняют положение.

image

Второй проход

00005-1224271748 0

Крипота все равно лезет. В общем этот метод нужно уметь готовить, сходу получается весьма странно.

Основной хинт с Tiled Vae в том что когда нажимаем Generate, в первый раз случится ошибка с OOM, но нужно нажать еще раз, и тогда подключится расширение и пойдет работа.

image

Without Noise Inversion

SPOILER Первый прогон, увеличили с 1056x768 до 2112×1536

image

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1224271748, Size: 2112x1536, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Tiled Diffusion upscaler: R-ESRGAN General WDN 4xV3, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Latent tile width': 96, 'Latent tile height': 96, 'Overlap': 48, 'Tile batch size': 4, 'Upscaler': 'R-ESRGAN General WDN 4xV3', 'Scale factor': 2, 'Keep input size': True}", Noise multiplier: 1.05


Used embeddings: bad-hands-5 [10ca], ng_deepnegative_v1_75t [1a3e], EasyNegative [119b]

Time taken: 6m 40.00s

Torch active/reserved: 423/522 MiB, Sys VRAM: 5674/5938 MiB (95.55%)

Второй прогон c 2112×1536 до 4000×2909

00009-1224271748

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1224271748, Size: 4224x3072, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Tiled Diffusion upscaler: R-ESRGAN General WDN 4xV3, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Latent tile width': 96, 'Latent tile height': 96, 'Overlap': 48, 'Tile batch size': 4, 'Upscaler': 'R-ESRGAN General WDN 4xV3', 'Scale factor': 2, 'Keep input size': True}", Noise multiplier: 1.05

Used embeddings: bad-hands-5 [10ca], ng_deepnegative_v1_75t [1a3e], EasyNegative [119b]

Time taken: 30m 34.41s

Torch active/reserved: 670/1406 MiB, Sys VRAM: 5772/5938 MiB (97.2%)

Noise Inversion

SPOILER

Первый прогон, увеличили с 1056x768 до 2112×1536

image

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: Euler, CFG scale: 7, Seed: 1224271748, Size: 2112x1536, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Tiled Diffusion upscaler: R-ESRGAN General WDN 4xV3, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Latent tile width': 96, 'Latent tile height': 96, 'Overlap': 48, 'Tile batch size': 4, 'Upscaler': 'R-ESRGAN General WDN 4xV3', 'Scale factor': 2, 'Keep input size': True, 'Noise inverse': True, 'Steps': 10, 'Retouch': 1, 'Renoise strength': 1, 'Kernel size': 64}", Noise multiplier: 1.05

Used embeddings: bad-hands-5 [10ca], ng_deepnegative_v1_75t [1a3e], EasyNegative [119b]

Time taken: 7m 15.70s

Torch active/reserved: 423/526 MiB, Sys VRAM: 5700/5938 MiB (95.99%)

Второй прогон c 2112×1536 до 4000×2909

00007-1224271748

detailed illustration, detailed face and eyes,landscape, [fox|1girl, fox ears, fox tail, large breasts, police uniform] full body, village street,
Negative prompt: bad-hands-5, ng_deepnegative_v1_75t, EasyNegative, lowres, bad anatomy, bad hands, blurry, error, missing fingers, extra digit, fewer digits, (watermark, signature), ((cropped head)), worst quality, low quality, normal quality, jpeg artifacts, censorship, ugly
Steps: 50, Sampler: Euler, CFG scale: 7, Seed: 1224271748, Size: 4224x3072, Model hash: 61e23e57ea, Model: mixProV4_v4, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Tiled Diffusion upscaler: R-ESRGAN General WDN 4xV3, Tiled Diffusion scale factor: 2, Tiled Diffusion: "{'Method': 'MultiDiffusion', 'Latent tile width': 96, 'Latent tile height': 96, 'Overlap': 48, 'Tile batch size': 4, 'Upscaler': 'R-ESRGAN General WDN 4xV3', 'Scale factor': 2, 'Keep input size': True, 'Noise inverse': True, 'Steps': 10, 'Retouch': 1, 'Renoise strength': 1, 'Kernel size': 64}", Noise multiplier: 1.05

Used embeddings: bad-hands-5 [10ca], ng_deepnegative_v1_75t [1a3e], EasyNegative [119b]

Time taken: 33m 35.68s

Torch active/reserved: 674/1414 MiB, Sys VRAM: 5758/5938 MiB (96.97%)

Пробуем увеличить второй проход, где на предыдущем шаге получили OOM, но включаем расширение Tiled Vae

image

Основной хинт в том что когда нажимаем Generate, в первый раз случится ошибка с OOM, но нужно нажать еще раз, и тогда подключится расширение и пойдет работа

UPD: полтора часа генерировать. Нафиг, в другой раз

Итого

Потраченое время

Метод апскейла 1 проход 2 проход
SD upscale 8m 7.18s -
Ultimate SD Upscale 4m 1.64s 15m 2.23s
Tiled Diffusion 6m 40.00s 30m 34.41s
Tiled Diffusion + Noise Inversion 7m 15.70s 33m 35.68s

Сравнение

2x upscale 4 methods compare

Ultimate SD vs Tiled Diffusion vs Tiled Diffusion Noise Inversion 4x upscale

Выводы

  • SD upscale хорош для 2х апскейла, исправляет руки и детали, боярам можно и дальше апскейлить.
  • Ultimate SD Upscale нужно уметь готовить, скорее всего денойз нужно ставить в 0.3. Работает в 2 раза быстрее, но сильно перерисовывает детали
  • Tiled Diffusion работает практически так же как SD Upscale, хорошо сохраняет исходные детали. Хорошо фиксит руки.
  • Tiled Diffusion Noise Inversion меняет общую стилистику изображения в сторону упрощения цветов и текстур, может слегка поменять композицию

Links

⚠️ **GitHub.com Fallback** ⚠️