Skip to content

Latest commit

 

History

History
478 lines (324 loc) · 19.3 KB

File metadata and controls

478 lines (324 loc) · 19.3 KB

Pildigeneratsiooni rakenduste loomine

Pildigeneratsiooni rakenduste loomine

LLM-id ei piirdu ainult tekstide genereerimisega. Samuti on võimalik luua pilte tekstikirjelduste põhjal. Pildid kui meedium võivad olla väga kasulikud mitmes valdkonnas, nagu meditsiinitehnoloogia, arhitektuur, turism, mänguarendus ja palju muud. Selles peatükis vaatleme kahte populaarseimat pildigeneratsiooni mudelit, DALL-E ja Midjourney.

Sissejuhatus

Selles õppetükis käsitleme:

  • Pildigeneratsiooni ja selle kasulikkust.
  • DALL-E ja Midjourney: mis need on ja kuidas need töötavad.
  • Kuidas luua pildigeneratsiooni rakendust.

Õppeeesmärgid

Pärast selle õppetüki läbimist oskad:

  • Luua pildigeneratsiooni rakendust.
  • Määratleda oma rakenduse piirid metaküsimuste abil.
  • Töötada DALL-E ja Midjourneyga.

Miks luua pildigeneratsiooni rakendust?

Pildigeneratsiooni rakendused on suurepärane viis uurida generatiivse tehisintellekti võimalusi. Neid saab kasutada näiteks:

  • Pilditöötlus ja süntees. Saad luua pilte erinevateks kasutusjuhtudeks, nagu pilditöötlus ja pildisüntees.

  • Rakendatav erinevates tööstusharudes. Neid saab kasutada piltide loomiseks erinevates tööstusharudes, nagu meditsiinitehnoloogia, turism, mänguarendus ja palju muud.

Stsenaarium: Edu4All

Selle õppetüki osana jätkame tööd oma idufirmaga Edu4All. Õpilased loovad pilte oma ülesannete jaoks. Milliseid pilte täpselt, jääb õpilaste otsustada, kuid need võivad olla illustratsioonid nende enda muinasjuttude jaoks, uue tegelase loomine nende loole või nende ideede ja kontseptsioonide visualiseerimine.

Näiteks, kui Edu4Alli õpilased töötavad klassis monumentide teemal, võivad nad luua selliseid pilte:

Edu4All idufirma, klass monumentide teemal, Eiffeli torn

kasutades sellist küsimust nagu

"Koer Eiffeli torni kõrval varahommikuses päikesevalguses"

Mis on DALL-E ja Midjourney?

DALL-E ja Midjourney on kaks populaarseimat pildigeneratsiooni mudelit, mis võimaldavad kasutada küsimusi piltide loomiseks.

DALL-E

Alustame DALL-E mudelist, mis on generatiivse tehisintellekti mudel, mis loob pilte tekstikirjelduste põhjal.

DALL-E on kahe mudeli, CLIP ja hajutatud tähelepanu kombinatsioon.

  • CLIP on mudel, mis genereerib sisenditest (piltidest ja tekstist) numbrilisi esitlusi ehk vektoreid.

  • Hajutatud tähelepanu on mudel, mis genereerib pilte vektorite põhjal. DALL-E on treenitud piltide ja tekstide andmekogumiga ning seda saab kasutada piltide loomiseks tekstikirjelduste põhjal. Näiteks saab DALL-E abil luua pilte kassist mütsiga või koerast mohawk-soenguga.

Midjourney

Midjourney töötab sarnaselt DALL-E mudelile, luues pilte tekstiküsimuste põhjal. Midjourney abil saab samuti luua pilte, kasutades küsimusi nagu "kass mütsiga" või "koer mohawk-soenguga".

Midjourney loodud pilt, mehaaniline tuvi Pildi autor Wikipedia, pilt loodud Midjourney abil

Kuidas DALL-E ja Midjourney töötavad

Esiteks, DALL-E. DALL-E on generatiivse tehisintellekti mudel, mis põhineb transformerite arhitektuuril ja kasutab autoregressiivset transformerit.

Autoregressiivne transformer määratleb, kuidas mudel genereerib pilte tekstikirjelduste põhjal, luues ühe piksli korraga ja kasutades genereeritud piksleid järgmise piksli loomiseks. See protsess kordub läbi mitme närvivõrgu kihi, kuni pilt on valmis.

