Generovanie textu nie je jedinou schopnosťou LLM modelov. Je možné generovať aj obrázky na základe textových popisov. Obrázky ako modality môžu byť veľmi užitočné v mnohých oblastiach, ako je MedTech, architektúra, cestovný ruch, vývoj hier a ďalšie. V tejto kapitole sa pozrieme na dva najpopulárnejšie modely na generovanie obrázkov, DALL-E a Midjourney.
V tejto lekcii sa budeme venovať:
- Generovaniu obrázkov a jeho užitočnosti.
- Modelom DALL-E a Midjourney, ich fungovaniu a využitiu.
- Ako vytvoriť aplikáciu na generovanie obrázkov.
Po absolvovaní tejto lekcie budete schopní:
- Vytvoriť aplikáciu na generovanie obrázkov.
- Definovať hranice pre svoju aplikáciu pomocou meta promptov.
- Pracovať s modelmi DALL-E a Midjourney.
Aplikácie na generovanie obrázkov sú skvelým spôsobom, ako preskúmať schopnosti generatívnej AI. Môžu byť použité napríklad na:
-
Úpravu a syntézu obrázkov. Môžete generovať obrázky pre rôzne účely, ako je úprava obrázkov alebo ich syntéza.
-
Použitie v rôznych odvetviach. Môžu byť tiež použité na generovanie obrázkov pre rôzne odvetvia, ako MedTech, cestovný ruch, vývoj hier a ďalšie.
V rámci tejto lekcie budeme pokračovať v práci s naším startupom Edu4All. Študenti budú vytvárať obrázky pre svoje hodnotenia. Aké obrázky si vyberú, je na nich, ale môžu to byť ilustrácie pre ich vlastnú rozprávku, vytvorenie nového charakteru pre ich príbeh alebo pomoc pri vizualizácii ich nápadov a konceptov.
Tu je príklad, čo by mohli študenti Edu4All vytvoriť, ak pracujú v triede na téme pamiatok:
pomocou promptu ako:
"Pes vedľa Eiffelovej veže v rannom slnečnom svetle"
DALL-E a Midjourney sú dva z najpopulárnejších modelov na generovanie obrázkov, ktoré umožňujú používať prompty na generovanie obrázkov.
Začnime s DALL-E, čo je generatívny AI model, ktorý generuje obrázky na základe textových popisov.
DALL-E je kombináciou dvoch modelov, CLIP a difúznej pozornosti.
-
CLIP je model, ktorý generuje embeddings, čo sú numerické reprezentácie dát, z obrázkov a textu.
-
Difúzna pozornosť je model, ktorý generuje obrázky z embeddings. DALL-E je trénovaný na dátovom súbore obrázkov a textu a môže byť použitý na generovanie obrázkov na základe textových popisov. Napríklad DALL-E môže byť použitý na generovanie obrázkov mačky v klobúku alebo psa s mohawkom.
Midjourney funguje podobne ako DALL-E, generuje obrázky na základe textových promptov. Midjourney môže byť tiež použitý na generovanie obrázkov pomocou promptov ako „mačka v klobúku“ alebo „pes s mohawkom“.
Obrázok: Wikipedia, generovaný Midjourney
Najprv DALL-E. DALL-E je generatívny AI model založený na architektúre transformátora s autoregresívnym transformátorom.
Autoregresívny transformátor definuje, ako model generuje obrázky na základe textových popisov. Generuje jeden pixel naraz a potom používa generované pixely na generovanie ďalšieho pixelu. Tento proces prechádza viacerými vrstvami v neurónovej sieti, až kým nie je obrázok kompletný.
Pomocou tohto procesu DALL-E kontroluje atribúty, objekty, charakteristiky a ďalšie prvky v generovanom obrázku. Avšak DALL-E 2 a 3 majú väčšiu kontrolu nad generovaným obrázkom.
Čo je potrebné na vytvorenie aplikácie na generovanie obrázkov? Potrebujete nasledujúce knižnice:
- python-dotenv, odporúča sa používať túto knižnicu na uchovávanie tajných údajov v súbore .env mimo kódu.
- openai, táto knižnica sa používa na interakciu s OpenAI API.
- pillow, na prácu s obrázkami v Pythone.
- requests, na pomoc pri vytváraní HTTP požiadaviek.
Ak ste to ešte neurobili, postupujte podľa pokynov na stránke Microsoft Learn, aby ste vytvorili zdroj a model Azure OpenAI. Vyberte model DALL-E 3.
-
Vytvorte súbor .env s nasledujúcim obsahom:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Nájdite tieto informácie v Azure OpenAI Foundry Portáli pre váš zdroj v sekcii "Deployments".
-
Zozbierajte vyššie uvedené knižnice do súboru requirements.txt takto:
python-dotenv openai pillow requests -
Ďalej vytvorte virtuálne prostredie a nainštalujte knižnice:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtPre Windows použite nasledujúce príkazy na vytvorenie a aktiváciu virtuálneho prostredia:
python3 -m venv venv venv\Scripts\activate.bat
-
Pridajte nasledujúci kód do súboru app.py:
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)
Vysvetlime si tento kód:
-
Najprv importujeme potrebné knižnice, vrátane knižnice OpenAI, knižnice dotenv, knižnice requests a knižnice Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Ďalej načítame environmentálne premenné zo súboru .env.
# import dotenv dotenv.load_dotenv()
-
Potom nakonfigurujeme klienta služby Azure OpenAI.
# 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" )
-
Následne generujeme obrázok:
# 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'] )
Vyššie uvedený kód odpovedá JSON objektom, ktorý obsahuje URL generovaného obrázku. URL môžeme použiť na stiahnutie obrázku a jeho uloženie do súboru.
-
Nakoniec otvoríme obrázok a použijeme štandardný prehliadač obrázkov na jeho zobrazenie:
image = Image.open(image_path) image.show()
Pozrime sa na kód, ktorý generuje obrázok, podrobnejšie:
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 je textový prompt, ktorý sa používa na generovanie obrázku. V tomto prípade používame prompt "Zajac na koni, držiaci lízatko, na hmlistom lúke, kde rastú narcisy".
- size je veľkosť generovaného obrázku. V tomto prípade generujeme obrázok s rozmermi 1024x1024 pixelov.
- n je počet generovaných obrázkov. V tomto prípade generujeme dva obrázky.
- temperature je parameter, ktorý ovláda náhodnosť výstupu generatívneho AI modelu. Hodnota teploty je medzi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Predvolená hodnota je 0.7.
Existuje viac vecí, ktoré môžete robiť s obrázkami, a tie pokryjeme v ďalšej sekcii.
Doteraz ste videli, ako sme dokázali generovať obrázok pomocou niekoľkých riadkov v Pythone. Existujú však ďalšie veci, ktoré môžete robiť s obrázkami.
Môžete tiež:
- Vykonávať úpravy. Poskytnutím existujúceho obrázku, masky a promptu môžete upraviť obrázok. Napríklad môžete pridať niečo na určitú časť obrázku. Predstavte si náš obrázok zajaca, môžete pridať klobúk zajacovi. Ako by ste to urobili, je poskytnutím obrázku, masky (identifikujúcej časť oblasti na zmenu) a textového promptu, ktorý určuje, čo by sa malo urobiť.
Poznámka: toto nie je podporované v DALL-E 3.
Tu je príklad pomocou GPT Image:
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].urlZákladný obrázok by obsahoval iba salónik s bazénom, ale konečný obrázok by mal plameniaka:
-
Vytvárať variácie. Myšlienka je, že vezmete existujúci obrázok a požiadate o vytvorenie variácií. Na vytvorenie variácie poskytnete obrázok a textový prompt a kód ako takýto:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Poznámka: toto je podporované iba na OpenAI.
Teplota je parameter, ktorý ovláda náhodnosť výstupu generatívneho AI modelu. Hodnota teploty je medzi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Predvolená hodnota je 0.7.
Pozrime sa na príklad, ako teplota funguje, spustením tohto promptu dvakrát:
Prompt: "Zajac na koni, držiaci lízatko, na hmlistom lúke, kde rastú narcisy"
Teraz spustíme ten istý prompt, aby sme videli, že nedostaneme dvakrát rovnaký obrázok:
Ako vidíte, obrázky sú podobné, ale nie rovnaké. Skúsme zmeniť hodnotu teploty na 0.1 a uvidíme, čo sa stane:
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
)Skúsme urobiť výstup viac deterministickým. Mohli sme pozorovať z dvoch generovaných obrázkov, že na prvom obrázku je zajac a na druhom obrázku je kôň, takže obrázky sa značne líšia.
Preto zmeníme náš kód a nastavíme teplotu na 0, takto:
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
)Teraz, keď spustíte tento kód, dostanete tieto dva obrázky:
Tu jasne vidíte, ako sa obrázky viac podobajú.
S našou ukážkou už môžeme generovať obrázky pre našich klientov. Avšak, potrebujeme vytvoriť určité hranice pre našu aplikáciu.
Napríklad nechceme generovať obrázky, ktoré nie sú vhodné pre pracovné prostredie alebo nie sú vhodné pre deti.
Môžeme to urobiť pomocou meta promptov. Meta prompty sú textové prompty, ktoré sa používajú na kontrolu výstupu generatívneho AI modelu. Napríklad môžeme použiť meta prompty na kontrolu výstupu a zabezpečiť, že generované obrázky sú vhodné pre pracovné prostredie alebo vhodné pre deti.
Ako fungujú meta prompty?
Meta prompty sú textové prompty, ktoré sa používajú na kontrolu výstupu generatívneho AI modelu. Sú umiestnené pred textovým promptom a používajú sa na kontrolu výstupu modelu a sú zabudované do aplikácií na kontrolu výstupu modelu. Zahrňujú vstup promptu a vstup meta promptu do jedného textového promptu.
Jedným príkladom meta promptu by bol nasledujúci:
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)
Teraz sa pozrime, ako môžeme použiť meta prompty v našej ukážke.
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 imageZ vyššie uvedeného promptu môžete vidieť, ako všetky generované obrázky zohľadňujú meta prompt.
Na začiatku tejto lekcie sme predstavili Edu4All. Teraz je čas umožniť študentom generovať obrázky pre ich hodnotenia.
Študenti budú vytvárať obrázky pre svoje hodnotenia obsahujúce pamiatky. Aké pamiatky si vyberú, je na nich. Študenti sú vyzvaní, aby použili svoju kreativitu v tejto úlohe a umiestnili tieto pamiatky do rôznych kontextov.
Tu je jedno možné riešenie:
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)Po dokončení tejto lekcie si pozrite našu zbierku učenia o generatívnej AI, aby ste si ďalej rozšírili svoje znalosti o generatívnej AI!
Prejdite na Lekciu 10, kde sa pozrieme na to, ako vytvárať AI aplikácie s nízkym kódom
Upozornenie:
Tento dokument bol preložený pomocou služby AI prekladu Co-op Translator. Hoci sa snažíme o presnosť, upozorňujeme, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nenesieme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.








