צייר תמונות עם דיפוזיה יציבה באמצעות Amazon SageMaker JumpStart

צייר תמונות עם דיפוזיה יציבה באמצעות Amazon SageMaker JumpStart

בנובמבר 2022, אנחנו הודיע שלקוחות AWS יכולים ליצור איתם תמונות מטקסט דיפוזיה יציבה דגמים המשתמשים אמזון SageMaker JumpStart. היום, אנו נרגשים להציג תכונה חדשה המאפשרת למשתמשים לצבוע תמונות עם דגמי Diffusion Stable. ציור בציור מתייחס לתהליך של החלפת חלק מתמונה בתמונה אחרת בהתבסס על הנחיה טקסטואלית. על ידי אספקת התמונה המקורית, תמונת מסכה המתארת ​​את החלק להחלפה והנחיה טקסטואלית, מודל ה-Stable Diffusion יכול לייצר תמונה חדשה שתחליף את האזור המסוכה באובייקט, בנושא או בסביבה המתוארים בהנחיה הטקסטואלית.

אתה יכול להשתמש בציור לשחזור תמונות מושפלות או יצירת תמונות חדשות עם נושאים או סגנונות חדשים בחלקים מסוימים. בתחום התכנון האדריכלי, ניתן ליישם צביעת דיפוזיה יציבה לתיקון אזורים לא שלמים או פגומים של שרטוטי בנייה, ולספק מידע מדויק לצוותי הבנייה. במקרה של הדמיית MRI קלינית, יש לרסן את ראשו של המטופל, מה שעלול להוביל לתוצאות נמוכות עקב חפץ החיתוך הגורם לאובדן נתונים או דיוק האבחון מופחת. ציור תמונה יכול לעזור ביעילות להפחית את התוצאות הלא אופטימליות הללו.

בפוסט זה, אנו מציגים מדריך מקיף על פריסה והרצה של הסקת מסקנות באמצעות מודל הציור Stable Diffusion inpainting בשתי שיטות: דרך ממשק המשתמש (UI) של JumpStart ב- סטודיו SageMaker של אמזון, ובאופן פרוגרמטי דרך ממשקי API של JumpStart זמין ב SageMaker Python SDK.

סקירת פתרונות

התמונות הבאות הן דוגמאות לציור. התמונות המקוריות משמאל, תמונת המסכה במרכז, והתמונה המצוירת שנוצרה על ידי הדגם מימין. עבור הדוגמה הראשונה, הדגם סופק עם התמונה המקורית, תמונת מסכה, וההנחיה הטקסטואלית "חתול לבן, עיניים כחולות, לובש סוודר, שוכב בפארק", כמו גם ההנחיה השלילית "רגליים מצוירות בצורה גרועה. ” עבור הדוגמה השנייה, ההנחיה הטקסטואלית הייתה "דוגמנית מציגה בחן שמלה ארוכה ומזדמנת הכוללת שילוב של גוונים ורודים וכחולים."

צייר תמונות עם דיפוזיה יציבה באמצעות Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הפעלת דגמים גדולים כמו Stable Diffusion דורשת סקריפטים מותאמים אישית. עליך להריץ בדיקות מקצה לקצה כדי לוודא שהסקריפט, המודל והמופע הרצוי עובדים יחד ביעילות. JumpStart מפשט תהליך זה על ידי אספקת סקריפטים מוכנים לשימוש שנבדקו היטב. אתה יכול לגשת לסקריפטים האלה בלחיצה אחת דרך ממשק המשתמש של Studio או עם מעט מאוד שורות קוד דרך ממשקי API של JumpStart.

הסעיפים הבאים מדריכים אותך בפריסת המודל והרצת ההסקה באמצעות ממשק המשתמש של Studio או ממשקי ה-API של JumpStart.

שים לב שבשימוש במודל זה אתה מסכים ל CreativeML Open RAIL++-M License.

גש ל-JumpStart דרך ממשק המשתמש של Studio

בחלק זה, אנו מדגים את הפריסה של דגמי JumpStart באמצעות ממשק המשתמש של Studio. הסרטון המצורף מדגים את איתור דגם הציור Stable Diffusion המאומן מראש ב-JumpStart ופריסה שלו. דף הדגם מציע פרטים חיוניים על הדגם והשימוש בו. כדי לבצע הסקה, אנו משתמשים בסוג המופע ml.p3.2xlarge, המספק את האצת ה-GPU הנדרשת להסקת השהייה נמוכה במחיר סביר. לאחר הגדרת מופע האירוח של SageMaker, בחר לפרוס. נקודת הסיום תהיה מבצעית ומוכנה לטפל בבקשות להסקת הסקים בתוך כ-10 דקות.

JumpStart מספקת מחברת לדוגמה שיכולה לעזור להאיץ את הזמן שלוקח להפעיל הסקה על נקודת הקצה החדשה שנוצרה. כדי לגשת למחברת בסטודיו, בחר פתח מחברת ב השתמש ב-Endpoint מ-Studio החלק של דף נקודת הקצה של המודל.

השתמש ב-JumpStart באופן פרוגרמטי עם ה-SDK של SageMaker

שימוש בממשק המשתמש של JumpStart מאפשר לך לפרוס מודל מאומן מראש באופן אינטראקטיבי בכמה קליקים בלבד. לחלופין, אתה יכול להשתמש במודלים של JumpStart באופן פרוגרמטי באמצעות ממשקי API המשולבים בתוך SageMaker Python SDK.

בסעיף זה, אנו בוחרים מודל מיומן מראש המתאים ב-JumpStart, פורסים מודל זה לנקודת קצה של SageMaker, ומבצעים הסקה על נקודת הקצה שנפרסה, והכל באמצעות ה-SDK של SageMaker Python. הדוגמאות הבאות מכילות קטעי קוד. כדי לגשת לקוד המלא עם כל השלבים הכלולים בהדגמה זו, עיין ב- מבוא לעריכת תמונות JumpStart – ציור דיפוזיה יציב מחברת לדוגמא.

פרוס את המודל שהוכשר מראש

SageMaker משתמש בקונטיינרים של Docker למשימות שונות של בנייה ושל זמן ריצה. JumpStart משתמש ב- מכולות ללמידה עמוקה של SageMaker (DLCs) שהם ספציפיים למסגרת. תחילה אנו מביאים חבילות נוספות, כמו גם סקריפטים לטיפול בהדרכה והסקת מסקנות עבור המשימה שנבחרה. לאחר מכן מביאים בנפרד את חפצי המודל שהוכשרו מראש model_uris, המספק גמישות לפלטפורמה. זה מאפשר להשתמש במספר מודלים מאומנים מראש עם סקריפט מסקנות בודד. הקוד הבא ממחיש תהליך זה:

model_id, model_version = "model-inpainting-stabilityai-stable-diffusion-2-inpainting-fp16", "*"
# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

לאחר מכן, אנו מספקים משאבים אלה ל- a דגם SageMaker מופע ופרוס נקודת קצה:

# Create the SageMaker model instance
# Create the SageMaker model instance
model = Model( image_uri=deploy_image_uri, source_dir=deploy_source_uri, model_data=base_model_uri, entry_point="inference.py", # entry point file in source_dir and present in deploy_source_uri role=aws_role, predictor_cls=Predictor, name=endpoint_name,
) # deploy the Model - note that we need to pass the Predictor class when we deploy the model through the Model class,
# in order to run inference through the SageMaker API
base_model_predictor = model.deploy( initial_instance_count=1, instance_type=inference_instance_type, predictor_cls=Predictor, endpoint_name=endpoint_name,
)

לאחר פריסת המודל, נוכל לקבל ממנו תחזיות בזמן אמת!

קֶלֶט

הקלט הוא תמונת הבסיס, תמונת מסכה וההנחיה המתארת ​​את הנושא, האובייקט או הסביבה שיש להחליף בחלק המוסווה. יצירת תמונת המסכה המושלמת לאפקטים בתוך הציור כרוכה במספר שיטות עבודה מומלצות. התחל עם הנחיה ספציפית, ואל תהסס להתנסות בהגדרות שונות של דיפוזיה יציבה כדי להשיג את התוצאות הרצויות. השתמש בתמונת מסכה שדומה מאוד לתמונה שאתה שואף לצייר. גישה זו מסייעת לאלגוריתם הציור בהשלמת הקטעים החסרים בתמונה, וכתוצאה מכך מראה טבעי יותר. תמונות באיכות גבוהה בדרך כלל מניבות תוצאות טובות יותר, אז ודא שתמונות הבסיס והמסיכה שלך יהיו באיכות טובה ודומות זו לזו. בנוסף, בחר בתמונת מסכה גדולה וחלקה כדי לשמר פרטים ולמזער חפצים.

נקודת הקצה מקבלת את תמונת הבסיס ואת המסכה כערכי RGB גולמיים או תמונה מקודדת base64. מטפל ההסקות מפענח את התמונה בהתבסס על content_type:

  • בעד content_type = “application/json”, מטען הקלט חייב להיות מילון JSON עם ערכי RGB גולמיים, הנחיה טקסטואלית ופרמטרים אופציונליים אחרים
  • בעד content_type = “application/json;jpeg”, מטען הקלט חייב להיות מילון JSON עם התמונה המקודדת base64, הנחיה טקסטואלית ופרמטרים אופציונליים אחרים

תְפוּקָה

נקודת הקצה יכולה ליצור שני סוגים של פלט: תמונת RGB מקודדת Base64 או מילון JSON של התמונות שנוצרו. אתה יכול לציין איזה פורמט פלט אתה רוצה על ידי הגדרת ה accept כותרת אל "application/json" or "application/json;jpeg" עבור תמונת JPEG או base64, בהתאמה.

  • בעד accept = “application/json”, נקודת הקצה מחזירה את מילון JSON עם ערכי RGB עבור התמונה
  • בעד accept = “application/json;jpeg”, נקודת הקצה מחזירה מילון JSON עם תמונת ה-JPEG כבייטים מקודדים בקידוד base64.b64

שים לב ששליחה או קבלה של המטען עם ערכי ה-RGB הגולמיים עלולה לפגוע במגבלות ברירת המחדל עבור מטען הקלט וגודל התגובה. לכן, אנו ממליצים להשתמש בתמונה המקודדת base64 לפי הגדרה content_type = “application/json;jpeg” וקבל = "application/json;jpeg".

הקוד הבא הוא בקשה להסקת מסקנות לדוגמה:

content_type = "application/json;jpeg" with open(input_img_file_name, "rb") as f: input_img_image_bytes = f.read()
with open(input_img_mask_file_name, "rb") as f: input_img_mask_image_bytes = f.read() encoded_input_image = base64.b64encode(bytearray(input_img_image_bytes)).decode()
encoded_mask = base64.b64encode(bytearray(input_img_mask_image_bytes)).decode() payload = { "prompt": "a white cat, blue eyes, wearing a sweater, lying in park", "image": encoded_input_image, "mask_image": encoded_mask, "num_inference_steps": 50, "guidance_scale": 7.5, "seed": 0, "negative_prompt": "poorly drawn feet",
} accept = "application/json;jpeg" def query(model_predictor, payload, content_type, accept): """Query the model predictor.""" query_response = model_predictor.predict( payload, { "ContentType": content_type, "Accept": accept, }, ) return query_response query_response = query(model_predictor, json.dumps(payload).encode("utf-8"), content_type, accept)
generated_images = parse_response(query_response)

פרמטרים נתמכים

דגמי צביעת דיפוזיה יציבה תומכים בפרמטרים רבים ליצירת תמונה:

  • תמונה - התמונה המקורית.
  • מסכה - תמונה שבה החלק המושחר נשאר ללא שינוי במהלך יצירת התמונה והחלק הלבן מוחלף.
  • הפקודה - הנחיה להנחות את יצירת התמונה. זה יכול להיות מחרוזת או רשימה של מחרוזות.
  • num_inference_steps (אופציונלי) - מספר שלבי ה-denoising במהלך יצירת התמונה. שלבים נוספים מובילים לתמונה באיכות גבוהה יותר. אם צוין, זה חייב להיות מספר שלם חיובי. שימו לב ששלבי הסקה נוספים יובילו לזמן תגובה ארוך יותר.
  • סולם_הנחיה (אופציונלי) – סולם הנחיה גבוה יותר מביא לתמונה שקשורה יותר להנחיה, על חשבון איכות התמונה. אם צוין, זה חייב להיות צף. guidance_scale<=1 מתעלמים.
  • הודעה_שלילית (אופציונלי) - זה מנחה את יצירת התמונות נגד הנחיה זו. אם צוין, זה חייב להיות מחרוזת או רשימה של מחרוזות ולהשתמש עם guidance_scale. אם guidance_scale מושבת, זה גם מושבת. יתר על כן, אם ההנחיה היא רשימה של מחרוזות, אזי negative_prompt חייבת להיות גם רשימה של מחרוזות.
  • זרע (לא חובה) - זה מתקן את המצב האקראי לשחזור. אם צוין, זה חייב להיות מספר שלם. בכל פעם שאתה משתמש באותה הנחיה עם אותו זרע, התמונה שתתקבל תמיד תהיה זהה.
  • גודל_אצווה (אופציונלי) - מספר התמונות להפקה במעבר אחד קדימה. אם אתה משתמש במופע קטן יותר או יצירת תמונות רבות, צמצם batch_size להיות מספר קטן (1-2). מספר התמונות = מספר ההנחיות*num_images_per_prompt.

מגבלות והטיות

למרות ש-Stable Diffusion יש ביצועים מרשימים בציור, הוא סובל מכמה מגבלות והטיות. אלה כוללים בין היתר:

  • ייתכן שהמודל לא יפיק פרצופים או גפיים מדויקים מכיוון שנתוני האימון אינם כוללים מספיק תמונות עם תכונות אלו.
  • הדגם הוכשר על מערך נתונים של LAION-5B, בעל תוכן למבוגרים בלבד וייתכן שלא יתאים לשימוש במוצר ללא שיקולים נוספים.
  • ייתכן שהמודל לא יעבוד טוב עם שפות שאינן אנגלית מכיוון שהמודל הוכשר על טקסט בשפה האנגלית.
  • המודל לא יכול ליצור טקסט טוב בתוך תמונות.
  • צביעת דיפוזיה יציבה עובדת בדרך כלל בצורה הטובה ביותר עם תמונות ברזולוציות נמוכות יותר, כגון 256×256 או 512×512 פיקסלים. כאשר עובדים עם תמונות ברזולוציה גבוהה (768×768 ומעלה), השיטה עשויה להתקשה לשמור על רמת האיכות והפירוט הרצויה.
  • למרות שהשימוש בזרע יכול לעזור לשלוט על יכולת השחזור, צביעת דיפוזיה יציבה עדיין עשויה להניב תוצאות מגוונות עם שינויים קלים בקלט או בפרמטרים. זה עשוי להפוך את זה למאתגר לכוונן את הפלט לדרישות ספציפיות.
  • השיטה עשויה להיאבק ביצירת טקסטורות ודפוסים מורכבים, במיוחד כאשר הם משתרעים על פני שטחים גדולים בתמונה או חיוניים לשמירה על הקוהרנטיות והאיכות הכוללת של האזור המצויר.

למידע נוסף על מגבלות והטיות, עיין ב- כרטיס דגם Diffusion Inpainting יציבה.

פתרון צביעה עם מסכה שנוצרת באמצעות הנחיה

CLIPSeq היא טכניקת למידה עמוקה מתקדמת המנצלת את הכוח של מודלים CLIP (Contrastive Language-Image Pretraining) מאומנים מראש כדי ליצור מסכות מתמונות קלט. גישה זו מספקת דרך יעילה ליצור מסכות עבור משימות כגון פילוח תמונה, ציור ומניפולציה. CLIPSeq משתמש ב-CLIP כדי ליצור תיאור טקסט של תמונת הקלט. לאחר מכן, תיאור הטקסט משמש ליצירת מסכה המזהה את הפיקסלים בתמונה הרלוונטיים לתיאור הטקסט. לאחר מכן ניתן להשתמש במסכה כדי לבודד את החלקים הרלוונטיים של התמונה לעיבוד נוסף.

ל- CLIPSeq מספר יתרונות על פני שיטות אחרות להפקת מסכות מתמונות קלט. ראשית, זוהי שיטה יעילה יותר, מכיוון שהיא אינה מחייבת את עיבוד התמונה באמצעות אלגוריתם נפרד של פילוח תמונה. שנית, זה יותר מדויק, כי זה יכול ליצור מסכות שמתואמות יותר עם תיאור הטקסט של התמונה. שלישית, זה יותר תכליתי, מכיוון שאתה יכול להשתמש בו כדי ליצור מסכות ממגוון רחב של תמונות.

עם זאת, ל- CLIPSeq יש גם כמה חסרונות. ראשית, לטכניקה עשויות להיות מגבלות במונחים של נושא, מכיוון שהיא מסתמכת על מודלים מאומנים מראש של CLIP שעשויים לא להקיף תחומים או תחומי מומחיות ספציפיים. שנית, זו יכולה להיות שיטה רגישה, מכיוון שהיא חשופה לשגיאות בתיאור הטקסט של התמונה.

למידע נוסף עיין ב עיצוב אופנה וירטואלי עם בינה מלאכותית גנרטיבית באמצעות Amazon SageMaker.

לנקות את

לאחר שתסיים להפעיל את המחברת, הקפד למחוק את כל המשאבים שנוצרו בתהליך כדי להבטיח שהחיוב יופסק. הקוד לניקוי נקודת הקצה זמין בקובץ המשויך מחברה.

סיכום

בפוסט זה, הראינו כיצד לפרוס מודל ציור יציב דיפוזיה מאומן מראש באמצעות JumpStart. הצגנו קטעי קוד בפוסט זה - הקוד המלא עם כל השלבים בהדגמה זו זמין ב- מבוא ל-JumpStart - שפר את איכות התמונה בהנחיה מחברת לדוגמה. נסה את הפתרון בעצמך ושלח לנו את הערותיך.

למידע נוסף על המודל וכיצד הוא פועל, עיין במשאבים הבאים:

למידע נוסף על JumpStart, עיין בפוסטים הבאים:


על הכותבים

צייר תמונות עם דיפוזיה יציבה באמצעות Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.ד"ר Vivek Madan הוא מדען יישומי בצוות אמזון SageMaker JumpStart. הוא קיבל את הדוקטורט שלו מאוניברסיטת אילינוי באורבנה-שמפיין והיה חוקר פוסט דוקטורט בג'ורג'יה טק. הוא חוקר פעיל בלמידת מכונה ועיצוב אלגוריתמים ופרסם מאמרים בכנסים של EMNLP, ICLR, COLT, FOCS ו-SODA.

צייר תמונות עם דיפוזיה יציבה באמצעות Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.אלפרד שן הוא מומחה בכיר בינה מלאכותית/ML ב-AWS. הוא עבד בעמק הסיליקון, מחזיק בתפקידים טכניים וניהוליים במגזרים מגוונים כולל שירותי בריאות, פיננסים והיי-טק. הוא חוקר AI/ML יישומי מסור, המתרכז בקורות חיים, NLP ורב-מודאליות. עבודתו הוצגה בפרסומים כגון EMNLP, ICLR ובריאות הציבור.

בול זמן:

עוד מ למידת מכונות AWS