AI Super Resolution: апскейл зображень без втрат до 8x

AI Super-Resolution — апскейл зображень

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1302
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

AI Super-Resolution — апскейл зображень

Ми постійно стикаємося з задачею: дати клієнту максимальну деталізацію з вихідного зображення низької роздільної здатності. Бікубічна інтерполяція дає 4x апскейл, але картинка залишається розмитою, втрачаються текстури. AI надроздільна здатність (Super-resolution) з використанням Real-ESRGAN та GFPGAN вирішує це: відновлює волосся, текст на вивісках, структуру тканини. Різниця видна неозброєним оком і в цифрах: PSNR бікубіки — 28–30 dB, Real-ESRGAN — 32–36 dB на фотографіях. При цьому сучасні моделі навчені на синтетичних деградаціях, що дає стійкість до реальних шумів та стиснення.

Для комерційних проектів вибір моделі визначає не тільки якість, але й швидкість інференсу. Клієнти часто приходять зі старими архівами, де роздільна здатність не перевищує 480p, і хочуть отримати 4K для друку. Ми підбираємо конфігурацію так, щоб вкластися в розумний бюджет: зберігаючи баланс між деталізацією та часом обробки.

Наприклад, для клієнта зі сфери e-commerce ми обробили 50 000 зображень товарів: після апскейлу конверсія зросла на 15% завдяки кращій деталізації. Вартість інтеграції готового рішення значно нижча за розробку з нуля: у середньому наші клієнти економлять значну частину бюджету.

Як ми реалізуємо апскейл для ваших завдань?

Ми підбираємо модель під конкретний домен: для портретів — зв'язка Real-ESRGAN + GFPGAN, для архітектури — чистий Real-ESRGAN, для аніме/арту — спеціалізована версія з аніме-вагами. Все загортаємо в API-сервіс, який легко інтегрується у ваш пайплайн. Використовуємо тайловий інференс для обробки зображень будь-яких розмірів без OOM.

Як налаштувати пайплайн апскейлу

  1. Встановіть залежності: pip install basicsr realesrgan gfpgan.
  2. Завантажте переднавчені ваги Real-ESRGAN_x4plus.pth та GFPGANv1.4.pth.
  3. Запустіть інференс на одному зображенні: використовуйте приклад коду нижче для перевірки. Потім масштабуйте на батч за допомогою DataLoader.

Real-ESRGAN — практичний стандарт

