LLM-ovi nisu samo za generisanje teksta. Takođe je moguće generisati slike iz tekstualnih opisa. Imati slike kao modalitet može biti veoma korisno u brojnim oblastima, od medicinske tehnologije, arhitekture, turizma, razvoja igara i drugih. U ovom poglavlju ćemo se osvrnuti na dva najpopularnija modela za generisanje slika, DALL-E i Midjourney.
U ovoj lekciji ćemo pokriti:
- Generisanje slika i zašto je korisno.
- DALL-E i Midjourney, šta su i kako funkcionišu.
- Kako biste izgradili aplikaciju za generisanje slika.
Nakon završetka ove lekcije, bićete u mogućnosti da:
- Izgradite aplikaciju za generisanje slika.
- Definišete granice za vašu aplikaciju uz pomoć meta prompta.
- Radite sa DALL-E i Midjourney.
Aplikacije za generisanje slika su odličan način da istražite mogućnosti Generativne AI. Mogu se koristiti, na primer, za:
-
Uređivanje i sintezu slika. Možete generisati slike za razne slučajeve upotrebe, kao što su uređivanje i sinteza slika.
-
Primena u različitim industrijama. Takođe se mogu koristiti za generisanje slika za različite industrije kao što su Medtech, Turizam, Razvoj igara i još mnogo toga.
Kao deo ove lekcije, nastavićemo da radimo sa našim startupom, Edu4All. Studenti će kreirati slike za svoje zadatke, tačno koje slike zavisi od studenata, ali to mogu biti ilustracije za njihovu bajku ili kreiranje novog lika za njihovu priču ili im pomoći da vizualizuju svoje ideje i koncepte.
Evo šta bi studenti Edu4All mogli generisati, na primer, ako rade u razredu na spomenicima:
koristeći prompt poput
"Pas pored Ajfelovog tornja u jutarnjem suncu"
DALL-E i Midjourney su dva od najpopularnijih modela za generisanje slika, omogućavaju vam da koristite promptove za generisanje slika.
Počnimo sa DALL-E, koji je generativni AI model koji generiše slike iz tekstualnih opisa.
DALL-E je kombinacija dva modela, CLIP i diffused attention.
-
CLIP, je model koji generiše ugradnje, koje su numeričke reprezentacije podataka, iz slika i teksta.
-
Diffused attention, je model koji generiše slike iz ugradnji. DALL-E je treniran na skupu podataka slika i teksta i može se koristiti za generisanje slika iz tekstualnih opisa. Na primer, DALL-E se može koristiti za generisanje slika mačke u šeširu ili psa sa irokez frizurom.
Midjourney radi na sličan način kao DALL-E, generiše slike iz tekstualnih promptova. Midjourney se takođe može koristiti za generisanje slika koristeći promptove kao što su “mačka u šeširu” ili “pas sa irokez frizurom”.
Slika sa Wikipedia, slika generisana od strane Midjourney
Prvo, DALL-E. DALL-E je generativni AI model zasnovan na arhitekturi transformatora sa autoregresivnim transformatorom.
Autoregresivni transformator definiše kako model generiše slike iz tekstualnih opisa, generiše jedan piksel po piksel, a zatim koristi generisane piksele da generiše sledeći piksel. Prolazi kroz više slojeva u neuronskoj mreži, dok slika ne bude kompletna.
Kroz ovaj proces, DALL-E, kontroliše atribute, objekte, karakteristike i više u slici koju generiše. Međutim, DALL-E 2 i 3 imaju više kontrole nad generisanom slikom.
Šta je potrebno za izgradnju aplikacije za generisanje slika? Potrebne su vam sledeće biblioteke:
- python-dotenv, preporučuje se da koristite ovu biblioteku kako biste čuvali svoje tajne u .env fajlu dalje od koda.
- openai, ova biblioteka će vam pomoći da komunicirate sa OpenAI API-jem.
- pillow, za rad sa slikama u Python-u.
- requests, da vam pomogne da napravite HTTP zahteve.
-
Kreirajte fajl .env sa sledećim sadržajem:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Pronađite ovu informaciju u Azure portalu za vaš resurs u odeljku "Keys and Endpoint".
-
Sakupite navedene biblioteke u fajlu pod nazivom requirements.txt ovako:
python-dotenv openai pillow requests -
Zatim, kreirajte virtuelno okruženje i instalirajte biblioteke:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtZa Windows, koristite sledeće komande da kreirate i aktivirate svoje virtuelno okruženje:
python3 -m venv venv venv\Scripts\activate.bat
-
Dodajte sledeći kod u fajl pod nazivom app.py:
import openai import os import requests from PIL import Image import dotenv # import dotenv dotenv.load_dotenv() # Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) openai.api_version = '2023-06-01-preview' openai.api_type = 'azure' try: # Create an image by using the image generation API generation_response = openai.Image.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, ) # 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)
Hajde da objasnimo ovaj kod:
-
Prvo, uvozimo potrebne biblioteke, uključujući OpenAI biblioteku, dotenv biblioteku, requests biblioteku i Pillow biblioteku.
import openai import os import requests from PIL import Image import dotenv
-
Zatim, učitavamo promenljive okruženja iz .env fajla.
# import dotenv dotenv.load_dotenv()
-
Nakon toga, postavljamo endpoint, ključ za OpenAI API, verziju i tip.
# Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # add version and type, Azure specific openai.api_version = '2023-06-01-preview' openai.api_type = 'azure'
-
Zatim, generišemo sliku:
# Create an image by using the image generation API generation_response = openai.Image.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, )
Gornji kod odgovara JSON objektom koji sadrži URL generisane slike. Možemo koristiti URL za preuzimanje slike i njeno čuvanje u fajlu.
-
Na kraju, otvaramo sliku i koristimo standardni pregledač slika da je prikažemo:
image = Image.open(image_path) image.show()
Hajde da pogledamo kod koji generiše sliku detaljnije:
generation_response = openai.Image.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,
)- prompt, je tekstualni prompt koji se koristi za generisanje slike. U ovom slučaju, koristimo prompt "Zeka na konju, drži lizalicu, na maglovitoj livadi gde rastu narcisi".
- size, je veličina slike koja se generiše. U ovom slučaju, generišemo sliku koja je 1024x1024 piksela.
- n, je broj slika koje se generišu. U ovom slučaju, generišemo dve slike.
- temperature, je parametar koji kontroliše nasumičnost izlaza generativnog AI modela. Temperatura je vrednost između 0 i 1 gde 0 znači da je izlaz deterministički, a 1 znači da je izlaz nasumičan. Podrazumevana vrednost je 0.7.
Postoje još stvari koje možete raditi sa slikama koje ćemo pokriti u sledećem odeljku.
Do sada ste videli kako smo uspeli da generišemo sliku koristeći nekoliko linija u Python-u. Međutim, postoje još stvari koje možete raditi sa slikama.
Možete takođe uraditi sledeće:
-
Izvršiti izmene. Pružajući postojeću sliku, masku i prompt, možete izmeniti sliku. Na primer, možete dodati nešto na deo slike. Zamislite našu sliku zeke, možete dodati šešir zeki. Kako biste to uradili je pružanjem slike, maske (identifikovanje dela područja za promenu) i tekstualnog prompta da kažete šta treba uraditi.
response = openai.Image.create_edit( image=open("base_image.png", "rb"), mask=open("mask.png", "rb"), prompt="An image of a rabbit with a hat on its head.", n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Osnovna slika bi sadržala samo zeku, ali konačna slika bi imala šešir na zeki.
-
Kreirati varijacije. Ideja je da uzmete postojeću sliku i zatražite da se kreiraju varijacije. Da biste kreirali varijaciju, pružate sliku i tekstualni prompt i kod kao što je ovaj:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Napomena, ovo je podržano samo na OpenAI
Temperatura je parametar koji kontroliše nasumičnost izlaza generativnog AI modela. Temperatura je vrednost između 0 i 1 gde 0 znači da je izlaz deterministički, a 1 znači da je izlaz nasumičan. Podrazumevana vrednost je 0.7.
Hajde da pogledamo primer kako temperatura funkcioniše, pokretanjem ovog prompta dva puta:
Prompt : "Zeka na konju, drži lizalicu, na maglovitoj livadi gde rastu narcisi"
Sada hajde da pokrenemo taj isti prompt samo da vidimo da nećemo dobiti istu sliku dva puta:
Kao što vidite, slike su slične, ali nisu iste. Hajde da pokušamo promeniti vrednost temperature na 0.1 i vidimo šta se dešava:
generation_response = openai.Image.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
)Dakle, hajde da pokušamo učiniti odgovor više determinističkim. Mogli smo primetiti iz dve slike koje smo generisali da na prvoj slici postoji zeka, a na drugoj slici postoji konj, tako da se slike značajno razlikuju.
Hajde stoga da promenimo naš kod i postavimo temperaturu na 0, ovako:
generation_response = openai.Image.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
)Sada kada pokrenete ovaj kod, dobijate ove dve slike:
Ovde jasno možete videti kako slike više liče jedna na drugu.
Sa našim demom, već možemo generisati slike za naše klijente. Međutim, potrebno je da kreiramo neke granice za našu aplikaciju.
Na primer, ne želimo da generišemo slike koje nisu bezbedne za radno okruženje ili koje nisu prikladne za decu.
Možemo to uraditi pomoću metapromptova. Metapromptovi su tekstualni promptovi koji se koriste za kontrolu izlaza generativnog AI modela. Na primer, možemo koristiti metapromptove za kontrolu izlaza i osigurati da generisane slike budu bezbedne za radno okruženje ili prikladne za decu.
Sada, kako metapromptovi funkcionišu?
Metapromptovi su tekstualni promptovi koji se koriste za kontrolu izlaza generativnog AI modela, postavljeni su pre tekstualnog prompta i koriste se za kontrolu izlaza modela i ugrađeni su u aplikacije kako bi kontrolisali izlaz modela. Obuhvatajući unos prompta i unos metaprompta u jedan tekstualni prompt.
Jedan primer metaprompta bio bi sledeći:
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)
Sada, hajde da vidimo kako možemo koristiti metapromptove u našem demu.
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 gornjeg prompta, možete videti kako sve slike koje se kreiraju uzimaju u obzir metaprompt.
Predstavili smo Edu4All na početku ove lekcije. Sada je vreme da omogućimo studentima da generišu slike za svoje zadatke.
Studenti će kreirati slike za svoje zadatke koji sadrže spomenike, tačno koji spomenici zavisi od studenata. Studenti su zamoljeni da koriste svoju kreativnost u ovom zadatku kako bi postavili ove spomenike u različite kontekste.
Evo jednog mogućeg rešenja:
import openai
import os
import requests
from PIL import Image
import dotenv
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
openai.api_base = "<replace with endpoint>"
openai.api_key = "<replace with api key>"
# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only)
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'
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"""{metaprompt}
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 = openai.Image.create(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0,
)
# 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)Nakon završetka ove lekcije, pogledajte našu Generativnu AI kolekciju za učenje da nastavite sa unapređivanjem svog znanja o Generativnoj AI!
Pređite na Lekciju 10 gde ćemo pogledati kako izgraditi AI aplikacije sa malo koda
Одричање од одговорности:
Овај документ је преведен коришћењем услуге за превођење вештачком интелигенцијом Co-op Translator. Иако се трудимо да превод буде тачан, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације, препоручује се професионални превод од стране људи. Не сносимо одговорност за било каква неспоразума или погрешна тумачења која настану услед коришћења овог превода.





