1. מבוא
עדכון אחרון:12.10.2023
יצירת תמונות – יצירת תמונות
Google Imagen הוא מודל שפה גדול (LLM) רב עוצמה של Google, שיכול ליצור תמונות מציאותיות ויצירתיות מתיאורי טקסט. בעזרת Imagen ב-Vertex AI, משתמשים יכולים לפתח תוך שניות מוצרי AI מהדור הבא, שהופכים את הדמיון של המשתמשים לנכסים ויזואליים באיכות גבוהה. בנוסף ליצירת תמונות מטקסט, האפליקציה תומכת גם בעריכת תמונות באמצעות הנחיות טקסט, כתוביות לתמונות, שאלות ותשובות ויזואליות ונושא, כוונון של מודל תמונה מבוסס סגנון.
יצירת הנחיות
כדי ליצור תמונה באמצעות Imagen, צריך לספק טקסט תיאור של התמונה שנקרא 'הנחיה', ושאליו תיווצר התמונה. עם זאת, כדי ליצור תמונה פוטו-ריאליסטית באיכות גבוהה, יש צורך במומחיות ביצירת הנחיות. האפשרות הזו תלויה גם בדומיין אם אתם רוצים ליצור תמונה שקשורה לדומיינים עסקיים ספציפיים, כמו קמעונאות, ייצור וכו'. גישה קלה יותר לעיצוב הנחיה היא לספק קבוצה של מילות מפתח למודל של 'ביזון טקסט'.
הגישה הכוללת היא כמו של -
ממשק המשתמש של GRadio
GRadio היא ספריית Python בקוד פתוח שמאפשרת ליצור במהירות רכיבי ממשק משתמש קלים לשימוש שניתן להתאים אישית, עבור מודל למידת המכונה שלכם, כל ממשק API או אפילו פונקציית Python שרירותית באמצעות כמה שורות קוד. אפשר לשלב את ה-GUI של GRadio ישירות ב-notebook של Jupyter או לשתף אותו כקישור עם כל אחד. GRadio תומכת במגוון רחב של סוגי מדיה, כולל טקסט, תמונות, סרטונים ואודיו. הוא גם מספק כמה רכיבים מובנים מראש בממשק המשתמש, כמו שדות להזנת קלט, לחצנים, פס הזזה ותפריטים נפתחים.
מה תפַתחו
ב-Codelab הזה אתם עומדים לפרוס אפליקציית GRadio אשר:
- ליצור הנחיה לטקסט באמצעות מילות מפתח או ביטויים. אפשר לערוך באופן ידני גם את ההנחיה שנוצרה.
- יצירת תמונות מההנחיה שנוצרה בממשק המשתמש.
מה תלמדו
- איך להשתמש בלמידה מאפס (zero-shot) ובלמידה מכמה שוטים באמצעות מודל טקסט-ביזון באופן פרוגרמטי כדי ליצור הנחיות ספציפיות ל-Imagen לצורך יצירת תמונות.
- איך ליצור תמונות באמצעות מודל Imagen באמצעות API ו-Prompt.
- איך יוצרים, פורסים ובודקים את אפליקציית GRadio מ-notebook של פלטפורמת העבודה של Vertex AI.
מה צריך להכין
- גישה לפרויקט GCP, לדוגמה: 'Cloud-llm-preview4'
- גישה ליצירת Vertex AI Workbench
- Vertex AI API מופעל.
- דרישות רשת ל-GRadio: גישה לכתובת ה-URL הציבורית של מכונת ה-notebook
2. בתהליך ההגדרה
יצירת מסמך notebook
- התחברות לפרויקט
- בתפריט הניווט הימני עוברים אל workbench
- בקטע פנקסי רשימות בניהול משתמשים, יוצרים מחברת חדשה עם אפשרויות ברירת המחדל.
- לוחצים על 'פתיחת JUPYTERLAB' אחרי שהוקצה למכונה.
הערה: אם ה-notebook במצב מושהה, יכול להיות שיחלפו כמה דקות עד שה-notebook יתחיל לפעול.
לקבלת הקוד
שמנו את קובץ הקוד כאן. אפשר לייבא את ה-notebook הזה בסביבה שלכם ולהריץ אותו כמו שהוא (מלבד שינוי של פרטי הפרויקט).
3. הרצת הקוד
התקנה או ייבוא של יחסי התלות והספריות הנדרשים
- התקנה של אפליקציית GRadio
- ייבוא של ממשקי ה-API של Vertex AI ל-Text-Bison ו-Image Generation.
- לייבא את כל הספריות הנדרשות האחרות.
יצירת הנחיות באמצעות Text-Bison
משתמשת בקלט של המשתמש שמכיל מילות מפתח ו/או ביטויים, כלומר רשימה מופרדת בפסיקים של מילות מפתח או ביטויים שאפשר להשתמש בהם כדי לבנות משפט שמתאר את התמונה שצריך ליצור.
לדוגמה – פרסונה, נושא, רקע, תאורה ותיאורים אחרים.
הפונקציה שיוצרת את ההנחיה מוצגת כך:
六defPrompt_generation(persona,signal,theme, התאורה, איכות, extra_desc):
model = TextGenerationModel.from_pretrained("text-bison")
response_few_shot = model.predict(
few_shot_prompt,
**parameters
)
response_single_shot = model.predict(
prompt,
**parameters
)
פרומפט עם כמה דוגמאות (Few-Shot) ו-Zero-shot
הנחיה ישירה (Zero-shot) היא שיטה ליצירת טקסט שבה לא נותנים למודל הקשר או דוגמאות ליצירת טקסט. זה עשוי להיות מאתגר, כי המודל צריך להסתמך על הידע שלו כדי ליצור טקסט עקבי ואינפורמטיבי.
עם זאת, הנחיות מאפס יכולות להיות גם יצירתיות מאוד, כי המודל לא מוגבל על ידי דוגמאות קיימות.
הנחיה עם כמה דוגמאות (Few-shot) היא שיטה ליצירת טקסט שבה נותנים למודל מספר קטן של דוגמאות כדי ליצור מהן טקסט. זה יכול להיות קל יותר מיצירת הנחיות מאפס, כי למודל יש הנחיות לגבי מה ליצור. עם זאת, יצירת הנחיות מכמה דוגמאות יכולה להיות מוגבלת, כי המודל יכול ליצור רק טקסט שדומה לדוגמאות שהוא קיבל.
בהמשך מופיע קוד לדוגמה להנחיות של Few-Shot ו-Zero-shot.
❌**# הנחיות לשימוש בכמה שוטים בקוד**
cases_shot_prompt = f"""יש לך מומחיות בכתיבת הנחיות למודלים ליצירת תמונות. משתמשים בביטויים ובמילות המפתח שסופקו, משרשרים אותם ומוסיפים פרטים מציאותיים כדי ליצור הנחיה הגיונית ומשמעותית שאפשר להשתמש בה ליצירת תמונות.
input: people, gardening, house garden, colorful plants, Real, HD image, Photo.
output: A Photo of people gardening in a house garden landscape with few coloured flowering plants. Realistic FULL HD Images, Elegant and natural facial and eye features taken by professional photographer
input: plumber, faucet, kitchen, high quality, natural lighting, Photo
output: A Photo of a plumber fixing a faucet in the kitchen. High quality image with natural indoor lighting.
input: house and garden, halloween, warm lighting, high quality image, Sketch
output: A Sketch of Beautiful House and Garden with Halloween Decorations. Warm lighting, High Quality, 4K photograph taken by professional photographer from front.
input: nice living room, warm lighting,Professional Photographer from far, Photo
output: A photo of a Well designed Living Room. Warm lighting, High Quality, 4K photograph taken by Professional Photographer from far
input: {params_list_str}
output:
"""
# הנחיה עם אפס שוטים בשימוש בקוד
prompt = f"""יש לך מומחיות בכתיבת הנחיות למודלים ליצירת תמונות. אני רוצה עזרה בכתיבה של רשימה של הנחיות משמעותיות למודל ליצירת תמונות, כולל המילים: "{params_list_str}". חשוב לכלול את המילים האלה בהנחיה ולוודא שההנחיה חשובה.""
יצירת תמונות באמצעות Imagen
משתמשת בהנחיה לקלט של משתמשים ובהנחיה שלילית(אופציונלי) ופידים זהים למודל (imagegenerate@002).
六def image_generation_complete(input, negative_prompt):
input_prompt = input
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt=input_prompt,
number_of_images=4, #kept to static value of 4
negative_prompt=negative_prompt
)
הקוד הבא נכלל כדי ליצור תמונות מהנחיה שנשלחת על ידי משתמשים ומהנחיה שלילית. הקוד הסופי משתמש בהנחיה שנוצרה על ידי מודל הטקסט-ביזון.
❌ from vertexai.preview.vision_models ייבוא ImageGenerationModel
def image_generative(input, negative_prompt):
input_prompt = input
model = ImageGenerationModel.from_pretrained("imagegeneration@002")
response = model.generate_images(
prompt=input_prompt,
number_of_images=4, #kept to static value of 4.. can be a max value of 8
negative_prompt=negative_prompt
)
images = response.images
return images
user_prompt = "Prompt: אישה צעירה מציגה לראווה ומוכרת עץ חג מולד רענן בעיצוב לא מקושט מכמה עצים. תאורה קרה, תמונה באיכות גבוהה ומפורטת שצולמה על ידי צלם מקצועי מרחוק".
negative_prompt = "פנים מעוותות ולא מושכות"
created_images_list = image_generative(user_prompt,negative_prompt)
#show אחת מהתמונה שנוצרה
generated_images_list[0].show()
פלט -
4. פריסה של אפליקציית GRadio
GRadio משמשת לממשק הקצה, שבה המשתמשים יכולים להזין את מילות המפתח וליצור הנחיות מובְנות. אפשר להשתמש בהנחיות האלה באופן ישיר או לערוך אותן, ואז להזין אותן ל-Imagen כדי ליצור תמונות לפי הקלט. GRadio היא ספריית Python שאפשר להשתמש בה כדי ליצור ממשקי משתמש למודלים של למידת מכונה. באפליקציה הזו, משתמשים בחסימות כדי להוסיף לאפליקציה גמישות ותהליכי נתונים מורכבים. באמצעות בלוקים אפשר לנהל את פריסת האפליקציות באמצעות שורות ועמודות:
Ⰳwith gr.Blocks() כהדגמה:
#Prompt Generation Part
with gr.Row():
with gr.Column(scale=1):
Persona = gr.Textbox(label="Persona", info = "Customer segment such as Plumber, Electrician etc.")
with gr.Column(scale=1):
Signals = gr.Textbox(label="Signals", info = "Main content of banner such as Faucet, Lamp etc.")
with gr.Column(scale=1):
Theme = gr.Textbox(label="Theme", info = "Context of the banner such as Halloween, Kitchen etc.")
with gr.Row():
with gr.Column(scale=1):
photo_modifiers = gr.Textbox(label="Photography Modifiers", info = "Photography specific modifiers and parameters such as Lighting(Dramatic/Natural/Warm/Cold), Camera Proximity etc.")
with gr.Column(scale=1):
quality_modifiers = gr.Textbox(label="Image Quality Modifier", info = "Quality Modifiers like high-quality, beautiful, stylized. 4K, HDR, By a professional etc")
with gr.Column(scale=1):
other_desc = gr.Textbox(label="Any Other Description", info = "Other Descriptions for Image such as Style (Painting/Photo/Sketch), Bakground/Foreground Context")
עם gr.Row():
btn = gr.Button("Submit")
עם gr.Row():
returned_prompts = gr.Textbox(label="Result Prompts", interactive = True)
btn.click(fn=prompt_generation, קלטs=[פרסונה, אותות,עיצוב, תמונה_modifiers, איכות_modifiers, אחר_מספר], פלטים = הוחזרה_prompts)
כדי לטפל בקלט ובפלט של המשתמשים, GRadio מספקת מספר רכיבים כמו 'תמונה', 'וידאו', 'פס הזזה', 'תפריט נפתח', 'תיבת טקסט', 'רדיו' ואפשרויות נוספות. הרכיבים האלה מעניקים למפתחים גמישות ושליטה באופן שבו הם מקבלים קלט מהמשתמשים ומעבירים אותם למודל של Test-Bison, Imagen או כל מודל אחר של למידת מכונה.
בפרויקט הזה, האפליקציה נוצרת באמצעות בלוקים כדי להוסיף גמישות ומורכבות
זורמים נתונים לאפליקציה. בנוסף לבלוקים, יש מספר רכיבי GRadio
בשימוש, כולל:
- שורות, עמודות לפריסות מתאימות.
- לחצן, תיבת טקסט, תפריט נפתח ומחוון לקבלת הפונקציונליות הנדרשת וקלות השימוש
- רכיב תמונה להצגת תוצאות.
- כלים מסייעים אחרים כמו EventData, לעדכן כדי לתמוך בשינויים דינמיים בממשק המשתמש.
בהמשך מופיע קטע קוד שמשמש ליצירת תמונות לפי קלט והנחיה שלילית:
חלק Ⰳ #יצירת תמונות
with gr.Row():
with gr.Column(scale=1):
image_prompt = gr.Textbox(label="Image Generation Prompt")
with gr.Accordion("Advanced options", open=False): #Let's hide the advanced options!
with gr.Row():
negative_prompt = gr.Textbox(label="Negative prompt", info = "Specify What not to Include in Image ex. Bad Quality Image")
with gr.Row():
with gr.Column(scale=1):
img_btn = gr.Button("Generate Images")
with gr.Row():
with gr.Column():
output_image_1 = gr.Image(label = "Result Image 1", visible = False)
with gr.Column():
output_image_2 = gr.Image(label = "Result Image 2", visible = False)
with gr.Row():
with gr.Column():
output_image_3 = gr.Image(label = "Result Image 3", visible = False)
with gr.Column():
output_image_4 = gr.Image(label = "Result Image 4", visible = False)
returned_prompts.select(populate_image_prompt, inputs = [returned_prompts], outputs = image_prompt)
img_btn.click(fn=image_generation_completion, inputs=[image_prompt,negative_prompt], outputs = [output_image_1,output_image_2,output_image_3,output_image_4])
כדי להריץ ולבדוק את אפליקציית GRadio, פשוט מקלידים הנחיית טקסט ולוחצים על הלחצן Generate (יצירה). Imagen ייצור תמונה על סמך ההנחיה שלך. אפשר לנסות הנחיות שונות כדי לראות אילו סוגים של תמונות Imagen יכול ליצור.
בהמשך מופיע צילום מסך של יצירת הנחיה באפליקציית GRadio.
בהמשך מופיע צילום מסך של יצירת התמונות באפליקציית GRadio.
כמה דוגמאות -
דוגמה 1 -
[תמונה שמאלית] הנחיה (שימוש במילות מפתח פשוטות כהנחיות) : שני חברים בשייט.
[תמונה מימין] הנחיה (באמצעות הנחיות שנוצרו על ידי Text-Bison) : תמונה של שני גברים צעירים שדוגים בסירה ומוקפת בעצים כהים ביער. גברים לובשים חולצה ועומדים על סירה. תאורה טבעית, איכות גבוהה, 4K צולם על ידי צלם מקצועי.
דוגמה 2 -
[תמונה שמאלית] הנחיה ((שימוש במילות מפתח פשוטות כהנחיות)) : עץ חג המולד
[תמונה ימנית] הנחיה (באמצעות הנחיות שנוצרו על ידי Text-Bison) : עץ חג המולד בחדר עם מנורה וריהוט. העץ מעוטר במנורות ובקישוטים. הוא ממוקם ליד חלון וברקע יש קיר גלוי. תאורה חמימה, איכות גבוהה ו-HDR – צילום של צלם מקצועי שצולם מרחוק.
5. ניקוי תלונות
כדי לנקות את המשאבים:
- עוצרים את אפליקציית gRadio.
- עוצרים או מוחקים את ה-notebook של Workbench.
6. מזל טוב
מזל טוב, פרסתם בהצלחה אפליקציית GRadio ליצירת הנחיות ותמונות באמצעות Google Text-Bison API ו-Imagen API.