יש הרבה יותר ל-LLMs מאשר יצירת טקסט. ניתן גם ליצור תמונות מתיאורים טקסטואליים. שימוש בתמונות כמודל יכול להיות מאוד שימושי בתחומים רבים כמו טכנולוגיה רפואית, אדריכלות, תיירות, פיתוח משחקים ועוד. בפרק זה, נבחן את שני המודלים הפופולריים ביותר ליצירת תמונות, DALL-E ו-Midjourney.
בשיעור זה, נעסוק ב:
- יצירת תמונות ולמה זה שימושי.
- DALL-E ו-Midjourney, מה הם ואיך הם עובדים.
- איך לבנות יישום ליצירת תמונות.
לאחר סיום השיעור, תוכלו:
- לבנות יישום ליצירת תמונות.
- להגדיר גבולות ליישום שלכם באמצעות מטה-פרומפטים.
- לעבוד עם DALL-E ו-Midjourney.
יישומים ליצירת תמונות הם דרך מצוינת לחקור את היכולות של בינה מלאכותית יוצרת. ניתן להשתמש בהם, לדוגמה:
-
עריכת תמונות וסינתזה. ניתן ליצור תמונות למגוון שימושים, כמו עריכת תמונות וסינתזה של תמונות.
-
יישום בתעשיות שונות. ניתן גם להשתמש בהם ליצירת תמונות עבור מגוון תעשיות כמו טכנולוגיה רפואית, תיירות, פיתוח משחקים ועוד.
כחלק מהשיעור הזה, נמשיך לעבוד עם הסטארטאפ שלנו, Edu4All. התלמידים ייצרו תמונות עבור ההערכות שלהם, בדיוק אילו תמונות זה תלוי בהם, אבל הם יכולים להיות איורים לאגדה שלהם, יצירת דמות חדשה לסיפור שלהם או לעזור להם לדמיין את הרעיונות והקונספטים שלהם.
הנה דוגמה למה שהתלמידים של Edu4All יכולים ליצור אם הם עובדים בכיתה על מונומנטים:
באמצעות פרומפט כמו:
"כלב ליד מגדל אייפל באור שמש מוקדם של הבוקר"
DALL-E ו-Midjourney הם שניים מהמודלים הפופולריים ביותר ליצירת תמונות, הם מאפשרים להשתמש בפרומפטים ליצירת תמונות.
נתחיל עם DALL-E, שהוא מודל בינה מלאכותית יוצרת שמייצר תמונות מתיאורים טקסטואליים.
-
CLIP, הוא מודל שמייצר embeddings, שהם ייצוגים מספריים של נתונים, מתמונות וטקסט.
-
Diffused attention, הוא מודל שמייצר תמונות מ-embeddings. DALL-E מאומן על מאגר נתונים של תמונות וטקסט וניתן להשתמש בו ליצירת תמונות מתיאורים טקסטואליים. לדוגמה, ניתן להשתמש ב-DALL-E ליצירת תמונות של חתול עם כובע, או כלב עם מוהוק.
Midjourney עובד בצורה דומה ל-DALL-E, הוא מייצר תמונות מפרומפטים טקסטואליים. Midjourney, יכול גם לשמש ליצירת תמונות באמצעות פרומפטים כמו "חתול עם כובע", או "כלב עם מוהוק".
קרדיט תמונה ויקיפדיה, תמונה שנוצרה על ידי Midjourney
ראשית, DALL-E. DALL-E הוא מודל בינה מלאכותית יוצרת המבוסס על ארכיטקטורת טרנספורמר עם טרנספורמר אוטורגרסיבי.
טרנספורמר אוטורגרסיבי מגדיר איך מודל מייצר תמונות מתיאורים טקסטואליים, הוא מייצר פיקסל אחד בכל פעם, ואז משתמש בפיקסלים שנוצרו כדי לייצר את הפיקסל הבא. עובר דרך שכבות רבות ברשת עצבית, עד שהתמונה מושלמת.
בתהליך זה, DALL-E שולט בתכונות, אובייקטים, מאפיינים ועוד בתמונה שהוא מייצר. עם זאת, ל-DALL-E 2 ו-3 יש יותר שליטה על התמונה שנוצרת.
אז מה נדרש כדי לבנות יישום ליצירת תמונות? תצטרכו את הספריות הבאות:
- python-dotenv, מומלץ מאוד להשתמש בספרייה זו כדי לשמור את הסודות שלכם בקובץ .env הרחק מהקוד.
- openai, ספרייה זו תשמש אתכם כדי לתקשר עם ה-API של OpenAI.
- 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 עבור המשאב שלכם בסעיף "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, הוא פרמטר ששולט באקראיות של הפלט של מודל הבינה המלאכותית היוצרת. הטמפרטורה היא ערך בין 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.
טמפרטורה היא פרמטר ששולט באקראיות של הפלט של מודל בינה מלאכותית יוצרת. הטמפרטורה היא ערך בין 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
)עכשיו כשמריצים את הקוד הזה, מקבלים את שתי התמונות הבאות:
כאן ניתן לראות בבירור איך התמונות דומות יותר זו לזו.
עם הדמו שלנו, אנחנו כבר יכולים ליצור תמונות עבור הלקוחות שלנו. עם זאת, אנחנו צריכים להגדיר כמה גבולות ליישום שלנו.
לדוגמה, אנחנו לא רוצים ליצור תמונות שאינן מתאימות לעבודה, או שאינן מתאימות לילדים.
ניתן לעשות זאת עם מטה-פרומפטים. מטה-פרומפטים הם פרומפטים טקסטואליים שמשמשים לשליטה בפלט של מודל בינה מלאכותית יוצרת. לדוגמה, ניתן להשתמש במטה-פרומפטים כדי לשלוט בפלט, ולהבטיח שהתמונות שנוצרות יהיו מתאימות לעבודה, או מתאימות לילדים.
אז איך מטה-פרומפטים עובדים?
מטה-פרומפטים הם פרומפטים טקסטואליים שמשמשים לשליטה בפלט של מודל בינה מלאכותית יוצרת, הם ממוקמים לפני הפרומפט הטקסטואלי, ומשמשים לשליטה בפלט של המודל ומשולבים ביישומים כדי לשלוט בפלט של המודל. הם מאחדים את קלט הפרומפט ואת קלט המטה-פרומפט בפרומפט טקסטואלי אחד.
דוגמה אחת למטה-פרומפט תהיה הבאה:
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)לאחר שסיימתם את השיעור הזה, בדקו את אוסף הלמידה של AI גנרטיבי כדי להמשיך לשפר את הידע שלכם ב-AI גנרטיבי!
עברו לשיעור 10 שבו נבחן כיצד לבנות יישומי AI עם קוד נמוך
הצהרת אחריות:
מסמך זה תורגם באמצעות שירות תרגום AI Co-op Translator. למרות שאנו שואפים לדיוק, יש להיות מודעים לכך שתרגומים אוטומטיים עשויים להכיל שגיאות או אי דיוקים. המסמך המקורי בשפתו המקורית צריך להיחשב כמקור סמכותי. עבור מידע קריטי, מומלץ להשתמש בתרגום מקצועי אנושי. אנו לא נושאים באחריות לאי הבנות או לפרשנויות שגויות הנובעות משימוש בתרגום זה.








