Hienosäädä tekstistä kuvaksi Stable Diffusion -malleja Amazon SageMaker JumpStart -sovelluksella

Hienosäädä tekstistä kuvaksi Stable Diffusion -malleja Amazon SageMaker JumpStart -sovelluksella

Lähdesolmu: 1968900

Marraskuussa 2022 me ilmoitti jolla AWS-asiakkaat voivat luoda kuvia tekstistä Vakaa diffuusio malleja Amazon SageMaker JumpStart. Stable Diffusion on syväoppimismalli, jonka avulla voit luoda realistisia, korkealaatuisia kuvia ja upeaa taidetta muutamassa sekunnissa. Vaikka vaikuttavien kuvien luomista voidaan käyttää teollisuudenaloilla taiteesta NFT:hen ja muillakin aloilla, odotamme nykyään myös tekoälyn olevan personoitavissa. Tänään ilmoitamme, että voit mukauttaa kuvanluontimallin käyttötapauksiisi hienosäätämällä sitä mukautetussa tietojoukossasi Amazon SageMaker JumpStart. Tästä voi olla hyötyä luotaessa taidetta, logoja, mukautettuja malleja, NFT:itä ja niin edelleen tai hauskoja juttuja, kuten luotaessa mukautettuja tekoälykuvia lemmikeistäsi tai avatareja itsestäsi.

Tässä viestissä annamme yleiskatsauksen Stable Diffusion -mallin hienosäätämiseen kahdella tavalla: ohjelmallisesti JumpStart API:t saatavana SageMaker Python SDK, ja JumpStartin käyttöliittymä (UI). Amazon SageMaker Studio. Keskustelemme myös siitä, kuinka tehdä suunnitteluvalintoja, mukaan lukien tietojoukon laatu, koulutustietojoukon koko, hyperparametriarvojen valinta ja soveltuvuus useisiin tietojoukkoon. Lopuksi käsittelemme JumpStartissa äskettäin lisättyä yli 80 julkisesti saatavilla olevaa hienosäädettyä mallia eri syöttökielillä ja -tyyleillä.

Vakaa diffuusio- ja siirtooppiminen

Stable Diffusion on tekstistä kuvaksi -malli, jonka avulla voit luoda fotorealistisia kuvia pelkästä tekstikehotteesta. Diffuusiomalli harjoittelee oppimalla poistamaan todelliseen kuvaan lisättyä kohinaa. Tämä kohinanpoistoprosessi luo realistisen kuvan. Nämä mallit voivat myös luoda kuvia pelkästä tekstistä ehdoittamalla generointiprosessin tekstiin. Esimerkiksi Stable Diffusion on piilevä diffuusio, jossa malli oppii tunnistamaan muodot puhtaassa kohinakuvassa ja tuo muodot vähitellen tarkennetuksi, jos muodot vastaavat syöttötekstin sanoja. Teksti on ensin upotettava piilevään tilaan kielimallin avulla. Sitten suoritetaan sarja kohinan lisäys- ja kohinanpoistotoimenpiteitä piilevässä tilassa U-Net-arkkitehtuurilla. Lopuksi kohinaton lähtö dekoodataan pikselitilaan.

Koneoppimisessa (ML) kutsutaan kykyä siirtää alueelta opittua tietoa toiselle siirrä oppimista. Voit käyttää siirtooppimista tuottaaksesi tarkkoja malleja pienemmille tietojoukoillesi paljon alhaisemmilla koulutuskustannuksilla kuin alkuperäisen mallin koulutuksessa. Siirtooppimisen avulla voit hienosäätää vakaan diffuusiomallin omassa tietojoukossasi jopa viidellä kuvalla. Vasemmalla ovat esimerkiksi harjoituskuvat Doppler-nimisestä koirasta, jota käytetään mallin hienosäätämiseen, keskellä ja oikealla ovat kuvat, jotka hienosäädetyt mallit ovat luoneet, kun pyydetään ennustamaan Doppler-kuvaa rannalla ja lyijykynäluonnos.

Vasemmalla on kuvat mallin hienosäätämiseen käytetystä valkoisesta tuolista ja hienosäädetyn mallin tuottama kuva tuolista punaisella. Oikealla on kuvia ottomaaneista, joita käytetään mallin hienosäätämiseen, ja kuva kissasta, joka istuu ottomaanien päällä.

