Gli algoritmi basati sui dati, come le reti neurali, hanno conquistato il mondo. La loro diffusione è dovuta a varie ragioni, tra cui attrezzature potenti e a basso costo e un'enorme quantità di dati. Le reti neurali sono attualmente all'avanguardia in tutto ciò che riguarda compiti "cognitivi", come il riconoscimento delle immagini, la comprensione del linguaggio naturale, e così via. Ma non devono essere limitate a tali compiti. Questo materiale discute un metodo di compressione delle immagini utilizzando le reti neurali, attraverso l'apprendimento residuo. L'approccio presentato nell'articolo funziona più velocemente e meglio rispetto ai codec standard. Diagrammi, equazioni e, naturalmente, una tabella con i test sono disponibili a seguire.
Questo articolo si basa su lavoro. Si presume che tu abbia familiarità con le reti neurali e i loro concetti. convoluzione e funzione di perdita.
Che cos'è la compressione delle immagini e quali tipi esistono?
La compressione delle immagini è il processo di trasformazione di un'immagine in modo che occupi meno spazio. La semplice memorizzazione delle immagini occuperebbe molto spazio, quindi esistono codec come JPEG e PNG, progettati per ridurre le dimensioni dell'immagine originale.
Come è noto, esistono due tipi di compressione delle immagini: senza perdite e con perdita. Come suggeriscono i nomi, durante la compressione senza perdita è possibile recuperare i dati originali dell'immagine, mentre con la compressione con perdita alcuni dati vengono persi nel processo. Ad esempio, JPG è un algoritmo con perdita [nota del traduttore — e non dimentichiamo anche il JPEG senza perdita], mentre PNG è un algoritmo senza perdita.

Confronto tra compressione senza perdita e con perdita
Si prega di notare che nell'immagine a destra ci sono molti artefatti. Queste sono informazioni perse. I pixel adiacenti di colori simili vengono compressi come un'unica area per risparmiare spazio, ma in questo modo si perdono informazioni sui singoli pixel. Certamente, gli algoritmi utilizzati nei codec JPEG, PNG, ecc., sono molto più complessi, ma questo è un buon esempio intuitivo di compressione con perdita. La compressione senza perdita è utile, ma i file compressi senza perdita occupano molto spazio su disco. Esistono metodi più efficienti per comprimere le immagini senza perdere molte informazioni, ma sono piuttosto lenti e molti utilizzano approcci iterativi. Ciò significa che non possono essere eseguiti in parallelo su più core della CPU o della GPU. Tale limitazione li rende del tutto poco pratici nell'uso quotidiano.
Input della rete neurale convoluzionale
Se c'è qualcosa da calcolare e i calcoli possono essere approssimativi, aggiungi . Gli autori hanno utilizzato una rete neurale convoluzionale piuttosto standard per migliorare la compressione delle immagini. Il metodo presentato non solo compete con le migliori soluzioni (se non meglio), ma può anche utilizzare il calcolo parallelo, portando a un notevole incremento della velocità. Questo perché le reti neurali convoluzionali (CNN) sono molto abili nell'estrazione delle informazioni spaziali dalle immagini, che vengono quindi rappresentate in una forma più compatta (ad esempio, memorizzando solo i bit "importanti" dell'immagine). Gli autori volevano sfruttare questa capacità delle CNN per rappresentare meglio le immagini.
Architettura
Gli autori hanno proposto una doppia rete. La prima rete riceve in input l'immagine e genera una rappresentazione compatta (ComCNN). I risultati di questa rete vengono poi elaborati da un codec standard (ad esempio, JPEG). Dopo l'elaborazione da parte del codec, l'immagine viene inviata a una seconda rete, che "corregge" l'immagine dal codec nel tentativo di riportare l'immagine originale. Gli autori hanno chiamato questa rete CNN ricostruttiva (RecCNN). Simile a un GAN, entrambe le reti vengono addestrate in modo iterativo.

ComCNN Una rappresentazione compatta viene trasmessa a un codec standard

RecCNN. Le uscite di ComCNN sono scalate in aumento e vengono fornite a RecCNN, che cercherà di imparare il residuo
Le uscite del codec vengono scalate in aumento e poi fornite a RecCNN. RecCNN cercherà di generare un'immagine simile all'originale il più possibile.

Un framework di compressione delle immagini senza perdite. Co(.) è un algoritmo di compressione delle immagini. Gli autori hanno applicato JPEG, JPEG2000 e BPG
Che cos'è il residuo?
Il residuo può essere visto come un passaggio di post-elaborazione per "migliorare" l'immagine decodificata dal codec. Dotata di una grande quantità di "informazioni" sul mondo, la rete neurale può prendere decisioni cognitive su cosa correggere. Questa idea si basa su , puoi leggere ulteriori dettagli su di esso .
Funzioni di perdita
Due funzioni di perdita vengono utilizzate perché abbiamo due reti neurali. La prima, ComCNN, è contrassegnata come L1 e definita come:

Funzione di perdita per ComCNN
Spiegazione
Questa equazione potrebbe sembrare complessa, ma in realtà è standard (errore quadratico medio) MSE. ||² indica la norma del vettore che racchiudono.

Equazione 1.1
Cr rappresenta l'output di ComCNN. θ rappresenta la capacità di apprendimento dei parametri di ComCNN, XK è l'immagine di input.

Equazione 1.2
Re() indica RecCNN. Questa equazione semplicemente restituisce il valore dell'equazione 1.1 in RecCNN. θ rappresenta i parametri di apprendimento di RecCNN (il cappello sopra indica che i parametri sono fissi).
Definizione intuitiva
L'equazione 1.0 costringerà ComCNN a modificare i propri pesi in modo che, dopo la ricostruzione tramite RecCNN, l'immagine finale appaia il più possibile simile all'immagine di input. La seconda funzione di perdita di RecCNN è definita come segue:

Equazione 2.0
Spiegazione
Di nuovo, la funzione può sembrare complessa, ma è per la maggior parte una funzione di perdita standard per reti neurali (MSE).

Equazione 2.1
Co() indica l'output del codec, x con un cappello sopra indica l'output di ComCNN. θ2 sono i parametri di apprendimento di RecCNN. res() rappresenta semplicemente l'output residuo di RecCNN. Vale la pena notare che RecCNN viene addestrato sulla differenza tra Co() e l'immagine di input, ma non sull'immagine di input.
Definizione intuitiva
L'equazione 2.0 costringerà RecCNN a modificare i suoi pesi in modo che l'output sembri il più simile possibile all'immagine di input.
Schema di addestramento
I modelli vengono addestrati in modo iterativo, simile a . I pesi del primo modello rimangono fissi mentre i pesi del secondo modello vengono aggiornati, quindi i pesi del secondo modello vengono fissati mentre il primo modello viene addestrato.
Test
Gli autori hanno confrontato il loro metodo con metodi esistenti, comprese le semplici tecniche di codifica. Il loro metodo funziona meglio degli altri, mantenendo alta velocità sull'hardware appropriato. Inoltre, gli autori hanno provato a utilizzare solo una delle due reti e hanno osservato un calo delle prestazioni.

Confronto dell'indice di somiglianza strutturale (SSIM). Valori elevati indicano una maggiore somiglianza con l'originale. In grassetto è evidenziato il risultato ottenuto dagli autori.
Conclusione
Abbiamo esaminato un nuovo modo di applicare l'apprendimento profondo per la compressione delle immagini, discutendo la possibilità di utilizzare le reti neurali in compiti oltre quelli "generali", come la classificazione delle immagini e l'elaborazione del linguaggio. Questo metodo non solo soddisfa le moderne esigenze, ma consente anche di elaborare le immagini in modo molto più rapido.
Studiare le reti neurali è diventato più semplice, poiché abbiamo creato un codice promozionale specificamente per i membri di Habr. HABR, che offre uno sconto aggiuntivo del 10% sullo sconto indicato nel banner.
Altri corsi
Articoli consigliati
Fonte: habr.com
