LLMer handler ikke bare om tekstgenerering. Det er også mulig å generere bilder ut 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 kapitlet skal vi se nærmere på de to mest populære modellene for bilde-generering, 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 bilde-generering.
Etter å ha fullført denne leksjonen vil du kunne:
- Bygge en applikasjon for bilde-generering.
- Definere rammer for applikasjonen din med metaprompter.
- Jobbe med DALL-E og Midjourney.
Applikasjoner for bilde-generering er en flott måte å utforske mulighetene med Generativ AI på. De kan brukes til for eksempel:
-
Bildebehandling og syntese. Du kan generere bilder for ulike bruksområder, som bildebehandling og bildesyntese.
-
Anvendt i flere bransjer. De kan også brukes til å generere bilder for ulike bransjer som Medtech, turisme, spillutvikling og mer.
Som en del av denne leksjonen skal vi fortsette å jobbe med vår oppstartsbedrift, Edu4All. Studentene skal lage bilder til sine vurderinger, og hvilke bilder det blir, bestemmer studentene selv. Det kan for eksempel være illustrasjoner til deres egen eventyrfortelling, lage en ny karakter til historien sin, eller hjelpe dem med å visualisere ideer og konsepter.
Her er et eksempel på hva studentene i Edu4All kan generere hvis de jobber med monumenter i klassen:
med 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 bilde-generering, og de lar deg bruke prompter for å generere bilder.
La oss starte med DALL-E, som er en Generativ AI-modell som genererer bilder ut fra tekstbeskrivelser.
DALL-E er en kombinasjon av to modeller, CLIP og diffused attention.
-
CLIP er en modell som genererer embeddings, altså 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 med bilder og tekst, og kan brukes til å generere bilder ut fra tekstbeskrivelser. For eksempel kan DALL-E 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 ut fra tekstprompter. Midjourney kan også brukes til å generere bilder med prompter som “en katt med hatt” eller “en hund med mohawk”.
Bildekred 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 ut fra tekstbeskrivelser, den genererer én piksel om gangen, og bruker de genererte pikslene til å generere neste piksel. Dette skjer gjennom flere lag i et nevralt nettverk, helt til bildet er ferdig.
Med denne prosessen kontrollerer DALL-E attributter, objekter, egenskaper og mer i bildet den genererer. DALL-E 2 og 3 har imidlertid enda bedre kontroll over det genererte bildet.
Hva kreves for å bygge en applikasjon for bilde-generering? Du trenger følgende biblioteker:
- python-dotenv, det anbefales sterkt å bruke dette biblioteket for å holde hemmeligheter i en .env-fil adskilt fra koden.
- openai, dette biblioteket bruker du for å kommunisere med OpenAI API.
- pillow, for å jobbe med bilder i Python.
- requests, for å gjøre HTTP-forespørsler.
-
Lag en fil .env med følgende innhold:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Finn denne informasjonen i Azure-portalen for ressursen din under "Keys and Endpoint".
-
Samle bibliotekene i en fil kalt requirements.txt slik:
python-dotenv openai pillow requests -
Opprett et virtuelt miljø og installer bibliotekene:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtFor Windows, bruk følgende kommandoer for å opprette og aktivere det virtuelle miljøet:
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 # 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)
La oss forklare denne koden:
-
Først importerer vi bibliotekene vi trenger, inkludert OpenAI-biblioteket, dotenv, requests og Pillow.
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()
-
Så setter vi endepunkt, nøkkel for OpenAI API, versjon og type.
# 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'
-
Deretter genererer vi bildet:
# 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, )
Koden over 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 for å vise det:
image = Image.open(image_path) image.show()
La oss se nærmere på koden som genererer bildet:
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 er tekstprompten som brukes for å generere bildet. Her bruker vi prompten "Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils".
- size er størrelsen på bildet som genereres. Her lager vi et bilde på 1024x1024 piksler.
- n er antall bilder som genereres. Her lager vi to bilder.
- temperature er en parameter som styrer hvor tilfeldig utdataene fra en Generativ AI-modell er. Temperaturen er en verdi mellom 0 og 1, der 0 betyr at utdataene er deterministiske, og 1 betyr at utdataene er tilfeldige. Standardverdien er 0,7.
Det finnes flere ting du kan gjøre med bilder, som vi skal dekke i neste seksjon.
Så langt har du sett hvordan vi kan generere et bilde med noen få linjer Python-kode. Men det finnes flere muligheter 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 i en del av et bilde. Tenk deg vårt bilde av kaninen, du kan legge til en hatt på kaninen. Hvordan du gjør det er ved å gi bildet, en maske (som identifiserer området som skal endres) og en tekstprompt som sier hva som skal gjøres.
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']
Grunnbildet vil bare inneholde kaninen, men det endelige bildet vil ha hatten på kaninen.
-
Lage variasjoner. Ideen er at du tar et eksisterende bilde og ber om at det lages variasjoner. 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 at dette kun støttes av OpenAI
Temperatur er en parameter som styrer hvor tilfeldig utdataene fra en Generativ AI-modell er. Temperaturen er en verdi mellom 0 og 1, der 0 betyr at utdataene er deterministiske, og 1 betyr at utdataene er tilfeldige. Standardverdien er 0,7.
La oss se på et eksempel på hvordan temperatur fungerer, ved å kjøre denne prompten to ganger:
Prompt: "Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils"
Nå kjører vi samme prompt igjen for å se at vi ikke får samme bilde to ganger:
Som du ser, er bildene like, men ikke identiske. La oss prøve å endre temperaturverdien til 0,1 og se hva som skjer:
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
)La oss prøve å gjøre responsen mer deterministisk. Vi kan se 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 = 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
)Når du kjører denne koden nå, får du disse to bildene:
Her ser du tydelig at bildene ligner mer på hverandre.
Med demoen vår kan vi allerede generere bilder for kundene våre. Men vi må lage noen rammer for applikasjonen.
For eksempel ønsker vi ikke å generere bilder som ikke er egnet for arbeidsplassen, eller som ikke passer for barn.
Dette kan vi gjøre med metaprompter. Metaprompter er tekstprompter som brukes for å kontrollere utdataene fra en Generativ AI-modell. For eksempel kan vi bruke metaprompter for å sikre at de genererte bildene er trygge for arbeidsplassen, eller passende for barn.
Hvordan fungerer metaprompter?
Metaprompter er tekstprompter som brukes for å kontrollere utdataene fra en Generativ AI-modell. De plasseres foran tekstprompten, og brukes for å styre modellens utdata. De legges inn i applikasjoner for å kontrollere modellens utdata, ved å kapsle 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 demoen vår.
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 over kan du se hvordan alle bildene som genereres tar hensyn til metaprompten.
Vi introduserte Edu4All i starten av denne leksjonen. Nå er det på tide å gi studentene mulighet til å generere bilder til sine vurderinger.
Studentene skal lage bilder til vurderingene sine med monumenter, og hvilke monumenter det blir, bestemmer studentene selv. Studentene oppfordres til å bruke kreativiteten sin i denne oppgaven for å plassere monumentene i ulike kontekster.
Her er en mulig løsning:
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"""{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 = 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)Etter å ha fullført denne leksjonen, sjekk ut vår Generative AI Learning collection for å fortsette å utvikle kunnskapen din om Generativ AI!
Gå videre til leksjon 10 hvor vi ser på hvordan man kan bygge AI-applikasjoner med low-code
Ansvarsfraskrivelse:
Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vennligst vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det opprinnelige dokumentet på originalspråket skal 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.