Suurten mallien, kuten Stable Diffusion, hienosäätö edellyttää yleensä koulutusohjelmien toimittamista. On monia ongelmia, mukaan lukien muistin loppumiseen liittyvät ongelmat, hyötykuorman kokoon liittyvät ongelmat ja paljon muuta. Lisäksi sinun on suoritettava päästä päähän -testejä varmistaaksesi, että komentosarja, malli ja haluttu ilmentymä toimivat yhdessä tehokkaasti. JumpStart yksinkertaistaa tätä prosessia tarjoamalla käyttövalmiita komentosarjoja, jotka on testattu vankasti. JumpStart-hienosäätöskripti Stable Diffusion -malleille perustuu hienosäätöskriptiin unelmakoppi. Voit käyttää näitä komentosarjoja yhdellä napsautuksella Studio-käyttöliittymän kautta tai vain harvoilla koodiriveillä JumpStart API:t.

Huomaa, että käyttämällä Stable Diffusion -mallia hyväksyt CreativeML Open RAIL++-M -lisenssi.

Käytä JumpStartia ohjelmallisesti SageMaker SDK:n kanssa

Tässä osiossa kuvataan, kuinka mallia koulutetaan ja otetaan käyttöön SageMaker Python SDK. Valitsemme JumpStartissa sopivan esikoulutetun mallin, koulutamme tämän mallin SageMaker-koulutustyön avulla ja otamme koulutetun mallin käyttöön SageMaker-päätepisteeseen. Lisäksi teemme päätelmiä käyttöönotetusta päätepisteestä käyttäen SageMaker Python SDK:ta. Seuraavat esimerkit sisältävät koodinpätkät. Katso täydellinen koodi ja kaikki tämän esittelyn vaiheet kohdasta Johdatus JumpStartiin – tekstistä kuvaksi muistikirja esimerkkinä.

Harjoittele ja hienosäädä Stable Diffusion -mallia

Jokainen malli tunnistetaan yksilöllisesti model_id. Seuraava koodi näyttää kuinka hienosäätää Stable Diffusion 2.1 -perusmallia, jonka tunnistaa model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base mukautetussa harjoitustietojoukossa. Täydellinen luettelo model_id arvot ja mitkä mallit ovat hienosäädettävissä, katso Sisäänrakennetut algoritmit esiopetetulla mallitaulukolla. Jokaiselle model_id, aloittaakseen SageMaker-koulutustyön arviointityökalu SageMaker Python SDK:n luokkaa, sinun on noudettava Docker-kuvan URI, koulutusohjelman URI ja esikoulutettu mallin URI SageMakerin aputoimintojen kautta. Harjoituskomentosarjan URI sisältää kaiken tarvittavan koodin tietojen käsittelyyn, esiopetetun mallin lataamiseen, mallin harjoitteluun ja opetetun mallin tallentamiseen päätelmiä varten. Esiopetettu mallin URI sisältää esiopetetun malliarkkitehtuurin määritelmän ja malliparametrit. Valmiiksi koulutettu mallin URI on tietty mallikohtainen. Valmiiksi koulutetut mallitarballit on ladattu valmiiksi Hugging Facesta ja tallennettu sopivalla mallin allekirjoituksella Amazonin yksinkertainen tallennuspalvelu (Amazon S3) kauhoja, jotta koulutustyö suoritetaan verkkoeristettynä. Katso seuraava koodi:

from sagemaker import image_uris, model_uris, script_uris # Currently, not all the stable diffusion models in jumpstart support finetuning. Thus, we manually select a model
# which supports finetuning.
train_model_id, train_model_version, train_scope = ( "model-txt2img-stabilityai-stable-diffusion-v2-1-base", "*", "training",
) # Tested with ml.g4dn.2xlarge (16GB GPU memory) and ml.g5.2xlarge (24GB GPU memory) instances. Other instances may work as well.
# If ml.g5.2xlarge instance type is available, please change the following instance type to speed up training.
training_instance_type = "ml.g4dn.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve(
region=None,
framework=None, # automatically inferred from model_id
model_id=train_model_id,
model_version=train_model_version,
image_scope=train_scope,
instance_type=training_instance_type,
) # Retrieve the training script. This contains all the necessary files including data processing, model training etc.
train_source_uri = script_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
) # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(
model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
)

Näiden mallikohtaisten harjoitusartefaktien avulla voit rakentaa objektin arviointityökalu luokka:

# Create SageMaker Estimator instance
sd_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", # Entry-point file in source_dir and present in train_source_uri. instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, base_job_name=training_job_name,
) # Launch a SageMaker Training job by passing s3 path of the training data
sd_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Koulutuksen tietojoukko

Seuraavassa on ohjeet harjoitustietojen muotoiluun:

  • panos - Hakemisto, joka sisältää ilmentymäkuvat, dataset_info.json, seuraavalla kokoonpanolla:
    • Kuvat voivat olla .png-, .jpg- tai .jpeg-muodossa
    • - dataset_info.json tiedoston on oltava muodossa {'instance_prompt':<<instance_prompt>>}
  • ulostulo – Koulutettu malli, jota voidaan käyttää johtopäätösten tekemiseen

