Maalaa kuvat vakaalla diffuusiolla käyttämällä Amazon SageMaker JumpStart -ohjelmaa

Maalaa kuvat vakaalla diffuusiolla käyttämällä Amazon SageMaker JumpStart -ohjelmaa

Marraskuussa 2022 me ilmoitti jolla AWS-asiakkaat voivat luoda kuvia tekstistä Vakaa diffuusio käyttäviä malleja Amazon SageMaker JumpStart. Tänään olemme innoissamme voidessamme esitellä uuden ominaisuuden, jonka avulla käyttäjät voivat maalata kuvia Stable Diffusion -malleilla. Maalauksella tarkoitetaan prosessia, jossa osa kuvasta korvataan toisella kuvalla tekstikehotteen perusteella. Antamalla alkuperäisen kuvan, maskikuvan, joka hahmottelee korvattavan osan, ja tekstikehotteen, Stable Diffusion -malli voi tuottaa uuden kuvan, joka korvaa peitetyn alueen tekstikehotteessa kuvatulla objektilla, aiheella tai ympäristöllä.

Voit käyttää maalausta palauttaaksesi huonontuneet kuvat tai luodaksesi uusia kuvia, joissa on uusia aiheita tai tyylejä tietyissä osissa. Arkkitehtisuunnittelun alueella Stable Diffusion -maalausta voidaan soveltaa rakennuspiirustusten epätäydellisten tai vaurioituneiden alueiden korjaamiseen, mikä tarjoaa tarkat tiedot rakennusmiehistöille. Kliinisen MRI-kuvauksen yhteydessä potilaan pää on pidätettävä, mikä voi johtaa huonompiin tuloksiin, koska rajausartefakti aiheuttaa tietojen menetyksen tai heikentää diagnostista tarkkuutta. Kuvamaalaus voi tehokkaasti lieventää näitä epäoptimaalisia tuloksia.

Tässä viestissä esittelemme kattavan oppaan päättelyn käyttöönotosta ja suorittamisesta Stable Diffusion -maalausmallilla kahdella tavalla: JumpStartin käyttöliittymän (UI) kautta Amazon SageMaker Studio, ja ohjelmallisesti läpi JumpStart API:t saatavana SageMaker Python SDK.

Ratkaisun yleiskatsaus

Seuraavat kuvat ovat esimerkkejä maalauksesta. Alkuperäiset kuvat ovat vasemmalla, maskikuva keskellä ja mallin luoma maalattu kuva oikealla. Ensimmäisessä esimerkissä mallille annettiin alkuperäinen kuva, naamiokuva ja tekstikehote "valkoinen kissa, siniset silmät, villapaita pukeutunut, makaa puistossa" sekä negatiivinen kehote "huonosti piirretyt jalat. ” Toisessa esimerkissä tekstikehote oli "Naismalli esittelee kauniisti rennon pitkän mekon, jossa on sekoitus vaaleanpunaisia ​​ja sinisiä sävyjä."

Maalaa kuvat vakaalla diffuusiolla käyttämällä Amazon SageMaker JumpStart PlatoBlockchain Data Intelligenceä. Pystysuuntainen haku. Ai.

Suurten mallien, kuten Stable Diffusion, käyttäminen vaatii mukautettuja päättelykomentosarjoja. 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. Voit käyttää näitä komentosarjoja yhdellä napsautuksella Studion käyttöliittymän kautta tai vain harvoilla koodiriveillä JumpStart API:t.

Seuraavat osiot opastavat sinua mallin käyttöönotossa ja päättelyn suorittamisessa joko Studio-käyttöliittymän tai JumpStart-sovellusliittymien avulla.

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

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

Tässä osiossa kuvaamme JumpStart-mallien käyttöönottoa Studion käyttöliittymässä. Oheinen video osoittaa esikoulutetun Stable Diffusion -maalausmallin paikallistamisen JumpStartissa ja sen käyttöönoton. Mallisivulla on olennaisia ​​tietoja mallista ja sen käytöstä. Päätelmien suorittamiseen käytämme ml.p3.2xlarge-instanssityyppiä, joka tarjoaa tarvittavan GPU-kiihdytyksen alhaisen latenssin päättelyyn edulliseen hintaan. Kun SageMaker-isännöintiesiintymä on määritetty, valitse Sijoittaa. Päätepiste on toimintakuntoinen ja valmis käsittelemään johtopäätöspyyntöjä noin 10 minuutissa.

