Reglați fin modelele text-to-image Stable Diffusion cu Amazon SageMaker JumpStart

Reglați fin modelele text-to-image Stable Diffusion cu Amazon SageMaker JumpStart

Nodul sursă: 1968900

În noiembrie 2022, noi a anunțat cu care clienții AWS pot genera imagini din text Difuzie stabilă modele în Amazon SageMaker JumpStart. Stable Diffusion este un model de învățare profundă care vă permite să generați imagini realiste, de înaltă calitate și artă uluitoare în doar câteva secunde. Deși crearea de imagini impresionante poate fi folosită în industrii, de la artă la NFT și nu numai, astăzi ne așteptăm și ca AI să fie personalizabil. Astăzi, vă anunțăm că puteți personaliza modelul de generare a imaginii în funcție de cazul dvs. de utilizare, ajustându-l pe setul de date personalizat în Amazon SageMaker JumpStart. Acest lucru poate fi util atunci când creați artă, logo-uri, design-uri personalizate, NFT-uri și așa mai departe, sau lucruri distractive, cum ar fi generarea de imagini personalizate AI ale animalelor dvs. de companie sau avataruri ale dvs.

În această postare, oferim o privire de ansamblu asupra modului de ajustare a modelului Stable Diffusion în două moduri: programatic prin API-uri JumpStart disponibil în SageMaker Python SDKși interfața cu utilizatorul (UI) JumpStart în Amazon SageMaker Studio. De asemenea, discutăm despre cum să facem alegeri de proiectare, inclusiv calitatea setului de date, dimensiunea setului de date de antrenament, alegerea valorilor hiperparametrului și aplicabilitatea la mai multe seturi de date. În cele din urmă, discutăm despre cele peste 80 de modele ajustate disponibile public, cu diferite limbi de intrare și stiluri adăugate recent în JumpStart.

Difuziune stabilă și transfer de învățare

Stable Diffusion este un model text-to-image care vă permite să creați imagini fotorealiste doar dintr-un mesaj text. Un model de difuzie se antrenează învățând să elimine zgomotul care a fost adăugat unei imagini reale. Acest proces de dezgomot generează o imagine realistă. Aceste modele pot genera imagini numai din text, condiționând procesul de generare de text. De exemplu, Stable Diffusion este o difuzie latentă în care modelul învață să recunoască forme într-o imagine cu zgomot pur și aduce treptat aceste forme în focalizare dacă formele se potrivesc cu cuvintele din textul introdus. Textul trebuie mai întâi încorporat într-un spațiu latent folosind un model de limbaj. Apoi, o serie de operații de adăugare și eliminare a zgomotului sunt efectuate în spațiul latent cu o arhitectură U-Net. În cele din urmă, ieșirea fără zgomot este decodificată în spațiul pixelilor.

În învățarea automată (ML), se numește capacitatea de a transfera cunoștințele învățate dintr-un domeniu în altul transfer de învățare. Puteți utiliza învățarea prin transfer pentru a produce modele precise pe seturile dvs. de date mai mici, cu costuri de instruire mult mai mici decât cele implicate în formarea modelului original. Cu învățarea prin transfer, puteți regla fin modelul de difuzie stabilă pe propriul set de date cu doar cinci imagini. De exemplu, în stânga sunt imagini de dresaj ale unui câine pe nume Doppler folosite pentru a regla fin modelul, în mijloc și în dreapta sunt imagini generate de modelul reglat fin atunci când i se cere să prezică imaginea lui Doppler pe plajă și o schiță în creion.

În stânga sunt imagini ale unui scaun alb folosit pentru reglarea fină a modelului și o imagine a scaunului în roșu generată de modelul reglat fin. În dreapta sunt imagini ale unui pouf folosit pentru a regla modelul și o imagine a unei pisici așezate pe un pouf.

Reglarea fină a modelelor mari, cum ar fi Stable Diffusion, necesită de obicei să furnizați scripturi de antrenament. Există o serie de probleme, inclusiv probleme de memorie lipsită, probleme de dimensiunea încărcăturii utile și multe altele. Mai mult, trebuie să rulați teste end-to-end pentru a vă asigura că scriptul, modelul și instanța dorită funcționează împreună într-un mod eficient. JumpStart simplifică acest proces prin furnizarea de scripturi gata de utilizare care au fost testate robust. Scriptul de reglare fină JumpStart pentru modelele Stable Diffusion se bazează pe scriptul de reglare fină de la cabină de vis. 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.

Rețineți că, utilizând modelul Stable Diffusion, sunteți de acord cu CreativeML Open RAIL++-M Licență.

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

Această secțiune descrie cum să antrenați și să implementați modelul cu SageMaker Python SDK. Alegem un model pre-antrenat adecvat în JumpStart, antrenăm acest model cu un job de instruire SageMaker și implementăm modelul antrenat la un punct final SageMaker. Mai mult, rulăm inferențe asupra punctului final implementat, toate folosind SDK-ul SageMaker Python. Următoarele exemple conțin fragmente de cod. Pentru codul complet cu toți pașii din această demonstrație, consultați Introducere în JumpStart – Text în imagine exemplu de caiet.

Antrenează și ajustează modelul Stable Diffusion

Fiecare model este identificat printr-un unic model_id. Următorul cod arată cum să reglați un model de bază Stable Diffusion 2.1 identificat de model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base pe un set de date de antrenament personalizat. Pentru o listă completă a model_id valorile și modelele care pot fi reglate fin, consultați Algoritmi încorporați cu tabel model pre-antrenat. Pentru fiecare model_id, pentru a lansa un job de formare SageMaker prin intermediul Estimator clasa a SDK-ului SageMaker Python, trebuie să preluați URI-ul imaginii Docker, URI-ul scriptului de antrenament și URI-ul modelului pre-antrenat prin intermediul funcțiilor utilitare furnizate în SageMaker. URI-ul scriptului de antrenament conține tot codul necesar pentru procesarea datelor, încărcarea modelului pre-antrenat, antrenamentul modelului și salvarea modelului antrenat pentru inferență. URI-ul modelului pre-antrenat conține definiția arhitecturii modelului pre-antrenat și parametrii modelului. URI-ul modelului pre-antrenat este specific modelului particular. Tarball-urile modelului pre-antrenate au fost pre-descărcate din Hugging Face și salvate cu semnătura modelului corespunzătoare în Serviciul Amazon de stocare simplă (Amazon S3), astfel încât jobul de instruire să ruleze în izolare în rețea. Vezi următorul cod:

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
)

Cu aceste artefacte de antrenament specifice modelului, puteți construi un obiect al Estimator clasă:

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

Set de date de antrenament

Următoarele sunt instrucțiunile despre modul în care trebuie formate datele de antrenament:

  • Intrare – Un director care conține imaginile instanței, dataset_info.json, cu următoarea configurație:
    • Imaginile pot fi în format .png, .jpg sau .jpeg
    • dataset_info.json fișierul trebuie să aibă formatul {'instance_prompt':<<instance_prompt>>}
  • producție – Un model antrenat care poate fi implementat pentru inferență

Calea S3 ar trebui să arate ca s3://bucket_name/input_directory/. Observați trasarea / este necesară.

Următorul este un exemplu de format al datelor de antrenament:

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

Pentru instrucțiuni despre cum să formatați datele în timp ce utilizați conservarea anterioară, consultați secțiunea Conservare prealabilă în acest post.

Oferim un set de date implicit de imagini de pisici. Constă din opt imagini (imagini de instanță corespunzătoare promptului de instanță) ale unei singure pisici fără imagini de clasă. Poate fi descărcat de pe GitHub. Dacă utilizați setul de date implicit, încercați promptul „o fotografie a unei pisici riobugger” în timp ce faceți inferențe în blocnotesul demo.

Licență: MIT.

Hiperparametrele

Apoi, pentru transferul de învățare pe setul de date personalizat, ar putea fi necesar să modificați valorile implicite ale hiperparametrilor de antrenament. Puteți obține un dicționar Python al acestor hiperparametri cu valorile lor implicite prin apelare hyperparameters.retrieve_default, actualizați-le după cum este necesar, apoi transmiteți-le la clasa Estimator. Vezi următorul cod:

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"

Următorii hiperparametri sunt acceptați de algoritmul de reglare fină:

  • cu_preservare_prealabilă – Semnal pentru a adăuga o pierdere anterioară de conservare. Conservarea prealabilă este un regularizator care evită supraadaptarea. (Alegeri: [“True”,“False”], Mod implicit: “False”.)
  • num_class_imagini – Imaginile de clasă minimă pentru pierderea anterioară de conservare. Dacă with_prior_preservation = True și nu sunt suficiente imagini deja prezente în class_data_dir, imagini suplimentare vor fi eșantionate cu class_prompt. (Valori: întreg pozitiv, implicit: 100.)
  • Epoci – Numărul de treceri efectuate de algoritmul de reglare fină prin setul de date de antrenament. (Valori: întreg pozitiv, implicit: 20.)
  • Max_pași – Numărul total de pași de antrenament de efectuat. Dacă nu None, trece peste epoci. (Valori: “None” sau un șir de numere întregi, implicit: “None”.)
  • Dimensiunea lotului –: Numărul de exemple de antrenament care sunt prelucrate înainte ca greutățile modelului să fie actualizate. La fel ca dimensiunea lotului în timpul generării imaginilor de clasă dacă with_prior_preservation = True. (Valori: întreg pozitiv, implicit: 1.)
  • rata_de_învățare – Rata cu care greutățile modelului sunt actualizate după ce se lucrează la fiecare lot de exemple de antrenament. (Valori: float pozitiv, implicit: 2e-06.)
  • pierdere_în_greutate anterioară – Greutatea pierderii anterioare de conservare. (Valori: float pozitiv, implicit: 1.0.)
  • center_crop – Dacă să decupați imaginile înainte de a redimensiona la rezoluția dorită. (Alegeri: [“True”/“False”], Mod implicit: “False”.)
  • lr_scheduler – Tipul de programator al ratei de învățare. (Alegeri: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"], Mod implicit: "constant".) Pentru mai multe informații, consultați Programatori de rate de învățare.
  • adam_weight_decay – Scăderea greutății de aplicat (dacă nu este zero) tuturor straturilor, cu excepția tuturor prejudecăților și LayerNorm greutăți în AdamW optimizator. (Valoare: float, implicit: 1e-2.)
  • adam_beta1 – Hiperparametrul beta1 (rata de dezintegrare exponențială pentru estimările primului moment) pentru AdamW optimizator. (Valoare: float, implicit: 0.9.)
  • adam_beta2 – Hiperparametrul beta2 (rata de dezintegrare exponențială pentru estimările primului moment) pentru AdamW optimizator. (Valoare: float, implicit: 0.999.)
  • adam_epsilon - epsilon hiperparametru pentru AdamW optimizator. De obicei, este setată la o valoare mică pentru a evita împărțirea cu 0. (Valoare: float, implicit: 1e-8.)
  • pași_de_acumulare_gradient – Numărul de pași de actualizări care trebuie acumulați înainte de a efectua o trecere înapoi/actualizare. (Valoare: întreg, implicit: 1.)
  • max_grad_norm – Norma de gradient maxim (pentru tăierea gradientului). (Valoare: float, implicit: 1.0.)
  • sămânţă – Remediați starea aleatorie pentru a obține rezultate reproductibile la antrenament. (Valoare: întreg, implicit: 0.)

Implementați modelul bine pregătit

După terminarea instruirii modelului, puteți implementa direct modelul într-un punct final persistent, în timp real. Preluăm URI-urile Docker Image și URI-urile de script necesare și implementăm modelul. Vezi următorul cod:

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

În stânga sunt imaginile de antrenament ale unei pisici numite riobugger folosite pentru a regla fin modelul (parametrii impliciti, cu excepția max_steps = 400). În mijloc și în dreapta sunt imaginile generate de modelul reglat fin atunci când i se cere să prezică imaginea lui riobugger pe plajă și o schiță în creion.

Pentru mai multe detalii despre inferență, inclusiv parametrii acceptați, formatul de răspuns și așa mai departe, consultați Generați imagini din text cu modelul de difuzie stabilă pe Amazon SageMaker JumpStart.

Accesați JumpStart prin interfața de utilizare Studio

În această secțiune, demonstrăm cum să antrenăm și să implementăm modele JumpStart prin interfața de utilizare Studio. Următorul videoclip arată cum să găsiți modelul Stable Diffusion pre-antrenat pe JumpStart, să îl antrenați și apoi să îl implementați. Pagina modelului conține informații valoroase despre model și despre modul de utilizare. După configurarea instanței de antrenament SageMaker, alegeți Tren. După ce modelul este antrenat, puteți implementa modelul antrenat alegând Lansa. După ce punctul final se află în stadiul „în serviciu”, este gata să răspundă la solicitările de inferență.

Pentru a accelera timpul până la inferență, JumpStart oferă un exemplu de blocnotes care arată cum să rulați inferența pe punctul 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.

JumpStart oferă, de asemenea, un notebook simplu pe care îl puteți utiliza pentru a regla fin modelul de difuzie stabilă și pentru a implementa modelul reglat fin rezultat. Îl poți folosi pentru a genera imagini distractive ale câinelui tău. Pentru a accesa blocnotesul, căutați „Generează imagini distractive ale câinelui tău” în bara de căutare JumpStart. Pentru a executa blocnotesul, puteți utiliza doar cinci imagini de antrenament și puteți încărca în folderul studio local. Dacă aveți mai mult de cinci imagini, le puteți încărca și pe acestea. Notebook-ul încarcă imaginile de antrenament în S3, antrenează modelul pe setul de date și implementează modelul rezultat. Antrenamentul poate dura 20 de minute pentru a se termina. Puteți modifica numărul de pași pentru a accelera antrenamentul. Notebook-ul oferă câteva exemple de solicitări pentru a încerca cu modelul implementat, dar puteți încerca orice solicitare doriți. De asemenea, puteți adapta caietul pentru a crea avatare ale dvs. sau ale animalelor dvs. de companie. De exemplu, în loc de câinele dvs., puteți încărca imagini cu pisica dvs. în primul pas și apoi schimbați solicitările de la câini la pisici, iar modelul va genera imagini cu pisica dvs.

Considerații de reglare fină

Antrenamentul modelelor Stable Diffusion tinde să se supraadapte rapid. Pentru a obține imagini de bună calitate, trebuie să găsim un echilibru bun între hiperparametrii de antrenament disponibili, cum ar fi numărul de pași de antrenament și rata de învățare. În această secțiune, arătăm câteva rezultate experimentale și oferim îndrumări cu privire la modul de setare a acestor parametri.

Recomandări

Luați în considerare următoarele recomandări:

  • Începeți cu imagini de antrenament de bună calitate (4–20). Dacă te antrenezi pe chipuri umane, este posibil să ai nevoie de mai multe imagini.
  • Antrenează-te pentru 200-400 de pași atunci când te antrenezi pe câini sau pisici și pe alți subiecți non-umani. Dacă te antrenezi pe chipuri umane, este posibil să ai nevoie de mai mulți pași. În cazul în care are loc supraajustarea, reduceți numărul de trepte. Dacă are loc o ajustare insuficientă (modelul reglat fin nu poate genera imaginea subiectului țintă), creșteți numărul de pași.
  • Dacă te antrenezi pe fețe non-umane, poți seta with_prior_preservation = False deoarece nu afectează semnificativ performanța. Pe fețele umane, poate fi necesar să setați with_prior_preservation=True.
  • Dacă setarea with_prior_preservation=True, utilizați tipul de instanță ml.g5.2xlarge.
  • Când se antrenează pe mai multe subiecte secvenţial, dacă subiecţii sunt foarte asemănători (de exemplu, toţi câinii), modelul reţine ultimul subiect şi uită subiectele anterioare. Dacă subiecții sunt diferiți (de exemplu, mai întâi o pisică apoi un câine), modelul reține ambii subiecți.
  • Vă recomandăm să folosiți o rată de învățare scăzută și să creșteți progresiv numărul de pași până când rezultatele sunt satisfăcătoare.

Set de date de antrenament

Calitatea modelului reglat fin este direct influențată de calitatea imaginilor de antrenament. Prin urmare, trebuie să colectați imagini de înaltă calitate pentru a obține rezultate bune. Imaginile neclare sau cu rezoluție scăzută vor afecta calitatea modelului reglat fin. Țineți cont de următorii parametri suplimentari:

  • Numărul de imagini de antrenament – Puteți ajusta modelul pe doar patru imagini de antrenament. Am experimentat cu seturi de date de antrenament de până la 4 imagini și până la 16 imagini. În ambele cazuri, reglarea fină a putut adapta modelul la subiect.
  • Formate de set de date – Am testat algoritmul de reglare fină pe imagini de format .png, .jpg și .jpeg. Pot funcționa și alte formate.
  • Rezoluția imaginii – Imaginile de antrenament pot avea orice rezoluție. Algoritmul de reglare fină va redimensiona toate imaginile de antrenament înainte de a începe reglarea fină. Acestea fiind spuse, dacă doriți să aveți mai mult control asupra decupării și redimensionării imaginilor de antrenament, vă recomandăm să redimensionați singuri imaginile la rezoluția de bază a modelului (în acest exemplu, 512×512 pixeli).

Setări pentru experiment

În experimentul din această postare, în timpul reglajului, folosim valorile implicite ale hiperparametrilor, dacă nu sunt specificate. În plus, folosim unul dintre cele patru seturi de date:

  • Câine1-8 – Câine 1 cu 8 imagini
  • Câine1-16 – Câine 1 cu 16 imagini
  • Câine2-4 – Câinele 2 cu patru imagini
  • Cat 8 – Pisica cu 8 imagini

Pentru a reduce aglomerația, arătăm doar o imagine reprezentativă a setului de date în fiecare secțiune, împreună cu numele setului de date. Puteți găsi setul complet de antrenament în secțiune Seturi de date de experimentare în acest post.

Suprapunere

Modelele Stable Diffusion tind să se supraîntâlnească atunci când reglajul fin pe câteva imagini. Prin urmare, trebuie să selectați parametri precum epochs, max_epochs, și rata de învățare cu atenție. În această secțiune, am folosit setul de date Dog1-16.

Pentru a evalua performanța modelului, evaluăm modelul ajustat pentru patru sarcini:

  • Poate modelul reglat fin să genereze imagini ale subiectului (câinele Doppler) în același cadru în care a fost antrenat?
    • Observație — Da, se poate. Este de remarcat faptul că performanța modelului crește odată cu numărul de pași de antrenament.
  • Poate modelul reglat fin să genereze imagini ale subiectului într-un cadru diferit de cel pentru care a fost antrenat? De exemplu, poate genera imagini cu Doppler pe o plajă?
    • Observație — Da, se poate. Este demn de remarcat faptul că performanța modelului crește odată cu numărul de pași de antrenament până la un anumit punct. Dacă modelul este antrenat pentru prea mult timp, totuși, performanța modelului se degradează, deoarece modelul tinde să se supraadapteze.
  • Poate modelul ajustat să genereze imagini ale unei clase din care face parte subiectul de formare? De exemplu, poate genera o imagine a unui câine generic?
    • Observație – Pe măsură ce creștem numărul de pași de antrenament, modelul începe să se supraajusteze. Ca urmare, uită clasa generică a unui câine și va produce doar imagini legate de subiect.
  • Poate modelul reglat fin să genereze imagini ale unei clase sau subiect care nu se află în setul de date de antrenament? De exemplu, poate genera o imagine a unei pisici?
    • Observație – Pe măsură ce creștem numărul de pași de antrenament, modelul începe să se supraajusteze. Ca urmare, va produce doar imagini legate de subiect, indiferent de clasa specificată.

Ajustăm modelul pentru un număr diferit de pași (prin setare max_steps hiperparametri) și pentru fiecare model reglat fin, generăm imagini pentru fiecare dintre următoarele patru solicitări (prezentate în următoarele exemple de la stânga la dreapta:

  • „O fotografie a unui câine Doppler”
  • „O fotografie cu un câine Doppler pe o plajă”
  • „O fotografie cu un câine”
  • „O fotografie cu o pisică”

Următoarele imagini sunt de la modelul antrenat cu 50 de pași.

Următorul model a fost antrenat cu 100 de pași.

Am antrenat următorul model cu 200 de pași.

Următoarele imagini sunt de la un model antrenat cu 400 de pași.

În cele din urmă, următoarele imagini sunt rezultatul a 800 de pași.

Antrenați-vă pe mai multe seturi de date

În timpul reglajului fin, este posibil să doriți să reglați mai multe subiecte și ca modelul reglat fin să poată genera imagini ale tuturor subiecților. Din păcate, JumpStart este în prezent limitat la antrenament pe un singur subiect. Nu puteți regla fin modelul pe mai multe subiecte în același timp. În plus, reglarea fină a modelului pentru diferiți subiecți duce secvenţial în ca modelul să uite primul subiect dacă subiecții sunt similari.

Luăm în considerare următoarele experimente în această secțiune:

  1. Ajustați modelul pentru Subiectul A.
  2. Reglați fin modelul rezultat de la Pasul 1 pentru Subiectul B.
  3. Generați imagini ale Subiectului A și ale Subiectului B utilizând modelul de ieșire de la Pasul 2.

În următoarele experimente, observăm că:

  • Dacă A este câinele 1 și B este câinele 2, atunci toate imaginile generate în Pasul 3 seamănă cu câinele 2
  • Dacă A este câinele 2 și B este câinele 1, atunci toate imaginile generate în Pasul 3 seamănă cu câinele 1
  • Dacă A este câinele 1 și B este pisica, atunci imaginile generate cu indicații pentru câine seamănă cu câinele 1, iar imaginile generate cu instrucțiunile pentru pisici seamănă cu pisica

Antrenează-l pe câinele 1 și apoi pe câinele 2

În pasul 1, reglam fin modelul pentru 200 de pași pe opt imagini cu câinele 1. În pasul 2, reglam modelul în continuare pentru 200 de pași pe patru imagini cu câinele 2.

Următoarele sunt imaginile generate de modelul reglat fin la sfârșitul Pasului 2 pentru diferite solicitări.

Antrenează-l pe câinele 2 și apoi pe câinele 1

În Pasul 1, reglam fin modelul pentru 200 de pași pe patru imagini cu câinele 2. În Pasul 2, reglam modelul în continuare pentru 200 de pași pe opt imagini cu câinele 1.

Următoarele sunt imaginile generate de modelul reglat fin la sfârșitul Pasului 2 cu diferite solicitări.

Antrenează-te pe câini și pisici

În pasul 1, reglam modelul pentru 200 de pași pe opt imagini ale unei pisici. Apoi reglam modelul în continuare pentru 200 de pași pe opt imagini cu câinele 1.

Următoarele sunt imaginile generate de modelul reglat fin la sfârșitul pasului 2. Imaginile cu solicitări legate de pisică arată ca pisica din Pasul 1 al reglajului fin, iar imaginile cu solicitări legate de câine arată ca câinele din Pasul 2 al reglajului fin.

Conservare prealabilă

Conservarea anterioară este o tehnică care utilizează imagini suplimentare din aceeași clasă pe care încercăm să ne antrenăm. De exemplu, dacă datele de dresaj constau în imagini ale unui anumit câine, cu conservare prealabilă, încorporăm imagini de clasă ale câinilor generici. Încearcă să evite supraadaptarea arătând imagini cu diferiți câini în timp ce antrenează un anumit câine. O etichetă care indică un anumit câine prezent în promptul de instanță lipsește din promptul de clasă. De exemplu, promptul de instanță poate fi „o fotografie a unei pisici riobugger” și promptul de clasă poate fi „o fotografie a unei pisici”. Puteți activa conservarea anterioară setând hiperparametrul with_prior_preservation = True. Dacă setarea with_prior_preservation = True, trebuie să includeți class_prompt in dataset_info.json și poate include orice imagini de clasă disponibile pentru dvs. Următorul este formatul setului de date de antrenament la setare with_prior_preservation = True:

  • Intrare – Un director care conține imaginile instanței, dataset_info.json și directorul (opțional). class_data_dir. Rețineți următoarele:
    • Imaginile pot fi în format .png, .jpg, .jpeg.
    • dataset_info.json fișierul trebuie să aibă formatul {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    • class_data_dir directorul trebuie să aibă imagini de clasă. Dacă class_data_dir nu este prezent sau nu sunt suficiente imagini deja prezente în class_data_dir, imagini suplimentare vor fi eșantionate cu class_prompt.

Pentru seturile de date, cum ar fi pisici și câini, conservarea anterioară nu are un impact semnificativ asupra performanței modelului ajustat și, prin urmare, poate fi evitată. Cu toate acestea, atunci când se antrenează pe fețe, acest lucru este necesar. Pentru mai multe informații, consultați Antrenamentul Difuziei stabile cu Dreambooth folosind difuzoare.

Tipuri de instanțe

Reglarea fină a modelelor Stable Diffusion necesită calcul accelerat oferit de instanțe acceptate de GPU. Ne experimentăm reglajul fin cu instanțe ml.g4dn.2xlarge (memorie CUDA de 16 GB, 1 GPU) și ml.g5.2xlarge (memorie CUDA de 24 GB, 1 GPU). Necesarul de memorie este mai mare atunci când se generează imagini de clasă. Prin urmare, dacă se setează with_prior_preservation=True, utilizați tipul de instanță ml.g5.2xlarge, deoarece antrenamentul se execută cu problema de memorie CUDA fără memorie pe instanța ml.g4dn.2xlarge. Scriptul de reglare fină JumpStart utilizează în prezent un singur GPU și, prin urmare, reglarea fină pe instanțe cu mai multe GPU nu va aduce un câștig de performanță. Pentru mai multe informații despre diferite tipuri de instanțe, consultați Tipuri de instanțe Amazon EC2.

Limitări și părtinire

Chiar dacă Stable Diffusion are performanțe impresionante în generarea de imagini, 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

Pentru mai multe informații despre limitări și părtinire, consultați Stable Diffusion v2-1-base Model Card. Aceste limitări pentru modelul pre-antrenat se pot transfera și la modelele reglate fin.

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 furnizat în documentul asociat Introducere în JumpStart – Text în imagine exemplu de caiet.

Modele ajustate disponibile public în JumpStart

Chiar dacă modelele Stable Diffusion lansate de StabilitateAI au performanțe impresionante, au limitări în ceea ce privește limba sau domeniul în care a fost instruit. De exemplu, modelele Stable Diffusion au fost instruite pe text în limba engleză, dar poate fi necesar să generați imagini din text non-englez. Alternativ, modelele Stable Diffusion au fost antrenate pentru a genera imagini fotorealiste, dar poate fi necesar să generați imagini animate sau artistice.

JumpStart oferă peste 80 de modele disponibile public cu diverse limbi și teme. Aceste modele sunt adesea versiuni ajustate de la modelele Stable Diffusion lansate de StabilityAI. Dacă cazul dvs. de utilizare se potrivește cu unul dintre modelele reglate fin, nu trebuie să vă colectați propriul set de date și să-l reglați fin. Puteți implementa pur și simplu unul dintre aceste modele prin interfața de utilizare Studio sau folosind API JumpStart ușor de utilizat. Pentru a implementa un model de difuzie stabilă pre-antrenat în JumpStart, consultați Generați imagini din text cu modelul de difuzie stabilă pe Amazon SageMaker JumpStart.

Următoarele sunt câteva dintre exemplele de imagini generate de diferitele modele disponibile în JumpStart.

Rețineți că aceste modele nu sunt reglate fin folosind scripturi JumpStart sau scripturi DreamBooth. Puteți descărca lista completă a modelelor ajustate disponibile public, cu exemple de solicitări de la aici.

Pentru mai multe exemple de imagini generate de la aceste modele, consultați secțiunea Modele reglate cu sursă deschisă in apendice.

Concluzie

În această postare, am arătat cum să ajustam modelul Stable Diffusion pentru text-to-image și apoi să îl implementăm folosind JumpStart. În plus, am discutat câteva dintre considerentele pe care ar trebui să le țineți în timpul reglajului fin al modelului și modul în care acesta poate afecta performanța modelului reglat fin. Am discutat, de asemenea, despre cele peste 80 de modele ajustate gata de utilizare disponibile în JumpStart. Am arătat fragmente de cod în această postare — pentru codul complet cu toți pașii din această demonstrație, consultați Introducere în JumpStart – Text în imagine exemplu de caiet. Încercați singur soluția și trimiteți-ne comentariile dvs.

Pentru a afla mai multe despre model și reglajul DreamBooth, consultați următoarele resurse:

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


Despre Autori

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.

Heiko Hotz este arhitect senior de soluții pentru AI și învățare automată, cu un accent special pe procesarea limbajului natural (NLP), modelele de limbaj mari (LLM) și AI generativă. Înainte de acest rol, a fost șeful departamentului de știință a datelor pentru Serviciul Clienți al Amazon UE. Heiko îi ajută pe clienții noștri să aibă succes în călătoria lor AI/ML pe AWS și a lucrat cu organizații din multe industrii, inclusiv asigurări, servicii financiare, media și divertisment, asistență medicală, utilități și producție. În timpul liber, Heiko călătorește cât mai mult posibil.


Anexă: Seturi de date experimentale

Această secțiune conține seturile de date utilizate în experimentele din această postare.

Câine1-8

Câine1-16

Câine2-4

Câine3-8

Anexă: Modele reglate cu sursă deschisă

Următoarele sunt câteva dintre exemplele de imagini generate de diferitele modele disponibile în JumpStart. Fiecare imagine este legendă cu a model_id începând cu un prefix huggingface-txt2img- urmat de promptul folosit pentru a genera imaginea în rândul următor.

Timestamp-ul:

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