S3-polun pitäisi näyttää tältä s3://bucket_name/input_directory/. Huomaa jälki / vaaditaan.

Seuraavassa on esimerkkimuoto harjoitustiedoista:

input_directory |---instance_image_1.png |---instance_image_2.png |---instance_image_3.png |---instance_image_4.png |---instance_image_5.png |---dataset_info.json

Katso osiosta ohjeet tietojen muotoiluun käyttämällä aikaisempaa säilytystä Aiempi säilytys tässä viestissä.

Tarjoamme oletustietojoukon kissakuvista. Se koostuu kahdeksasta kuvasta (instanssikuvat vastaavat ilmentymäkehotetta) yhdestä kissasta ilman luokkakuvia. Sen voi ladata osoitteesta GitHub. Jos käytät oletustietojoukkoa, kokeile "valokuva riobugger-kissasta" -kehotetta samalla kun teet päätelmiä esittelymuistikirjassa.

lisenssi: MIT.

hyperparametrien

Seuraavaksi sinun on ehkä muutettava harjoitushyperparametrien oletusarvoja, jotta voit siirtää mukautetun tietojoukon oppimista. Voit hakea Python-sanakirjan näistä hyperparametreista niiden oletusarvoineen soittamalla hyperparameters.retrieve_default, päivitä ne tarvittaessa ja välitä ne sitten Estimator-luokkaan. Katso seuraava koodi:

from sagemaker import hyperparameters
# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
model_id=train_model_id, model_version=train_model_version
) # [Optional] Override default hyperparameters with custom values
hyperparameters["max_steps"] = "400"

Hienosäätöalgoritmi tukee seuraavia hyperparametrejä:

  • aiemman_säilytyksen kanssa – Lippu lisätäksesi aiemman säilytyshäviön. Aikaisempi säilöntä on tasausaine, joka välttää liiallisen sovituksen. (Vaihtoehdot: [“True”,“False”], oletus: “False”.)
  • luokkakuvien_määrä – Vähimmäisluokan kuvat aiemman säilytyshäviön vuoksi. Jos with_prior_preservation = True eikä siinä ole jo tarpeeksi kuvia class_data_dir, lisäkuvista otetaan näytteitä class_prompt. (Arvot: positiivinen kokonaisluku, oletus: 100.)
  • Aikakausia – Kulkujen määrä, jonka hienosäätöalgoritmi suorittaa harjoitustietojoukon läpi. (Arvot: positiivinen kokonaisluku, oletus: 20.)
  • Max_steps – Suoritettavien harjoitusvaiheiden kokonaismäärä. Jos ei None, ohittaa aikakaudet. (Arvot: “None” tai kokonaislukujono, oletus: “None”.)
  • Erän koko –: Harjoitteluesimerkkien määrä, jotka on käsitelty ennen mallin painojen päivittämistä. Sama kuin eräkoko luokan kuvien luonnin aikana, jos with_prior_preservation = True. (Arvot: positiivinen kokonaisluku, oletus: 1.)
  • oppimisnopeus – Nopeus, jolla mallin painot päivitetään jokaisen harjoitusesimerkkierän käsittelyn jälkeen. (Arvot: positiivinen float, oletus: 2e-06.)
  • aiempi_tappio_paino – Aiemman säilöntähäviön paino. (Arvot: positiivinen float, oletus: 1.0.)
  • center_crop – Rajataanko kuvat ennen koon muuttamista haluttuun resoluutioon. (Vaihtoehdot: [“True”/“False”], oletus: “False”.)
  • lr_scheduler – Oppimisnopeuden ajastimen tyyppi. (Vaihtoehdot: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"], oletus: "constant".) Katso lisätietoja Oppimisnopeuden ajoitusohjelmat.
  • adam_weight_decay – Kaikkiin kerroksiin sovellettava painon vaimennus (jos ei nolla) paitsi kaikki poikkeamat ja LayerNorm painot sisään AdamW optimoija. (Arvo: float, oletus: 1e-2.)
  • adam_beta1 – Beta1-hyperparametri (eksponentiaalinen vaimenemisnopeus ensimmäisen hetken arvioita varten) AdamW optimoija. (Arvo: float, oletus: 0.9.)
  • adam_beta2 – Beta2-hyperparametri (eksponentiaalinen vaimenemisnopeus ensimmäisen hetken arvioita varten) AdamW optimoija. (Arvo: float, oletus: 0.999.)
  • adam_epsilon - epsilon hyperparametri AdamW optimoija. Se asetetaan yleensä pieneksi, jotta vältetään jako nollalla. (Arvo: float, oletus: 0e-1.)
  • gradient_accumulation_steps – Keräävien päivitysvaiheiden määrä ennen taaksepäin/päivityspassin suorittamista. (Arvo: kokonaisluku, oletus: 1.)
  • max_grad_norm – Kaltevuuden enimmäisnormi (kaltevuusleikkaukselle). (Arvo: float, oletus: 1.0.)
  • siemenet – Korjaa satunnainen tila toistettavien tulosten saavuttamiseksi harjoittelussa. (Arvo: kokonaisluku, oletus: 0.)

Ota käyttöön hienosti koulutettu malli

Kun mallin koulutus on valmis, voit ottaa mallin suoraan käyttöön pysyvään, reaaliaikaiseen päätepisteeseen. Haemme tarvittavat Docker Image URI:t ja komentosarjan URI:t ja otamme mallin käyttöön. Katso seuraava koodi:

inference_instance_type = "ml.g4dn.2xlarge" # Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=train_model_id, model_version=train_model_version, instance_type=inference_instance_type,
) # Retrieve the inference script uri. This includes scripts for model loading, inference handling etc.
deploy_source_uri = script_uris.retrieve( model_id=train_model_id, model_version=train_model_version, script_scope="inference"
) # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = sd_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