JumpStart tarjoaa mallimuistikirjan, joka voi auttaa nopeuttamaan vastikään luodun päätepisteen päättelyn suorittamiseen kuluvaa aikaa. Voit käyttää muistikirjaa Studiossa valitsemalla Avaa Muistikirja vuonna Käytä Endpointia Studiosta mallin päätepistesivun osio.

Käytä JumpStartia ohjelmallisesti SageMaker SDK:n kanssa

JumpStart-käyttöliittymän avulla voit ottaa esikoulutetun mallin käyttöön interaktiivisesti vain muutamalla napsautuksella. Vaihtoehtoisesti voit käyttää JumpStart-malleja ohjelmallisesti käyttämällä SageMaker Python SDK:han integroituja sovellusliittymiä.

Tässä osiossa valitsemme JumpStartissa sopivan esikoulutetun mallin, otamme tämän mallin käyttöön SageMaker-päätepisteeseen ja teemme päätelmiä käyttöönotetusta päätepisteestä käyttäen SageMaker Python SDK:ta. Seuraavat esimerkit sisältävät koodinpätkät. Saat täydellisen koodin ja kaikki tämän esittelyn vaiheet käsiksi kohdasta Johdatus JumpStart-kuvankäsittelyyn – Stable Diffusion Inpainting muistikirja esimerkkinä.

Ota esikoulutettu malli käyttöön

SageMaker käyttää Docker-säiliöitä erilaisiin rakennus- ja ajonaikaisiin tehtäviin. JumpStart käyttää SageMaker Deep Learning -säiliöt (DLC:t), jotka ovat kehyskohtaisia. Haemme ensin mahdolliset lisäpaketit sekä komentosarjat valitun tehtävän koulutusta ja päätelmiä varten. Sitten esiopetetut malliesineet haetaan erikseen model_uris, joka tarjoaa alustalle joustavuutta. Tämä mahdollistaa useiden esikoulutettujen mallien käytön yhdellä päättelykomentosarjalla. Seuraava koodi havainnollistaa tätä prosessia:

model_id, model_version = "model-inpainting-stabilityai-stable-diffusion-2-inpainting-fp16", "*"
# 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=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Seuraavaksi tarjoamme nämä resurssit a SageMaker malli esiintyy ja ota käyttöön päätepiste:

# Create the SageMaker model instance
# Create the SageMaker model instance
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # deploy the Model - note that we need to pass the Predictor class when we deploy the model through the Model class,
# in order to run inference through the SageMaker API
base_model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name,
)

Kun malli on otettu käyttöön, voimme saada siitä reaaliaikaisia ​​ennusteita!

panos

Syöte on peruskuva, maskikuva ja kehote, joka kuvaa objektin, objektin tai ympäristön, joka korvataan peitetyssä osassa. Täydellisen maskikuvan luominen maalaustehosteille sisältää useita parhaita käytäntöjä. Aloita tietystä kehotuksesta ja älä epäröi kokeilla erilaisia ​​Stable Diffusion -asetuksia saavuttaaksesi halutut tulokset. Käytä maskikuvaa, joka muistuttaa läheisesti kuvaa, jonka haluat maalata. Tämä lähestymistapa auttaa maalausalgoritmia täydentämään kuvan puuttuvat osat, mikä johtaa luonnollisempaan ulkonäköön. Korkealaatuiset kuvat tuottavat yleensä parempia tuloksia, joten varmista, että perus- ja maskikuvasi ovat hyvälaatuisia ja muistuttavat toisiaan. Valitse lisäksi suuri ja sileä maskikuva yksityiskohtien säilyttämiseksi ja esineiden minimoimiseksi.

Päätepiste hyväksyy peruskuvan ja maskin raaka-RGB-arvoina tai base64-koodatuksi kuvaksi. Päätelmien käsittelijä purkaa kuvan sen perusteella content_type:

  • varten content_type = “application/json”, syöttöhyötykuorman on oltava JSON-sanakirja, jossa on raaka RGB-arvot, tekstikehote ja muut valinnaiset parametrit
  • varten content_type = “application/json;jpeg”, syöttöhyötykuorman on oltava JSON-sanakirja, jossa on base64-koodattu kuva, tekstikehote ja muut valinnaiset parametrit

ulostulo

