Real-ESRGAN: ingrandire e ripristinare immagini in locale con un modello open source
Come ricostruisce i dettagli, quali modelli offre e come si usa con Upscayl, da riga di comando o con Python, con i limiti da conoscere prima di ingrandire una foto.
Una foto prodotto arrivata dal fornitore a 600 pixel di lato, una vecchia scansione, un JPEG passato da una chat all'altra fino a riempirsi di blocchi. Ingrandirle con l'interpolazione di un editor non aiuta: i bordi diventano morbidi, gli artefatti più visibili e di dettaglio nuovo non ne compare.
Real-ESRGAN nasce per questo tipo di immagini. È un modello open source che le ingrandisce fino a quattro volte e, nello stesso passaggio, attenua rumore, sfocatura e artefatti di compressione. È gratuito, gira sul tuo computer senza caricare file su servizi esterni e ha licenza BSD-3-Clause, che ne consente anche l'uso commerciale. È anche il motore di Upscayl, l'applicazione desktop gratuita di cui parlo più avanti.
Da dove arriva Real-ESRGAN
Il progetto è stato presentato nel 2021 da Xintao Wang, Liangbin Xie, Chao Dong e Ying Shan, ricercatori di Tencent ARC Lab e degli Shenzhen Institutes of Advanced Technology dell'Accademia cinese delle scienze. Il paper, Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data, è uscito su arXiv a luglio 2021 ed è stato pubblicato negli atti degli ICCV Workshops dello stesso anno.
Il nome dichiara la parentela. ESRGAN, un modello del 2018 firmato anche da Wang, dava ottimi risultati su immagini rimpicciolite in modo pulito, ma perdeva efficacia sulle foto reali, dove rumore, sfocatura e compressione si sommano senza che se ne conosca la sequenza. Il titolo del paper descrive proprio questa condizione: super-resolution "blind", cieca, perché il modello non sa come l'immagine si è degradata.
Codice e pesi dei modelli sono pubblicati su GitHub. Il repository è molto seguito ma non riceve aggiornamenti da tempo: l'ultima release, la v0.3.0, è del 20 settembre 2022, mentre gli eseguibili portatili risalgono alla v0.2.5.0 del 24 aprile 2022.
Come ricostruisce un'immagine degradata
Per imparare a ripulire una foto, un modello ha bisogno di coppie di esempi: la versione rovinata e quella originale. Raccogliere coppie reali è quasi impossibile, così gli autori le hanno generate. Partono da immagini nitide e le degradano con sfocatura, ridimensionamento, rumore e compressione JPEG, poi ripetono l'intera sequenza una seconda volta. Il paper la chiama modellazione della degradazione di ordine superiore e serve a simulare quello che succede a un file salvato, ricompresso e ricaricato più volte.
Alla sequenza si aggiungono filtri che riproducono ringing e overshoot, gli aloni e i contorni chiari che compaiono attorno ai bordi dopo una compressione aggressiva o uno sharpening eccessivo. Il modello impara così a riconoscerli e a toglierli.
L'addestramento è di tipo GAN. Accanto alla rete che produce l'immagine ingrandita ne lavora una seconda, il discriminatore, che cerca di distinguere le immagini generate da quelle vere. In Real-ESRGAN il discriminatore ha un'architettura U-Net e restituisce un giudizio per ogni pixel invece di uno solo per l'intera immagine, così il generatore è spinto a produrre texture credibili anche nelle singole zone.
Da qui deriva la caratteristica da tenere a mente prima di usarlo. Real-ESRGAN non recupera informazioni perse: ricostruisce dettagli plausibili sulla base di ciò che ha visto in addestramento. Su un tessuto o su un fondale il risultato di solito convince. Su un volto, una scritta o un dettaglio che deve corrispondere alla realtà può aggiungere elementi che nell'originale non c'erano.
Quale modello scegliere
Il repository distribuisce più modelli, addestrati per tipi di immagine differenti. Quasi tutti lavorano nativamente a 4x; le altre scale si ottengono ridimensionando l'output dopo l'elaborazione.
RealESRGAN_x4plus, scala 4x: foto e immagini generiche, il punto di partenza.RealESRGAN_x2plus, scala 2x: quando basta raddoppiare la risoluzione.RealESRNet_x4plus, scala 4x: risultato più morbido, con meno dettagli inventati.realesr-general-x4v3, scala 4x (anche 1x, 2x, 3x): modello leggero, usa meno memoria; intensità del denoise regolabile.RealESRGAN_x4plus_anime_6B, scala 4x: illustrazioni, fumetti, anime.realesr-animevideov3, scala 4x (anche 1x, 2x, 3x): video di animazione.
Per i ritratti lo script Python può passare i volti a GFPGAN, un altro modello open source di Tencent ARC dedicato al restauro del viso. Va usato con prudenza: rende più definiti occhi e bocca, ma il volto ricostruito può somigliare meno alla persona reale.
Come usarlo sul tuo computer
Le strade sono tre, dalla più semplice alla più flessibile. Tutte lavorano in locale e le immagini non escono dal computer, un dettaglio che conta quando si tratta di foto private o materiale di clienti.
Con un'interfaccia grafica: Upscayl
Upscayl è un'applicazione desktop gratuita e open source, con licenza AGPL-3.0, che usa Real-ESRGAN attraverso un backend basato su ncnn e Vulkan. Oltre ai modelli del progetto originale include alcuni modelli realizzati dalla community, utili da confrontare sullo stesso file.
È disponibile per Windows 10 e successivi, macOS 12 e successivi e Linux. Su Mac si installa anche con Homebrew:
brew install --cask upscayl
Si sceglie l'immagine, il modello e la cartella di destinazione, poi si avvia l'elaborazione; la modalità batch lavora su un'intera cartella. Il requisito da verificare è la scheda grafica: serve una GPU compatibile con Vulkan e molte grafiche integrate non funzionano.
Da riga di comando: gli eseguibili ufficiali
Nella pagina delle release del repository ci sono eseguibili portatili per Windows, Linux e macOS. Usano la GPU (Intel, AMD o NVIDIA) tramite Vulkan e contengono già i modelli, quindi non serve installare Python, PyTorch o CUDA. Si scarica l'archivio, si apre il terminale nella cartella estratta e si lancia:
./realesrgan-ncnn-vulkan -i input.jpg -o output.png -n realesrgan-x4plus
Su Windows il file si chiama realesrgan-ncnn-vulkan.exe. Con -n si sceglie il modello tra realesrgan-x4plus, realesrnet-x4plus, realesrgan-x4plus-anime e realesr-animevideov3. Conviene indicarlo sempre, perché la documentazione ufficiale non è coerente su quale sia il modello predefinito. Con -s si imposta la scala, a scelta tra 2, 3 e 4.
L'eseguibile divide l'immagine in tasselli, li elabora separatamente e poi li ricompone. Secondo la documentazione questo può lasciare piccole discontinuità tra un blocco e l'altro e dare risultati leggermente diversi dalla versione Python.
Con Python: il controllo completo
Se hai già un ambiente Python, questa strada dà accesso a tutti i modelli e a tutte le opzioni, compreso il restauro dei volti. Servono Python 3.7 o successivo e PyTorch 1.7 o successivo:
git clone https://github.com/xinntao/Real-ESRGAN.git
cd Real-ESRGAN
pip install basicsr facexlib gfpgan
pip install -r requirements.txt
python setup.py develop
python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs --face_enhance
Le opzioni che si usano più spesso:
-oindica la cartella di output, che di default èresults;--outscaleimposta il fattore finale, per esempio 2 o 3.5: il modello ingrandisce comunque a 4x e lo script ridimensiona poi il risultato con un normale filtro LANCZOS4;--face_enhanceattiva GFPGAN sui volti;-telabora l'immagine a tasselli quando la memoria della GPU non basta;--fp32usa la precisione piena al posto della mezza precisione impostata di default.
Dove funziona e dove serve cautela
Nel lavoro su siti, e-commerce e newsletter i casi d'uso sono concreti: immagini prodotto troppo piccole per gli schermi ad alta densità, loghi e grafiche disponibili solo in bassa risoluzione, screenshot da riutilizzare, illustrazioni da adattare a formati più grandi. Su grafiche e texture generiche il risultato è di solito pulito.
I problemi emergono quando l'immagine deve restare fedele all'originale. Le scritte piccole possono deformarsi, fogliame e tessuti riempirsi di pattern ripetuti, le superfici prendere un aspetto pittorico. Su una fotografia d'epoca il modello tratta la grana come rumore e la elimina, e con lei parte del carattere dell'immagine. Per questo conviene conservare sempre l'originale e considerare la versione ingrandita una copia derivata, da controllare al 100% prima di pubblicarla.
Un'ultima nota riguarda i servizi online. Il nome Real-ESRGAN compare anche su siti di terze parti che non hanno legami con il progetto, a volte senza indicare chi li gestisce o come trattano i file caricati. Il riferimento resta il repository su GitHub: da lì si scaricano i modelli e si verifica cosa possono fare.
Fonti
- Xintao Wang, Tencent ARC Lab. “Real-ESRGAN, repository ufficiale su GitHub” (README, licenza BSD-3-Clause, istruzioni d'uso). Ultima release v0.3.0, 20 settembre 2022.
- Xintao Wang, Tencent ARC Lab. “Real-ESRGAN, pagina delle release” (v0.3.0 del 20 settembre 2022; v0.2.5.0 con eseguibili portatili del 24 aprile 2022).
- Xintao Wang, Tencent ARC Lab. “Model Zoo”, documentazione dei modelli Real-ESRGAN.
- Xintao Wang, Liangbin Xie, Chao Dong, Ying Shan. “Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data”. arXiv 2107.10833, luglio 2021; ICCV Workshops 2021.
- Python Package Index. “realesrgan 0.3.0”, cronologia delle versioni. 20 settembre 2022.
- Nayam Amarshe, TGS963. “Upscayl, repository ufficiale su GitHub” (licenza AGPL-3.0, requisiti di sistema, installazione). Versione 2.15.