Selle protsessi abil suudab DALL-E kontrollida pildi omadusi, objekte, karakteristikuid ja palju muud. Kuid DALL-E 2 ja 3 pakuvad veelgi suuremat kontrolli loodud pildi üle.

Esimese pildigeneratsiooni rakenduse loomine

Mida on vaja pildigeneratsiooni rakenduse loomiseks? Vajalikud on järgmised teegid:

  • python-dotenv, soovitatav kasutada seda teeki, et hoida oma salajasi andmeid .env failis, eemal koodist.
  • openai, teek, mida kasutatakse OpenAI API-ga suhtlemiseks.
  • pillow, piltidega töötamiseks Pythonis.
  • requests, HTTP-päringute tegemiseks.

Azure OpenAI mudeli loomine ja juurutamine

Kui seda pole veel tehtud, järgige juhiseid Microsoft Learn lehel, et luua Azure OpenAI ressurss ja mudel. Valige mudeliks DALL-E 3.

Rakenduse loomine

  1. Looge fail .env järgmise sisuga:

    AZURE_OPENAI_ENDPOINT=<your endpoint>
    AZURE_OPENAI_API_KEY=<your key>
    AZURE_OPENAI_DEPLOYMENT="dall-e-3"
    

    Leidke see teave Azure OpenAI Foundry portaalist oma ressursi "Deployments" sektsioonis.

  2. Koguge ülaltoodud teegid faili requirements.txt, näiteks:

    python-dotenv
    openai
    pillow
    requests
    
  3. Järgmiseks looge virtuaalne keskkond ja installige teegid:

    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt

    Windowsi puhul kasutage virtuaalse keskkonna loomiseks ja aktiveerimiseks järgmisi käske:

    python3 -m venv venv
    venv\Scripts\activate.bat
  4. Lisage järgmine kood faili nimega 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)

Selgitame seda koodi:

  • Esiteks impordime vajalikud teegid, sealhulgas OpenAI teegi, dotenv teegi, requests teegi ja Pillow teegi.

    import openai
    import os
    import requests
    from PIL import Image
    import dotenv
  • Järgmisena laadime keskkonnamuutujad .env failist.

    # import dotenv
    dotenv.load_dotenv()
  • Seejärel konfigureerime Azure OpenAI teenuse kliendi.

    # 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"
        )
  • Järgmisena genereerime pildi:

    # 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']
                        )

    Ülaltoodud kood tagastab JSON-objekti, mis sisaldab loodud pildi URL-i. Saame kasutada URL-i pildi allalaadimiseks ja selle faili salvestamiseks.

  • Lõpuks avame pildi ja kasutame standardset pildivaaturit selle kuvamiseks:

    image = Image.open(image_path)
    image.show()

Pildi genereerimise üksikasjad

Vaatame lähemalt koodi, mis pilti genereerib:

  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 on tekstiküsimus, mida kasutatakse pildi loomiseks. Antud juhul kasutame küsimust "Jänes hobuse seljas, hoides pulgakommi, udusel niidul, kus kasvavad nartsissid".
  • size on loodava pildi suurus. Antud juhul loome pildi, mille suurus on 1024x1024 pikslit.
  • n on loodavate piltide arv. Antud juhul loome kaks pilti.
  • temperature on parameeter, mis kontrollib generatiivse tehisintellekti mudeli väljundi juhuslikkust. Temperatuur on väärtus vahemikus 0 kuni 1, kus 0 tähendab, et väljund on deterministlik, ja 1 tähendab, et väljund on juhuslik. Vaikeväärtus on 0.7.

Piltidega saab teha veel palju muud, mida käsitleme järgmises osas.

Pildigeneratsiooni täiendavad võimalused

Olete näinud, kuidas saime Pythonis mõne koodirea abil pildi genereerida. Kuid piltidega saab teha veel palju muud.

Samuti saate teha järgmist:

  • Teha muudatusi. Andes olemasoleva pildi, maski ja küsimuse, saate pilti muuta. Näiteks saate lisada midagi pildi osale. Kujutage ette meie jänese pilti, saate lisada jänesele mütsi. Seda tehakse, andes pildi, maski (muutuse ala identifitseerimiseks) ja tekstiküsimuse, mis ütleb, mida tuleks teha.

Märkus: see ei ole toetatud DALL-E 3 puhul.

Siin on näide GPT Image'i kasutamisest:

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