Vasemmalla ovat riobugger-nimisen kissan harjoituskuvat, joita käytetään mallin hienosäätämiseen (oletusparametrit paitsi max_steps = 400). Keskellä ja oikealla ovat kuvat, jotka on luotu hienosäädetyllä mallilla, kun häntä pyydetään ennustamaan riobuggerin kuva rannalla ja lyijykynäluonnos.

Lisätietoja päättelystä, mukaan lukien tuetut parametrit, vastausmuoto ja niin edelleen, on kohdassa Luo kuvia tekstistä Amazon SageMaker JumpStartin vakaalla diffuusiomallilla.

Käytä JumpStartia Studion käyttöliittymän kautta

Tässä osiossa esittelemme, kuinka JumpStart-malleja koulutetaan ja otetaan käyttöön Studio-käyttöliittymän kautta. Seuraava video näyttää, kuinka löydät esikoulutetun Stable Diffusion -mallin JumpStartista, harjoittelet sen ja otat sen sitten käyttöön. Mallisivulla on arvokasta tietoa mallista ja sen käytöstä. Kun olet määrittänyt SageMaker-koulutusesiintymän, valitse Juna. Kun malli on koulutettu, voit ottaa koulutetun mallin käyttöön valitsemalla Sijoittaa. Kun päätepiste on "palvelussa"-vaiheessa, se on valmis vastaamaan päättelypyyntöihin.

Päätelmän tekemiseen kuluvan ajan nopeuttamiseksi JumpStart tarjoaa mallimuistikirjan, joka näyttää, kuinka johtopäätös suoritetaan äskettäin luodulle päätepisteelle. Voit käyttää muistikirjaa Studiossa valitsemalla Avaa Muistikirja vuonna Käytä Endpointia Studiosta mallin päätepistesivun osio.

JumpStart tarjoaa myös yksinkertaisen muistikirjan, jonka avulla voit hienosäätää vakaan diffuusiomallin ja ottaa käyttöön tuloksena olevan hienosäädetyn mallin. Voit käyttää sitä luomaan hauskoja kuvia koirastasi. Pääset muistikirjaan etsimällä JumpStart-hakupalkista "Luo hauskoja kuvia koirastasi". Muistikirjan suorittamiseen voit käyttää vain viittä harjoituskuvaa ja ladata ne paikalliseen studiokansioon. Jos sinulla on enemmän kuin viisi kuvaa, voit myös ladata ne. Notebook lataa harjoituskuvat S3:een, kouluttaa mallin tietojoukossasi ja ottaa tuloksena olevan mallin käyttöön. Harjoittelu voi kestää 20 minuuttia. Voit muuttaa vaiheiden määrää nopeuttaaksesi harjoittelua. Muistikirja tarjoaa joitain esimerkkikehotteita, joita voit kokeilla käyttöönotetun mallin kanssa, mutta voit kokeilla mitä tahansa kehotteita, joista haluat. Voit myös mukauttaa muistikirjan luomaan avatareja itsestäsi tai lemmikkieläimistäsi. Voit esimerkiksi ladata koirasi sijaan kuvia kissastasi ensimmäisessä vaiheessa ja muuttaa sitten kehotteet koirista kissoiksi, jolloin malli luo kuvia kissastasi.

Hienosäätönäkökohdat

Koulutus Stable Diffusion -malleilla on taipumus ylisovittaa nopeasti. Hyvälaatuisten kuvien saamiseksi meidän on löydettävä hyvä tasapaino käytettävissä olevien harjoitushyperparametrien, kuten harjoitusvaiheiden lukumäärän ja oppimisnopeuden välillä. Tässä osiossa näytämme joitain kokeellisia tuloksia ja annamme ohjeita näiden parametrien asettamiseen.

