Az LLM-ek nem csak szöveg generálására alkalmasak. Szöveges leírások alapján képek is létrehozhatók. A képek mint modalitás számos területen hasznosak lehetnek, például az orvostechnika, építészet, turizmus, játékfejlesztés és más területeken. Ebben a fejezetben a két legnépszerűbb képgeneráló modellt, a DALL-E-t és a Midjourney-t vizsgáljuk meg.
Ebben a leckében az alábbiakat tárgyaljuk:
- Képgenerálás és annak hasznossága.
- DALL-E és Midjourney: mik ezek, és hogyan működnek.
- Hogyan építhetünk képgeneráló alkalmazást.
A lecke elvégzése után képes leszel:
- Képgeneráló alkalmazást építeni.
- Meghatározni az alkalmazás határait meta promptokkal.
- Dolgozni a DALL-E és Midjourney modellekkel.
A képgeneráló alkalmazások remek lehetőséget kínálnak a Generatív AI képességeinek felfedezésére. Például az alábbiakra használhatók:
-
Képszerkesztés és szintézis. Különféle felhasználási esetekhez generálhatsz képeket, például képszerkesztéshez és képszintézishez.
-
Számos iparágban alkalmazható. Képek generálására is használhatók különféle iparágakban, mint például orvostechnika, turizmus, játékfejlesztés és más területek.
A lecke részeként továbbra is az Edu4All startupunkkal dolgozunk. A diákok képeket készítenek a feladataikhoz, hogy pontosan milyen képeket, az a diákokon múlik. Lehetnek például illusztrációk saját meséjükhöz, új karakterek létrehozása történetükhöz, vagy ötleteik és koncepcióik vizualizálása.
Íme, mit generálhatnak az Edu4All diákjai például, ha az osztályban műemlékekkel dolgoznak:
egy ilyen prompt segítségével:
"Kutya az Eiffel-torony mellett kora reggeli napsütésben"
A DALL-E és a Midjourney a két legnépszerűbb képgeneráló modell, amelyek lehetővé teszik, hogy promptok segítségével képeket generálj.
Kezdjük a DALL-E-vel, amely egy generatív AI modell, amely szöveges leírásokból képeket generál.
A DALL-E két modell, a CLIP és a diffúz figyelem kombinációja.
-
CLIP, egy modell, amely beágyazásokat generál, amelyek az adatok numerikus reprezentációi, képekből és szövegekből.
-
Diffúz figyelem, egy modell, amely beágyazásokból képeket generál. A DALL-E-t képek és szövegek adatállományán képezték, és szöveges leírásokból képek generálására használható. Például a DALL-E képes generálni egy kalapos macska vagy egy mohawk frizurás kutya képét.
A Midjourney hasonló módon működik, mint a DALL-E, szöveges promptokból generál képeket. A Midjourney szintén használható képek generálására olyan promptokkal, mint például „macska kalapban” vagy „kutya mohawk frizurával”.
Kép forrása: Wikipedia, Midjourney által generált kép
Először is, DALL-E. A DALL-E egy generatív AI modell, amely a transzformer architektúrán alapul, egy autoregresszív transzformerrel.
Az autoregresszív transzformer meghatározza, hogyan generál egy modell képeket szöveges leírásokból: egy pixel generálásával kezdi, majd a generált pixeleket használja a következő pixel generálásához. Több rétegen halad át egy neurális hálózatban, amíg a kép elkészül.
Ezzel a folyamattal a DALL-E szabályozza a generált kép attribútumait, objektumait, jellemzőit és egyebeket. Azonban a DALL-E 2 és 3 nagyobb kontrollt biztosít a generált kép felett.
Mit igényel egy képgeneráló alkalmazás építése? Az alábbi könyvtárakra van szükséged:
- python-dotenv, erősen ajánlott ezt a könyvtárat használni, hogy a titkos adataidat egy .env fájlban tartsd távol a kódtól.
- openai, ezt a könyvtárat használod az OpenAI API-val való interakcióhoz.
- pillow, képek kezeléséhez Pythonban.
- requests, HTTP kérések küldéséhez.
Ha még nem tetted meg, kövesd az Microsoft Learn oldalon található utasításokat egy Azure OpenAI erőforrás és modell létrehozásához. Válaszd a DALL-E 3 modellt.
-
Hozz létre egy .env fájlt az alábbi tartalommal:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Ezt az információt az Azure OpenAI Foundry Portálon találod meg az erőforrásod "Deployments" szekciójában.
-
Gyűjtsd össze a fenti könyvtárakat egy requirements.txt nevű fájlban, így:
python-dotenv openai pillow requests -
Ezután hozz létre virtuális környezetet, és telepítsd a könyvtárakat:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtWindows esetén használd az alábbi parancsokat a virtuális környezet létrehozásához és aktiválásához:
python3 -m venv venv venv\Scripts\activate.bat
-
Add hozzá az alábbi kódot egy app.py nevű fájlba:
import openai import os import requests from PIL import Image import dotenv from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path = os.path.join(image_dir, 'generated-image.png') # Retrieve the generated image image_url = generation_response.data[0].url # extract image URL from response generated_image = requests.get(image_url).content # download the image with open(image_path, "wb") as image_file: image_file.write(generated_image) # Display the image in the default image viewer image = Image.open(image_path) image.show() # catch exceptions except openai.InvalidRequestError as err: print(err)
Magyarázzuk el ezt a kódot:
-
Először importáljuk a szükséges könyvtárakat, beleértve az OpenAI könyvtárat, a dotenv könyvtárat, a requests könyvtárat és a Pillow könyvtárat.
import openai import os import requests from PIL import Image import dotenv
-
Ezután betöltjük a környezeti változókat a .env fájlból.
# import dotenv dotenv.load_dotenv()
-
Utána konfiguráljuk az Azure OpenAI szolgáltatás kliensét.
# Get endpoint and key from environment variables client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" )
-
Ezután generáljuk a képet:
# Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )
A fenti kód egy JSON objektummal válaszol, amely tartalmazza a generált kép URL-jét. Az URL-t használhatjuk a kép letöltésére és fájlba mentésére.
-
Végül megnyitjuk a képet, és a standard képnézegetővel megjelenítjük:
image = Image.open(image_path) image.show()
Nézzük meg részletesebben a képgeneráló kódot:
generation_response = client.images.generate(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',
size='1024x1024', n=1,
model=os.environ['AZURE_OPENAI_DEPLOYMENT']
)- prompt, a szöveges prompt, amelyet a kép generálásához használunk. Ebben az esetben a "Nyúl lovon, nyalókát tartva, ködös réten, ahol nárciszok nőnek" promptot használjuk.
- size, a generált kép mérete. Ebben az esetben egy 1024x1024 pixeles képet generálunk.
- n, a generált képek száma. Ebben az esetben két képet generálunk.
- temperature, egy paraméter, amely a generatív AI modell kimenetének véletlenszerűségét szabályozza. A hőmérséklet értéke 0 és 1 között van, ahol 0 azt jelenti, hogy a kimenet determinisztikus, és 1 azt jelenti, hogy a kimenet véletlenszerű. Az alapértelmezett érték 0,7.
További dolgokat is tehetsz a képekkel, amelyeket a következő szekcióban tárgyalunk.
Eddig láthattad, hogyan tudtunk néhány sor Python kóddal képet generálni. Azonban további dolgokat is tehetsz a képekkel.
Az alábbiakat is megteheted:
- Szerkesztések végrehajtása. Egy meglévő kép, egy maszk és egy prompt megadásával módosíthatod a képet. Például hozzáadhatsz valamit egy kép egy részéhez. Képzeld el a nyúl képünket, hozzáadhatsz egy kalapot a nyúlhoz. Ezt úgy teheted meg, hogy megadod a képet, egy maszkot (amely azonosítja a változtatás területét), és egy szöveges promptot, amely leírja, mit kell tenni.
Megjegyzés: ez nem támogatott a DALL-E 3-ban.
Íme egy példa GPT Image használatával:
response = client.images.edit(
model="gpt-image-1",
image=open("sunlit_lounge.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)
image_url = response.data[0].urlAz alap kép csak a medencés lounge-t tartalmazná, de a végső kép egy flamingót is tartalmazna:
-
Variációk létrehozása. Az ötlet az, hogy egy meglévő képet veszel, és variációkat kérsz róla. A variáció létrehozásához megadod a képet és egy szöveges promptot, valamint ilyen kódot:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Megjegyzés: ez csak az OpenAI-nál támogatott.
A hőmérséklet egy paraméter, amely a generatív AI modell kimenetének véletlenszerűségét szabályozza. A hőmérséklet értéke 0 és 1 között van, ahol 0 azt jelenti, hogy a kimenet determinisztikus, és 1 azt jelenti, hogy a kimenet véletlenszerű. Az alapértelmezett érték 0,7.
Nézzünk egy példát arra, hogyan működik a hőmérséklet, ha kétszer futtatjuk ezt a promptot:
Prompt: "Nyúl lovon, nyalókát tartva, ködös réten, ahol nárciszok nőnek"
Most futtassuk ugyanazt a promptot, hogy lássuk, nem kapunk kétszer ugyanazt a képet:
Ahogy látható, a képek hasonlóak, de nem azonosak. Próbáljuk meg megváltoztatni a hőmérséklet értékét 0,1-re, és nézzük meg, mi történik:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2
)Próbáljuk meg a választ determinisztikusabbá tenni. Az első két generált képből megfigyelhettük, hogy az első képen van egy nyúl, a második képen pedig egy ló, tehát a képek jelentősen eltérnek.
Ezért változtassuk meg a kódunkat, és állítsuk a hőmérsékletet 0-ra, így:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0
)Most, amikor futtatod ezt a kódot, ezeket a képeket kapod:
Itt egyértelműen látható, hogy a képek jobban hasonlítanak egymásra.
A demónkkal már képeket generálhatunk ügyfeleink számára. Azonban szükségünk van arra, hogy bizonyos határokat állítsunk az alkalmazásunk számára.
Például nem szeretnénk olyan képeket generálni, amelyek nem biztonságosak munkahelyen, vagy nem megfelelőek gyermekek számára.
Ezt meta promptokkal tehetjük meg. A meta promptok olyan szöveges promptok, amelyeket a generatív AI modell kimenetének szabályozására használunk. Például meta promptokkal szabályozhatjuk a kimenetet, és biztosíthatjuk, hogy a generált képek biztonságosak legyenek munkahelyen, vagy megfelelőek legyenek gyermekek számára.
Hogyan működnek a meta promptok?
A meta promptok olyan szöveges promptok, amelyeket a generatív AI modell kimenetének szabályozására használnak. Ezek a szöveges prompt előtt helyezkednek el, és a modell kimenetének szabályozására szolgálnak, beágyazva az alkalmazásokba a modell kimenetének szabályozására. A prompt bemenetet és a meta prompt bemenetet egyetlen szöveges promptba foglalják.
Egy meta prompt példája lehet a következő:
You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
(Input)
Most nézzük meg, hogyan használhatjuk a meta promptokat a demónkban.
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt =f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"{meta_prompt}
Create an image of a bunny on a horse, holding a lollipop"
# TODO add request to generate imageA fenti promptból látható, hogy minden létrehozott kép figyelembe veszi a meta promptot.
A lecke elején bemutattuk az Edu4All-t. Most itt az ideje, hogy lehetőséget adjunk a diákoknak, hogy képeket generáljanak a feladataikhoz.
A diákok képeket készítenek a feladataikhoz, amelyek műemlékeket tartalmaznak, pontosan milyen műemlékek, az a diákokon múlik. A diákokat arra kérjük, hogy használják kreativitásukat ebben a feladatban, és helyezzék ezeket a műemlékeket különböző kontextusokba.
Íme egy lehetséges megoldás:
import openai
import os
import requests
from PIL import Image
import dotenv
from openai import AzureOpenAI
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
client = AzureOpenAI(
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ['AZURE_OPENAI_API_KEY'],
api_version = "2024-02-01"
)
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt = f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"""{meta_prompt}
Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on.
""""
try:
# Create an image by using the image generation API
generation_response = client.images.generate(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=1,
)
# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')
# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated-image.png')
# Retrieve the generated image
image_url = generation_response.data[0].url # extract image URL from response
generated_image = requests.get(image_url).content # download the image
with open(image_path, "wb") as image_file:
image_file.write(generated_image)
# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
# catch exceptions
except openai.BadRequestError as err:
print(err)Miután befejezted ezt a leckét, nézd meg a Generatív AI tanulási gyűjteményt, hogy tovább fejleszthesd a generatív AI-val kapcsolatos tudásodat!
Lépj tovább a 10. leckére, ahol azt vizsgáljuk meg, hogyan lehet AI alkalmazásokat építeni alacsony kódú megoldásokkal.
Felelősség kizárása:
Ez a dokumentum az Co-op Translator AI fordítási szolgáltatás segítségével került lefordításra. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.








