Фотографії з бюджетних смартфонів страждають від шуму та змазу при слабкому освітленні. Стандартні фільтри розмивають текстури. Нейромережевий апскейлінг відновлює деталі, але прямі моделі Real-ESRGAN споживають до 2 ГБ RAM. Ми вирішуємо це завдання за допомогою тайлового інференсу та квантизації, інтегруючи Real-ESRGAN, FFDNet і Zero-DCE у ваш додаток. Наш досвід — 10+ років у мобільній розробці та 30+ проєктів з AI. Економія на хмарних обчисленнях завдяки on-device обробці та зниження витрат на ручну ретуш до 30% — результати, які отримують наші клієнти.
Моделі для покращення фото
Для апскейлінгу 4x застосовується Real-ESRGAN: Enhanced Real-ESRGAN. Модель збільшує 512×512 до 2048×2048, синтезуючи текстури волосся та тексту без розмиття. FFDNet — для денойзингу при високому ISO. Zero-DCE — для HDR-корекції слабоосвітлених знімків. Всі три запускаються через ML-рантайм з тайловим інференсом.
| Модель | Призначення | Платформа | Розмір | Час обробки (12 Мп) |
|---|---|---|---|---|
| Real-ESRGAN x4 | Апскейлінг 4x | iOS, Android | ~5 МБ | 15–30 с |
| FFDNet | Денойзинг | iOS, Android | ~2 МБ | 5–10 с |
| Zero-DCE | HDR-корекція | iOS, Android | ~1 МБ | 3–5 с |
| ESRGAN Lite | Апскейлінг 2x | Android | ~3 МБ | 10–15 с |
On-device обробка та економія бюджету
Хмарні рішення коштують дорого: $0.01–0.05 за зображення плюс затримка передачі даних. Ручна ретуш одного кадру обходиться в $0.50–2.00, що робить on-device обробку більш вигідною. On-device обробка усуває ці витрати. Економія на хмарних обчисленнях досягає 50% при обсязі 10 000+ фото на місяць. Приватність користувачів не порушується — зображення не залишають пристрій.
Як реалізувати тайловий інференс на iOS?
Real-ESRGAN x4 в оригіналі — 16.7M параметрів, ~2 ГБ RAM при інференсі на повному розширенні. На мобільний не влізе. Рішення — тайловий інференс: нарізаємо зображення на перекривні патчі (tile_size=256, overlap=16), обробляємо по черзі, збираємо з feather-blending. Конвертуємо PyTorch-модель в Core ML через coremltools:
import coremltools as ct import torch from realesrgan import RealESRGAN model = RealESRGAN(device='cpu', scale=4) model.load_weights('RealESRGAN_x4plus.pth') model.model.eval() example_input = torch.zeros(1, 3, 256, 256) traced = torch.jit.trace(model.model, example_input) mlmodel = ct.convert( traced, inputs=[ct.ImageType(name="input", shape=(1, 3, 256, 256), color_layout=ct.colorlayout.RGB)], compute_precision=ct.precision.FLOAT16, minimum_deployment_target=ct.target.iOS16 ) mlmodel.save("RealESRGAN_x4_tile256.mlpackage") FLOAT16 з таргетом iOS16+ переносить обчислення на ANE. На iPhone 14 інференс одного тайла — 80–120 мс. Фото 12 Мп нарізається в ~180 тайлів, разом 15–25 секунд.
let config = MLModelConfiguration() config.computeUnits = .all let model = try? RealESRGAN_x4_tile256(configuration: config) let pixelBuffer = tileImage.toCVPixelBuffer()! let output = try model?.prediction(input: .init(input: pixelBuffer)) let enhancedTile = output?.output.cgImage Коли потрібен денойзинг замість апскейлінгу?
Якщо роздільна здатність влаштовує, але є шум, використовуйте FFDNet. Модель легша (1–3 МБ) і швидша. На iOS — через Core ML з нормалізацією вхідних даних. Поширена помилка: забувають нормалізувати пікселі [0,1] — модель видає чорний або засвічений результат.
Покрокова інструкція з інтеграції
- Вибір моделі. Визначте завдання: апскейлінг, денойзинг або HDR. Для максимальної якості — Real-ESRGAN, для швидкого 2x — ESRGAN Lite.
- Конвертація. Конвертуйте PyTorch-модель в Core ML або TFLite з квантизацією FP16/INT8. Використовуйте таргет iOS16+ для ANE, GPU Delegate для Android.
- Реалізація тайлового інференсу. Розмір тайла 256–512, перекриття 8–32. Застосуйте feather-blending для усунення стиків.
- Інтеграція в UI. Додайте прогрес-бар з лічильником тайлів. Інференс — у фоновому потоці.
- Тестування. Перевірте на 10+ пристроях, заміряйте PSNR/SSIM і час обробки.
| Типова помилка | Наслідки | Рішення |
|---|---|---|
| Некоректна нормалізація | Чорний/білий результат | Нормалізація [0,1] до конвертації |
| Відсутність feather-blending | Видимі стики тайлів | Використовувати overlap+blend |
| Синхронний інференс на main thread | Зависання, watchdog | Фоновий потік з прогресом |
| Використання CPU замість GPU/ANE | Повільна обробка | Підключити GpuDelegate / ANE |
Що входить в роботу
- Підбір моделі під завдання та цільові пристрої.
- Конвертація PyTorch/ONNX в Core ML / TFLite з оптимізацією під ANE/GPU.
- Реалізація тайлового інференсу з feather-blending.
- Інтеграція в UI з прогрес-трекінгом.
- Тестування на 10+ реальних пристроях, заміри швидкості та якості.
- Документація з інтеграції та підтримка протягом місяця.
Орієнтири за термінами
Одна платформа, базова модель (денойзинг або апскейлінг) — 2–3 тижні. Обидві платформи з кількома моделями, налаштуванням якості та складним feather-blending — 5–8 тижнів.
Отримайте консультацію по вашому проєкту — оцінимо складність і підберемо модель. Замовте інтеграцію під ключ з гарантією продуктивності.







