machine learning

Super-resolution e machine learning

Quante volte ho sorriso durante la visione di alcuni film nel vedere esperti tecnologi al fianco di detective che riuscivano con pochi click a generare, partendo da un semplice fotogramma di una camera piazzata in un vicolo, un ingrandimento che trasformava magicamente un ammasso di pixel sfocati in una immagina nitida, svelando così il volto dell’assassino o la targa di un veicolo.
Se fino a poco tempo fa potevano essere considerate libertà cinematografiche che rendevano più avvincente la sceneggiatura aggiungendo quel pizzico di fantasy-hi-tech che piace tanto al pubblico, oggi possiamo affermare che è diventata una applicazione possibile.

Tralasciando le applicazioni specifiche in ambito automobilistico (in cui modelli e algoritmi sono calibrati sul riconoscimento specifico di targhe di autoveicoli), uno degli approcci più condivisi fra i ricercatori si chiama Super-resolution e la troviamo, in alcune sue applicazioni primordiali, già utilizzabile all’interno di alcuni prodotti Adobe (es. Photoshop dalla versione 13.2) o di software specifici (oltre ad alcune implementazioni hardware all’interno delle GPU).La sua genesi affonda le radici in sperimentazioni e algoritmi differenti, utilizzati in ambito grafico per assolvere a esigenze differenze.
All’interno dei prodotti Adobe, ad esempio, già da qualche anno troviamo la tecnologia Enhance Details (in cui l’immagine veniva migliorata nella nitidezza e nell’aspetto cromatico, senza alterare la sua risoluzione).

Gli algoritmi di super-resolution che troviamo all’interno dei software Adobe, invece, consentono generalmente un ricampionamento lineare 2x per lato (andando così a raddoppiare la risoluzione totale per un massimo di 4x) mantenendo una migliore qualità dell’immagine rispetto all’utilizzo dei consueti algoritmi di interpolazione (es. linear, nearest-neighbor, bilinear e bicubic).

Super-resolution

La tecnologia super-resolution si basa su algoritmi di machine-learning addestrati opportunamente per interpolare i pixel aggiunti sulla base della tipologia delle forme e dell’immagine su cui viene applicata. Questo consente di evitare i consueti problemi di aliasing generati dai metodi precedenti.

Esempio di ingrandimento classico con l’utilizzo di filtri bicubico.
Si noti sulla destra la presenza di aliasing che fa perdere nitidezza ai contorni.
 Image Credit: Masa Ushioda/Seapics/Solent News

Un esempio di sperimentazione ci viene offerta da alcuni ricercatori di Google che nel 2016 hanno messo a punto un’applicazione di un modello di machine-learning chimato RAISR: Rapid and Accurate Image Super Resolution, che ha consentito di ottenere immagini ingrandite con una ottima resa qualitativa.
Questo approccio ha visto la creazione di un dataset composto da 10.000 coppie di immagini (a bassa e alta risoluzione) utilizzato come training per la calibrazione del modello di machine-learning.

L’ applicazione ha permesso l’affinamento di filtri adattivi non-lineari che, applicati ad una immagine ingrandita con uno dei metodi classici di interpolazione (es. bilinear), consentono un miglioramento dei risultati rappresentativi andando ad diminuire la presenza di artefatti.

I filtri così generati, che basano la loro matematica su alcune peculiarità delle immagini (contorni, gradienti, direzione, forza, coerenza, ecc.), vengono associati tramite funzioni hash alle caratteristiche dell’immagine oggetto di ingrandimento, così da essere utilizzati nei punti e nei modi opportuni.
L’immagine così elaborata viene, infine, “unita” a quella interpolata linearmente in partenza, utilizzando una funzione di media pesata, abbattendo i possibili artefatti generati dai filtri.

Workflow dell’applicazione. A sinistra l’immagine di partenza. Al centro l’immagine ingrandita con un filtro bicubico, a destra l’immagine in output dall’algoritmo RAISR.
Top: Original, Bottom: RAISR super-resolved 2x. Original image from Andrzej Dragan

Super-Resolution via Repeated Refinements

Ma come dicevano all’inizio, i progressi nel campo dell’elaborazione di immagini sintetiche sta facendo passi da gigante, grazie anche all’integrazione di modelli sempre più complessi di machine learning all’interno dei laboratori di ricerca.

Un esempio che oggi voglio descrivere è rappresentato dal Super-Resolution via Repeated Refinements (SR3), un algoritmo sviluppato all’interno dei laboratori Google, che basa la propria funzionalità sul processo di denoising stocastico applicato al resample di un’immagine.

L’ approccio al problema è innovativo. Pur basandosi sempre su modelli di machine-learning, questo algoritmo applica il training su immagini sottoposte a noising progressivo. In questo modo il modello viene calibrato per poter essere successivamente utilizzato in modo inverso, partendo da un noising completo fino all’immagine scalata.

Esempio di Image Super-Resolution via Iterative Refinement
by Chitwan Saharia Jonathan Ho,  William Chan,  Tim Salimans,  David Fleet,  Mohammad Norouzi)
Super Resolution results: (Sopra) 64×64 → 512×512 face super-resolution, (Sotto) 64×64 -> 256×256 natural image super-resolution.

Questo approccio ha dimostrato ottimi risultati di benchmark nella scalatura 4x-8x soprattutto per immagini ritraenti visi umani e immagini naturali. Nell’articolo (che si può leggere tramite i riferimenti in basso), si ipotizza anche la possibilità di superare il confine degli 8x applicando più volte in cascata l’algoritmo stesso, arrivando a raggiungere fattori moltiplicativi più elevati.

