Inbarvajte slike s stabilno difuzijo z uporabo Amazon SageMaker JumpStart

Inbarvajte slike s stabilno difuzijo z uporabo Amazon SageMaker JumpStart

Novembra 2022 smo razglasitve s katerimi lahko stranke AWS ustvarijo slike iz besedila Stabilna difuzija modeli, ki uporabljajo Amazon SageMaker JumpStart. Danes z veseljem predstavljamo novo funkcijo, ki uporabnikom omogoča slikanje slik z modeli stabilne difuzije. Inpainting se nanaša na postopek zamenjave dela slike z drugo sliko na podlagi besedilnega poziva. Z zagotavljanjem izvirne slike, slike maske, ki orisuje del, ki ga je treba zamenjati, in besedilnega poziva lahko model stabilne difuzije ustvari novo sliko, ki nadomesti maskirano območje s predmetom, predmetom ali okoljem, opisanim v besedilnem pozivu.

Inpainting lahko uporabite za obnavljanje degradiranih slik ali ustvarjanje novih slik z novimi temami ali slogi v določenih razdelkih. Na področju arhitekturnega načrtovanja se lahko Stable Diffusion Inpainting uporabi za popravilo nepopolnih ali poškodovanih območij načrtov stavbe, kar zagotavlja natančne informacije za gradbene ekipe. V primeru kliničnega slikanja MRI mora biti pacientova glava omejena, kar lahko povzroči slabše rezultate zaradi artefakta obrezovanja, ki povzroči izgubo podatkov ali zmanjšano diagnostično natančnost. Slikovno slikanje lahko učinkovito pomaga ublažiti te neoptimalne rezultate.

V tej objavi predstavljamo izčrpen vodnik o uvajanju in izvajanju sklepanja z uporabo modela slikanja Stable Diffusion na dva načina: prek uporabniškega vmesnika (UI) JumpStart v Amazon SageMaker Studio, in programsko prek API-ji JumpStart na voljo v SDK SageMaker Python.

Pregled rešitev

Naslednje slike so primeri slikanja. Izvirne slike so na levi, slika maske je v sredini, naslikana slika, ki jo ustvari model, pa na desni. Za prvi primer je bil model opremljen z izvirno sliko, sliko maske in besedilnim pozivom »bela mačka, modre oči, oblečen pulover, leži v parku« ter negativnim pozivom »slabo narisana stopala«. ” Za drugi primer je bil besedilni poziv »Manekenka elegantno razstavlja sproščeno dolgo obleko z mešanico rožnatih in modrih odtenkov,«

Inpaint slike s stabilno difuzijo z uporabo Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Izvajanje velikih modelov, kot je Stable Diffusion, zahteva skripte sklepanja po meri. Zagnati morate preskuse od konca do konca, da zagotovite, da skript, model in želeni primerek učinkovito delujejo skupaj. JumpStart poenostavlja ta postopek z zagotavljanjem skriptov, pripravljenih za uporabo, ki so bili temeljito preizkušeni. Do teh skriptov lahko dostopate z enim klikom prek uporabniškega vmesnika Studio ali z zelo malo vrsticami kode prek API-ji JumpStart.

Naslednji razdelki vas vodijo skozi uvajanje modela in izvajanje sklepanja z uporabniškim vmesnikom Studio ali API-ji JumpStart.

Upoštevajte, da se z uporabo tega modela strinjate z Licenca CreativeML Open RAIL++-M.

Do JumpStart dostopajte prek uporabniškega vmesnika Studio

V tem razdelku ponazarjamo uvajanje modelov JumpStart z uporabniškim vmesnikom Studio. Spremni videoposnetek prikazuje lociranje predhodno usposobljenega modela za slikanje Stable Diffusion na JumpStart in njegovo namestitev. Stran z modelom ponuja bistvene podrobnosti o modelu in njegovi uporabi. Za izvajanje sklepanja uporabljamo vrsto instance ml.p3.2xlarge, ki zagotavlja zahtevano pospeševanje GPE za sklepanje z nizko zakasnitvijo po dostopni ceni. Ko je primerek gostovanja SageMaker konfiguriran, izberite uvajanje. Končna točka bo delovala in pripravljena za obravnavanje zahtev po sklepanju v približno 10 minutah.

JumpStart ponuja vzorčni zvezek, ki lahko pomaga pospešiti čas, potreben za izvajanje sklepanja na novo ustvarjeni končni točki. Za dostop do zvezka v Studiu izberite Odprite Beležnico v Uporabite Endpoint iz Studia na strani končne točke modela.

Uporabite JumpStart programsko s SDK SageMaker

Uporaba uporabniškega vmesnika JumpStart vam omogoča interaktivno uvajanje vnaprej usposobljenega modela z le nekaj kliki. Druga možnost je, da modele JumpStart uporabite programsko z uporabo API-jev, integriranih v SDK SageMaker Python.

V tem razdelku izberemo ustrezen vnaprej usposobljen model v JumpStartu, razmestimo ta model na končno točko SageMaker in izvedemo sklepanje na razporejeni končni točki, vse z uporabo SDK SageMaker Python. Naslednji primeri vsebujejo delčke kode. Za dostop do celotne kode z vsemi koraki, vključenimi v to predstavitev, glejte Uvod v urejanje slik JumpStart – Inpainting s stabilno difuzijo primer zvezka.

Razmestite vnaprej usposobljeni model

SageMaker uporablja vsebnike Docker za različne naloge gradnje in izvajanja. JumpStart uporablja Vsebniki za globoko učenje SageMaker (DLC), ki so specifični za okvir. Najprej pridobimo morebitne dodatne pakete, kot tudi skripte za izvajanje usposabljanja in sklepanja za izbrano nalogo. Nato se vnaprej pripravljeni artefakti modela ločeno pridobijo model_uris, ki platformi zagotavlja prilagodljivost. To omogoča uporabo več vnaprej pripravljenih modelov z enim sklepnim skriptom. Naslednja koda ponazarja ta postopek:

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")

Nato ta sredstva zagotovimo a Model SageMaker in uvesti končno točko:

# 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,
)

Ko je model uveden, lahko iz njega pridobimo napovedi v realnem času!

vhod

Vhod je osnovna slika, slika maske in poziv, ki opisuje subjekt, predmet ali okolje, ki ga je treba nadomestiti v zamaskiranem delu. Ustvarjanje popolne slike maske za učinke med slikanjem vključuje več najboljših praks. Začnite z določenim pozivom in brez obotavljanja preizkusite različne nastavitve stabilne difuzije, da dosežete želene rezultate. Uporabite sliko maske, ki je zelo podobna sliki, ki jo nameravate naslikati. Ta pristop pomaga algoritmu inpaintinga pri dopolnjevanju manjkajočih delov slike, kar ima za posledico bolj naraven videz. Visokokakovostne slike na splošno dajejo boljše rezultate, zato se prepričajte, da sta osnovni in maski dobre kakovosti in da sta si podobni. Poleg tega se odločite za veliko in gladko sliko maske, da ohranite podrobnosti in zmanjšate artefakte.

Končna točka sprejme osnovno sliko in masko kot neobdelane vrednosti RGB ali sliko, kodirano base64. Upravljalnik sklepanja dekodira sliko na podlagi content_type:

  • za content_type = “application/json”, mora biti vhodni koristni tovor slovar JSON z neobdelanimi vrednostmi RGB, besedilnim pozivom in drugimi neobveznimi parametri
  • za content_type = “application/json;jpeg”, mora biti vhodni tovor slovar JSON s sliko, kodirano base64, besedilnim pozivom in drugimi neobveznimi parametri

izhod

Končna točka lahko ustvari dve vrsti izhoda: sliko RGB, kodirano z Base64, ali slovar JSON ustvarjenih slik. Določite lahko, kateri izhodni format želite, tako da nastavite accept naslov na "application/json" or "application/json;jpeg" za sliko JPEG oziroma base64.

  • za accept = “application/json”, končna točka vrne slovar JSON z vrednostmi RGB za sliko
  • za accept = “application/json;jpeg”končna točka vrne slovar JSON s sliko JPEG v obliki bajtov, kodiranih s kodiranjem base64.b64

Upoštevajte, da lahko pošiljanje ali prejemanje tovora z neobdelanimi vrednostmi RGB doseže privzete omejitve za vhodni tovor in velikost odgovora. Zato priporočamo uporabo kodirane slike base64 z nastavitvijo content_type = “application/json;jpeg” in sprejme = “application/json;jpeg”.

Naslednja koda je primer zahteve za sklepanje:

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)

Podprti parametri

Modeli Stable Diffusion inpainting podpirajo številne parametre za ustvarjanje slike:

  • slika – Izvirna slika.
  • Maska – Slika, kjer zatemnjeni del med ustvarjanjem slike ostane nespremenjen, beli del pa je nadomeščen.
  • poziv – Poziv za vodenje ustvarjanja slike. Lahko je niz ali seznam nizov.
  • num_inference_steps (neobvezno) – Število korakov odpravljanja šuma med ustvarjanjem slike. Več korakov vodi do višje kakovosti slike. Če je navedeno, mora biti pozitivno celo število. Upoštevajte, da več korakov sklepanja vodi do daljšega odzivnega časa.
  • vodilna_lestvica (neobvezno) – Višja lestvica vodenja povzroči sliko, ki je bolj povezana s pozivom, na račun kakovosti slike. Če je navedeno, mora biti lebdeča. guidance_scale<=1 se prezre.
  • negativni_prompt (neobvezno) – To usmerja ustvarjanje slike proti temu pozivu. Če je navedeno, mora biti niz ali seznam nizov in se mora uporabljati z guidance_scale. Če guidance_scale je onemogočeno, je tudi to onemogočeno. Poleg tega, če je poziv seznam nizov, potem je negative_prompt mora biti tudi seznam nizov.
  • seme (neobvezno) – To popravi naključno stanje za ponovljivost. Če je navedeno, mora biti celo število. Kadar koli uporabite isti poziv z istim semenom, bo nastala slika vedno enaka.
  • velikost_serije (neobvezno) – Število slik, ki jih je treba ustvariti v enem prehodu naprej. Če uporabljate manjši primerek ali ustvarjate veliko slik, zmanjšajte batch_size biti majhno število (1–2). Število slik = število pozivov*num_images_per_prompt.

Omejitve in pristranskosti

Čeprav ima Stable Diffusion impresivno zmogljivost pri slikanju, ima številne omejitve in pristranskosti. Ti vključujejo, vendar niso omejeni na:

  • Model morda ne bo ustvaril natančnih obrazov ali udov, ker podatki o vadbi ne vključujejo dovolj slik s temi funkcijami.
  • Model je bil usposobljen na Nabor podatkov LAION-5B, ki ima vsebino za odrasle in morda ne bo primeren za uporabo v izdelku brez nadaljnjih premislekov.
  • Model morda ne bo dobro deloval z neangleškimi jeziki, ker je bil model učen z besedilom v angleškem jeziku.
  • Model ne more ustvariti dobrega besedila v slikah.
  • Slikanje s stabilno difuzijo običajno najbolje deluje s slikami nižjih ločljivosti, na primer 256 × 256 ali 512 × 512 slikovnih pik. Pri delu s slikami visoke ločljivosti (768 × 768 ali več) bo metoda morda težko ohranila želeno raven kakovosti in podrobnosti.
  • Čeprav lahko uporaba semena pomaga nadzorovati ponovljivost, lahko barvanje s stabilno difuzijo še vedno povzroči različne rezultate z rahlimi spremembami vnosa ali parametrov. Zaradi tega bo morda težko natančno prilagoditi izhod za posebne zahteve.
  • Metoda bi lahko imela težave z ustvarjanjem zapletenih tekstur in vzorcev, še posebej, če obsegajo velika območja znotraj slike ali so bistvenega pomena za ohranjanje splošne skladnosti in kakovosti nepobarvanega območja.

Za več informacij o omejitvah in pristranskosti glejte Kartica modela Stable Diffusion Inpainting.

Rešitev za slikanje z masko, ustvarjeno prek poziva

CLIPSeq je napredna tehnika globokega učenja, ki uporablja moč vnaprej usposobljenih modelov CLIP (kontrastivno jezikovno predusposabljanje slike) za ustvarjanje mask iz vhodnih slik. Ta pristop zagotavlja učinkovit način za ustvarjanje mask za naloge, kot so segmentacija slike, slikanje in manipulacija. CLIPSeq uporablja CLIP za ustvarjanje besedilnega opisa vhodne slike. Besedilni opis se nato uporabi za ustvarjanje maske, ki identificira piksle na sliki, ki so pomembne za besedilni opis. Masko lahko nato uporabite za izolacijo ustreznih delov slike za nadaljnjo obdelavo.

CLIPSeq ima več prednosti pred drugimi metodami za ustvarjanje mask iz vhodnih slik. Prvič, to je učinkovitejša metoda, ker ne zahteva obdelave slike z ločenim algoritmom za segmentacijo slike. Drugič, je natančnejši, ker lahko ustvari maske, ki so bolj usklajene z besedilnim opisom slike. Tretjič, je bolj vsestranski, ker ga lahko uporabite za ustvarjanje mask iz najrazličnejših slik.

Vendar ima CLIPSeq tudi nekaj slabosti. Prvič, tehnika ima lahko omejitve glede vsebine, ker se opira na vnaprej pripravljene modele CLIP, ki morda ne zajemajo določenih domen ali področij strokovnega znanja. Drugič, lahko je občutljiva metoda, ker je dovzetna za napake v besedilnem opisu slike.

Za več informacij glejte Virtualno modno oblikovanje z generativno umetno inteligenco z uporabo Amazon SageMaker.

Čiščenje

Ko končate z zagonom zvezka, izbrišite vse vire, ustvarjene v procesu, da zagotovite, da je zaračunavanje ustavljeno. Koda za čiščenje končne točke je na voljo v povezanem prenosnik.

zaključek

V tej objavi smo pokazali, kako z uporabo JumpStarta razmestiti vnaprej pripravljen model za slikanje Stable Diffusion. V tej objavi smo prikazali delčke kode – celotna koda z vsemi koraki v tej predstavitvi je na voljo v Uvod v JumpStart – izboljšajte kakovost slike s pozivom primer zvezka. Preizkusite rešitev sami in nam pošljite svoje komentarje.

Če želite izvedeti več o modelu in njegovem delovanju, si oglejte naslednje vire:

Če želite izvedeti več o JumpStart, si oglejte naslednje objave:


O avtorjih

Inpaint slike s stabilno difuzijo z uporabo Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.dr. Vivek Madan je uporabni znanstvenik pri ekipi Amazon SageMaker JumpStart. Doktoriral je na Univerzi Illinois v Urbana-Champaign in bil podoktorski raziskovalec na Georgia Tech. Je aktiven raziskovalec strojnega učenja in oblikovanja algoritmov ter je objavil članke na konferencah EMNLP, ICLR, COLT, FOCS in SODA.

Inpaint slike s stabilno difuzijo z uporabo Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Alfred Shen je višji strokovnjak za AI/ML pri AWS. Delal je v Silicijevi dolini, kjer je bil na tehničnih in vodstvenih položajih v različnih sektorjih, vključno z zdravstvenim varstvom, financami in visoko tehnologijo. Je predan raziskovalec umetne inteligence/ML, ki se osredotoča na CV, NLP in multimodalnost. Njegovo delo je bilo predstavljeno v publikacijah, kot so EMNLP, ICLR in Public Health.

Časovni žig:

Več od Strojno učenje AWS