Suositukset

Harkitse seuraavia suosituksia:

  • Aloita laadukkaista harjoituskuvista (4–20). Jos harjoittelet ihmisten kasvoilla, saatat tarvita lisää kuvia.
  • Harjoittele 200–400 askelta, kun harjoittelet koirilla tai kissoilla ja muilla ei-ihmisillä. Jos harjoittelet ihmisten kasvoilla, saatat tarvita lisää vaiheita. Jos yliasennusta tapahtuu, vähennä askelmien määrää. Jos alasovitus tapahtuu (hienossäädetty malli ei pysty luomaan kohdekuvaa), lisää vaiheiden määrää.
  • Jos harjoittelet ei-ihmiskasvot, voit asettaa with_prior_preservation = False koska se ei vaikuta merkittävästi suorituskykyyn. Sinun on ehkä asetettava ihmisten kasvoille with_prior_preservation=True.
  • Jos asetus with_prior_preservation=True, käytä ml.g5.2xlarge ilmentymätyyppiä.
  • Harjoitettaessa useita aiheita peräkkäin, jos aiheet ovat hyvin samankaltaisia ​​(esimerkiksi kaikki koirat), malli säilyttää viimeisen kohteen ja unohtaa edelliset. Jos kohteet ovat erilaisia ​​(esimerkiksi ensin kissa ja sitten koira), malli säilyttää molemmat kohteet.
  • Suosittelemme käyttämään alhaista oppimisnopeutta ja lisäämään vaiheiden määrää asteittain, kunnes tulokset ovat tyydyttäviä.

Koulutuksen tietojoukko

Hienosäädetyn mallin laatuun vaikuttaa suoraan harjoituskuvien laatu. Siksi sinun on kerättävä korkealaatuisia kuvia saadaksesi hyviä tuloksia. Epäselvät tai matalaresoluutioiset kuvat vaikuttavat hienosäädetyn mallin laatuun. Muista seuraavat lisäparametrit:

  • Harjoituskuvien määrä – Voit hienosäätää mallia vain neljällä harjoituskuvalla. Kokeilimme koulutustietojoukkoja, joiden koko oli vain 4 ja 16 kuvaa. Molemmissa tapauksissa hienosäätö pystyi mukauttamaan mallin kohteeseen.
  • Tietojoukkomuodot – Testasimme hienosäätöalgoritmia .png-, .jpg- ja .jpeg-muotoisille kuville. Myös muut muodot voivat toimia.
  • Kuvan resoluutio – Harjoituskuvien resoluutio voi olla mikä tahansa. Hienosäätöalgoritmi muuttaa kaikkien harjoituskuvien kokoa ennen hienosäädön aloittamista. Tästä huolimatta, jos haluat hallita paremmin harjoituskuvien rajaamista ja koon muuttamista, suosittelemme kuvien koon muuttamista itse mallin perusresoluutioon (tässä esimerkissä 512 × 512 pikseliä).

Kokeiluasetukset

Tämän viestin kokeessa käytämme hienosäädön aikana hyperparametrien oletusarvoja, ellei sitä ole määritetty. Lisäksi käytämme yhtä neljästä tietojoukosta:

  • Koira 1-8 – Koira 1, 8 kuvaa
  • Koira 1-16 – Koira 1, 16 kuvaa
  • Koira 2-4 – Koira 2 neljällä kuvalla
  • Kissa-8 – Kissa 8 kuvalla

Sotkuisuuden vähentämiseksi näytämme vain yhden edustavan kuvan tietojoukosta kussakin osiossa tietojoukon nimen kanssa. Löydät koko harjoitussarjan osiosta Kokeilutietojoukot tässä viestissä.

overfitting

Stable Diffusion -mallit sopivat yleensä yli, kun hienosäädetään muutamaa kuvaa. Siksi sinun on valittava parametrit, kuten epochs, max_epochs, ja oppimisnopeus huolellisesti. Tässä osiossa käytimme Dog1-16-tietojoukkoa.

