Introducere

Este aprilie 2023.

ChatGPT și Stable Diffusion sunt la modă. Experții vorbesc despre valul de inovație AI. Noi startup-uri apar în fiecare săptămână.

Între timp, nu ați avut ocazia să vă jucați cu aceste noi tehnologii. Ai fost ocupat cu slujba ta, iar spațiul Generative AI este intimidant pentru tine. Nu știi de unde să începi.

Într-o zi, în timp ce navighezi pe YouTube, dai peste ceva interesant. Vedeți că fast.ai tocmai a ieșit cu un curs de difuzie stabil.

Urmărește prima lecție. Este aur pur. Îl vezi din nou. Ești entuziasmat. Luați notițe și le transformați într-un articol. Ți-o citești singur.

Articolul

Imaginați-vă că aveți un model care vă poate oferi probabilitatea ca o imagine de intrare să fie o cifră scrisă de mână.

Puteți utiliza acest model pentru a genera cifre scrise de mână modificând intrarea. Puteți face fiecare pixel să fie ușor mai deschis sau puțin mai întunecat și să vedeți cum afectează acest lucru probabilitatea de ieșire.

Interesant! 🤔

Deci, tot ce aveți nevoie este un model care vă spune cum să modificați intrarea pentru a genera o ieșire bună. Totuși, cum antrenezi un astfel de model?

Puteți genera date sintetice adăugând zgomot la MNIST,daralocarea fiecărei imagini a unei probabilități ar fi dificilă și arbitrară.

Dacă ai face altceva?

Ce se întâmplă dacă ai antrena o rețea neuronală pentru a prezice cât de mult zgomot a fost adăugat? Apoi puteți scădea zgomotul din imagine și puteți obține o cifră scrisă de mână.

Rețeaua neuronală folosită pentru a face acest lucru se numește U-Net și este prima componentă a difuziei stabile.

Antrenament eficient

În realitate, nu vom lucra cu 28*28 de cifre. Ne-am antrena pe imagini RGB mai mari. Dacă luăm în considerare o dimensiune a imaginii de 512*512*3, înseamnă 786.432 pixeli.

Antrenamentul cu milioane de astfel de imagini RGB ar necesita o mulțime de resurse. Cum putem face asta mai eficient?

Aici intervine VAE (Variational Autoencoder).

VAE-urile preiau aceeași imagine ca intrare și ieșire și încearcă să învețe o reprezentare condensată a imaginii. Un VAE antrenat poate fi împărțit într-un encoder și un decodor.

Acum, putem codifica toate imaginile noastre de intrare în latents . Putem adăuga zgomot acestor latente pentru a ne antrena U-Net. În cele din urmă, putem scădea zgomotul din latente zgomotoase și le putem decoda cu decodorul pentru a obține imaginea de ieșire.

Adăugarea unui prompt

Până acum am văzut cum U-Net poate genera imagini. Apoi, trebuie să îi spunem ce imagine să generăm.

Trebuie să îi oferim o solicitare, o îndrumare pentru generarea imaginii potrivite.

Pentru exemplul nostru MNIST, putem să codificăm la cald cifra „3”, să o conectăm cu imaginea „3” și să o transmitem la U-Net.

Pentru o soluție de uz general, avem nevoie de o încorporare pentru promptul nostru care reprezintă imaginea.

Acest lucru necesită un set de date de „imagini cu subtitrări” și un nou model.

Putem descărca imagini de pe web și folosi eticheta lor alt ca legendă pentru imaginea respectivă. De exemplu,

<img src="img.jpg" alt="Cat wearing sunglasses" width="500" height="600">

Trecem o combinație a fiecărui caption cu fiecare image prin codificatoarele noastre de text și imagine pentru a obține înglobările corespunzătoare.

Putem apoi să luăm un produs punctual al acestor înglobări, să le însumăm și să le stocăm într-o matrice.

Funcția noastră de pierdere ar fi atunci să maximizăm diagonala și să minimizăm orice altceva, adică imaginea și legenda corespunzătoare ar trebui să aibă încorporare similare.

Această funcție de pierdere este cunoscută sub numele de Contrastive Loss (CL), iar modelul este cunoscut ca CLIP (Contrastive Language-Image Pre-Training).

Odată antrenați, putem folosi text_encoder pentru modelul nostru de difuzie stabilă.

Programator

Componenta finală a difuziei stabile este cunoscută sub numele de planificator.

Deoarece adăugăm diferite niveluri de zgomot la mini-loturile noastre, putem crea un program de zgomot pentru aceasta.

În timpul inferenței, începem cu zgomot aleatoriu și luăm pași mici pentru a ne actualiza intrarea până când modelul este suficient de sigur că va genera rezultatul final.

Punând totul împreună

Asta este. Aceasta este o conductă de difuzie stabilă.

Conducta este cu adevărat versatilă și vă oferă o mulțime de parametri pentru a genera rezultatul dorit.

  • Puteți începe cu o imagine inițială la alegere în loc de zgomot.
  • Puteți adăuga o solicitare negativă pentru a elimina lucruri din imagine.
  • Puteți trece guidance_scale pentru a spune modelului cât de mult să se concentreze asupra promptului
  • Îl puteți regla fin cu un simbol al propriei imagini
  • … si multe altele

Sfârșitul articolului

Este un articol grozav. Faceți clic pe Publicare. Respir uşurat. Următoarele luni vor fi interesante :)

~învăţare fericită

Referinte:

  • „Lecția 9: Fundamentele învățării profunde pentru difuzarea stabilă, 2022”