E’ facile immaginare che tali applicazioni di sintesi digitale porteranno sempre più applicazioni in ambiti differenti, da quello fotografico a quello medico, consentendo magari anche il riutilizzo di video e foto registrate con apparecchiature hardware con caratteristiche e ottiche obsolete.

Per approfondire:

RAIY. Romano, J. Isidoro and P. Milanfar, “RAISR: Rapid and Accurate Image Super Resolution,” in IEEE Transactions on Computational Imaging, vol. 3, no. 1, pp. 110-125, March 2017, doi: 10.1109/TCI.2016.2629284.

Image Super-Resolution via Iterative Refinement – 2021 – Image and Video Processing (eess.IV); Computer Vision and Pattern Recognition (cs.CV); Machine Learning (cs.LG) – Chitwan Saharia, Jonathan Ho, William Chan, Tim Salimans, David J. Fleet, Mohammad Norouzi

Yulun Zhang, Kunpeng Li, Kai Li, Lichen Wang, Bineng, Zhong, and Yun Fu. Image super-resolution using very deep residual channel attention networks. In Proceedings of the European conference on computer vision (ECCV).

Costruzioni Lego e Intelligenza artificiale

Si chiama BrickIt l’app basata su algoritmi di Intelligenza artificiale che permette di fotografare i pezzi Lego a nostra disposizione e proporci delle originali idee progettuali.

Ok, so bene che in questo caso siamo ai limiti di un articolo “acchiappa click”, come quelli che si trovano spesso nelle riviste generaliste con lo scopo di incuriosire e attirare l’attenzione di un pubblico non specialista utilizzando termini iper-tecnologici per descrivere applicazioni banali.
Ma, sarà forse il mood estivo o la ricerca di nuovi stimoli da parte dei piccoli di casa, ho voluto sperimentare questa nuova App che promette di automatizzare la progettazione di costruzioni Lego sulla base dei pezzi a nostra disposizione.

L’ App in questione si chiama BrickIt (brickit.app) ed è disponibile al momento solo per piattaforma iOs (iPhone) in forma gratuita.
Il funzionamento è davvero semplice ed immediato: si dispongono i pezzi lego su una superficie piana (possibilmente a tinta unita), facendo attenzione a non occludere i pezzi più piccoli sotto quelli più grandi; si fotografa questa disposizione e l’app fa tutto il resto, costruendo dei veri e propri libretti di costruzione che ci guidano nella realizzazione di oggetti alternativi, tutti realizzabili con i pezzi che abbiamo fotografato.


Ma non finisce qui! Infatti durante gli step di costruzione, possiamo chiedere all’App di mostrarci l’area della fotografia in cui è presente il pezzo di cui necessitiamo, facendoci risparmiare lunghi tempi di ricerca.
Tale funzionalità consente anche di scegliere, fra i pezzi presenti, delle alternative cromatiche che possiamo integrare nel progetto.

Sono consapevole che qualcuno potrebbe non apprezzare tale funzionalità, affermando che la ricerca e l’identificazione dei pezzi (come avviene per alcune tipologie di gioco, come i puzzle) rientra proprio nelle fasi creative del gioco e che quindi eliminarle altera la dinamica ludica (basti pensare quando, seguendo un libretto delle istruzioni per il montaggio e dopo una disperata ricerca di pezzi all’interno del nostro contenitore, siamo portati all’adozione di varianti , rendendo di fatto originale e unica la nostra costruzione).

Ma in questo testo vorrei soffermarmi principalmente sugli aspetti tecnologici e implementativi di questa App che dimostra come “semplici” algoritmi di matching fotografico affiancati ad un sistema di proposta progettuale possano essere coniugati in un’applicazione semplice e utile, davvero alla portata di chiunque.
Il riconoscimento fotografico si basa su estrazioni di features (forma e contrasto), identificando attraverso un dizionario di immagini le varie tipologie di pezzo Lego (al momento in questo database non sono inclusi la serie Lego Technic e Lego Duplo).

Dopodiché, un modello di pattern recognition cerca in un catalogo già predisposto le occorrenze presenti, proponendoci delle alternative di costruzione, con le relative istruzioni di montaggio. Queste istruzioni si basano presumibilmente su un prontuario già presente, essendo le immagini della guida non correlate ai colori dei pezzi in nostro possesso.

Fase di sperimentazione e costruzione. 🙂

L’idea progettuale è molto simpatica ed apre ad una integrazione ludica e tecnologica comunque basata sulla socializzazione e sulle capacità di personalizzazione progettuale.

Da un punto di vista funzionale l’app si è rivelata abbastanza stabile.
Durante la “sperimentazione” (con il supporto di un esperto in costruzioni ;)) l’App ha commesso pochi errori di identificazione, principalmente a causa di parziali occlusioni dei pezzi sotto altri. Tale evenienza però ha permesso piccole reinterpretazioni pesonali che hanno reso ancora più originali le nostre creazioni.

P.S.: Citazione doverosa in tale ambito è il software di progettazione sviluppato da Lego Digital Designer (https://www.lego.com/it-it/ldd) per la creazione di nuovi progetti di costruzione, con relativa elaborazione automatica di istruzioni di montaggio. In questo caso ovviamente si tratta di una semplice applicazione per la progettazione 3D senza alcun supporto di AI.

https://www.youtube.com/watch?v=z5U_BqJcQ3Y