LLM-ji niso omejeni le na generiranje besedila. Možno je tudi generirati slike iz opisov besedila. Slike kot modalnost so lahko zelo uporabne na številnih področjih, kot so MedTech, arhitektura, turizem, razvoj iger in še več. V tem poglavju si bomo ogledali 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 sposobni:
- Zgraditi aplikacijo za generiranje slik.
- Določiti meje za svojo aplikacijo z meta pozivi.
- Delati 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 okviru te lekcije bomo nadaljevali delo z našim startupom Edu4All. Študenti bodo ustvarjali slike za svoje naloge, kakšne slike bodo ustvarili, je odvisno od njih, lahko pa so to ilustracije za njihovo pravljico, ustvarjanje novega lika za njihovo zgodbo ali pomoč pri vizualizaciji njihovih idej in konceptov.
Tukaj je primer, kaj bi lahko ustvarili študenti Edu4All, če bi v razredu delali na spomenikih:
z uporabo poziva, kot je:
"Pes poleg Eifflovega stolpa v jutranji sončni svetlobi"
DALL-E in Midjourney sta dva izmed najbolj priljubljenih modelov za generiranje slik, ki omogočata uporabo pozivov za generiranje slik.
Začnimo z DALL-E, ki je generativni AI model za generiranje slik iz opisov besedila.
DALL-E je kombinacija dveh modelov, CLIP in razpršene pozornosti.
-
CLIP je model, ki generira vdelave, kar so numerične predstavitve podatkov, iz slik in besedila.
-
Razpršena pozornost je model, ki generira slike iz vdelav. DALL-E je treniran na naboru podatkov slik in besedila ter se lahko uporablja za generiranje slik iz opisov besedila. Na primer, DALL-E lahko generira slike mačke v klobuku ali psa z irokezo.
Midjourney deluje podobno kot DALL-E, saj generira slike iz besedilnih pozivov. Midjourney lahko generira slike z uporabo pozivov, kot so "mačka v klobuku" ali "pes z irokezo".
Slika: Wikipedia, slika generirana z Midjourney
Najprej DALL-E. DALL-E je generativni AI model, ki temelji na arhitekturi transformatorja z avtoregresivnim transformatorjem.
Avtoregresivni transformator določa, kako model generira slike iz opisov besedila; generira en piksel naenkrat in nato uporabi generirane piksle za generiranje naslednjega piksla. Proces poteka skozi več plasti 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 izvajanju 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 portalu Azure OpenAI Foundry 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 vašega 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 s standardnim pregledovalnikom slik:
image = Image.open(image_path) image.show()
Poglejmo si 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 poziv, ki se uporablja za generiranje slike. V tem primeru uporabljamo poziv "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 tudi naslednje:
- Urejanje slik. Z zagotavljanjem obstoječe slike, maske in poziva 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 poziv, ki pove, kaj je treba storiti.
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 poziv 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 poziv:
Poziv: "Zajček na konju, drži liziko, na meglenem travniku, kjer rastejo narcise"
Zdaj zaženimo isti poziv še enkrat, da vidimo, da ne bomo dvakrat dobili iste slike:
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 sta na prvi sliki zajček, na drugi pa konj, zato se slike precej razlikujejo.
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 ena drugi.
Z našo predstavitvijo lahko že generiramo slike za naše stranke. Vendar pa moramo ustvariti nekaj meja za našo aplikacijo.
Na primer, ne želimo generirati slik, ki niso primerne za delo ali niso primerne za otroke.
To lahko storimo z metapozivi. Metapozivi so besedilni pozivi, ki se uporabljajo za nadzor izhoda generativnega AI modela. Na primer, metapozive lahko uporabimo za nadzor izhoda in zagotovimo, da so generirane slike primerne za delo ali primerne za otroke.
Kako torej delujejo metapozivi?
Metapozivi so besedilni pozivi, ki se uporabljajo za nadzor izhoda generativnega AI modela. Postavljeni so pred besedilni poziv in se uporabljajo za nadzor izhoda modela ter so vgrajeni v aplikacije za nadzor izhoda modela. Združujejo vhodni poziv in metapoziv v en sam besedilni poziv.
En primer metapoziva 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 pa poglejmo, kako lahko uporabimo metapozive 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 poziva lahko vidite, kako vse generirane slike upoštevajo metapoziv.
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, kakšni spomeniki bodo, je odvisno od njih. Š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 za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatski 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 odgovarjamo za morebitne nesporazume ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.








