Seuraava artikkeli auttaa sinua: Miten luodaan kuvia tekstistä DALL.E Minillä?
Zero-shot Text to Image -generointimenetelmä toimii yhdistämällä havaitut ja havaitsemattomat tekstikuvausten kategoriat tietyntyyppisten aputietojen avulla, jotka koodaavat havaittavia objektien erottavia ominaisuuksia. Tässä artikkelissa käytämme DALL-E miniä Zero-shot-tekstin kuvien luomiseen ja luomme kuvat tietylle tekstijonolle. Tässä artikkelissa käsiteltävät aiheet ovat seuraavat.
Sisällysluettelo
- Mitä nolla-oppiminen on?
- Kuinka Zero-shot -teksti-kuvaksi -luonti toimii?
- Kuvan luominen DALL-E Minillä
Aloitetaan ymmärtämällä Zero-shot Learning (ZSL).
Mitä nolla-oppiminen on?
Zero-Shot Learningin (ZSL) tavoitteena on oppia semanttisia välikerroksia ja niiden ominaisuuksia, jotta päättelyn aikana voidaan ennustaa uusi dataluokka. Esimerkiksi kissojen ja koirien kuvien erottamiseen kehitetty malli pystyy tunnistamaan myös lintukuvia. Näissä tapauksissa katetut luokat tunnetaan “nähtyinä” luokkina, kun taas merkitsemättömiä koulutustapahtumia kutsutaan “näkemättömiksi” luokiksi.
Nähtävän luokan tietoa voidaan siirtää näkymättömiin luokkiin käyttämällä korkeadimensionaalista vektoriavaruutta, jota kutsutaan semanttiseksi tilaksi. Hyödyntämällä semanttista tilaa sekä kuvasisällön visuaalisia piirteitä, ZSL voidaan ratkaista projisoimalla visuaalinen piirrevektori ja prototyyppi yhdistettyyn upotustilaan. Kuvan piirrevektorin projektio sovitetaan näkymättömään luokkaan käyttämällä lähin naapurihakua (NNS).
Zero-Shot Learning on Transfer Learningin alakenttä, koska zero-shot-oppiminen siirtää koulutustapauksista saadun tiedon testausinstanssien luokitteluun.
ZSL:ssä on kolme pääkomponenttia, joista koko oppimisprosessi riippuu.
- Dataluokat, joita käytetään syväoppimismallin koulutukseen, jota kutsutaan ns Nähty luokat
- Validointitarkoituksiin käytetyt tietoluokat, joihin olemassa olevan syvämallin on yleistettävä, ovat Näkemättömät luokat.
- Koska ei ole aiempaa tietoa näkymättömistä luokista, jotkut aputiedot on tarpeen Zero-Shot Learning -ongelman ratkaisemiseksi. Aputiedot sisältävät tietoja, kuten kuvauksia, semanttisia tietoja tai näkymättömiin luokkiin liittyviä sanan upotuksia
Ymmärretään, kuinka ZSL:n avulla syntetisoidaan kuvia tekstikuvauksista.
Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.
Kuinka Zero-shot -teksti-kuvaksi -luonti toimii?
Tavoitteena on maksimoida Todisteiden alaraja (ELB) mallin kuvien jakautumisen yhteisestä todennäköisyydestä, kuvan kuvauksesta ja koodatun RGB-kuvan tunnuksista.
- Evidence Lower Bound on tilastollinen tekniikka log-todennäköisyysfunktion arvioimiseksi. Se on osa vaihtelevaa Bayesin päättelyä. Joten todiste tässä on log-todennäköisyysfunktio ja Lower Bound on menetelmä, joka auttaa funktion likimääräisessä määrittämisessä.
Jos pikseleitä käytettäisiin suoraan kuvatunnisteina, korkearesoluutioiset kuvat vaatisivat kohtuuttoman paljon muistia. Todennäköisyystavoitteessa on taipumus priorisoida pikseleiden välisten lyhyen kantaman riippuvuuksien mallintamista, joten suuri osa mallinnuskapasiteetista omistettaisiin korkeataajuisten yksityiskohtien tallentamiseen sen sijaan, että kehitettäisiin matalataajuista rakennetta, joka tekee kohteista visuaalisesti tunnistettavia. Koko prosessi voitaisiin jakaa kaksivaiheiseen, mikä helpottaa koulutusprosessia oppijalle.
Harjoittelu Diskreetti Variational AutoEncoder
Jokainen RGB-kuva pakataan diskreetillä variaatioautoenkooderilla (dVAE) pienemmiksi kuvatunnisteiksi, joiden jokainen elementti voi saada tuhansia mahdollisia arvoja. Tämä pienentää muuntajan kontekstikokoa ilman suurta visuaalisen laadun heikkenemistä ja nopeuttaa harjoitteluprosessia. Tämä prosessi on aivan kuin se, kuinka voimme merkitä erilaisia asioita kaukaisesta sijainnista, vaikka se ei olisikaan selkeässä visiossa, koska olemme kouluttaneet mielemme tunnistamaan vain näkemällä asioiden ääriviivat ja kaltevuudet.
Nyt meidän on asetettava alkuarvo ennen yhtenäistä kategorista jakautumista mahdollisten arvojen koodikirjavektoreihin, ja nämä vektorit on parametroitava samassa spatiaalisessa paikassa kuin kooderin antama pienempi kuva. Todisteen alarajaa (ELB) on nyt vaikea optimoida, koska alkuperäisestä priorista tulee erillinen jakauma.
Joten meidän on muutettava kategorinen jakauma jatkuvaksi jakaumaksi refaktoroimalla näyte parametrien deterministiseksi funktioksi ja riippumattomaksi kohinaksi kiinteällä jakaumalla tätä prosessia kutsutaan myös relaksaatioksi. Gumbile-temppu on täydellinen tällaisen toimenpiteen suorittamiseen. Kun Gumbilen yhden kuumavektorikoodauksen lämpötilakerroin pyrkii äärettömään, jakauma alkaa tasaantua. Nyt eksponentiaalisesti painotettua iteraattikeskiarvoa käytetään maksimoimaan rento ELB. dVAE-dekooderin luomien RGB-kuvien jakautumisen todennäköisyys arvioidaan log-Laplace-jakauman avulla.
Ristientropiahäviöt on normalisoitava teksti- ja kuvatunnisteille kunkin lajin kokonaismäärällä tietoerässä. Koska olemme ensisijaisesti kiinnostuneita kuvan mallintamisesta, kerromme tekstin ristientropiahäviön 1/8:lla ja kuvan ristientropiahäviön 7/8:lla.
Aikaisempi oppiminen
Tässä vaiheessa keskitytään koodattujen tekstimerkkien ketjuttamiseen pienempiin muunnettujen kuvamerkkien kanssa ja koulutetaan oppijaa autoregressiivisellä muuntajalla.
Tekstikuvan koodaamiseen käytetään Byte-Pair Encoding (BPE) -koodausta, joka koodaa pienillä kirjaimilla kirjoitetut kuvaukset ja kuvan käyttämällä sanastoa. Jotta varmistetaan, että sanastossa usein esiintyville sanoille annetaan yksi merkki, harvinaisemmat sanat jaetaan useiksi ilmaisuiksi. Kuten yllä selitettiin, dVAE-enkooderin logitia käytetään kuvatunnisteiden luomiseen. Sitten teksti- ja kuvatunnisteet ketjutetaan ja mallinnetaan autoregressiivisesti yhdeksi tietovirraksi.
Tässä 12 miljardin parametrin harvamuuntaja oppii aiemman jakauman teksti- ja kuvamerkkien välillä maksimoimalla ELB:n. Malli käyttää kolmenlaisia niukkoja huomionaamioita allokoimaan jokainen kuvamerkki johonkin sen 64 itsetarkkailutasosta.
- Konvoluutiota huomioivaa maskia käytetään vain viimeisessä itsehuomiokerroksessa.
- Rivin huomionaamio
- Sarakkeen huomionaamio
Huomiomaskien osat tekstistä tekstiin -huomiota varten käyttävät tavallista kausaalista maskia, ja kuvasta kuvaksi -huomion osat käyttävät joko rivi-, sarake- tai konvoluutiomaskia.
Yllä oleva työnkulku koskee muuntajaa, jossa käytetään kahta prosessia: eteenpäin etenemistä ja taaksepäin etenemistä. Yhtenäinen viiva osoittaa etenemisen eteenpäin, ja katkoviiva on taaksepäin etenemisen toimintosarja. Kun backpropagation-algoritmi toimii lähtökerroksesta kohti syöttökerrosta (taaksepäin), gradientit pienenevät ja lähestyvät nollaa, mikä lopulta jättää alempien kerrosten painot lähes ennalleen. Tämän seurauksena kaltevuuden lasku ei koskaan lähenty optimaaliseen.
Tämä nostaa esiin katoavien gradienttien ongelman. Samoin eteenpäin etenemisessä gradientit kasvavat jatkuvasti. Tämä puolestaan aiheuttaa erittäin suuria painopäivityksiä ja aiheuttaa kaltevuuden laskun hajaantumisen ja räjähdysmäisten kaltevuksien ongelman.

