LLM-ji niso omejeni le na generiranje besedila. Možno je tudi generirati slike iz besedilnih opisov. Slike kot modalnost so lahko izjemno uporabne na številnih področjih, kot so MedTech, arhitektura, turizem, razvoj iger in še več. V tem poglavju bomo raziskali dva najbolj priljubljena modela za generiranje slik, DALL-E in Midjourney.
V tej lekciji bomo obravnavali:
- Generiranje slik in zakaj je koristno.
- DALL-E in Midjourney, kaj sta in kako delujeta.
- Kako zgraditi aplikacijo za generiranje slik.
Po zaključku te lekcije boste lahko:
- Zgradili aplikacijo za generiranje slik.
- Določili meje za svojo aplikacijo z meta prompti.
- Delali z DALL-E in Midjourney.
Aplikacije za generiranje slik so odličen način za raziskovanje zmogljivosti generativne umetne inteligence. Uporabljajo se lahko na primer za:
-
Urejanje in sintezo slik. Lahko generirate slike za različne namene, kot so urejanje slik in sinteza slik.
-
Uporaba v različnih industrijah. Uporabljajo se lahko tudi za generiranje slik za različne industrije, kot so MedTech, turizem, razvoj iger in še več.
V tej lekciji bomo nadaljevali delo z našim startupom Edu4All. Študenti bodo ustvarjali slike za svoje naloge, pri čemer je izbira slik prepuščena njim. Lahko ustvarijo ilustracije za svojo pravljico, nov lik za svojo zgodbo ali pa jim slike pomagajo vizualizirati njihove ideje in koncepte.
Tukaj je primer, kaj bi lahko študenti Edu4All ustvarili, če bi v razredu obravnavali spomenike:
z uporabo prompta, kot je:
"Pes poleg Eifflovega stolpa v jutranji sončni svetlobi"
DALL-E in Midjourney sta dva najbolj priljubljena modela za generiranje slik, ki omogočata uporabo promptov za generiranje slik.
Začnimo z DALL-E, ki je generativni AI model, ki generira slike iz besedilnih opisov.
DALL-E je kombinacija dveh modelov, CLIP in razpršene pozornosti.
-
CLIP je model, ki generira vektorske predstavitve podatkov iz slik in besedila.
-
Razpršena pozornost je model, ki generira slike iz vektorskih predstavitev. DALL-E je treniran na podatkovni zbirki slik in besedila ter se lahko uporablja za generiranje slik iz besedilnih opisov. Na primer, DALL-E lahko generira slike mačke v klobuku ali psa z irokezo.
Midjourney deluje podobno kot DALL-E; generira slike iz besedilnih promptov. Midjourney lahko generira slike z uporabo promptov, kot so "mačka v klobuku" ali "pes z irokezo".
Slika: Wikipedia, generirana z Midjourney
Najprej DALL-E. DALL-E je generativni AI model, ki temelji na arhitekturi transformatorjev z avtoregresivnim transformatorjem.
Avtoregresivni transformator določa, kako model generira slike iz besedilnih opisov; generira en piksel naenkrat in nato uporabi generirane piksle za generiranje naslednjega piksla. Proces poteka skozi več slojev v nevronski mreži, dokler slika ni dokončana.
S tem procesom DALL-E nadzoruje atribute, objekte, značilnosti in več v generirani sliki. Vendar pa imata DALL-E 2 in 3 več nadzora nad generirano sliko.
Kaj potrebujete za gradnjo aplikacije za generiranje slik? Potrebujete naslednje knjižnice:
- python-dotenv, močno priporočamo uporabo te knjižnice za shranjevanje vaših skrivnosti v datoteki .env stran od kode.
- openai, ta knjižnica se uporablja za interakcijo z OpenAI API-jem.
- pillow, za delo s slikami v Pythonu.
- requests, za pomoč pri pošiljanju HTTP zahtevkov.
Če tega še niste storili, sledite navodilom na strani Microsoft Learn, da ustvarite vir in model Azure OpenAI. Izberite model DALL-E 3.
-
Ustvarite datoteko .env z naslednjo vsebino:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Poiščite te informacije v Azure OpenAI Foundry Portal za vaš vir v razdelku "Deployments".
-
Zberite zgoraj navedene knjižnice v datoteki requirements.txt na naslednji način:
python-dotenv openai pillow requests -
Nato ustvarite virtualno okolje in namestite knjižnice:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtZa Windows uporabite naslednje ukaze za ustvarjanje in aktiviranje virtualnega okolja:
python3 -m venv venv venv\Scripts\activate.bat
-
Dodajte naslednjo kodo v datoteko 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)
Pojasnimo to kodo:
-
Najprej uvozimo knjižnice, ki jih potrebujemo, vključno s knjižnico OpenAI, knjižnico dotenv, knjižnico requests in knjižnico Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Nato naložimo okoljske spremenljivke iz datoteke .env.
# import dotenv dotenv.load_dotenv()
-
Nato konfiguriramo odjemalca storitve 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" )
-
Nato generiramo sliko:
# 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'] )
Zgornja koda vrne JSON objekt, ki vsebuje URL generirane slike. URL lahko uporabimo za prenos slike in shranjevanje v datoteko.
-
Na koncu odpremo sliko in jo prikažemo z uporabo standardnega pregledovalnika slik:
image = Image.open(image_path) image.show()
Poglejmo podrobneje kodo, ki generira sliko:
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 besedilni prompt, ki se uporablja za generiranje slike. V tem primeru uporabljamo prompt "Zajček na konju, drži liziko, na meglenem travniku, kjer rastejo narcise".
- size je velikost generirane slike. V tem primeru generiramo sliko velikosti 1024x1024 pikslov.
- n je število generiranih slik. V tem primeru generiramo dve sliki.
- temperature je parameter, ki nadzoruje naključnost izhoda generativnega AI modela. Temperatura je vrednost med 0 in 1, kjer 0 pomeni, da je izhod determinističen, 1 pa pomeni, da je izhod naključen. Privzeta vrednost je 0.7.
Obstajajo še druge stvari, ki jih lahko počnete s slikami, o katerih bomo govorili v naslednjem razdelku.
Videli ste, kako smo lahko generirali sliko z nekaj vrsticami kode v Pythonu. Vendar pa obstajajo še druge stvari, ki jih lahko počnete s slikami.
Lahko naredite naslednje:
- Urejanje slik. Z zagotavljanjem obstoječe slike, maske in prompta lahko spremenite sliko. Na primer, lahko dodate nekaj na določen del slike. Predstavljajte si našo sliko zajčka; lahko dodate klobuk zajčku. To storite tako, da zagotovite sliko, masko (ki identificira del območja za spremembo) in besedilni prompt, ki pove, kaj naj se naredi.
Opomba: to ni podprto v DALL-E 3.
Tukaj je primer z uporabo 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].urlOsnovna slika bi vsebovala le salon z bazenom, končna slika pa bi imela flaminga:
-
Ustvarjanje različic. Ideja je, da vzamete obstoječo sliko in zahtevate, da se ustvarijo različice. Za ustvarjanje različice zagotovite sliko in besedilni prompt ter kodo, kot je prikazano:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Opomba: to je podprto samo na OpenAI.
Temperatura je parameter, ki nadzoruje naključnost izhoda generativnega AI modela. Temperatura je vrednost med 0 in 1, kjer 0 pomeni, da je izhod determinističen, 1 pa pomeni, da je izhod naključen. Privzeta vrednost je 0.7.
Poglejmo primer, kako deluje temperatura, tako da dvakrat zaženemo ta prompt:
Prompt: "Zajček na konju, drži liziko, na meglenem travniku, kjer rastejo narcise"
Zdaj zaženimo isti prompt še enkrat, da vidimo, da ne bomo dobili iste slike dvakrat:
Kot lahko vidite, so slike podobne, vendar niso enake. Poskusimo spremeniti vrednost temperature na 0.1 in poglejmo, kaj se zgodi:
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
)Poskusimo narediti odziv bolj determinističen. Opazili smo, da se v prvih dveh generiranih slikah zajček in konj precej razlikujeta.
Spremenimo torej našo kodo in nastavimo temperaturo na 0, kot sledi:
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
)Ko zaženete to kodo, dobite ti dve sliki:
Tukaj lahko jasno vidite, kako se slike bolj podobajo druga drugi.
Z našo predstavitvijo lahko že generiramo slike za naše stranke. Vendar pa moramo določiti nekatere meje za našo aplikacijo.
Na primer, ne želimo generirati slik, ki niso primerne za delo ali ki niso primerne za otroke.
To lahko storimo z meta prompti. Meta prompti so besedilni prompti, ki se uporabljajo za nadzor izhoda generativnega AI modela. Na primer, lahko uporabimo meta prompt za nadzor izhoda in zagotovimo, da so generirane slike primerne za delo ali primerne za otroke.
Kako torej delujejo meta prompti?
Meta prompti so besedilni prompti, ki se uporabljajo za nadzor izhoda generativnega AI modela. Postavljeni so pred besedilni prompt in se uporabljajo za nadzor izhoda modela ter so vgrajeni v aplikacije za nadzor izhoda modela. Združujejo vhodni prompt in meta prompt v en sam besedilni prompt.
Primer meta prompta bi bil naslednji:
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)
Zdaj poglejmo, kako lahko uporabimo meta prompt v naši predstavitvi.
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 imageIz zgornjega prompta lahko vidite, kako vse generirane slike upoštevajo meta prompt.
Na začetku te lekcije smo predstavili Edu4All. Zdaj je čas, da omogočimo študentom generiranje slik za njihove naloge.
Študenti bodo ustvarjali slike za svoje naloge, ki vsebujejo spomenike. Točno kateri spomeniki so izbrani, je prepuščeno študentom. Študenti so pozvani, da uporabijo svojo ustvarjalnost pri tej nalogi in postavijo te spomenike v različne kontekste.
Tukaj je ena možna rešitev:
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 zaključku te lekcije si oglejte našo zbirko učenja o generativni umetni inteligenci, da še naprej nadgrajujete svoje znanje o generativni umetni inteligenci!
Pojdite na Lekcijo 10, kjer bomo raziskali, kako graditi AI aplikacije z malo kode
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve AI za prevajanje Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.








