Folosind AI pentru a supracomprima imaginile

Folosind AI pentru a supracomprima imaginile
Algoritmii bazați pe date, cum ar fi rețelele neuronale, au luat lumea cu asalt. Dezvoltarea lor este determinată de mai multe motive, inclusiv hardware ieftin și puternic și cantități uriașe de date. Rețelele neuronale sunt în prezent în fruntea a tot ceea ce ține de sarcini „cognitive” precum recunoașterea imaginilor, înțelegerea limbajului natural etc. Dar nu ar trebui să se limiteze la astfel de sarcini. Acest material descrie o metodă de comprimare a imaginilor folosind rețele neuronale folosind învățarea reziduală. Abordarea prezentată în articol funcționează mai rapid și mai bine decât codecurile standard. Scheme, ecuații și, bineînțeles, un tabel cu teste sub tăietură.

Acest articol se bazează pe acest muncă. Se presupune că sunteți familiarizat cu rețelele neuronale și conceptele acestora convoluţie и funcția de pierdere.

Ce este compresia imaginii și în ce tipuri vine?

Compresia imaginii este procesul de transformare a unei imagini astfel încât să ocupe mai puțin spațiu. Simpla stocare a imaginilor ar ocupa mult spațiu, așa că există codecuri precum JPEG și PNG care urmăresc să reducă dimensiunea imaginii originale.

După cum știți, există două tipuri de compresie a imaginii: nicio pierdere и cu pierderi. După cum sugerează și numele, compresia fără pierderi poate recupera datele originale ale imaginii, în timp ce compresia cu pierderi pierde unele date în timpul compresiei. de exemplu, JPG sunt algoritmi cu pierderi [aprox. traducere - practic, să nu uităm nici de JPEG fără pierderi], iar PNG este un algoritm fără pierderi.

Folosind AI pentru a supracomprima imaginile
Comparație între compresia fără pierderi și cu pierderi

Rețineți că imaginea din dreapta are o mulțime de artefacte blocate. Aceasta este o informație pierdută. Pixelii adiacenți de culori similare sunt comprimați ca o singură zonă pentru a economisi spațiu, dar informațiile despre pixelii reali se pierd. Desigur, algoritmii folosiți în codecurile JPEG, PNG etc. sunt mult mai complexi, dar acesta este un exemplu bun intuitiv de compresie cu pierderi. Compresia fără pierderi este bună, dar fișierele comprimate fără pierderi ocupă mult spațiu pe disc. Există modalități mai eficiente de a comprima imaginile fără a pierde o mulțime de informații, dar sunt destul de lente și mulți folosesc abordări iterative. Aceasta înseamnă că nu pot fi rulate în paralel pe mai multe nuclee CPU sau GPU. Această limitare le face complet impracticabile pentru utilizarea de zi cu zi.

Intrare de rețea neuronală convoluțională

Dacă ceva trebuie calculat și calculele pot fi aproximative, adăugați Retea neurala. Autorii au folosit o rețea neuronală convoluțională destul de standard pentru a îmbunătăți compresia imaginii. Metoda prezentată nu numai că funcționează la egalitate cu cele mai bune soluții (dacă nu mai bune), ci poate folosi și calculul paralel, rezultând o creștere dramatică a vitezei. Motivul este că rețelele neuronale convoluționale (CNN) sunt foarte bune la extragerea informațiilor spațiale din imagini, care sunt apoi reprezentate într-o formă mai compactă (de exemplu, sunt reținți doar biții „importanti” ai imaginii). Autorii au vrut să folosească această caracteristică a CNN pentru a reprezenta mai bine imaginile.

Arhitectură

Autorii au propus o rețea duală. Prima rețea preia o imagine ca intrare și generează o reprezentare compactă (ComCNN). Ieșirea acestei rețele este apoi procesată de un codec standard (cum ar fi JPEG). Odată procesată de codec, imaginea este trimisă la o a doua rețea, care „corectează” imaginea din codec în încercarea de a returna imaginea originală. Autorii au numit această rețea un CNN de reconstrucție (RecCNN). La fel ca GAN-urile, ambele rețele sunt antrenate iterativ.

Folosind AI pentru a supracomprima imaginile
Reprezentarea ComCNN Compact a fost transferată la codec standard

Folosind AI pentru a supracomprima imaginile
RecCNN. Ieșirea ComCNN este mărită și transmisă RecCNN, care va încerca să învețe restul