Näiden ongelmien ratkaisemiseksi käytetään Residual block tai ResBlock, joka eroaa perinteisestä verkkoprosessista. Kun dataa siirretään tasolta toiselle 2-3 kerrosta renkaalla. Yllä olevassa esityksessä voitiin nähdä, että ‘x’-identiteetti pakenee tasolta ja kiertää toiselle.
Aktivoinnit ja gradientit identiteettipolun varrella tallennetaan 32-bitin tarkkuudella. Suodatintoiminto asettaa kaikki äärettömät ja puuttuvat arvot aktivointigradientissa nollaan. Ilman tätä ei-äärinen tapahtuma nykyisessä Resblockissa aiheuttaisi gradienttiasteikkojen tarpeettoman putoamisen kaikille edeltäville resblockeille, mikä johtaisi alivuotoon.
Kuvan luominen DALL-E Minillä
Käytämme Hugging face DALL-E miniä, esikoulutettua mallia, joka toimii ZSL:llä kuvien luomiseen tekstikuvauksista.
Tarvittavien kirjastojen asentaminen
!pip asennus -q git+https://github.com/huggingface/transformers.git !pip asennus -q git+https://github.com/patil-suraj/vqgan-jax.git !pip asennus -q git +https://github.com/borisdayma/dalle-mini.git
Ladataan DALL-E-minimallia ja tokenisaattoria
from dalle_mini import DalleBart, DalleBartProcessor from vqgan_jax.modeling_flax_vqgan import VQModel from transformers import CLIPProcessor, FlaxCLIPModel DALLE_MODEL = “dalle-mini/dalle-mini/wzoooa1c:latest” DALLE_COMMIT_AN1 =-RE_qvgan1 ” 6_16384″ VQGAN_COMMIT_ID = “e93a26e7707683d349bf5d5c41c5b0ef69b677a9” CLIP_REPO = “openai/clip-vit-large-patch14” CLIP_COMMIT_ID = Ei mitään mallia = DalleBart.from_pretrained(DALLE_MODEL, versio=DALLE_COMMIT_ID) vqgan = VQModel.from_pretrained(VQGAN_REPO) IP_REPO, versio= CLIP_COMMIT_ID) clip_processor = CLIPProcessor.from_pretrained(CLIP_REPO, versio=CLIP_COMMIT_ID)
Vqgan-malli luo tunnukset kuvaukselle ja kuville ja Clip-malli laskee luodun kuvan pisteet. Tässä Wandb API:ta käytetään, tarvitset tämän API:n käyttämiseen avaimen, joka voidaan helposti luoda

