Τα LLMs δεν περιορίζονται μόνο στη δημιουργία κειμένου. Είναι επίσης δυνατό να δημιουργηθούν εικόνες από περιγραφές κειμένου. Η χρήση εικόνων ως μέσο μπορεί να είναι εξαιρετικά χρήσιμη σε πολλούς τομείς, όπως η ιατρική τεχνολογία, η αρχιτεκτονική, ο τουρισμός, η ανάπτυξη παιχνιδιών και άλλα. Σε αυτό το κεφάλαιο, θα εξετάσουμε τα δύο πιο δημοφιλή μοντέλα δημιουργίας εικόνων, το DALL-E και το Midjourney.
Σε αυτό το μάθημα, θα καλύψουμε:
- Τη δημιουργία εικόνων και γιατί είναι χρήσιμη.
- Τα DALL-E και Midjourney, τι είναι και πώς λειτουργούν.
- Πώς να δημιουργήσετε μια εφαρμογή γεννήτριας εικόνων.
Μετά την ολοκλήρωση αυτού του μαθήματος, θα μπορείτε:
- Να δημιουργήσετε μια εφαρμογή γεννήτριας εικόνων.
- Να ορίσετε όρια για την εφαρμογή σας με μετα-προτροπές.
- Να εργαστείτε με τα DALL-E και Midjourney.
Οι εφαρμογές γεννήτριας εικόνων είναι ένας εξαιρετικός τρόπος για να εξερευνήσετε τις δυνατότητες της Γεννητικής Τεχνητής Νοημοσύνης. Μπορούν να χρησιμοποιηθούν, για παράδειγμα:
-
Επεξεργασία και σύνθεση εικόνων. Μπορείτε να δημιουργήσετε εικόνες για διάφορες χρήσεις, όπως επεξεργασία και σύνθεση εικόνων.
-
Εφαρμογή σε διάφορους κλάδους. Μπορούν επίσης να χρησιμοποιηθούν για τη δημιουργία εικόνων για διάφορους κλάδους, όπως η ιατρική τεχνολογία, ο τουρισμός, η ανάπτυξη παιχνιδιών και άλλα.
Στο πλαίσιο αυτού του μαθήματος, θα συνεχίσουμε να εργαζόμαστε με τη startup μας, Edu4All. Οι μαθητές θα δημιουργήσουν εικόνες για τις εργασίες τους. Το είδος των εικόνων εξαρτάται από τους μαθητές, αλλά θα μπορούσαν να είναι εικονογραφήσεις για το δικό τους παραμύθι, να δημιουργήσουν έναν νέο χαρακτήρα για την ιστορία τους ή να τους βοηθήσουν να οπτικοποιήσουν τις ιδέες και τις έννοιές τους.
Για παράδειγμα, αν οι μαθητές της Edu4All εργάζονται στην τάξη πάνω σε μνημεία, θα μπορούσαν να δημιουργήσουν κάτι σαν:
χρησιμοποιώντας μια προτροπή όπως:
"Σκύλος δίπλα στον Πύργο του Άιφελ στο πρωινό φως του ήλιου"
DALL-E και Midjourney είναι δύο από τα πιο δημοφιλή μοντέλα δημιουργίας εικόνων, που σας επιτρέπουν να χρησιμοποιείτε προτροπές για τη δημιουργία εικόνων.
Ας ξεκινήσουμε με το DALL-E, το οποίο είναι ένα μοντέλο Γεννητικής Τεχνητής Νοημοσύνης που δημιουργεί εικόνες από περιγραφές κειμένου.
Το DALL-E είναι ένας συνδυασμός δύο μοντέλων, CLIP και diffused attention.
-
CLIP, είναι ένα μοντέλο που δημιουργεί ενσωματώσεις, οι οποίες είναι αριθμητικές αναπαραστάσεις δεδομένων, από εικόνες και κείμενο.
-
Diffused attention, είναι ένα μοντέλο που δημιουργεί εικόνες από ενσωματώσεις. Το DALL-E εκπαιδεύεται σε ένα σύνολο δεδομένων εικόνων και κειμένου και μπορεί να χρησιμοποιηθεί για τη δημιουργία εικόνων από περιγραφές κειμένου. Για παράδειγμα, το DALL-E μπορεί να χρησιμοποιηθεί για τη δημιουργία εικόνων μιας γάτας με καπέλο ή ενός σκύλου με μοϊκάνα.
Το Midjourney λειτουργεί με παρόμοιο τρόπο με το DALL-E, δημιουργεί εικόνες από προτροπές κειμένου. Το Midjourney μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία εικόνων χρησιμοποιώντας προτροπές όπως "μια γάτα με καπέλο" ή "ένας σκύλος με μοϊκάνα".
Πηγή εικόνας Wikipedia, εικόνα που δημιουργήθηκε από το Midjourney
Πρώτα, DALL-E. Το DALL-E είναι ένα μοντέλο Γεννητικής Τεχνητής Νοημοσύνης βασισμένο στην αρχιτεκτονική transformer με έναν autoregressive transformer.
Ένας autoregressive transformer καθορίζει πώς ένα μοντέλο δημιουργεί εικόνες από περιγραφές κειμένου, δημιουργεί ένα pixel τη φορά και στη συνέχεια χρησιμοποιεί τα παραγόμενα pixels για να δημιουργήσει το επόμενο pixel. Περνώντας μέσα από πολλαπλά επίπεδα σε ένα νευρωνικό δίκτυο, μέχρι να ολοκληρωθεί η εικόνα.
Με αυτή τη διαδικασία, το 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 pixels.
- n, είναι ο αριθμός των εικόνων που δημιουργούνται. Σε αυτήν την περίπτωση, δημιουργούμε δύο εικόνες.
- temperature, είναι μια παράμετρος που ελέγχει την τυχαιότητα του αποτελέσματος ενός μοντέλου Γεννητικής Τεχνητής Νοημοσύνης. Η θερμοκρασία είναι μια τιμή μεταξύ 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Η βασική εικόνα θα περιείχε μόνο το lounge με την πισίνα, αλλά η τελική εικόνα θα είχε ένα φλαμίνγκο:
-
Δημιουργία παραλλαγών. Η ιδέα είναι ότι παίρνετε μια υπάρχουσα εικόνα και ζητάτε να δημιουργηθούν παραλλαγές. Για να δημιουργήσετε μια παραλλαγή, παρέχετε μια εικόνα και μια προτροπή κειμένου και κώδικα όπως παρακάτω:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Σημείωση, αυτό υποστηρίζεται μόνο στο OpenAI.
Η θερμοκρασία είναι μια παράμετρος που ελέγχει την τυχαιότητα του αποτελέσματος ενός μοντέλου Γεννητικής Τεχνητής Νοημοσύνης. Η θερμοκρασία είναι μια τιμή μεταξύ 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
)Τώρα όταν εκτελέσετε αυτόν τον κώδικα, θα πάρετε αυτές τις δύο εικόνες:
Εδώ μπορείτε να δείτε καθαρά πώς οι εικόνες μοιάζουν περισσότερο μεταξύ τους.
Με το demo μας, μπορούμε ήδη να δημιουργούμε εικόνες για τους πελάτες μας. Ωστόσο, πρέπει να δημιουργήσουμε κάποια όρια για την εφαρμογή μας.
Για παράδειγμα, δεν θέλουμε να δημιουργούμε εικόνες που δεν είναι κατάλληλες για εργασία ή που δεν είναι κατάλληλες για παιδιά.
Μπορούμε να το κάνουμε αυτό με μετα-προτροπές. Οι μετα-προτροπές είναι προτροπές κειμένου που χρησιμοποιούνται για τον έλεγχο του αποτελέσματος ενός μοντέλου Γεννητικής Τεχνητής Νοημοσύνης. Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε μετα-προτροπές για να ελέγξουμε το αποτέλεσμα και να διασφαλίσουμε ότι οι παραγόμενες εικόνες είναι κατάλληλες για εργασία ή κατάλληλες για παιδιά.
Πώς λειτουργούν λοιπόν οι μετα-προτροπές;
Οι μετα-προτροπές είναι προτροπές κειμένου που χρησιμοποιούνται για τον έλεγχο του αποτελέσματος ενός μοντέλου Γεννητικής Τεχνητής Νοημοσύνης. Τοποθετούνται πριν από την προτροπή κειμένου και χρησιμοποιούνται για τον έλεγχο του αποτελέσματος του μοντέλου και ενσωματώνονται στις εφαρμογές για τον έλεγχο του αποτελέσματος του μοντέλου. Ενσωμα
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. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.