Päätepiste voi luoda kahden tyyppisiä tulosteita: Base64-koodatun RGB-kuvan tai JSON-sanakirjan luoduista kuvista. Voit määrittää haluamasi tulostusmuodon asettamalla accept otsikko kohteeseen "application/json" or "application/json;jpeg" JPEG-kuvalle tai base64:lle.

  • varten accept = “application/json”, päätepiste palauttaa JSON-sanakirjan kuvan RGB-arvoineen
  • varten accept = “application/json;jpeg”, päätepiste palauttaa JSON-sanakirjan, jossa on JPEG-kuva tavuina base64.b64-koodauksella

Huomaa, että hyötykuorman lähettäminen tai vastaanottaminen raaka-RGB-arvoilla voi saavuttaa syötteen hyötykuorman ja vastauskoon oletusrajat. Siksi suosittelemme käyttämään base64-koodattua kuvaa asettamalla content_type = “application/json;jpeg” ja hyväksy = "sovellus/json;jpeg".

Seuraava koodi on esimerkki johtopäätöspyynnöstä:

content_type = "application/json;jpeg" with open(input_img_file_name, "rb") as f: input_img_image_bytes = f.read()
with open(input_img_mask_file_name, "rb") as f: input_img_mask_image_bytes = f.read() encoded_input_image = base64.b64encode(bytearray(input_img_image_bytes)).decode()
encoded_mask = base64.b64encode(bytearray(input_img_mask_image_bytes)).decode() payload = { "prompt": "a white cat, blue eyes, wearing a sweater, lying in park", "image": encoded_input_image, "mask_image": encoded_mask, "num_inference_steps": 50, "guidance_scale": 7.5, "seed": 0, "negative_prompt": "poorly drawn feet",
} accept = "application/json;jpeg" def query(model_predictor, payload, content_type, accept): """Query the model predictor.""" query_response = model_predictor.predict( payload, { "ContentType": content_type, "Accept": accept, }, ) return query_response query_response = query(model_predictor, json.dumps(payload).encode("utf-8"), content_type, accept)
generated_images = parse_response(query_response)

Tuetut parametrit

Vakaa diffuusiomaalausmallit tukevat monia parametreja kuvan luomiseen:

  • kuva – Alkuperäinen kuva.
  • naamio – Kuva, jossa pimennetty osa pysyy muuttumattomana kuvan luomisen aikana ja valkoinen osa korvataan.
  • nopea – Keho, joka ohjaa kuvan luomista. Se voi olla merkkijono tai merkkijonoluettelo.
  • num_inference_steps (valinnainen) – Kohinanpoistovaiheiden määrä kuvan luomisen aikana. Useammat vaiheet johtavat laadukkaampaan kuvaan. Jos määritetään, sen on oltava positiivinen kokonaisluku. Huomaa, että useampi päättelyvaihe johtaa pidempään vasteaikaan.
  • guidance_scale (valinnainen) – Korkeampi ohjausasteikko johtaa siihen, että kuva liittyy lähemmin kehotteeseen kuvanlaadun kustannuksella. Jos määritetään, sen on oltava kelluva. guidance_scale<=1 ohitetaan.
  • negatiivinen_kehote (valinnainen) – Tämä ohjaa kuvan luomista tätä kehotetta vastaan. Jos se on määritetty, sen on oltava merkkijono tai merkkijonoluettelo ja sitä on käytettävä guidance_scale. Jos guidance_scale on poistettu käytöstä, myös tämä on poistettu käytöstä. Lisäksi, jos kehote on merkkijonoluettelo, niin negative_prompt on myös oltava merkkijonoluettelo.
  • siemenet (valinnainen) – Tämä korjaa satunnaistetun tilan toistettavuutta varten. Jos määritetään, sen on oltava kokonaisluku. Aina kun käytät samaa kehotetta samalla siemenellä, tuloksena oleva kuva on aina sama.
  • eräkoko (valinnainen) – Yhdellä eteenpäinsiirrolla luotavien kuvien määrä. Jos käytät pienempää esiintymää tai luot useita kuvia, pienennä batch_size olla pieni määrä (1-2). Kuvien määrä = kehotteiden määrä*num_images_per_prompt.

Rajoitukset ja ennakkoluulot