Kuvan kuvauksen määrittäminen
Ottamalla kaksi erilaista kuvakuvausta, joista toinen on monimutkainen ja toinen vähemmän monimutkainen mallin suorituskyvyn ymmärtämiseksi.
descript = “Koira vaatteissa” tokenized_prompt = prosessori([descript]) tokenized_prompt = replikoida(tokenized_prompt) descript_1 = “Maa avaruudesta” tokenized_prompt_1 = prosessori([descript_1]) tokenized_prompt_1 = replikoi(tokenized_prompt_1)
Luodaan kuvaa
osoitteesta flax.training.common_utils import shard_prng_key tuonti numpy as np from PIL tuonti Kuva tqdm.notebookista tuonti trange n_predictions = 10 gen_top_k = Ei mitään gen_top_p = Ei lämpötila = 0,85 cond_scale = 3,0 kuvaa = []
for i in trange(max(n_predictions // jax.device_count(), 1)): avain, aliavain = jax.random.split(avain) encoded_images = p_generate( tokenized_prompt, shard_prng_key(subkey), model.params, gen_top_k, gen_top_p , lämpötila, cond_scale, ) encoded_images = encoded_images.sequences[…, 1:]
dekoodaus (img * 255, dtype=np.uint8)))
Näytä kuva ja pisteet
print(f”Kehote: {descript}\n”) idx:lle logits.argsort()[::-1]: näyttö (kuvat[idx]) print(f”Pistemäärä: {logits[idx]:.2f}\n”)

Tässä on kaksi esimerkkiä kuvista, jotka on luotu kymmenestä ennustuksesta, ja voimme sanoa, että se muistuttaa melko paljon tekstikuvausta.
Katsotaanpa toinen kuvaus vähemmän monimutkaisena.

Joten kun monimutkaisuus vähenee, syntyy parempia kuvia.
Viimeiset sanat
Zero-Shot Learning -toteutus tekstistä kuvaksi -luonnissa on osoittautunut todella loistavaksi ratkaisuksi kuvien synteesin aikana kohtaamiin haasteisiin. Mallit on koulutettu vähemmällä datalla ja kuvien ennustettavuus on erinomainen. Tämä artikkeli tarjoaa tietoa ZSL:stä ja siitä, miten sitä käytetään kuvien syntetisoimiseen tekstikuvauksista, sekä teorian toteutuksen pythonissa. Voit kokeilla tätä alla linkitetyillä koodeilla.