Algne pilt sisaldaks ainult basseini ja puhkenurka, kuid lõplik pilt sisaldaks flamingot:

  • Loo variatsioone. Idee seisneb selles, et võtate olemasoleva pildi ja palute luua variatsioone. Variatsiooni loomiseks annate pildi ja tekstiküsimuse ning koodi, näiteks:

    response = openai.Image.create_variation(
      image=open("bunny-lollipop.png", "rb"),
      n=1,
      size="1024x1024"
    )
    image_url = response['data'][0]['url']

    Märkus: see on toetatud ainult OpenAI poolt.

Temperatuur

Temperatuur on parameeter, mis kontrollib generatiivse tehisintellekti mudeli väljundi juhuslikkust. Temperatuur on väärtus vahemikus 0 kuni 1, kus 0 tähendab, et väljund on deterministlik, ja 1 tähendab, et väljund on juhuslik. Vaikeväärtus on 0.7.

Vaatame näidet, kuidas temperatuur töötab, käivitades selle küsimuse kaks korda:

Küsimus: "Jänes hobuse seljas, hoides pulgakommi, udusel niidul, kus kasvavad nartsissid"

Jänes hobuse seljas, hoides pulgakommi, versioon 1

Nüüd käivitame sama küsimuse uuesti, et näha, et me ei saa kaks korda täpselt sama pilti:

Loodud pilt jänesest hobuse seljas

Nagu näete, on pildid sarnased, kuid mitte identsed. Proovime muuta temperatuuri väärtust 0.1 ja vaatame, mis juhtub:

 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
    )

Temperatuuri muutmine

Proovime muuta vastuse deterministlikumaks. Võime täheldada, et kahes loodud pildis on esimesel pildil jänes ja teisel pildil hobune, seega pildid erinevad oluliselt.

Muudame seetõttu oma koodi ja määrame temperatuuri väärtuseks 0, nagu nii:

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üüd, kui käivitate selle koodi, saate need kaks pilti:

  • Temperatuur 0, v1
  • Temperatuur 0, v2

Siin näete selgelt, kuidas pildid sarnanevad rohkem.

Kuidas määratleda rakenduse piirid metaküsimustega

Meie demo abil saame juba luua pilte oma klientidele. Kuid peame looma oma rakendusele mõned piirid.

Näiteks me ei soovi luua pilte, mis ei ole tööks sobivad või mis ei ole lastele sobilikud.

Seda saame teha metaküsimuste abil. Metaküsimused on tekstiküsimused, mida kasutatakse generatiivse tehisintellekti mudeli väljundi kontrollimiseks. Näiteks saame kasutada metaküsimusi väljundi kontrollimiseks ja tagada, et loodud pildid oleksid tööks sobivad või lastele sobilikud.

Kuidas see töötab?

Kuidas siis metaküsimused töötavad?

Metaküsimused on tekstiküsimused, mida kasutatakse generatiivse tehisintellekti mudeli väljundi kontrollimiseks. Need paigutatakse enne tekstiküsimust ja neid kasutatakse mudeli väljundi kontrollimiseks ning rakendustesse integreerimiseks, et kontrollida mudeli väljundit. Metaküsimus ja tekstiküsimus ühendatakse ühte tekstiküsimusse.

Üks näide metaküsimusest võiks olla järgmine:

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)

Nüüd vaatame, kuidas saame metaküsimusi oma demos kasutada.

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

Ülaltoodud küsimusest näete, kuidas kõik loodud pildid arvestavad metaküsimust.

Ülesanne - aitame õpilasi

Selle õppetüki alguses tutvustasime Edu4Alli. Nüüd on aeg aidata õpilastel luua pilte oma ülesannete jaoks.

Õpilased loovad pilte oma ülesannete jaoks, mis sisaldavad monumente. Millised monumendid täpselt, jääb õpilaste otsustada. Õpilastel palutakse kasutada oma loovust selles ülesandes, et paigutada need monumendid erinevatesse kontekstidesse.

Lahendus

Siin on üks võimalik lahendus:

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)

Suurepärane töö! Jätka õppimist

Pärast selle õppetunni lõpetamist tutvu meie Generatiivse tehisintellekti õppekollektsiooniga, et jätkata oma teadmiste arendamist generatiivse tehisintellekti valdkonnas!

Liigu edasi 10. õppetundi, kus uurime, kuidas luua tehisintellekti rakendusi madala koodiga.


Lahtiütlus:
See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta arusaamatuste või valesti tõlgenduste eest, mis võivad tekkida selle tõlke kasutamise tõttu.