Finomhangolhatja a szöveg-képké alakítható stabil diffúziós modelleket az Amazon SageMaker JumpStart segítségével

Finomhangolhatja a szöveg-képké alakítható stabil diffúziós modelleket az Amazon SageMaker JumpStart segítségével

Forrás csomópont: 1968900

2022 novemberében mi bejelentés amellyel az AWS ügyfelei képeket generálhatnak szövegből Stabil diffúzió modellek be Amazon SageMaker JumpStart. A Stable Diffusion egy mély tanulási modell, amely lehetővé teszi valósághű, kiváló minőségű képek és lenyűgöző művészetek létrehozását néhány másodperc alatt. Bár a lenyűgöző képek létrehozása a művészettől az NFT-ig és azon túl is használható iparágakban, ma már azt is elvárjuk, hogy az AI személyre szabható legyen. Ma bejelentjük, hogy személyre szabhatja a képgenerálási modellt az Ön használati esetéhez, ha finomhangolja az egyéni adatkészletén Amazon SageMaker JumpStart. Ez hasznos lehet művészeti alkotások, logók, egyedi dizájnok, NFT-k stb., vagy szórakoztató dolgok, például háziállatairól készített egyéni mesterséges intelligencia-képek vagy saját avatarok létrehozásakor.

Ebben a bejegyzésben áttekintést adunk arról, hogyan lehet kétféleképpen finomhangolni a stabil diffúziós modellt: programozottan JumpStart API-k elérhető a SageMaker Python SDK, valamint a JumpStart felhasználói felülete (UI). Amazon SageMaker Studio. Azt is megvitatjuk, hogyan hozhatunk tervezési döntéseket, beleértve az adatkészlet minőségét, a betanítási adatkészlet méretét, a hiperparaméterértékek kiválasztását és a több adatkészletre való alkalmazhatóságot. Végül a JumpStarthoz nemrég hozzáadott több mint 80 nyilvánosan elérhető finomhangolt modellt tárgyaljuk, amelyek különböző beviteli nyelvekkel és stílusokkal rendelkeznek.

Stabil diffúziós és transzfer tanulás

A Stable Diffusion egy szöveg-kép modell, amely lehetővé teszi fotorealisztikus képek létrehozását csupán szöveges promptból. A diffúziós modell úgy edz, hogy megtanulja eltávolítani a valós képhez hozzáadott zajt. Ez a zajcsökkentési folyamat valósághű képet hoz létre. Ezek a modellek csak szövegből is képesek képeket generálni úgy, hogy a generálási folyamatot a szövegre kondicionálják. Például a Stabil diffúzió egy látens diffúzió, ahol a modell megtanulja felismerni az alakzatokat egy tiszta zajos képen, és fokozatosan fókuszba hozza ezeket az alakzatokat, ha az alakzatok egyeznek a bemeneti szöveg szavaival. A szöveget először egy látens térbe kell ágyazni egy nyelvi modell segítségével. Ezután egy sor zaj-hozzáadási és zajeltávolítási műveletet hajtanak végre a látens térben U-Net architektúrával. Végül a zajmentes kimenet dekódolásra kerül a pixeltérbe.

A gépi tanulásban (ML) azt a képességet nevezzük, hogy az egyik tartományban tanult tudást átvihetjük a másikba transzfer tanulás. Az átviteli tanulás segítségével pontos modelleket állíthat elő kisebb adatkészletein, sokkal alacsonyabb képzési költségekkel, mint az eredeti modell betanításával kapcsolatos költségek. Az átviteli tanulással akár öt képpel is finomhangolhatja a stabil diffúziós modellt saját adatkészletén. Például a bal oldalon a modell finomhangolására használt Doppler nevű kutya tréningképei, középen és jobb oldalon a finomhangolt modell által generált képek láthatók, amikor arra kérik, hogy jósolják meg Doppler képét a tengerparton, valamint egy ceruzavázlat.

A bal oldalon a modell finomhangolásához használt fehér szék képei, valamint a finomhangolt modell által generált vörös szék képe látható. A jobb oldalon a modell finomhangolására használt oszmán képe, valamint egy oszmánon ülő macska képe látható.

A nagy modellek, például a Stable Diffusion finomhangolásához általában tanító szkripteket kell biztosítania. Számos probléma van, beleértve a memóriahiányt, a rakomány méretével kapcsolatos problémákat és még sok mást. Ezenkívül végpontok közötti teszteket kell futtatnia, hogy megbizonyosodjon arról, hogy a szkript, a modell és a kívánt példány hatékonyan működik együtt. A JumpStart leegyszerűsíti ezt a folyamatot azáltal, hogy használatra kész szkripteket biztosít, amelyeket alaposan teszteltek. A Stable Diffusion modellekhez készült JumpStart finomhangoló szkript a finomhangoló szkriptre épül. álombódé. Ezeket a szkripteket egyetlen kattintással érheti el a Studio felhasználói felületén, vagy nagyon kevés kódsorral a következőn keresztül JumpStart API-k.

Vegye figyelembe, hogy a Stable Diffusion modell használatával Ön elfogadja a CreativeML Open RAIL++-M licenc.

A JumpStart programozott használata a SageMaker SDK-val

Ez a rész leírja, hogyan lehet betanítani és telepíteni a modellt a SageMaker Python SDK. Kiválasztunk egy megfelelő előre betanított modellt a JumpStartban, betanítjuk ezt a modellt egy SageMaker képzési feladattal, és telepítjük a betanított modellt egy SageMaker végpontra. Ezenkívül következtetéseket futtatunk a telepített végponton, mindezt a SageMaker Python SDK használatával. A következő példák kódrészleteket tartalmaznak. A teljes kódért a bemutató összes lépésével együtt tekintse meg a Bevezetés a JumpStart – Szövegből képbe példafüzet.

A Stable Diffusion modell betanítása és finomhangolása

Minden modellt egyedileg azonosítanak model_id. A következő kód bemutatja, hogyan lehet finomhangolni a Stable Diffusion 2.1-es alapmodellt model_id model-txt2img-stabilityai-stable-diffusion-v2-1-base egyéni edzési adatkészleten. A teljes listáért model_id értékeket és azt, hogy mely modellek finomhangolhatók, lásd Beépített algoritmusok előre betanított modelltáblázattal. Az egyes model_id, annak érdekében, hogy SageMaker képzési munkát indítsunk a Becslő A SageMaker Python SDK osztályában le kell töltenie a Docker-kép-URI-t, a betanító szkript-URI-t és az előre betanított modell-URI-t a SageMakerben biztosított segédfunkciókon keresztül. A betanítási parancsfájl URI tartalmazza az összes szükséges kódot az adatfeldolgozáshoz, az előre betanított modell betöltéséhez, a modell betanításához és a betanított modell mentéséhez következtetés céljából. Az előre betanított modell URI tartalmazza az előre betanított modell architektúra definíciót és a modell paramétereit. Az előre betanított modell URI az adott modellre jellemző. Az előre betanított modell tarballokat előre letöltöttük a Hugging Face oldalról, és a megfelelő modell aláírással mentettük Amazon egyszerű tárolási szolgáltatás (Amazon S3) gyűjtőhelyeken, így a képzési feladat hálózati elszigetelten fut. Lásd a következő kódot:

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
)

Ezekkel a modell-specifikus képzési műtermékekkel megszerkesztheti a Becslő osztály:

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

Képzési adatkészlet

Az alábbi utasítások szerint kell formázni az edzési adatokat:

  • Bemenet – A példányképeket tartalmazó könyvtár, dataset_info.json, a következő konfigurációval:
    • A képek .png, .jpg vagy .jpeg formátumúak lehetnek
    • A dataset_info.json fájl formátumúnak kell lennie {'instance_prompt':<<instance_prompt>>}
  • teljesítmény – Egy betanított modell, amelyből következtetni lehet

Az S3 útvonalnak így kell kinéznie s3://bucket_name/input_directory/. Jegyezze meg a zárójelet / megkövetelt.

A következő példa az edzésadatok formátumára:

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

Az adatok előzetes megőrzése közbeni formázására vonatkozó utasításokért lásd a részt Előzetes megőrzés ebben a bejegyzésben.

A macskaképek alapértelmezett adatkészletét biztosítjuk. Nyolc képből áll (a példányprompnak megfelelő példányképek), amelyek egyetlen macskáról készültek, osztályképek nélkül. Letölthető innen GitHub. Ha az alapértelmezett adatkészletet használja, próbálkozzon a „fotó egy riobugger macskáról” üzenettel, miközben következtetéseket von le a bemutató notebookban.

Licenc: MIT.

Hiperparaméterek

Ezután az egyéni adatkészleten történő tanulás átviteléhez szükség lehet a betanítási hiperparaméterek alapértelmezett értékeinek módosítására. Ezeknek a hiperparamétereknek az alapértelmezett értékeivel együtt lekérheti a Python szótárát a hívással hyperparameters.retrieve_default, szükség szerint frissítse őket, majd adja át a Becslő osztálynak. Lásd a következő kódot:

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"

A következő hiperparamétereket támogatja a finomhangoló algoritmus:

  • előzetes_megőrzéssel – Jelölje meg a korábbi tartósítási veszteség hozzáadásához. Az előzetes tartósítás rendszeresítő, amely elkerüli a túlillesztést. (Lehetőségek: [“True”,“False”], alapértelmezett: “False”.)
  • osztályképek száma – A minimális osztályképek az előzetes megőrzési veszteséghez. Ha with_prior_preservation = True és már nincs elég kép benne class_data_dir, további képekből mintát veszünk class_prompt. (Értékek: pozitív egész szám, alapértelmezett: 100.)
  • Korszakok – A finomhangoló algoritmus által a betanítási adatkészleten keresztül végrehajtott lépések száma. (Értékek: pozitív egész, alapértelmezett: 20.)
  • Max_lépések – Az elvégzendő edzési lépések száma. Ha nem None, felülírja a korszakokat. (Értékek: “None” vagy egy egész szám, alapértelmezett: “None”.)
  • Csomó méret –: A modellsúlyok frissítése előtt feldolgozott edzési példák száma. Ugyanaz, mint a kötegméret az osztályképek generálása során, ha with_prior_preservation = True. (Értékek: pozitív egész szám, alapértelmezett: 1.)
  • tanulási_ráta – Az a sebesség, amellyel a modellsúlyok frissítésre kerülnek az egyes képzési példák kötegeinek kidolgozása után. (Értékek: pozitív lebegés, alapértelmezett: 2e-06.)
  • korábbi_veszteség_súly – Az előzetes tartósítási veszteség súlya. (Értékek: pozitív lebegés, alapértelmezett: 1.0.)
  • center_crop – Levágja-e a képeket a kívánt felbontásra való átméretezés előtt. (Lehetőségek: [“True”/“False”], alapértelmezett: “False”.)
  • lr_scheduler – A tanulási ütem ütemező típusa. (Lehetőségek: ["linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup"], alapértelmezett: "constant".) További információkért lásd Tanulási ütemütemezők.
  • adam_weight_decay – Az összes rétegre alkalmazandó súlycsökkentés (ha nem nulla), kivéve az összes torzítást és LayerNorm súlyok be AdamW optimalizáló. (Érték: float, alapértelmezett: 1e-2.)
  • adam_beta1 – A béta1 hiperparaméter (exponenciális csökkenési sebesség az első pillanat becsléseihez) a AdamW optimalizáló. (Érték: float, alapértelmezett: 0.9.)
  • adam_beta2 – A béta2 hiperparaméter (exponenciális csökkenési sebesség az első pillanat becsléseihez) a AdamW optimalizáló. (Érték: float, alapértelmezett: 0.999.)
  • adam_epsilon - A epsilon hiperparaméter a AdamW optimalizáló. Általában kis értékre van állítva, hogy elkerüljük a 0-val való osztást. (Érték: float, alapértelmezés: 1e-8.)
  • gradiens_accumulation_steps – A visszafelé/frissítési lépések végrehajtása előtt összegyűjtendő frissítési lépések száma. (Érték: egész, alapértelmezett: 1.)
  • max_grad_norm – A maximális gradiens norma (a gradiens kivágásához). (Érték: float, alapértelmezett: 1.0.)
  • mag – Rögzítse a véletlenszerű állapotot, hogy reprodukálható eredményeket érjen el az edzés során. (Érték: egész szám, alapértelmezett: 0.)

Telepítse a jól képzett modellt

A modell betanítása után közvetlenül telepítheti a modellt egy állandó, valós idejű végpontra. Lekérjük a szükséges Docker Image URI-kat és parancsfájl-URI-kat, és telepítjük a modellt. Lásd a következő kódot:

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

A bal oldalon egy riobugger nevű macska tréningképei láthatók, amelyeket a modell finomhangolására használnak (alapértelmezett paraméterek, kivéve max_steps = 400). Középen és jobb oldalon a finomhangolt modell által generált képek láthatók, amikor arra kérik, hogy jósolják meg Riobugger képét a tengerparton és egy ceruzavázlatot.

A következtetéssel kapcsolatos további részletekért, beleértve a támogatott paramétereket, a válaszformátumot és így tovább, tekintse meg a következőt: Generáljon képeket szövegből az Amazon SageMaker JumpStart stabil diffúziós modelljével.

A JumpStart elérése a Studio felhasználói felületén keresztül

Ebben a részben bemutatjuk, hogyan lehet betanítani és telepíteni a JumpStart modelleket a Studio felhasználói felületén keresztül. A következő videó bemutatja, hogyan találhatja meg az előre betanított Stable Diffusion modellt a JumpStarton, hogyan taníthatja be, majd telepítheti. A modelloldal értékes információkat tartalmaz a modellről és annak használatáról. A SageMaker képzési példány konfigurálása után válassza a lehetőséget Vonat. A modell betanítása után kiválasztással telepítheti a betanított modellt Telepítése. Miután a végpont a „szolgáltatásban” szakaszban van, készen áll arra, hogy válaszoljon a következtetési kérésekre.

A következtetéshez szükséges idő felgyorsítása érdekében a JumpStart egy mintajegyzetfüzetet biztosít, amely bemutatja, hogyan lehet következtetést lefuttatni az újonnan létrehozott végponton. A jegyzetfüzet Studio alkalmazásban való eléréséhez válassza a lehetőséget Nyissa meg a Jegyzetfüzetet a Használja a Studio végpontját részt a modell végpont oldalán.

A JumpStart egy egyszerű notebookot is biztosít, amellyel finomhangolhatja a stabil diffúziós modellt, és telepítheti az eredményül kapott finomhangolt modellt. Használhatja vicces képek készítésére kutyájáról. A jegyzetfüzet eléréséhez keressen rá a JumpStart keresősávjában a „Mókás képek létrehozása a kutyájáról” kifejezésre. A notebook futtatásához mindössze öt edzésképet használhat, és feltöltheti a helyi stúdió mappájába. Ha ötnél több képed van, akkor azokat is feltöltheted. A Notebook feltölti a képzési képeket az S3-ba, betanítja a modellt az adatkészletbe, és telepíti az eredményül kapott modellt. Az edzés befejezése 20 percig tarthat. Az edzés felgyorsítása érdekében módosíthatja a lépések számát. A Jegyzetfüzet néhány mintaüzenetet kínál a telepített modellel való próbálkozáshoz, de bármilyen tetszőleges promptot kipróbálhat. A notebookot úgy is módosíthatja, hogy avatarokat készítsen saját magáról vagy házi kedvenceiről. Például a kutyája helyett első lépésben feltölthet képeket a macskájáról, majd módosíthatja a figyelmeztetéseket kutyákról macskákra, és a modell képeket generál a macskájáról.

Finomhangolási szempontok

A Stabil diffúziós modellek edzése hajlamos gyorsan túlilleszkedni. Ahhoz, hogy jó minőségű képeket kapjunk, jó egyensúlyt kell találnunk a rendelkezésre álló képzési hiperparaméterek, például a képzési lépések száma és a tanulási sebesség között. Ebben a részben néhány kísérleti eredményt mutatunk be, és útmutatást adunk a paraméterek beállításához.

ajánlások

Vegye figyelembe a következő ajánlásokat:

  • Kezdje a jó minőségű edzésképekkel (4–20). Ha emberi arcokon edz, több képre lehet szüksége.
  • Edzen 200–400 lépést, ha kutyán vagy macskán és más nem emberi alanyon edz. Ha emberi arcokon edz, több lépésre lehet szüksége. Ha túlillesztés történik, csökkentse a lépések számát. Ha alulillesztés történik (a finomhangolt modell nem tudja létrehozni a céltárgy képét), növelje a lépések számát.
  • Ha nem emberi arcokon edz, beállíthatja with_prior_preservation = False mert ez nem befolyásolja jelentősen a teljesítményt. Az emberi arcokon előfordulhat, hogy be kell állítani with_prior_preservation=True.
  • Ha beállítás with_prior_preservation=True, használja az ml.g5.2xlarge példánytípust.
  • Ha több tárgyon egymás után edz, ha az alanyok nagyon hasonlóak (például az összes kutya), a modell megtartja az utolsó témát, és elfelejti az előző alanyokat. Ha az alanyok különbözőek (például először egy macska, majd egy kutya), a modell mindkét alanyt megtartja.
  • Javasoljuk, hogy alacsony tanulási sebességet használjon, és fokozatosan növelje a lépések számát, amíg az eredmény kielégítő lesz.

Képzési adatkészlet

A finomhangolt modell minőségét közvetlenül befolyásolja az edzésképek minősége. Ezért jó minőségű képeket kell gyűjtenie a jó eredmények eléréséhez. Az elmosódott vagy alacsony felbontású képek befolyásolják a finomhangolt modell minőségét. Ne feledje a következő további paramétereket:

  • Edzésképek száma – Akár négy edzésképen is finomhangolhatja a modellt. Kísérleteztünk 4 képből és 16 képből álló betanítási adatkészletekkel. A finomhangolás mindkét esetben a témához igazította a modellt.
  • Adatkészlet-formátumok – A finomhangoló algoritmust .png, .jpg és .jpeg formátumú képeken teszteltük. Más formátumok is működhetnek.
  • Kép felbontás – Az edzésképek bármilyen felbontásúak lehetnek. A finomhangoló algoritmus az összes edzésképet átméretezi a finomhangolás megkezdése előtt. Ennek ellenére, ha jobban szabályozni szeretné a képzési képek kivágását és átméretezését, javasoljuk, hogy saját maga méretezze át a képeket a modell alapfelbontására (ebben a példában 512 × 512 pixel).

Kísérleti beállítások

Ebben a bejegyzésben a kísérletben a finomhangolás során a hiperparaméterek alapértelmezett értékeit használjuk, hacsak nincs megadva. Ezenkívül a négy adatkészlet egyikét használjuk:

  • Kutya1-8 – 1. kutya 8 képpel
  • Kutya1-16 – 1. kutya 16 képpel
  • Kutya2-4 – 2. kutya négy képpel
  • 8. macska – Macska 8 képpel

A zsúfoltság csökkentése érdekében minden szakaszban csak egy reprezentatív képet jelenítünk meg az adatkészletről az adatkészlet nevével együtt. A teljes képzési készletet megtalálja a rovatban Kísérleti adatkészletek ebben a bejegyzésben.

Túlfeszítés

A stabil diffúziós modellek néhány kép finomhangolásakor általában túlillenek. Ezért ki kell választania a paramétereket, mint pl epochs, max_epochsés a tanulási sebességet óvatosan. Ebben a részben a Dog1-16 adatkészletet használtuk.

A modell teljesítményének értékeléséhez négy feladatra értékeljük a finomhangolt modellt:

  • Képes-e a finomhangolt modell az alanyról (Doppler-kutyáról) képeket készíteni ugyanabban a beállításban, mint ahogyan kiképezte?
    • Megfigyelés - Igen, tud. Érdemes megjegyezni, hogy a modell teljesítménye az edzési lépések számával nő.
  • A finomhangolt modell képes képeket készíteni a témáról más környezetben, mint amilyenre betanították? Például képes-e Doppler-képeket generálni a tengerparton?
    • Megfigyelés - Igen, tud. Érdemes megjegyezni, hogy a modell teljesítménye nő az edzési lépések számával egy bizonyos pontig. Ha azonban a modellt túl sokáig képezik, a modell teljesítménye romlik, mivel a modell hajlamos túlilleszkedni.
  • A finomhangolt modell képes-e képeket generálni egy olyan osztályról, amelyhez a képzési tárgy tartozik? Például generálhat-e egy képet egy általános kutyáról?
    • Megfigyelés – Ahogy növeljük az edzési lépések számát, úgy kezd túlfitni a modell. Ennek eredményeként elfelejti a kutya általános osztályát, és csak a témához kapcsolódó képeket készít.
  • Képes-e a finomhangolt modell a képzési adatkészletben nem szereplő osztályról vagy tantárgyról képeket generálni? Például képes egy macska képet generálni?
    • Megfigyelés – Ahogy növeljük az edzési lépések számát, úgy kezd túlfitni a modell. Ennek eredményeként a megadott osztálytól függetlenül csak a tárgyhoz kapcsolódó képeket készít.

Finomhangoljuk a modellt különböző számú lépéshez (beállítással max_steps hiperparaméterek), és minden egyes finomhangolt modellhez képeket generálunk a következő négy prompt mindegyikén (a következő példákban balról jobbra haladva):

  • "Fénykép egy Doppler kutyáról"
  • "Fénykép egy Doppler kutyáról a tengerparton"
  • “Fénykép egy kutyáról”
  • "Fénykép egy macskáról"

A következő képek az 50 lépéssel betanított modellről származnak.

A következő modellt 100 lépéssel betanították.

Az alábbi modellt 200 lépésben betanítottuk.

A következő képek egy 400 lépésben betanított modellről származnak.

Végül a következő képek 800 lépés eredménye.

Tanuljon több adatkészleten

A finomhangolás során érdemes lehet több témán is finomhangolni, és a finomhangolt modell képes az összes témáról képeket generálni. Sajnos a JumpStart jelenleg egyetlen tárgyra korlátozódik. A modellt nem lehet egyszerre több témára finomítani. Továbbá a modell finomhangolása különböző alanyokra azt eredményezi, hogy a modell elfelejti az első alanyt, ha az alanyok hasonlóak.

Ebben a részben a következő kísérleteket vesszük figyelembe:

  1. Finomhangolja a modellt az A tárgyhoz.
  2. Finomhangolja a kapott modellt az 1. lépésből a B alanyhoz.
  3. A 2. lépés kimeneti modelljének segítségével állítson elő képeket az A és B alanyról.

A következő kísérletekben azt tapasztaljuk, hogy:

  • Ha A a kutya 1 és B a kutya 2, akkor a 3. lépésben generált összes kép hasonlít a 2. kutyára
  • Ha A a kutya 2 és B a kutya 1, akkor a 3. lépésben generált összes kép hasonlít a 1. kutyára
  • Ha A a kutya 1 és B a macska, akkor a kutyaparancsokkal generált képek a kutyára 1 hasonlítanak, a macskautasításokkal generált képek pedig a macskákra.

Tanítsd az 1., majd a 2. kutyát

Az 1. lépésben 200 lépésre finomhangoljuk a modellt az 1. kutya nyolc képén. A 2. lépésben tovább finomítjuk a modellt 200 lépésre a 2. kutya négy képén.

Az alábbiak a finomhangolt modell által a 2. lépés végén generált képek a különböző promptokhoz.

Tanítsd az 2., majd a 1. kutyát

Az 1. lépésben 200 lépésre finomhangoljuk a modellt a 2. kutya négy képén. A 2. lépésben tovább finomítjuk a modellt 200 lépésre az 1. kutya nyolc képén.

Az alábbiakban a finomhangolt modell által a 2. lépés végén generált képek láthatók különböző promptokkal.

Vonat kutyákon és macskákon

Az 1. lépésben 200 lépésre finomhangoljuk a modellt egy macska nyolc képén. Ezután 200 lépésre tovább finomítjuk a modellt az 1. kutya nyolc képén.

Az alábbiakban a finomhangolt modell által a 2. lépés végén generált képek láthatók. A macskákkal kapcsolatos figyelmeztetéseket tartalmazó képek úgy néznek ki, mint a finomhangolás 1. lépésében szereplő macska, a kutyával kapcsolatos figyelmeztetést tartalmazó képek pedig a kutyára hasonlítanak A finomhangolás 2. lépése.

Előzetes megőrzés

Az előzetes megőrzés olyan technika, amely további képeket használ ugyanabból az osztályból, amelyre gyakorolni próbálunk. Például, ha a képzési adatok egy adott kutya képeiből állnak, előzetes megőrzéssel, általános kutyák osztályképeit is beépítjük. Megpróbálja elkerülni a túlillesztést azáltal, hogy különböző kutyák képeit jeleníti meg, miközben egy adott kutyára idomít. Az osztálypromptból hiányzik egy címke, amely az adott kutyát jelzi a példánypromptban. Például a példaprompt lehet „egy macska fotója”, az osztályprompt pedig „egy macska fényképe”. Az előzetes megőrzést a hiperparaméter beállításával engedélyezheti with_prior_preservation = True. Ha beállítás with_prior_preservation = True, szerepelnie kell class_prompt in dataset_info.json és tartalmazhat az Ön számára elérhető osztályképeket. A következő a képzési adatkészlet formátuma beállításkor with_prior_preservation = True:

  • Bemenet – A példányképeket tartalmazó könyvtár, dataset_info.json és (opcionális) címtár class_data_dir. Vegye figyelembe a következőket:
    • A képek .png, .jpg, .jpeg formátumúak lehetnek.
    • A dataset_info.json fájl formátumúnak kell lennie {'instance_prompt':<<instance_prompt>>,'class_prompt':<<class_prompt>>}.
    • A class_data_dir a könyvtárnak osztályképeket kell tartalmaznia. Ha class_data_dir nincs jelen, vagy nincs már elég kép benne class_data_dir, további képekből mintát veszünk class_prompt.

Az olyan adatkészletek esetében, mint a macskák és kutyák, az előzetes megőrzés nem befolyásolja jelentősen a finomhangolt modell teljesítményét, ezért elkerülhető. Az arcok edzésénél azonban ez szükséges. További információkért lásd: Stabil diffúzió képzése a Dreambooth segítségével diffúzorokkal.

Példánytípusok

A stabil diffúziós modellek finomhangolása gyorsított számítást igényel, amelyet a GPU által támogatott példányok biztosítanak. Finomhangolásunkat ml.g4dn.2xlarge (16 GB CUDA memória, 1 GPU) és ml.g5.2xlarge (24 GB CUDA memória, 1 GPU) példányokkal kísérletezzük. Az osztályképek generálásakor nagyobb a memóriaigény. Ezért, ha beállítás with_prior_preservation=True, használja az ml.g5.2xlarge példánytípust, mert a képzés az ml.g4dn.2xlarge példányon a CUDA elfogyott a memória problémába ütközik. A JumpStart finomhangoló szkript jelenleg egyetlen GPU-t használ, ezért a több GPU-s példányokon végzett finomhangolás nem hoz teljesítménynövekedést. A különböző példánytípusokkal kapcsolatos további információkért lásd: Amazon EC2 példánytípusok.

Korlátozások és elfogultság

Annak ellenére, hogy a Stable Diffusion lenyűgöző teljesítményt nyújt a képek létrehozásában, számos korláttól és torzítástól szenved. Ezek közé tartozik, de nem kizárólagosan:

  • Előfordulhat, hogy a modell nem generál pontos arcokat vagy végtagokat, mert a képzési adatok nem tartalmaznak elegendő képet ezekkel a funkciókkal
  • A modellt a LAION-5B adatkészlet, amely felnőtt tartalommal rendelkezik, és további megfontolások nélkül nem biztos, hogy alkalmas a termék felhasználására
  • Előfordulhat, hogy a modell nem működik jól a nem angol nyelvekkel, mert a modellt angol nyelvű szövegre tanították
  • A modell nem tud jó szöveget generálni a képeken belül

A korlátozásokról és torzításokról további információért lásd: Stable Diffusion v2-1-base modellkártya. Az előre betanított modellre vonatkozó korlátozások a finomhangolt modellekre is vonatkozhatnak.

Tisztítsuk meg

Miután befejezte a jegyzetfüzet futtatását, törölje a folyamat során létrehozott összes erőforrást, hogy biztosítsa a számlázás leállítását. A végpont megtisztításához szükséges kód megtalálható a kapcsolódó oldalon Bevezetés a JumpStart – Szövegből képbe példafüzet.

Nyilvánosan elérhető finomhangolt modellek a JumpStartban

Annak ellenére, hogy a Stable Diffusion modelleket adta ki StabilitásAI lenyűgöző teljesítményt nyújtanak, korlátozottak a nyelv vagy a tartomány tekintetében, amelyen a képzés készült. Például a stabil diffúziós modelleket angol szövegre tanították, de előfordulhat, hogy nem angol szövegből kell képeket generálnia. Alternatív megoldásként a Stable Diffusion modelleket arra képezték ki, hogy fotorealisztikus képeket hozzanak létre, de előfordulhat, hogy animált vagy művészi képeket kell készíteni.

A JumpStart több mint 80 nyilvánosan elérhető modellt kínál különböző nyelveken és témákkal. Ezek a modellek gyakran a StabilityAI által kiadott Stable Diffusion modellek finomhangolt változatai. Ha a használati eset egyezik az egyik finomhangolt modellel, akkor nem kell saját adatkészletet gyűjtenie és finomhangolnia. Egyszerűen telepítheti az egyik ilyen modellt a Studio UI-n vagy egyszerűen használható JumpStart API-k segítségével. Az előre betanított Stable Diffusion modell JumpStartban történő telepítéséhez lásd: Generáljon képeket szövegből az Amazon SageMaker JumpStart stabil diffúziós modelljével.

Az alábbiakban néhány példát mutatunk be a JumpStartban elérhető különböző modellek által generált képekre.

Vegye figyelembe, hogy ezek a modellek nem JumpStart-szkriptekkel vagy DreamBooth-szkriptekkel vannak finomhangolva. Letöltheti a nyilvánosan elérhető finomhangolt modellek teljes listáját példapromptokkal együtt a webhelyről itt.

Az ezekből a modellekből generált példákért lásd a részt Nyílt forráskódú, finomhangolt modellek a mellékletben.

Következtetés

Ebben a bejegyzésben bemutattuk, hogyan lehet finomhangolni a stabil diffúziós modellt a szöveg-képhez, majd telepíteni a JumpStart segítségével. Ezenkívül megvitattunk néhány szempontot, amelyeket a modell finomhangolása során figyelembe kell venni, és hogy ez hogyan befolyásolhatja a finomhangolt modell teljesítményét. Megbeszéltük a JumpStartban elérhető több mint 80 használatra kész, finomhangolt modellt is. Ebben a bejegyzésben kódrészleteket mutattunk be – a teljes kódot és a bemutató összes lépését lásd a Bevezetés a JumpStart – Szövegből képbe példafüzet. Próbálja ki a megoldást saját maga, és küldje el nekünk észrevételeit.

Ha többet szeretne megtudni a modellről és a DreamBooth finomhangolásáról, tekintse meg a következő forrásokat:

Ha többet szeretne megtudni a JumpStartról, tekintse meg a következő blogbejegyzéseket:


A szerzőkről

Dr. Vivek Madan az Amazon SageMaker JumpStart csapatának alkalmazott tudósa. PhD fokozatát az Illinoisi Egyetemen szerezte, az Urbana-Champaign-ben, és a Georgia Tech posztdoktori kutatója volt. Aktív kutatója a gépi tanulásnak és az algoritmustervezésnek, és publikált előadásokat EMNLP, ICLR, COLT, FOCS és SODA konferenciákon.

Heiko Hotz a mesterséges intelligencia és a gépi tanulás vezető megoldástervezője, különös tekintettel a természetes nyelvi feldolgozásra (NLP), a nagy nyelvi modellekre (LLM) és a generatív mesterséges intelligenciára. Ezt megelőzően az Amazon EU-s ügyfélszolgálatának adattudományi vezetője volt. A Heiko segít ügyfeleinknek abban, hogy sikeresek legyenek az AI/ML útjukon az AWS-ben, és számos iparágban dolgozott együtt szervezetekkel, beleértve a biztosítást, a pénzügyi szolgáltatásokat, a médiát és a szórakoztatást, az egészségügyet, a közműveket és a gyártást. Szabadidejében Heiko minél többet utazik.


Függelék: Kísérleti adatkészletek

Ez a szakasz tartalmazza a kísérletekben használt adatkészleteket ebben a bejegyzésben.

Kutya1-8

Kutya1-16

Kutya2-4

Kutya3-8

Függelék: Nyílt forráskódú Finomhangolt modellek

Az alábbiakban néhány példát mutatunk be a JumpStartban elérhető különböző modellek által generált képekre. Minden kép felirata a model_id előtaggal kezdődően huggingface-txt2img- majd a következő sorban a kép generálásához használt prompt.

Időbélyeg:

Még több AWS gépi tanulás