Mallin suorituskyvyn arvioimiseksi arvioimme hienosäädetyn mallin neljään tehtävään:

  • Voiko hienosäädetyllä mallilla luoda kuvia kohteesta (Doppler-koira) samassa ympäristössä, jossa se on koulutettu?
    • Havainto - Kyllä se voi. On syytä huomata, että mallin suorituskyky kasvaa harjoitusvaiheiden määrän myötä.
  • Voiko hienosäädetyllä mallilla luoda kuvia kohteesta eri ympäristössä kuin se on opetettu? Voiko se esimerkiksi luoda kuvia Dopplerista rannalla?
    • Havainto - Kyllä se voi. On syytä huomata, että mallin suorituskyky kasvaa harjoitusvaiheiden määrän myötä tiettyyn pisteeseen asti. Jos mallia koulutetaan liian pitkään, mallin suorituskyky kuitenkin heikkenee, koska mallilla on taipumus ylisovittua.
  • Voiko hienosäädetyllä mallilla luoda kuvia luokasta, johon koulutusaine kuuluu? Voiko se esimerkiksi luoda kuvan yleisestä koirasta?
    • Havainto – Kun lisäämme harjoitusaskeleiden määrää, malli alkaa istua yli. Tämän seurauksena se unohtaa koiran yleisen luokan ja tuottaa vain aiheeseen liittyviä kuvia.
  • Voiko hienosäädetyllä mallilla luoda kuvia luokasta tai aineesta, joka ei ole koulutustietojoukossa? Voiko se esimerkiksi luoda kuvan kissasta?
    • Havainto – Kun lisäämme harjoitusaskeleiden määrää, malli alkaa istua yli. Tämän seurauksena se tuottaa vain aiheeseen liittyviä kuvia määritetystä luokasta riippumatta.

