LLM-er handler om mer enn tekstgenerering. Det er også mulig å generere bilder fra tekstbeskrivelser. Å ha bilder som en modalitet kan være svært nyttig innen en rekke områder som MedTech, arkitektur, turisme, spillutvikling og mer. I dette kapittelet skal vi se nærmere på de to mest populære modellene for bildegenerering, DALL-E og Midjourney.
I denne leksjonen skal vi dekke:
- Bildegenerering og hvorfor det er nyttig.
- DALL-E og Midjourney, hva de er og hvordan de fungerer.
- Hvordan du kan bygge en applikasjon for bildegenerering.
Etter å ha fullført denne leksjonen, vil du kunne:
- Bygge en applikasjon for bildegenerering.
- Definere grenser for applikasjonen din med metaprompter.
- Arbeide med DALL-E og Midjourney.
Applikasjoner for bildegenerering er en flott måte å utforske mulighetene med Generativ AI. De kan brukes til for eksempel:
-
Bilderedigering og syntese. Du kan generere bilder for en rekke bruksområder, som bilderedigering og bildesyntese.
-
Anvendelse i ulike bransjer. De kan også brukes til å generere bilder for en rekke bransjer som MedTech, turisme, spillutvikling og mer.
Som en del av denne leksjonen skal vi fortsette å jobbe med vår oppstart, Edu4All. Studentene skal lage bilder til sine oppgaver, hva slags bilder er opp til studentene, men de kan for eksempel lage illustrasjoner til sitt eget eventyr, skape en ny karakter til sin historie eller hjelpe dem med å visualisere sine ideer og konsepter.
Her er et eksempel på hva Edu4Alls studenter kan generere hvis de jobber i klassen med monumenter:
ved å bruke en prompt som
"Hund ved siden av Eiffeltårnet i tidlig morgensol"
DALL-E og Midjourney er to av de mest populære modellene for bildegenerering, som lar deg bruke prompter til å generere bilder.
La oss starte med DALL-E, som er en Generativ AI-modell som genererer bilder fra tekstbeskrivelser.
DALL-E er en kombinasjon av to modeller, CLIP og diffused attention.
-
CLIP, er en modell som genererer embeddings, som er numeriske representasjoner av data, fra bilder og tekst.
-
Diffused attention, er en modell som genererer bilder fra embeddings. DALL-E er trent på et datasett av bilder og tekst og kan brukes til å generere bilder fra tekstbeskrivelser. For eksempel kan DALL-E brukes til å generere bilder av en katt med hatt, eller en hund med mohawk.
Midjourney fungerer på en lignende måte som DALL-E, den genererer bilder fra tekstprompter. Midjourney kan også brukes til å generere bilder ved hjelp av promter som "en katt med hatt" eller "en hund med mohawk".
Bildekreditt Wikipedia, bilde generert av Midjourney
Først, DALL-E. DALL-E er en Generativ AI-modell basert på transformer-arkitekturen med en autoregressiv transformer.
En autoregressiv transformer definerer hvordan en modell genererer bilder fra tekstbeskrivelser, den genererer én piksel om gangen, og bruker deretter de genererte pikslene til å generere neste piksel. Den passerer gjennom flere lag i et nevralt nettverk, til bildet er komplett.
Med denne prosessen kontrollerer DALL-E attributter, objekter, egenskaper og mer i bildet det genererer. Imidlertid har DALL-E 2 og 3 mer kontroll over det genererte bildet.
Så hva trengs for å bygge en applikasjon for bildegenerering? Du trenger følgende biblioteker:
- python-dotenv, det anbefales sterkt å bruke dette biblioteket for å holde hemmeligheter i en .env-fil borte fra koden.
- openai, dette biblioteket brukes til å interagere med OpenAI API.
- pillow, for å arbeide med bilder i Python.
- requests, for å hjelpe deg med å gjøre HTTP-forespørsler.
Hvis du ikke allerede har gjort det, følg instruksjonene på Microsoft Learn-siden for å opprette en Azure OpenAI-ressurs og modell. Velg DALL-E 3 som modell.
-
Opprett en fil .env med følgende innhold:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Finn denne informasjonen i Azure OpenAI Foundry Portal for ressursen din i "Deployments"-seksjonen.
-
Samle de ovennevnte bibliotekene i en fil kalt requirements.txt slik:
python-dotenv openai pillow requests -
Deretter oppretter du et virtuelt miljø og installerer bibliotekene:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtFor Windows, bruk følgende kommandoer for å opprette og aktivere ditt virtuelle miljø:
python3 -m venv venv venv\Scripts\activate.bat
-
Legg til følgende kode i en fil kalt 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)
La oss forklare denne koden:
-
Først importerer vi bibliotekene vi trenger, inkludert OpenAI-biblioteket, dotenv-biblioteket, requests-biblioteket og Pillow-biblioteket.
import openai import os import requests from PIL import Image import dotenv
-
Deretter laster vi miljøvariablene fra .env-filen.
# import dotenv dotenv.load_dotenv()
-
Etter det konfigurerer vi Azure OpenAI serviceklienten
# 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" )
-
Deretter genererer vi bildet:
# 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'] )
Koden ovenfor svarer med et JSON-objekt som inneholder URL-en til det genererte bildet. Vi kan bruke URL-en til å laste ned bildet og lagre det i en fil.
-
Til slutt åpner vi bildet og bruker standard bildeviser til å vise det:
image = Image.open(image_path) image.show()
La oss se nærmere på koden som genererer bildet:
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, er tekstprompten som brukes til å generere bildet. I dette tilfellet bruker vi prompten "Kanin på hest, holder en kjærlighet på pinne, på en tåkete eng hvor det vokser påskeliljer".
- size, er størrelsen på bildet som genereres. I dette tilfellet genererer vi et bilde som er 1024x1024 piksler.
- n, er antallet bilder som genereres. I dette tilfellet genererer vi to bilder.
- temperature, er en parameter som kontrollerer tilfeldigheten i resultatet fra en Generativ AI-modell. Temperaturen er en verdi mellom 0 og 1 hvor 0 betyr at resultatet er deterministisk og 1 betyr at resultatet er tilfeldig. Standardverdien er 0,7.
Det er flere ting du kan gjøre med bilder som vi vil dekke i neste seksjon.
Du har sett så langt hvordan vi kunne generere et bilde med noen få linjer i Python. Imidlertid er det flere ting du kan gjøre med bilder.
Du kan også gjøre følgende:
- Utføre redigeringer. Ved å gi et eksisterende bilde en maske og en prompt, kan du endre et bilde. For eksempel kan du legge til noe på en del av et bilde. Tenk deg vårt kaninbilde, du kan legge til en hatt på kaninen. Hvordan du ville gjort det er ved å gi bildet, en maske (identifisere delen av området for endringen) og en tekstprompt for å si hva som skal gjøres.
Merk: dette støttes ikke i DALL-E 3.
Her er et eksempel ved bruk av 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].urlGrunnbildet vil bare inneholde loungen med bassenget, men det endelige bildet vil ha en flamingo:
-
Skape variasjoner. Ideen er at du tar et eksisterende bilde og ber om at variasjoner opprettes. For å lage en variasjon, gir du et bilde og en tekstprompt og kode som dette:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Merk, dette støttes kun på OpenAI
Temperatur er en parameter som kontrollerer tilfeldigheten i resultatet fra en Generativ AI-modell. Temperaturen er en verdi mellom 0 og 1 hvor 0 betyr at resultatet er deterministisk og 1 betyr at resultatet er tilfeldig. Standardverdien er 0,7.
La oss se på et eksempel på hvordan temperatur fungerer, ved å kjøre denne prompten to ganger:
Prompt : "Kanin på hest, holder en kjærlighet på pinne, på en tåkete eng hvor det vokser påskeliljer"
La oss nå kjøre den samme prompten bare for å se at vi ikke får det samme bildet to ganger:
Som du kan se, er bildene like, men ikke identiske. La oss prøve å endre temperaturverdien til 0,1 og se hva som skjer:
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
)Så la oss prøve å gjøre responsen mer deterministisk. Vi kunne observere fra de to bildene vi genererte at i det første bildet er det en kanin og i det andre bildet er det en hest, så bildene varierer mye.
La oss derfor endre koden vår og sette temperaturen til 0, slik:
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
)Nå, når du kjører denne koden, får du disse to bildene:
Her kan du tydelig se hvordan bildene ligner hverandre mer.
Med vår demo kan vi allerede generere bilder for våre kunder. Imidlertid må vi lage noen grenser for applikasjonen vår.
For eksempel ønsker vi ikke å generere bilder som ikke er egnet for arbeid, eller som ikke er passende for barn.
Vi kan gjøre dette med metaprompter. Metaprompter er tekstprompter som brukes til å kontrollere resultatet fra en Generativ AI-modell. For eksempel kan vi bruke metaprompter til å kontrollere resultatet, og sikre at de genererte bildene er egnet for arbeid, eller passende for barn.
Så, hvordan fungerer metaprompter?
Metaprompter er tekstprompter som brukes til å kontrollere resultatet fra en Generativ AI-modell, de plasseres før tekstprompten, og brukes til å kontrollere resultatet fra modellen og integreres i applikasjoner for å kontrollere resultatet fra modellen. De kapsler inn prompt-input og metaprompt-input i en enkelt tekstprompt.
Et eksempel på en metaprompt kan være følgende:
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)
La oss nå se hvordan vi kan bruke metaprompter i vår demo.
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 imageFra prompten ovenfor kan du se hvordan alle bilder som opprettes tar hensyn til metaprompten.
Vi introduserte Edu4All i begynnelsen av denne leksjonen. Nå er det på tide å gi studentene muligheten til å generere bilder til sine oppgaver.
Studentene skal lage bilder til sine oppgaver som inneholder monumenter, hvilke monumenter som skal brukes er opp til studentene. Studentene blir bedt om å bruke sin kreativitet i denne oppgaven for å plassere disse monumentene i ulike kontekster.
Her er en mulig løsning:
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)Etter å ha fullført denne leksjonen, ta en titt på vår Generative AI Learning-samling for å fortsette å utvikle kunnskapen din om Generative AI!
Gå videre til Leksjon 10, hvor vi skal se på hvordan man bygger AI-applikasjoner med lavkode
Ansvarsfraskrivelse:
Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi tilstreber nøyaktighet, vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.