import torch import numpy as np from PIL import Image from basicsr.archs.rrdbnet_arch import RRDBNet from realesrgan import RealESRGANer def upscale_image( image_path: str, scale: int = 4, model_name: str = 'RealESRGAN_x4plus', # або 'RealESRGAN_x4plus_anime_6B' tile_size: int = 512, # для великих зображень — обробка тайлами half_precision: bool = True ) -> np.ndarray: """ tile_size=512 при VRAM 6GB, tile_size=0 (whole image) при VRAM 24GB. half=True — FP16, економить ~50% VRAM. """ model = RRDBNet( num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=scale ) upsampler = RealESRGANer( scale=scale, model_path=f'weights/{model_name}.pth', model=model, tile=tile_size, tile_pad=10, # перекриття тайлів для згладжування швів pre_pad=0, half=half_precision, device='cuda' ) img = np.array(Image.open(image_path).convert('RGB')) output, _ = upsampler.enhance(img, outscale=scale) return output 

GFPGAN для відновлення облич

Real-ESRGAN на портретах іноді створює артефакти на обличчі. GFPGAN додає face restoration поверх SR:

from gfpgan import GFPGANer def restore_face_photo( degraded_image: np.ndarray, upscale: int = 2, arch: str = 'clean', # 'clean' | 'RestoreFormer' channel_multiplier: int = 2, weight: float = 0.5 # 0=чистий GFPGAN, 1=без face enhancement ) -> np.ndarray: """ weight=0.5 — компроміс між відновленням та збереженням індивідуальних рис. При weight=0 обличчя «глянцеві». """ restorer = GFPGANer( model_path='weights/GFPGANv1.4.pth', upscale=upscale, arch=arch, channel_multiplier=channel_multiplier, bg_upsampler=None # можна передати RealESRGANer для фону ) _, _, restored = restorer.enhance( degraded_image, has_aligned=False, only_center_face=False, paste_back=True, weight=weight ) return restored 

Чому Real-ESRGAN — стандарт індустрії?

Модель навчена на реалістичних даних з синтетичними деградаціями (шум, розмиття, стиснення), тому добре працює з реальними фото. Комбінуємо з GFPGAN для облич — отримуємо деталізований результат без артефактів. Наш досвід показує: для 90% комерційних завдань ця зв'язка оптимальна за співвідношенням якість/швидкість. Крім того, Wang et al., "Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data" підтверджує її ефективність на бенчмарках.

Метрики та порівняння моделей

Модель PSNR (Set5 4x) SSIM Швидкість 1080p→4K Застосування
Bicubic 28.42 0.810 Миттєво Baseline
SRCNN 30.48 0.862 Fast Застарілий
ESRGAN 32.73 0.901 ~2s RTX3080 Фото
Real-ESRGAN x4+ 33.98 0.918 ~3s RTX3080 Фото, текст
SwinIR-L 34.97 0.932 ~8s RTX3080 Максимум якості
GFPGAN v1.4 ~4s RTX3080 Портрети

PSNR — не єдиний критерій: людське сприйняття корелює з LPIPS (perceptual loss). Real-ESRGAN при PSNR нижче SwinIR часто виглядає краще суб'єктивно через більш високочастотні деталі.

Батчева обробка великих обсягів

from pathlib import Path import torch from torch.utils.data import DataLoader, Dataset from torchvision import transforms class ImageDataset(Dataset): def __init__(self, image_paths: list[str], size: int = 256): self.paths = image_paths self.transform = transforms.Compose([ transforms.Resize((size, size)), transforms.ToTensor() ]) def __len__(self): return len(self.paths) def __getitem__(self, idx): img = Image.open(self.paths[idx]).convert('RGB') return self.transform(img), self.paths[idx] def batch_upscale_pipeline( input_dir: str, output_dir: str, batch_size: int = 4, # при VRAM 12GB і tile_size=0 scale: int = 4 ): paths = list(Path(input_dir).glob('*.{jpg,jpeg,png}')) Path(output_dir).mkdir(exist_ok=True) # Для батч-інференсу використовуємо прямий forward # (RealESRGANer не підтримує батчі, потрібен прямий виклик моделі) model = RRDBNet( num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=scale ) model.load_state_dict( torch.load(f'weights/RealESRGAN_x4plus.pth')['params_ema'] ) model.eval().cuda().half() for path in paths: with torch.no_grad(), torch.cuda.amp.autocast(): img_t = transforms.ToTensor()( Image.open(path).convert('RGB') ).unsqueeze(0).half().cuda() out = model(img_t).squeeze(0).float().cpu() out_img = transforms.ToPILImage()(out.clamp(0, 1)) out_img.save( Path(output_dir) / (Path(path).stem + '_4x.png') ) 

Обмеження та типові проблеми

  • Галюцинації текстури — Real-ESRGAN може додати неіснуючий текст на вивісках. На forensics-застосуваннях це неприпустимо
  • OOM на великих зображеннях — 12-мегапіксельне фото при 4x апскейл = 192Мп, не влазить у пам'ять цілком. Рішення: tile_size=512 з tile_pad=10
  • JPEG-артефакти — блочність артефактів JPEG посилюється SR. Передобробка: JPEG-aware денойзинг (nf_denoise з BasicSR)
Як ми вирішуємо проблему галюцинацій Для критичних сценаріїв (медичні знімки, документи) ми додаємо пост-валідацію: порівнюємо з оригіналом за LPIPS та відбраковуємо ненадійні пікселі. Також використовуємо донавчання на специфічному домені, що різко знижує відсоток артефактів.

Що входить у реалізацію під ключ

Ми надаємо: робоче API на FastAPI з документацією (Swagger), Docker-образ для легкого деплою, інструкцію з налаштування GPU-інференсу, benchmark ваших даних, підтримку протягом місяця після здачі. При необхідності — навчання команди замовника. Гарантуємо стабільну роботу та оптимізацію під ваше залізо. Замовте пілотний проект, щоб оцінити приріст якості на своїх даних. Отримайте консультацію — зв'яжіться з нами.

Строки

Задача Строк
API-сервіс SR (Real-ESRGAN) 1–2 тижні
Fine-tuning на специфічний домен 4–6 тижнів
Кастомна SR-модель з нуля 10–16 тижнів

Економія бюджету при виборі готової моделі замість розробки з нуля може сягати 4–6 разів. Оцінимо ваш проект безкоштовно — зв'яжіться з нами. Маємо 5+ років досвіду в computer vision, десятки успішних інтеграцій.