Генеративни језички модели (LLM) нису ограничени само на генерисање текста. Могуће је генерисати и слике на основу текстуалних описа. Имање слика као модалитета може бити изузетно корисно у бројним областима као што су медицинска технологија, архитектура, туризам, развој игара и многе друге. У овом поглављу, погледаћемо два најпопуларнија модела за генерисање слика, DALL-E и Midjourney.
У овој лекцији ћемо обрадити:
- Генерисање слика и зашто је корисно.
- DALL-E и Midjourney, шта су и како функционишу.
- Како можете направити апликацију за генерисање слика.
Након завршетка ове лекције, моћи ћете:
- Направити апликацију за генерисање слика.
- Дефинисати границе за вашу апликацију помоћу мета промптова.
- Радити са DALL-E и Midjourney.
Апликације за генерисање слика су одличан начин за истраживање могућности генеративне вештачке интелигенције. Могу се користити, на пример, за:
-
Уређивање и синтезу слика. Можете генерисати слике за различите намене, као што су уређивање слика и синтеза слика.
-
Примена у различитим индустријама. Такође се могу користити за генерисање слика за различите индустрије као што су медицинска технологија, туризам, развој игара и друге.
У оквиру ове лекције, настављамо рад са нашим стартапом, Edu4All. Студенти ће креирати слике за своје задатке, а које слике ће креирати зависи од њих самих. Могу, на пример, креирати илустрације за своју бајку, нови лик за своју причу или им помоћи да визуализују своје идеје и концепте.
Ево шта би студенти Edu4All-а могли да креирају, на пример, ако раде на часу о споменицима:
користећи промпт као што је:
"Пас поред Ајфелове куле у јутарњем сунцу"
DALL-E и Midjourney су два најпопуларнија модела за генерисање слика, који вам омогућавају да користите промптове за генерисање слика.
Почнимо са DALL-E, који је генеративни AI модел који генерише слике на основу текстуалних описа.
-
CLIP, је модел који генерише ембединг, што су нумерички прикази података, из слика и текста.
-
Дифузна пажња, је модел који генерише слике из ембединга. DALL-E је обучен на скупу података слика и текста и може се користити за генерисање слика на основу текстуалних описа. На пример, DALL-E може да генерише слике мачке са шеширом или пса са ирокезом.
Midjourney функционише на сличан начин као DALL-E, генерише слике на основу текстуалних промптова. Midjourney се такође може користити за генерисање слика помоћу промптова као што су „мачка са шеширом“ или „пас са ирокезом“.
Аутор слике Википедија, слика генерисана помоћу Midjourney
Прво, DALL-E. DALL-E је генеративни AI модел заснован на архитектури трансформера са ауторегресивним трансформером.
Ауторегресивни трансформер дефинише како модел генерише слике на основу текстуалних описа, генерише један пиксел по пиксел, а затим користи генерисане пикселе за генерисање следећег пиксела. Процес пролази кроз више слојева у неуронској мрежи, све док слика не буде комплетна.
Овим процесом, DALL-E контролише атрибуте, објекте, карактеристике и још много тога у слици коју генерише. Међутим, DALL-E 2 и 3 имају већу контролу над генерисаном сликом.
Шта је потребно за изградњу апликације за генерисање слика? Потребне су вам следеће библиотеке:
- python-dotenv, препоручује се коришћење ове библиотеке за чување ваших тајни у .env датотеци, одвојено од кода.
- openai, ова библиотека се користи за интеракцију са OpenAI API-јем.
- pillow, за рад са сликама у Python-у.
- requests, за помоћ при прављењу HTTP захтева.
Ако то већ нисте урадили, пратите упутства на Microsoft Learn страници да креирате Azure OpenAI ресурс и модел. Изаберите DALL-E 3 као модел.
-
Креирајте датотеку .env са следећим садржајем:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Пронађите ову информацију у Azure OpenAI Foundry Portal-у за ваш ресурс у одељку "Deployments".
-
Сакупите горе наведене библиотеке у датотеци requirements.txt овако:
python-dotenv openai pillow requests -
Затим, креирајте виртуелно окружење и инсталирајте библиотеке:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtЗа Windows, користите следеће команде за креирање и активирање вашег виртуелног окружења:
python3 -m venv venv venv\Scripts\activate.bat
-
Додајте следећи код у датотеку названу 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)
Објашњење кода:
-
Прво, увозимо библиотеке које су нам потребне, укључујући OpenAI библиотеку, dotenv библиотеку, requests библиотеку и Pillow библиотеку.
import openai import os import requests from PIL import Image import dotenv
-
Затим учитавамо променљиве окружења из .env датотеке.
# import dotenv dotenv.load_dotenv()
-
Након тога, конфигуришемо клијента за 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" )
-
Затим генеришемо слику:
# 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'] )
Горњи код враћа JSON објекат који садржи URL генерисане слике. Можемо користити URL за преузимање слике и њено чување у датотеци.
-
На крају, отварамо слику и користимо стандардни прегледач слика да је прикажемо:
image = Image.open(image_path) image.show()
Погледајмо код који генерише слику детаљније:
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, је текстуални промпт који се користи за генерисање слике. У овом случају, користимо промпт "Зец на коњу, држи лизалицу, на магловитој ливади где расту нарциси".
- size, је величина генерисане слике. У овом случају, генеришемо слику величине 1024x1024 пиксела.
- n, је број генерисаних слика. У овом случају, генеришемо две слике.
- temperature, је параметар који контролише случајност излазног резултата генеративног AI модела. Температура је вредност између 0 и 1 где 0 значи да је излаз детерминистички, а 1 значи да је излаз случајан. Подразумевана вредност је 0.7.
Постоје још многе ствари које можете радити са сликама, а о томе ћемо говорити у следећем одељку.
До сада сте видели како смо успели да генеришемо слику користећи неколико линија кода у Python-у. Међутим, постоје још многе ствари које можете радити са сликама.
Такође можете урадити следеће:
- Извршити измене. Пружањем постојеће слике, маске и промпта, можете изменити слику. На пример, можете додати нешто на део слике. Замислите нашу слику зеца, можете му додати шешир. Како бисте то урадили је да пружите слику, маску (која идентификује део области за промену) и текстуални промпт који каже шта треба урадити.
Напомена: ово није подржано у DALL-E 3.
Ево примера користећи 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].urlОсновна слика би садржавала само салон са базеном, али коначна слика би имала фламинга:
-
Креирање варијација. Идеја је да узмете постојећу слику и затражите да се креирају варијације. Да бисте креирали варијацију, пружате слику и текстуални промпт и код као што је следеће:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Напомена, ово је подржано само на OpenAI
Температура је параметар који контролише случајност излазног резултата генеративног AI модела. Температура је вредност између 0 и 1 где 0 значи да је излаз детерминистички, а 1 значи да је излаз случајан. Подразумевана вредност је 0.7.
Погледајмо пример како температура функционише, покретањем овог промпта два пута:
Промпт: "Зец на коњу, држи лизалицу, на магловитој ливади где расту нарциси"
Сада покренимо исти промпт само да видимо да нећемо добити исту слику два пута:
Као што видите, слике су сличне, али нису исте. Покушајмо да променимо вредност температуре на 0.1 и видимо шта ће се десити:
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
)Покушајмо да направимо одговор детерминистичкији. Могли смо да приметимо из две генерисане слике да на првој слици постоји зец, а на другој коњ, тако да се слике значајно разликују.
Зато променимо наш код и поставимо температуру на 0, овако:
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
)Сада када покренете овај код, добијате ове две слике:
Овде јасно можете видети како се слике више међусобно подударају.
Са нашим демоом, већ можемо генерисати слике за наше клијенте. Међутим, потребно је да креирамо одређене границе за нашу апликацију.
На пример, не желимо да генеришемо слике које нису прикладне за радно окружење или које нису прикладне за децу.
Ово можемо урадити помоћу мета промптова. Мета промптови су текстуални промптови који се користе за контролу излазног резултата генеративног AI модела. На пример, можемо користити мета промптове за контролу излазног резултата и осигурати да генерисане слике буду прикладне за радно окружење или за децу.
Како функционишу мета промптови?
Мета промптови су текстуални промптови који се користе за контролу излазног резултата генеративног AI модела, позиционирани су пре текстуалног промпта и користе се за контролу излазног резултата модела, уграђени у апликације ради контроле излазног резултата модела. Инкапсулирају улаз промпта и улаз мета промпта у један текстуални промпт.
Један пример мета промпта би био следећи:
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)
Сада, погледајмо како можемо користити мета промптове у нашем демоу.
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 imageИз горњег промпта, можете видети како све генерисане слике узимају у обзир мета промпт.
На почетку ове лекције представили смо Edu4All. Сада је време да омогућимо студентима да генеришу слике за своје задатке.
Студенти ће креирати слике за своје задатке који садрже споменике, а који споменици ће бити изабрани зависи од студената. Од студената се тражи да користе своју креативност у овом задатку и поставе те споменике у различите контексте.
Ево једног могућег решења:
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)Након што завршите ову лекцију, погледајте нашу колекцију за учење о генеративној вештачкој интелигенцији како бисте наставили да унапређујете своје знање о генеративној вештачкој интелигенцији!
Прелазите на лекцију 10 где ћемо истражити како изградити AI апликације уз помоћ low-code алата
Одрицање од одговорности:
Овај документ је преведен помоћу услуге за превођење уз помоћ вештачке интелигенције Co-op Translator. Иако настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не сносимо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.