Hienosäädämme mallia eri askelmäärälle (asettamalla max_steps hyperparametrit) ja kullekin hienosäädetylle mallille luomme kuvia jokaiselle seuraavista neljästä kehotuksesta (näkyy seuraavissa esimerkeissä vasemmalta oikealle:

  • "Kuva Doppler-koirasta"
  • "Kuva Doppler-koirasta rannalla"
  • "Kuva koirasta"
  • "Kuva kissasta"

Seuraavat kuvat ovat mallista, joka on koulutettu 50 askeleella.

Seuraava malli harjoitettiin 100 askeleella.

Harjoittelimme seuraavan mallin 200 askelta.

Seuraavat kuvat ovat mallista, joka on koulutettu 400 askeleen.

Lopuksi, seuraavat kuvat ovat tulosta 800 vaiheesta.

Harjoittele useita tietojoukkoja

Hienosäädön aikana saatat haluta hienosäätää useita kohteita ja antaa hienosäädetyn mallin luoda kuvia kaikista kohteista. Valitettavasti JumpStart rajoittuu tällä hetkellä yhden aiheen koulutukseen. Mallia ei voi hienosäätää useille aiheille samanaikaisesti. Lisäksi mallin hienosäätäminen eri kohteille peräkkäin johtaa siihen, että malli unohtaa ensimmäisen kohteen, jos kohteet ovat samanlaisia.

Käsittelemme tässä osiossa seuraavia kokeita:

  1. Hienosäädä mallia aihetta A varten.
  2. Hienosäädä tuloksena oleva malli vaiheesta 1 aiheelle B.
  3. Luo kuvia kohteesta A ja aihe B käyttämällä vaiheen 2 tulosmallia.

Seuraavissa kokeissa havaitsemme, että:

  • Jos A on koira 1 ja B on koira 2, kaikki vaiheessa 3 luodut kuvat muistuttavat koiraa 2
  • Jos A on koira 2 ja B on koira 1, kaikki vaiheessa 3 luodut kuvat muistuttavat koiraa 1
  • Jos A on koira 1 ja B on kissa, koirakehotteilla luodut kuvat muistuttavat koiraa 1 ja kissan kehotteilla luodut kuvat kissaa

Harjoittele koiralla 1 ja sitten koiralla 2

Vaiheessa 1 hienosäädämme mallia 200 askeleen verran kahdeksalla koiran 1 kuvalla. Vaiheessa 2 hienosäädämme mallia edelleen 200 askelta neljässä koiran 2 kuvassa.

Seuraavat ovat kuvat, jotka on luotu hienosäädetyllä mallilla vaiheen 2 lopussa eri kehotteita varten.

Harjoittele koiralla 2 ja sitten koiralla 1

Vaiheessa 1 hienosäädämme mallia 200 askelta neljällä koiran 2 kuvalla. Vaiheessa 2 hienosäädämme mallia edelleen 200 askeleen verran kahdeksassa koiran 1 kuvassa.

Seuraavat ovat kuvat, jotka on luotu hienosäädetyllä mallilla vaiheen 2 lopussa erilaisilla kehotteilla.

Harjoittele koirilla ja kissoilla

Vaiheessa 1 hienosäädämme mallia 200 askeleen verran kahdeksalla kissan kuvalla. Sitten hienosäädämme mallia edelleen 200 askeleen verran kahdeksalla koiran 1 kuvalla.

Seuraavat ovat kuvat, jotka on luotu hienosäädetyllä mallilla vaiheen 2 lopussa. Kuvat, joissa on kissaan liittyviä kehotteita, näyttävät hienosäädön vaiheessa 1 olevalta kissalta, ja kuvat, joissa on koiraan liittyviä kehotteita, näyttävät koiralta. Hienosäädön vaihe 2.

Säilytys etukäteen

Aiempi säilytys on tekniikka, joka käyttää lisäkuvia samasta luokasta, jota yritämme harjoitella. Jos koulutusdata koostuu esimerkiksi tietyn koiran kuvista, jotka on säilytetty etukäteen, sisällytämme luokkakuvia yleisistä koirista. Se yrittää välttää liiallista istuvuutta näyttämällä kuvia eri koirista, kun se harjoittelee tiettyä koiraa. Luokkakehotteesta puuttuu tunniste, joka ilmaisee esiintymäkehotteessa olevan tietyn koiran. Esim. kehote voi olla esimerkiksi "kuva riobugger-kissasta" ja luokkakehote voi olla "valokuva kissasta". Voit ottaa käyttöön aiemman säilytyksen asettamalla hyperparametrin with_prior_preservation = True. Jos asetus with_prior_preservation = True, sinun on sisällytettävä class_prompt in dataset_info.json ja se voi sisältää käytettävissäsi olevia luokkakuvia. Seuraava on harjoitustietojoukon muoto määritettäessä with_prior_preservation = True:

  • panos - Hakemisto, joka sisältää ilmentymäkuvat, dataset_info.json ja (valinnainen) hakemisto class_data_dir. Huomaa seuraavat asiat:
    • Kuvat voivat olla .png-, .jpg- tai .jpeg-muodossa.
    • - dataset_info.json tiedoston on oltava muodossa {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    • - class_data_dir hakemistossa on oltava luokkakuvat. Jos class_data_dir ei ole läsnä tai siinä ei ole jo tarpeeksi kuvia class_data_dir, lisäkuvista otetaan näytteitä class_prompt.

Tietojoukkojen, kuten kissojen ja koirien, osalta ennakkosäilytys ei vaikuta merkittävästi hienosäädetyn mallin suorituskykyyn, ja siksi se voidaan välttää. Tämä on kuitenkin välttämätöntä kasvoja harjoitellessa. Lisätietoja on kohdassa Harjoittele vakaata diffuusiota Dreamboothilla diffuusereilla.

Ilmentymien tyypit

Hienosäätö Stable Diffusion -mallit vaativat kiihdytettyä laskentaa GPU-tuettujen ilmentymien tarjoamana. Kokeilemme hienosäätöämme ml.g4dn.2xlarge (16 Gt CUDA-muisti, 1 GPU) ja ml.g5.2xlarge (24 Gt CUDA-muisti, 1 GPU) -esiintymillä. Muistin tarve on korkeampi luotaessa luokkakuvia. Siksi, jos asetus with_prior_preservation=True, käytä ml.g5.2xlarge ilmentymän tyyppiä, koska harjoittelu törmää ml.g4dn.2xlarge ilmentymän CUDA:n muisti loppuu -ongelmaan. JumpStart-hienosäätöskripti käyttää tällä hetkellä yhtä GPU:ta, ja siksi usean GPU:n esiintymien hienosäätö ei tuota suorituskykyä. Lisätietoja eri instanssityypeistä on kohdassa Amazon EC2-instanssityypit.

Rajoitukset ja ennakkoluulot

Vaikka Stable Diffusionilla on vaikuttava suorituskyky kuvien luomisessa, se kärsii useista rajoituksista ja harhoista. Näitä ovat muun muassa:

  • Malli ei välttämättä luo tarkkoja kasvoja tai raajoja, koska harjoitustiedot eivät sisällä riittävästi kuvia näillä ominaisuuksilla
  • Malli on koulutettu LAION-5B tietojoukko, joka sisältää vain aikuisille suunnattua sisältöä ja joka ei välttämättä sovellu tuotteen käyttöön ilman lisähuomiota
  • Malli ei välttämättä toimi hyvin muiden kuin englannin kielten kanssa, koska malli on koulutettu englanninkielisellä tekstillä
  • Malli ei voi luoda hyvää tekstiä kuviin

Katso lisätietoja rajoituksista ja harhasta Stable Diffusion v2-1-base mallikortti. Nämä esikoulutetun mallin rajoitukset voivat koskea myös hienosäädettyjä malleja.

Puhdistaa

Kun olet lopettanut muistikirjan käyttämisen, muista poistaa kaikki prosessin aikana luodut resurssit varmistaaksesi, että laskutus pysäytetään. Koodi päätepisteen puhdistamiseksi on annettu liitetyssä Johdatus JumpStartiin – tekstistä kuvaksi muistikirja esimerkkinä.

Julkisesti saatavilla hienosäädetyt mallit JumpStartissa

Vaikka Stable Diffusion -mallit julkaisi VakausAI on vaikuttava suorituskyky, niillä on rajoituksia sen kielen tai toimialueen suhteen, jolla se on koulutettu. Esimerkiksi Stable Diffusion -mallit opetettiin englanninkielisestä tekstistä, mutta saatat joutua luomaan kuvia ei-englanninkielisestä tekstistä. Vaihtoehtoisesti Stable Diffusion -malleja koulutettiin luomaan fotorealistisia kuvia, mutta saatat joutua luomaan animoituja tai taiteellisia kuvia.

JumpStart tarjoaa yli 80 julkisesti saatavilla olevaa mallia eri kielillä ja teemoilla. Nämä mallit ovat usein hienosäädettyjä versioita StabilityAI:n julkaisemista Stable Diffusion -malleista. Jos käyttötapauksesi sopii yhteen hienosäädetyn mallin kanssa, sinun ei tarvitse kerätä omaa tietojoukkoasi ja hienosäätää sitä. Voit ottaa yhden näistä malleista yksinkertaisesti käyttöön Studio-käyttöliittymän kautta tai käyttämällä helppokäyttöisiä JumpStart-sovellusliittymiä. Jos haluat ottaa esikoulutetun Stable Diffusion -mallin käyttöön JumpStartissa, katso Luo kuvia tekstistä Amazon SageMaker JumpStartin vakaalla diffuusiomallilla.

Seuraavassa on joitain esimerkkejä kuvista, jotka on luotu JumpStartissa saatavilla olevilla eri malleilla.

Huomaa, että näitä malleja ei ole hienosäädetty JumpStart- tai DreamBooth-skripteillä. Voit ladata täydellisen luettelon julkisesti saatavilla olevista hienosäädetyistä malleista esimerkkikehotteineen osoitteesta tätä.

Lisää esimerkkikuvia näistä malleista, katso kohta Avoimen lähdekoodin hienosäädetyt mallit liitteessä.

Yhteenveto

Tässä viestissä näytimme kuinka hienosäätää Stable Diffusion -mallia tekstistä kuvaksi ja ottaa se sitten käyttöön JumpStartin avulla. Lisäksi keskustelimme joistakin näkökohdista, jotka sinun tulee tehdä mallia hienosäätäessäsi ja kuinka se voi vaikuttaa hienosäädetyn mallin suorituskykyyn. Keskustelimme myös JumpStartissa saatavilla olevista yli 80 käyttövalmiista hienosäädetystä mallista. Tässä viestissä näytimme koodinpätkät – katso täydellinen koodi ja kaikki tämän esittelyn vaiheet Johdatus JumpStartiin – tekstistä kuvaksi esimerkkimuistikirja. Kokeile ratkaisua itse ja lähetä meille kommenttisi.

Saat lisätietoja mallista ja DreamBoothin hienosäädöstä seuraavista lähteistä:

Jos haluat lisätietoja JumpStartista, tutustu seuraaviin blogikirjoituksiin:


Tietoja Tekijät

Tohtori Vivek Madan on soveltuva tutkija Amazon SageMaker JumpStart -tiimin kanssa. Hän sai tohtorin tutkinnon Illinoisin yliopistosta Urbana-Champaignissa ja oli tutkijatohtorina Georgia Techissä. Hän on aktiivinen koneoppimisen ja algoritmisuunnittelun tutkija ja julkaissut julkaisuja EMNLP-, ICLR-, COLT-, FOCS- ja SODA-konferensseissa.

Heiko Hotz on tekoälyn ja koneoppimisen vanhempi ratkaisuarkkitehti, joka keskittyy erityisesti luonnollisen kielen käsittelyyn (NLP), suuriin kielimalleihin (LLM) ja generatiiviseen tekoälyyn. Ennen tätä tehtävää hän toimi Amazonin EU-asiakaspalvelun datatieteen johtajana. Heiko auttaa asiakkaitamme menestymään AI/ML-matkallaan AWS:ssä ja on työskennellyt organisaatioiden kanssa monilla toimialoilla, mukaan lukien vakuutus-, rahoitus-, media- ja viihde-, terveydenhuolto-, yleishyödylliset ja valmistusalat. Vapaa-ajallaan Heiko matkustaa niin paljon kuin mahdollista.


Liite: Kokeilutietojoukot

Tämä osio sisältää tämän viestin kokeissa käytetyt tietojoukot.

Koira 1-8

Koira 1-16

Koira 2-4

Koira 3-8

Liite: Avoimen lähdekoodin hienosäädetyt mallit

Seuraavassa on joitain esimerkkejä kuvista, jotka on luotu JumpStartissa saatavilla olevilla eri malleilla. Jokaiseen kuvaan on merkitty a model_id alkaa etuliitteellä huggingface-txt2img- jota seuraa kuvan luomiseen käytetty kehote seuraavalla rivillä.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen