Inpaint imagini cu Stable Diffusion folosind Amazon SageMaker JumpStart

Inpaint imagini cu Stable Diffusion folosind Amazon SageMaker JumpStart

În noiembrie 2022, noi a anunțat cu care clienții AWS pot genera imagini din text Difuzie stabilă modele folosind Amazon SageMaker JumpStart. Astăzi, suntem încântați să introducem o nouă funcție care permite utilizatorilor să picteze imagini cu modele Stable Diffusion. Inpainting se referă la procesul de înlocuire a unei porțiuni a unei imagini cu o altă imagine pe baza unui prompt textual. Prin furnizarea imaginii originale, a unei imagini de mască care conturează porțiunea care trebuie înlocuită și a unui prompt textual, modelul Stable Diffusion poate produce o nouă imagine care înlocuiește zona mascată cu obiectul, subiectul sau mediul descris în promptul textual.

Puteți utiliza inpainting pentru a restaura imagini degradate sau pentru a crea imagini noi cu subiecte sau stiluri noi în anumite secțiuni. În domeniul designului arhitectural, Stable Diffusion inpainting poate fi aplicată pentru a repara zonele incomplete sau deteriorate ale planurilor clădirii, oferind informații precise pentru echipajele de construcție. În cazul imagisticii RMN clinice, capul pacientului trebuie să fie reținut, ceea ce poate duce la rezultate slabe din cauza artefactului de decupare care provoacă pierderea datelor sau o precizie redusă a diagnosticului. Pictura în imagine poate ajuta eficient la atenuarea acestor rezultate suboptime.

În această postare, prezentăm un ghid cuprinzător despre implementarea și rularea inferenței folosind modelul Stable Diffusion inpainting în două metode: prin interfața cu utilizatorul (UI) JumpStart în Amazon SageMaker Studio, și programatic prin API-uri JumpStart disponibil în SageMaker Python SDK.

Prezentare generală a soluțiilor

Următoarele imagini sunt exemple de inpainting. Imaginile originale sunt în stânga, imaginea măștii este în centru, iar imaginea încorporată generată de model este în dreapta. Pentru primul exemplu, modelul a fost furnizat cu imaginea originală, o imagine cu mască și mesajul textual „o pisică albă, ochi albaștri, purtând un pulover, întins în parc”, precum și mesajul negativ „picioare prost desenate. ” Pentru al doilea exemplu, solicitarea textului a fost „Un model feminin prezintă cu grație o rochie lungă lejeră, cu un amestec de nuanțe de roz și albastru.”

Inpaint imagini cu Stable Diffusion folosind Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Rularea modelelor mari, cum ar fi Stable Diffusion, necesită scripturi de inferență personalizate. Trebuie să rulați teste end-to-end pentru a vă asigura că scriptul, modelul și instanța dorită funcționează împreună eficient. JumpStart simplifică acest proces prin furnizarea de scripturi gata de utilizare care au fost testate robust. Puteți accesa aceste scripturi cu un singur clic prin interfața de utilizare Studio sau cu foarte puține linii de cod prin intermediul API-uri JumpStart.

Următoarele secțiuni vă ghidează prin implementarea modelului și rularea inferenței folosind fie interfața de utilizare Studio, fie API-urile JumpStart.

Rețineți că, prin utilizarea acestui model, sunteți de acord cu CreativeML Open RAIL++-M Licență.

Accesați JumpStart prin interfața de utilizare Studio

În această secțiune, ilustrăm implementarea modelelor JumpStart folosind interfața de utilizare Studio. Videoclipul însoțitor demonstrează localizarea modelului de pictură Stable Diffusion pre-antrenat pe JumpStart și implementarea acestuia. Pagina modelului oferă detalii esențiale despre model și utilizarea acestuia. Pentru a efectua inferențe, folosim tipul de instanță ml.p3.2xlarge, care oferă accelerația GPU necesară pentru inferența cu latență scăzută la un preț accesibil. După ce instanța de găzduire SageMaker este configurată, alegeți Lansa. Punctul final va fi operațional și pregătit pentru a gestiona cererile de inferență în aproximativ 10 minute.

JumpStart oferă un exemplu de blocnotes care poate ajuta la accelerarea timpului necesar pentru a rula inferența asupra punctului final nou creat. Pentru a accesa blocnotesul în Studio, alegeți Deschide Notebook în Utilizați Endpoint din Studio secțiunea paginii de punct final al modelului.

Utilizați JumpStart în mod programatic cu SDK-ul SageMaker

Utilizarea JumpStart UI vă permite să implementați un model pre-antrenat în mod interactiv, cu doar câteva clicuri. Alternativ, puteți utiliza modele JumpStart în mod programatic, utilizând API-uri integrate în SDK-ul SageMaker Python.

În această secțiune, alegem un model pre-antrenat adecvat în JumpStart, implementăm acest model într-un punct final SageMaker și efectuăm inferențe asupra punctului final implementat, toate utilizând SDK-ul SageMaker Python. Următoarele exemple conțin fragmente de cod. Pentru a accesa codul complet cu toți pașii incluși în această demonstrație, consultați Introducere în editarea imaginilor JumpStart – Stable Diffusion Inpainting exemplu de caiet.

Implementați modelul pre-antrenat

SageMaker utilizează containere Docker pentru diferite sarcini de construcție și de execuție. JumpStart utilizează Containere de învățare profundă SageMaker (DLC-uri) care sunt specifice cadrului. Preluăm mai întâi orice pachete suplimentare, precum și scripturi pentru a gestiona instruirea și inferența pentru sarcina selectată. Apoi, artefactele modelului pre-antrenate sunt preluate separat model_uris, care oferă flexibilitate platformei. Acest lucru permite utilizarea mai multor modele pre-antrenate cu un singur script de inferență. Următorul cod ilustrează acest proces:

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

În continuare, oferim acele resurse unui Modelul SageMaker instanță și implementați un punct final:

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

După ce modelul este implementat, putem obține predicții în timp real din acesta!

Intrare

Intrarea este imaginea de bază, imaginea masca și promptul care descrie subiectul, obiectul sau mediul care urmează să fie înlocuit în porțiunea mascata. Crearea imaginii de mască perfectă pentru efectele în pictură implică câteva bune practici. Începeți cu un prompt specific și nu ezitați să experimentați cu diferite setări de difuzie stabilă pentru a obține rezultatele dorite. Utilizați o imagine de mască care seamănă foarte mult cu imaginea pe care doriți să o pictați. Această abordare ajută algoritmul de inpainting să completeze secțiunile lipsă ale imaginii, rezultând un aspect mai natural. Imaginile de înaltă calitate dau în general rezultate mai bune, așa că asigurați-vă că imaginile de bază și de masca sunt de bună calitate și seamănă între ele. În plus, optați pentru o imagine de mască mare și netedă pentru a păstra detaliile și a minimiza artefactele.

Punctul final acceptă imaginea de bază și masca ca valori RGB brute sau o imagine codificată base64. Managerul de inferență decodifică imaginea pe baza content_type:

  • Pentru content_type = “application/json”, sarcina utilă de intrare trebuie să fie un dicționar JSON cu valorile RGB brute, promptul textual și alți parametri opționali
  • Pentru content_type = “application/json;jpeg”, sarcina utilă de intrare trebuie să fie un dicționar JSON cu imaginea codificată în base64, un prompt textual și alți parametri opționali

producție

Punctul final poate genera două tipuri de ieșire: o imagine RGB codificată în Base64 sau un dicționar JSON al imaginilor generate. Puteți specifica ce format de ieșire doriți prin setarea accept antet către "application/json" or "application/json;jpeg" pentru o imagine JPEG sau, respectiv, base64.

  • Pentru accept = “application/json”, punctul final returnează un dicționar JSON cu valori RGB pentru imagine
  • Pentru accept = “application/json;jpeg”, punctul final returnează un dicționar JSON cu imaginea JPEG ca octeți codificați cu codificare base64.b64

Rețineți că trimiterea sau primirea sarcinii utile cu valori RGB brute poate atinge limitele implicite pentru sarcina utilă de intrare și dimensiunea răspunsului. Prin urmare, vă recomandăm să utilizați imaginea codificată base64 prin setare content_type = “application/json;jpeg” și accept = „application/json;jpeg”.

Următorul cod este un exemplu de solicitare de inferență:

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)

Parametri acceptați

Modelele de pictură cu difuzie stabilă acceptă mulți parametri pentru generarea de imagini:

  • imagine – Imaginea originală.
  • masca – O imagine în care porțiunea înnegrită rămâne neschimbată în timpul generării imaginii, iar porțiunea albă este înlocuită.
  • prompt – Un prompt pentru a ghida generarea imaginii. Poate fi un șir sau o listă de șiruri.
  • num_inference_steps (opțional) – Numărul de pași de eliminare a zgomotului în timpul generării imaginii. Mai mulți pași duc la o imagine de calitate mai bună. Dacă este specificat, trebuie să fie un număr întreg pozitiv. Rețineți că mai mulți pași de inferență vor duce la un timp de răspuns mai lung.
  • guidance_scale (opțional) – O scară de ghidare mai mare are ca rezultat o imagine mai strâns legată de prompt, în detrimentul calității imaginii. Dacă este specificat, trebuie să fie un float. guidance_scale<=1 este ignorat.
  • negative_prompt (opțional) – Aceasta ghidează generarea imaginii în raport cu acest prompt. Dacă este specificat, trebuie să fie un șir sau o listă de șiruri și să fie folosit cu guidance_scale. Dacă guidance_scale este dezactivat, și acesta este dezactivat. Mai mult, dacă promptul este o listă de șiruri, atunci negative_prompt trebuie să fie și o listă de șiruri.
  • sămânță (opțional) – Acest lucru fixează starea randomizată pentru reproductibilitate. Dacă este specificat, trebuie să fie un număr întreg. Ori de câte ori utilizați același prompt cu aceeași sămânță, imaginea rezultată va fi întotdeauna aceeași.
  • batch_size (opțional) – Numărul de imagini de generat într-o singură trecere înainte. Dacă utilizați o instanță mai mică sau generați multe imagini, reduceți batch_size să fie un număr mic (1–2). Numărul de imagini = numărul de solicitări*num_images_per_prompt.

Limitări și părtiniri

Chiar dacă Stable Diffusion are performanțe impresionante în pictură, aceasta suferă de mai multe limitări și părtiniri. Acestea includ, dar nu se limitează la:

  • Este posibil ca modelul să nu genereze fețe sau membre precise, deoarece datele de antrenament nu includ suficiente imagini cu aceste caracteristici.
  • Modelul a fost antrenat pe Setul de date LAION-5B, care are conținut pentru adulți și este posibil să nu fie potrivit pentru utilizarea produsului fără alte considerații.
  • Este posibil ca modelul să nu funcționeze bine cu limbile non-engleze, deoarece modelul a fost instruit pe text în limba engleză.
  • Modelul nu poate genera text bun în imagini.
  • Pictura cu difuzie stabilă funcționează de obicei cel mai bine cu imagini cu rezoluții mai mici, cum ar fi 256×256 sau 512×512 pixeli. Când lucrați cu imagini de înaltă rezoluție (768×768 sau mai mare), metoda ar putea avea dificultăți să mențină nivelul dorit de calitate și detaliu.
  • Deși utilizarea unei semințe poate ajuta la controlul reproductibilității, pictura cu difuzie stabilă poate produce totuși rezultate variate, cu ușoare modificări ale intrării sau parametrilor. Acest lucru ar putea face dificilă reglarea fină a ieșirii pentru cerințe specifice.
  • Metoda ar putea avea dificultăți în generarea de texturi și modele complicate, mai ales atunci când acestea se întind pe suprafețe mari din imagine sau sunt esențiale pentru menținerea coerenței generale și a calității regiunii vopsite.

Pentru mai multe informații despre limitări și părtinire, consultați Carte de model Stable Diffusion Inpainting.

Soluție de Inpainting cu mască generată printr-un prompt

CLIPSeq este o tehnică avansată de învățare profundă care utilizează puterea modelelor CLIP (Contrastive Language-Image Pretraining) pre-antrenate pentru a genera măști din imaginile de intrare. Această abordare oferă o modalitate eficientă de a crea măști pentru sarcini precum segmentarea imaginii, pictura în interior și manipulare. CLIPSeq folosește CLIP pentru a genera o descriere text a imaginii de intrare. Descrierea textului este apoi folosită pentru a genera o mască care identifică pixelii din imagine care sunt relevanți pentru descrierea textului. Masca poate fi apoi utilizată pentru a izola părțile relevante ale imaginii pentru procesare ulterioară.

CLIPSeq are mai multe avantaje față de alte metode de generare a măștilor din imaginile de intrare. În primul rând, este o metodă mai eficientă, deoarece nu necesită ca imaginea să fie procesată de un algoritm separat de segmentare a imaginii. În al doilea rând, este mai precis, deoarece poate genera măști care sunt mai strâns aliniate cu descrierea textului imaginii. În al treilea rând, este mai versatil, deoarece îl puteți folosi pentru a genera măști dintr-o mare varietate de imagini.

Totuși, CLIPSeq are și unele dezavantaje. În primul rând, tehnica poate avea limitări în ceea ce privește subiectul, deoarece se bazează pe modele CLIP pregătite în prealabil, care ar putea să nu cuprindă domenii sau domenii specifice de expertiză. În al doilea rând, poate fi o metodă sensibilă, deoarece este susceptibilă la erori în descrierea textului imaginii.

Pentru mai multe informații, consultați Styling virtual de modă cu IA generativă folosind Amazon SageMaker.

A curăța

După ce ați terminat de rulat blocnotesul, asigurați-vă că ștergeți toate resursele create în acest proces pentru a vă asigura că facturarea este oprită. Codul pentru curățarea punctului final este disponibil în fișierul asociat caiet.

Concluzie

În această postare, am arătat cum să implementăm un model de pictură Stable Diffusion pre-antrenat folosind JumpStart. Am arătat fragmente de cod în această postare — codul complet cu toți pașii din această demonstrație este disponibil în Introducere în JumpStart – Îmbunătățiți calitatea imaginii ghidată de prompt exemplu de caiet. Încercați singur soluția și trimiteți-ne comentariile dvs.

Pentru a afla mai multe despre model și cum funcționează, consultați următoarele resurse:

Pentru a afla mai multe despre JumpStart, consultați următoarele postări:


Despre Autori

Inpaint imagini cu Stable Diffusion folosind Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Dr. Vivek Madan este un om de știință aplicat în echipa Amazon SageMaker JumpStart. Și-a luat doctoratul la Universitatea din Illinois la Urbana-Champaign și a fost cercetător post-doctoral la Georgia Tech. Este un cercetător activ în învățarea automată și proiectarea algoritmilor și a publicat lucrări în cadrul conferințelor EMNLP, ICLR, COLT, FOCS și SODA.

Inpaint imagini cu Stable Diffusion folosind Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Alfred Shen este Senior AI/ML Specialist la AWS. El a lucrat în Silicon Valley, deținând poziții tehnice și manageriale în diverse sectoare, inclusiv asistență medicală, finanțe și high-tech. Este un cercetător dedicat aplicat AI/ML, concentrându-se pe CV, NLP și multimodalitate. Munca sa a fost prezentată în publicații precum EMNLP, ICLR și Public Health.

Timestamp-ul:

Mai mult de la Învățare automată AWS