Ieșirea codecului este mărită și apoi transmisă la RecCNN. RecCNN va încerca să scoată o imagine cât mai similară cu originalul.

Folosind AI pentru a supracomprima imaginile
Cadru de compresie a imaginii de la capăt la capăt. Co(.) este un algoritm de compresie a imaginii. Autorii au folosit JPEG, JPEG2000 și BPG

Care este restul?

Restul poate fi considerat un pas de post-procesare pentru a „îmbunătăți” imaginea decodificată de codec. Cu o mulțime de „informații” despre lume, o rețea neuronală poate lua decizii cognitive cu privire la ce să remedieze. Această idee se bazează pe antrenament rezidual, citește detaliile despre care poți aici.

Funcții de pierdere

Sunt utilizate două funcții de pierdere deoarece avem două rețele neuronale. Primul dintre acestea, ComCNN, este etichetat L1 și este definit după cum urmează:

Folosind AI pentru a supracomprima imaginile
Funcția de pierdere pentru ComCNN

explicație

Această ecuație poate părea complicată, dar este de fapt standard (eroare medie pătratică) MSE. ||² înseamnă norma vectorului pe care îl includ.

Folosind AI pentru a supracomprima imaginile
Ecuația 1.1

Cr denotă ieșirea ComCNN. θ denotă capacitatea de antrenare a parametrilor ComCNN, XK este imaginea de intrare

Folosind AI pentru a supracomprima imaginile
Ecuația 1.2

Re() reprezintă RecCNN. Această ecuație transmite pur și simplu valoarea ecuației 1.1 către RecCNN. θ indică parametrii antrenabili ai RecCNN (capul de sus înseamnă că parametrii sunt fixați).

Definiție intuitivă

Ecuația 1.0 va forța ComCNN să-și schimbe ponderile astfel încât, atunci când este reconstruită folosind RecCNN, imaginea finală să arate cât mai asemănătoare cu imaginea de intrare. A doua funcție de pierdere RecCNN este definită după cum urmează:

Folosind AI pentru a supracomprima imaginile
Ecuația 2.0

explicație

Din nou, funcția poate părea complexă, dar este în cea mai mare parte o funcție standard de pierdere a rețelei neuronale (MSE).

Folosind AI pentru a supracomprima imaginile
Ecuația 2.1

Co() înseamnă ieșire codec, x cu un capac deasupra înseamnă ieșire ComCNN. θ2 sunt parametrii antrenabili ai RecCNN, res() este pur și simplu rezultatul rezidual al RecCNN. Este demn de remarcat faptul că RecCNN este instruit pe diferența dintre Co() și imaginea de intrare, dar nu și pe imaginea de intrare.

Definiție intuitivă

Ecuația 2.0 va forța RecCNN să-și schimbe greutățile, astfel încât rezultatul să arate cât mai asemănător cu imaginea de intrare.

Schema de invatare

Modelele sunt antrenate iterativ, similar cu GAN. Greutățile primului model sunt fixe în timp ce greutățile celui de-al doilea model sunt actualizate, apoi greutățile celui de-al doilea model sunt fixe în timp ce primul model este antrenat.

teste

Autorii și-au comparat metoda cu metodele existente, inclusiv codecuri simple. Metoda lor funcționează mai bine decât altele, menținând în același timp viteză mare pe hardware-ul corespunzător. În plus, autorii au încercat să utilizeze doar una dintre cele două rețele și au observat o scădere a performanței.

Folosind AI pentru a supracomprima imaginile
Comparația indicelui de similaritate structurală (SSIM). Valorile ridicate indică o mai bună asemănare cu originalul. Rezultatele muncii autorilor sunt evidențiate cu caractere aldine.

Concluzie

Am analizat o nouă modalitate de a folosi învățarea profundă pentru compresia imaginilor și am vorbit despre posibilitatea utilizării rețelelor neuronale în sarcini dincolo de cele „generale”, cum ar fi clasificarea imaginilor și procesarea limbajului. Această metodă nu numai că nu este inferioară cerințelor moderne, dar vă permite și să procesați imagini mult mai rapid.

A devenit mai ușor să studiezi rețelele neuronale, deoarece am creat un cod promoțional special pentru rezidenții Khabra HABR, acordând o reducere suplimentară de 10% la reducerea indicată pe banner.

Folosind AI pentru a supracomprima imaginile

Mai multe cursuri

Articole Promovate

Sursa: www.habr.com

Adauga un comentariu