Vaikka Stable Diffusionilla on vaikuttava suorituskyky maalauksessa, 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.
  • Vakaa diffuusiomaalaus toimii tyypillisesti parhaiten kuvissa, joiden resoluutio on pienempi, kuten 256 × 256 tai 512 × 512 pikseliä. Kun työskennellään korkearesoluutioisilla kuvilla (768 × 768 tai suurempi), menetelmällä saattaa olla vaikeuksia säilyttää haluttu laatu ja yksityiskohdat.
  • Vaikka siemenen käyttö voi auttaa kontrolloimaan toistettavuutta, Stable Diffusion -maalaus voi silti tuottaa vaihtelevia tuloksia pienillä muutoksilla syötteeseen tai parametreihin. Tämä voi olla haastavaa hienosäätää lähdön tiettyjä vaatimuksia varten.
  • Menetelmällä voi olla vaikeuksia luoda monimutkaisia ​​tekstuureja ja kuvioita, varsinkin kun ne kattavat suuria alueita kuvan sisällä tai ovat välttämättömiä maalatun alueen yleisen koherenssin ja laadun säilyttämiseksi.

Lisätietoja rajoituksista ja harhoista on kohdassa Stable Diffusion Inpainting -mallikortti.

Maalausratkaisu maskilla, joka on luotu kehotteen kautta

CLIPSeq on edistynyt syväoppimistekniikka, joka hyödyntää valmiiksi koulutettuja CLIP-malleja (Contrastive Language-Image Pretraining) maskien luomiseen syöttökuvista. Tämä lähestymistapa tarjoaa tehokkaan tavan luoda maskeja sellaisille tehtäville kuin kuvien segmentointi, maalaus ja manipulointi. CLIPSeq käyttää CLIP:iä luomaan tekstikuvauksen syöttökuvasta. Tekstikuvausta käytetään sitten luomaan maski, joka tunnistaa kuvan pikselit, jotka liittyvät tekstin kuvaukseen. Maskia voidaan sitten käyttää kuvan asiaankuuluvien osien eristämiseen jatkokäsittelyä varten.

CLIPSeqillä on useita etuja muihin menetelmiin verrattuna maskien luomiseen syötekuvista. Ensinnäkin se on tehokkaampi menetelmä, koska se ei vaadi kuvan käsittelyä erillisellä kuvan segmentointialgoritmilla. Toiseksi se on tarkempi, koska se voi luoda maskeja, jotka ovat paremmin linjassa kuvan tekstikuvauksen kanssa. Kolmanneksi se on monipuolisempi, koska voit käyttää sitä luomaan maskeja monista erilaisista kuvista.

CLIPSeqillä on kuitenkin myös joitain haittoja. Ensinnäkin tekniikalla voi olla aihekohtaisia ​​rajoituksia, koska se perustuu valmiiksi koulutettuihin CLIP-malleihin, jotka eivät välttämättä kata tiettyjä alueita tai osaamisalueita. Toiseksi se voi olla herkkä menetelmä, koska se on altis virheille kuvan tekstikuvauksessa.

Lisätietoja on Virtuaalinen muotityyli generatiivisella tekoälyllä Amazon SageMakerin avulla.

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 saatavilla liitetyssä osiossa muistikirja.

Yhteenveto

Tässä viestissä osoitimme, kuinka esikoulutettu Stable Diffusion -maalausmalli otetaan käyttöön JumpStartin avulla. Tässä viestissä näytimme koodinpätkät – koko koodi ja kaikki tämän esittelyn vaiheet ovat saatavilla osoitteessa Johdatus JumpStartiin – Paranna kuvanlaatua kehotteen ohjaamana esimerkkimuistikirja. Kokeile ratkaisua itse ja lähetä meille kommenttisi.

Saat lisätietoja mallista ja sen toiminnasta seuraavissa resursseissa:

Saat lisätietoja JumpStartista tutustumalla seuraaviin viesteihin:


Tietoja Tekijät

Maalaa kuvat vakaalla diffuusiolla käyttämällä Amazon SageMaker JumpStart PlatoBlockchain Data Intelligenceä. Pystysuuntainen haku. Ai.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.

Maalaa kuvat vakaalla diffuusiolla käyttämällä Amazon SageMaker JumpStart PlatoBlockchain Data Intelligenceä. Pystysuuntainen haku. Ai.Alfred Shen on AWS:n vanhempi AI/ML-asiantuntija. Hän on työskennellyt Piilaaksossa teknisissä ja johtotehtävissä eri aloilla, mukaan lukien terveydenhuolto, rahoitus ja huipputeknologia. Hän on omistautunut soveltava AI/ML-tutkija, joka keskittyy CV:hen, NLP:hen ja multimodaalisuuteen. Hänen työtään on esitelty julkaisuissa, kuten EMNLP, ICLR ja Public Health.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen