El Model de Difusió Latent (LDM) és una arquitectura de model de difusió desenvolupada pel grup CompVis (Computer Vision & Learning) a la LMU de Munic.

Introduïts el 2015, els models de difusió (DM) s'entrenen amb l'objectiu d'eliminar les aplicacions successives de soroll (normalment gaussià) a les imatges d'entrenament. El LDM és una millora respecte al DM estàndard, ja que realitza la modelització de difusió en un espai latent i permet el condicionament de l'autoatenció i l'atenció creuada.

Els LDM s'utilitzen àmpliament en models de difusió pràctics. Per exemple, les versions 1.1 a 2.1 de Stable Diffusion es basaven en l'arquitectura LDM.

Historial de versions Els models de difusió es van introduir el 2015 com a mètode per aprendre un model que pot mostrejar a partir d'una distribució de probabilitat altament complexa. Utilitzaven tècniques de termodinàmica de fora de l'equilibri, especialment de difusió. Va anar acompanyat d'una implementació de programari a Theano.

Un article del 2019 va proposar la xarxa de puntuació condicional de soroll (NCSN) o la coincidència de puntuacions amb dinàmica de Langevin (SMLD). L'article anava acompanyat d'un paquet de programari escrit en la versió PyTorch a GitHub.

Un article del 2020 va proposar el Model Probabilístic de Difusió amb Denoising (DDPM), que millora el mètode anterior mitjançant la inferència variacional. L'article anava acompanyat d'un paquet de programari escrit en la versió TensorFlow a GitHub. Va ser reimplementat a PyTorch per lucidrains.

El 20 de desembre de 2021, l'article de LDM es va publicar a arXiv, i els repositoris de Stable Diffusion i LDM es van publicar a GitHub. Tanmateix, van romandre aproximadament iguals. Informació substancial sobre Stable Diffusion v1 no es va afegir a GitHub fins al 10 d'agost de 2022.

Totes les versions 1.1 a XL de Stable Diffusion (SD) eren instanciacions particulars de l'arquitectura LDM.

CompVis va publicar les versions 1.1 a 1.4 de les SD a l'agost de 2022. No hi ha cap "versió 1.0". La SD 1.1 era una LDM entrenada amb el conjunt de dades laion2B-en. La SD 1.1 es va ajustar a 1.2 en imatges més estètiques. La SD 1.2 es va ajustar a 1.3, 1.4 i 1.5, amb un 10% de condicionament de text eliminat, per millorar el guiatge sense classificadors. RunwayML va publicar la SD 1.5 a l'octubre de 2022.

Arquitectura

Tot i que l'LDM pot funcionar per generar dades arbitràries condicionades a dades arbitràries, per concreció, descrivim el seu funcionament en la generació condicional de text a imatge.

LDM consisteix en un autocodificador variacional (VAE), una U-Net modificada i un codificador de text.

El codificador VAE comprimeix la imatge de l'espai de píxels a un espai latent de dimensió més petita, capturant un significat semàntic més fonamental de la imatge. El soroll gaussià s'aplica iterativament a la representació latent comprimida durant la difusió directa. El bloc U-Net, compost per una xarxa troncal ResNet, elimina el soroll de la sortida de la difusió directa cap enrere per obtenir una representació latent. Finalment, el descodificador VAE genera la imatge final convertint la representació de nou en espai de píxels.

El pas de descongestionament es pot condicionar en una cadena de text, una imatge o una altra modalitat. Les dades de condicionament codificades s'exposen a xarxes U de descongestionament mitjançant un mecanisme d'atenció creuada. Per al condicionament en text, s'utilitza un codificador de text CLIP ViT-L/14 preentrenat fix per transformar les indicacions de text en un espai d'incrustació.

Autocodificador variacional Per comprimir les dades d'imatge, primer s'entrena un autocodificador variacional (VAE) en un conjunt de dades d'imatges. La part codificadora del VAE pren una imatge com a entrada i envia una representació latent de menor dimensió de la imatge. Aquesta representació latent s'utilitza com a entrada a la U-Net. Un cop entrenat el model, el codificador s'utilitza per codificar imatges en representacions latents i el descodificador s'utilitza per descodificar representacions latents de nou en imatges.

Siguin el codificador i el descodificador del VAE .

Per codificar una imatge RGB, els seus tres canals es divideixen pel valor màxim, donant com a resultat un tensor de forma amb totes les entrades dins del rang El vector codificat és , amb forma , on 0,18215 és un hiperparàmetre, que els autors originals van triar per blanquejar aproximadament el vector codificat fins a la variància unitària. Per contra, donat un tensor latent , la imatge descodificada és , després retallat al rang

A la versió implementada,:  ldm/models/autoencoder.py el codificador és una xarxa neuronal convolucional (CNN) amb un únic mecanisme d'autoatenció a prop de l'extrem. Pren un tensor de forma i dona com a resultat un tensor de forma , sent la concatenació de la mitjana i la variància predites del vector latent, cadascuna de forma La variància s'utilitza en l'entrenament, però després de l'entrenament, normalment només es pren la mitjana, i es descarta la variància.

El descodificador també és una CNN amb un únic mecanisme d'autoatenció a prop del final. Pren un tensor de forma i dona com a resultat un tensor de forma .

U-Net miniatura|Un únic mecanisme d'atenció creuada tal com apareix en un model de llenguatge estàndard de Transformer La xarxa troncal U-Net accepta els següents tipus d'entrades:

Una matriu d'imatges latents, produïda pel codificador VAE. Té dimensions Normalment, . Un vector d'incrustació de passos de temps, que indica a la xarxa troncal quant soroll hi ha a la imatge. Per exemple, una incrustació de passos de temps indicaria que la imatge d'entrada ja no té soroll, mentre que voldria dir que hi ha molt de soroll. Una seqüència de vectors d'incrustació de modalitats, que indica a la xarxa troncal condicions addicionals per a la reducció de soroll. Per exemple, en la generació de text a imatge, el text es divideix en una seqüència de tokens, que després es codifiquen mitjançant un codificador de text, com ara un codificador CLIP, abans d'alimentar-se a la xarxa troncal. Un altre exemple és que una imatge d'entrada pot ser processada per un Vision Transformer en una seqüència de vectors, que després es poden utilitzar per condicionar la xarxa troncal per a tasques com ara generar una imatge amb el mateix estil.miniatura|Diagrama de blocs de l'arquitectura completa del Transformer. La pila de la dreta és un descodificador estàndard del Transformer pre-LN, que és essencialment el mateix que el SpatialTransformer.

Cada pas per la xarxa troncal U-Net produeix un vector de soroll previst. Aquest vector de soroll es redueix a escala i es resta de la matriu d'imatges latents, donant com a resultat una imatge latent lleugerament menys sorollosa. La reducció de soroll es repeteix segons un programa de reducció de soroll ("programa de soroll"), i la sortida de l'últim pas és processada pel descodificador VAE en una imatge acabada.

De manera similar a la U-Net estàndard, la xarxa troncal U-Net utilitzada a l'SD 1.5 està composta essencialment de capes de reducció d'escalat seguides de capes de millora d'escalat. Tanmateix, la xarxa troncal U-Net té mòduls addicionals que li permeten gestionar la integració. Com a il·lustració, descrivim una única capa de reducció d'escalat a la xarxa troncal:

La matriu latent i la incrustació temporal són processades per un ResBlock : La matriu latent és processada per una capa convolucional. El vector d'incrustació temporal es processa mitjançant una xarxa de prealimentació d'una sola capa i després s'afegeix a la matriu anterior (emissió per tots els píxels). Això és processat per una altra capa convolucional i, a continuació, una altra incrustació temporal. La matriu latent i la seqüència de vectors d'incrustació són processades per un SpatialTransformer, que és essencialment un descodificador estàndard pre-LN Transformer sense emmascarament causal. En els blocs d'atenció creuada, la matriu latent serveix com a seqüència de consulta, un vector de consulta per píxel. Per exemple, si, en aquesta capa de la xarxa U, la matriu latent té dimensions , aleshores la seqüència de consultes té vectors, cadascun dels quals té dimensions. La seqüència de vectors d'incrustació serveix tant com a seqüència de claus com a seqüència de valors. Quan no s'introdueix cap seqüència de vectors d'incrustació, un bloc d'atenció creuada pren per defecte l'autoatenció, amb la matriu latent com a consulta, clau i valor.: línia 251  def ResBlock(x, time, residual_channels): x_in = x time_embedding = feedforward_network(time) x = concatenate(x, residual_channels) x = conv_layer_1(activate(normalize_1(x))) + time_embedding x = conv_layer_2(dropout(activate(normalize_2(x)))) return x_in + x

def SpatialTransformer(x, cond): x_in = x x = normalize(x) x = proj_in(x) x = cross_attention(x, cond) x = proj_out(x) return x_in + x

def unet(x, time, cond): residual_channels = [] for resblock, spatialtransformer in downscaling_layers: x = resblock(x, time) residual_channels.append(x) x = spatialtransformer(x, cond)

x = middle_layer.resblock_1(x, time) x = middle_layer.spatialtransformer(x, time) x = middle_layer.resblock_2(x, time)

for resblock, spatialtransformer in upscaling_layers: residual = residual_channels.pop() x = resblock(concatenate(x, residual), time) x = spatialtransformer(x, cond)

return x

Entrenament i inferència El LDM s'entrena mitjançant una cadena de Màrkov per afegir gradualment soroll a les imatges d'entrenament. A continuació, s'entrena el model per invertir aquest procés, començant amb una imatge sorollosa i eliminant gradualment el soroll fins que recupera la imatge original. Més concretament, el procés d'entrenament es pot descriure de la següent manera:

Procés de difusió directa: donada una imatge real , una seqüència de variables latents es generen afegint gradualment soroll gaussià a la imatge, d'acord amb un "programa de soroll" predeterminat. Procés de difusió inversa: a partir d'una mostra de soroll gaussià , el model aprèn a predir el soroll afegit a cada pas, per tal d'invertir el procés de difusió i obtenir una reconstrucció de la imatge original .

El model s'entrena per minimitzar la diferència entre el soroll previst i el soroll real afegit a cada pas. Això es fa normalment mitjançant una funció de pèrdua d'error quadràtic mitjà (MSE).

Un cop entrenat el model, es pot utilitzar per generar noves imatges simplement executant el procés de difusió inversa a partir d'una mostra de soroll aleatori. El model elimina gradualment el soroll de la mostra, guiat per la distribució de soroll apresa, fins que genera una imatge final.

Referències

Categoria:Aprenentatge automàtic