شعار زيفيرنت

أنشئ صورًا عالية الجودة باستخدام نماذج Stable Diffusion وانشرها بتكلفة منخفضة مع Amazon SageMaker | خدمات أمازون ويب

التاريخ:

يعد إنشاء نص إلى صورة مهمة يقوم فيها نموذج التعلم الآلي (ML) بإنشاء صورة من وصف نصي. الهدف هو إنشاء صورة تتطابق بشكل وثيق مع الوصف ، والتقاط التفاصيل والفروق الدقيقة في النص. هذه المهمة صعبة لأنها تتطلب من النموذج فهم دلالات النص وتركيبه وتوليد صور واقعية. هناك العديد من التطبيقات العملية لتوليد النص إلى صورة في التصوير الفوتوغرافي بالذكاء الاصطناعي ، وفن المفاهيم ، وهندسة المباني ، والأزياء ، وألعاب الفيديو ، والتصميم الجرافيكي ، وغير ذلك الكثير.

انتشار مستقر هو نموذج لتحويل النص إلى صورة يمكّنك من إنشاء صور عالية الجودة في غضون ثوانٍ. عندما يكون التفاعل في الوقت الفعلي مع هذا النوع من النماذج هو الهدف ، فإن ضمان تجربة مستخدم سلسة يعتمد على استخدام الأجهزة المتسارعة للاستدلال ، مثل وحدات معالجة الرسومات أو AWS الاستدلال 2، مسرع الاستدلال ML الخاص بأمازون. عادةً ما تتطلب التكاليف الباهظة التي ينطوي عليها استخدام وحدات معالجة الرسومات تحسين استخدام الحوسبة الأساسية ، والأكثر من ذلك عندما تحتاج إلى نشر بنى مختلفة أو نماذج مخصصة (مضبوطة بدقة). الأمازون SageMaker نقاط نهاية متعددة النماذج (MMEs) تساعدك على معالجة هذه المشكلة من خلال مساعدتك في توسيع نطاق آلاف النماذج في نقطة نهاية واحدة. باستخدام حاوية خدمة مشتركة ، يمكنك استضافة نماذج متعددة بطريقة فعالة من حيث التكلفة وقابلة للتطوير ضمن نفس نقطة النهاية ، وحتى نفس وحدة معالجة الرسومات.

في هذا المنشور ، ستتعرف على معماريات نموذج الانتشار المستقر وأنواع مختلفة من نماذج الانتشار المستقر وتقنيات تحسين جودة الصورة. نوضح لك أيضًا كيفية نشر نماذج الانتشار المستقر بتكلفة فعالة باستخدام SageMaker MMEs و NVIDIA Triton Inference Server.

موجه: صورة لكلب بيرنيز لطيف ، رسم إلك فوغيلسانغ ، 8 كيلو واقعية للغاية ، تتجه على آرت ستيشن ، 4 ك سريع: تصميم معماري لغرفة المعيشة ، 8 ك فائق الواقعية ، 4 ك ، واقعي للغاية ، مركّز ، تفاصيل متطرفة موجه: أفق نيويورك ليلاً ، 8 كيلو ، تصوير فوتوغرافي طويل ، محرك غير واقعي 5 ، سينمائي ، تحفة فنية

هندسة الانتشار المستقرة

Stable Diffusion هو نموذج مفتوح المصدر لتحويل النص إلى صورة يمكنك استخدامه لإنشاء صور ذات أنماط ومحتويات مختلفة ببساطة عن طريق توفير مطالبة نصية. في سياق إنشاء النص إلى صورة ، يعد نموذج الانتشار نموذجًا توليديًا يمكنك استخدامه لإنشاء صور عالية الجودة من الأوصاف النصية. نماذج الانتشار هي نوع من النماذج التوليدية التي يمكنها التقاط التبعيات المعقدة بين طرائق الإدخال والإخراج والنصوص والصور.

يوضح الرسم البياني التالي بنية عالية المستوى لنموذج الانتشار المستقر.

يتكون من العناصر الرئيسية التالية:

  • مشفر النص - CLIP هو نموذج لتشفير النص قائم على المحولات يأخذ نصًا موجهًا للإدخال ويحوله إلى عمليات دمج رمزية تمثل كل كلمة في النص. يتم تدريب CLIP على مجموعة بيانات من الصور والتعليقات التوضيحية الخاصة بها ، وهي مزيج من برنامج تشفير الصور ومشفّر النص.
  • U-نت - يأخذ نموذج U-Net عمليات التضمين الرمزية من CLIP جنبًا إلى جنب مع مجموعة من المدخلات الصاخبة وينتج مخرجات منخفضة الضوضاء. يحدث هذا من خلال سلسلة من الخطوات التكرارية ، حيث تعالج كل خطوة موترًا كامنًا للإدخال وتنتج موترًا جديدًا للفضاء الكامن يمثل بشكل أفضل نص الإدخال.
  • جهاز التشفير التلقائي - هذا النموذج يخلق الصور النهائية. يأخذ الإخراج الخفي النهائي منزوع التشويش من نموذج U-Net ويحوله إلى صور تمثل إدخال النص.

أنواع نماذج الانتشار المستقر

في هذا المنشور ، نستكشف نماذج الانتشار المستقر التالية المدربة مسبقًا بواسطة Stability AI من محور نموذج Hugging Face.

انتشار مستقر 2-1 قاعدة

استخدم هذا النموذج لإنشاء صور بناءً على مطالبة نصية. هذه نسخة أساسية من النموذج الذي تم التدريب عليه لايون -5 ب. تم تدريب النموذج على مجموعة فرعية من مجموعة البيانات واسعة النطاق لايون -5 ب، وبشكل أساسي مع التسميات التوضيحية باللغة الإنجليزية. نحن نستخدم StableDiffusionPipeline من diffusers مكتبة لتوليد الصور من المطالبات النصية. يمكن لهذا النموذج إنشاء صور بأبعاد 512 × 512. ويستخدم المعلمات التالية:

  • موجه - يمكن أن تكون الموجه كلمة نصية أو عبارة أو جمل أو فقرات.
  • موجه_نفي - يمكنك أيضًا تمرير مطالبة سلبية لاستبعاد عناصر محددة من عملية إنشاء الصورة وتحسين جودة الصور التي تم إنشاؤها.
  • مقياس التوجيه - ينتج عن مقياس التوجيه الأعلى صورة أكثر ارتباطًا بالموجه ، على حساب جودة الصورة. إذا تم تحديده ، يجب أن يكون عددًا عشريًا.

انتشار مستقر 2 عمق

يستخدم هذا النموذج لإنشاء صور جديدة من الصور الموجودة مع الحفاظ على شكل وعمق الكائنات في الصورة الأصلية. هذا stable-diffusion-2-depth model تم ضبطه بدقة من انتشار مستقر 2 قاعدة، قناة إدخال إضافية لمعالجة تنبؤ العمق (النسبي). نحن نستخدم StableDiffusionDepth2ImgPipeline من diffusers مكتبة لتحميل خط الأنابيب وإنشاء صور العمق. فيما يلي المعلمات الإضافية الخاصة بنموذج العمق:

  • صورة - الصورة الأولية لشرط توليد الصور الجديدة.
  • عدد_الخطوات (اختياري) - عدد خطوات تقليل الضوضاء. تؤدي خطوات تقليل الضوضاء عادةً إلى صورة عالية الجودة على حساب استدلال أبطأ. يتم تعديل هذه المعلمة بواسطة strength.
  • قوة (اختياري) - من الناحية المفاهيمية ، يشير هذا إلى مقدار تحويل الصورة المرجعية. يجب أن تتراوح القيمة بين 0-1. image يستخدم كنقطة انطلاق ، وإضافة المزيد من الضوضاء إليه كلما زادت القوة. يعتمد عدد خطوات تقليل الضوضاء على مقدار الضوضاء المضافة في البداية. متى strength هي 1 ، ستكون الضوضاء المضافة بحد أقصى وستعمل عملية تقليل الضوضاء للعدد الكامل من التكرارات المحددة في num_inference_steps. لذلك ، تتجاهل القيمة 1 أساسًا image. لمزيد من التفاصيل ، يرجى الرجوع إلى ما يلي الكود.

انتشار مستقر 2-inpainting

يمكنك استخدام هذا النموذج لحالات استخدام استعادة الصور بالذكاء الاصطناعي. يمكنك أيضًا استخدامه لإنشاء تصميمات وصور جديدة من المطالبات والحجج الإضافية. هذا النموذج مشتق أيضًا من النموذج الأساسي وله إستراتيجية لتوليد القناع. يحدد قناع الصورة الأصلية لتمثيل المقاطع المراد تغييرها وترك الأجزاء دون تغيير. نحن نستخدم StableDiffusionUpscalePipeline من diffusers مكتبة لتطبيق تغييرات inpaint على الصورة الأصلية. المعلمة الإضافية التالية خاصة بنموذج العمق:

  • إدخال قناع - صورة يظل فيها الجزء المعتم بدون تغيير أثناء إنشاء الصورة ويتم استبدال الجزء الأبيض

مستقر-انتشار- x4-upscaler

هذا النموذج مشتق أيضًا من النموذج الأساسي ، الذي تم تدريبه بشكل إضافي على مجموعة فرعية 10M من LAION تحتوي على 2048 × 2048 صورة. كما يوحي الاسم ، يمكن استخدامه لترقية الصور ذات الدقة المنخفضة إلى دقة أعلى

نظرة عامة على حالة الاستخدام

في هذا المنشور ، ننشر خدمة صور AI ذات إمكانيات متعددة ، بما في ذلك إنشاء صور جديدة من النص ، وتغيير أنماط الصور الموجودة ، وإزالة الكائنات غير المرغوب فيها من الصور ، ورفع مستوى الصور منخفضة الدقة إلى دقة أعلى. باستخدام العديد من الأشكال المختلفة لنماذج الانتشار المستقر ، يمكنك معالجة كل حالات الاستخدام هذه ضمن نقطة نهاية SageMaker واحدة. هذا يعني أنك ستحتاج إلى استضافة عدد كبير من النماذج بطريقة فعالة وقابلة للتطوير وفعالة من حيث التكلفة. في هذا المنشور ، نوضح كيفية نشر العديد من نماذج الانتشار المستقر بشكل فعال من حيث التكلفة باستخدام SageMaker MMEs و NVIDIA Triton Inference Server. ستتعرف على تفاصيل التنفيذ وتقنيات التحسين وأفضل الممارسات للعمل مع نماذج تحويل النص إلى صورة.

يلخص الجدول التالي نماذج الانتشار المستقر التي ننشرها في SageMaker MME.

نموذج الاسم حجم النموذج بالجيجابايت
stabilityai/stable-diffusion-2-1-base 2.5
stabilityai/stable-diffusion-2-depth 2.7
stabilityai/stable-diffusion-2-inpainting 2.5
stabilityai/stable-diffusion-x4-upscaler 7

حل نظرة عامة

يتم تضمين الخطوات التالية في نشر نماذج الانتشار المستقر إلى SageMaker MMEs:

  1. استخدم Hugging Face hub لتنزيل نماذج Stable Diffusion إلى دليل محلي. هذا سوف يتم تنزيله scheduler, text_encoder, tokenizer, unet, and vae لكل نموذج Stable Diffusion في دليله المحلي المقابل. نحن نستخدم ال revision="fp16" نسخة من النموذج.
  2. قم بإعداد مستودع نموذج NVIDIA Triton وتكوينات النموذج ومنطق خدمة النموذج model.py. يستخدم Triton هذه القطع الأثرية لخدمة التنبؤات.
  3. قم بتعبئة بيئة conda بتبعيات إضافية ومستودع نموذج الحزمة لنشره في SageMaker MME.
  4. قم بتجميع القطع الأثرية للنموذج بتنسيق خاص بـ NVIDIA Triton وتحميله model.tar.gz إلى خدمة تخزين أمازون البسيطة (أمازون S3). سيتم استخدام النموذج لتوليد الصور.
  5. قم بتكوين نموذج SageMaker وتكوين نقطة النهاية ونشر SageMaker MME.
  6. قم بتشغيل الاستدلال وإرسال المطالبات إلى نقطة نهاية SageMaker لإنشاء صور باستخدام نموذج الانتشار المستقر. نحدد ال TargetModel متغير واستدعاء نماذج الانتشار المستقر المختلفة لمقارنة النتائج بصريًا.

لقد نشرنا الكود لتنفيذ بنية الحل هذه في جيثب ريبو. اتبع تعليمات README للبدء.

خدمة النماذج مع خلفية NVIDIA Triton Inference Server Python

نستخدم خلفية Triton Python لنشر نموذج خط أنابيب الانتشار المستقر إلى SageMaker MME. تتيح لك الواجهة الخلفية لـ Python تقديم نماذج مكتوبة بلغة Python بواسطة Triton Inference Server. لاستخدام الواجهة الخلفية لـ Python ، تحتاج إلى إنشاء ملف Python model.py يحتوي على الهيكل التالي: يمكن لكل واجهة خلفية في Python تنفيذ أربع وظائف رئيسية في ملف TritonPythonModel صف دراسي:

import triton_python_backend_utils as pb_utils
class TritonPythonModel: """Your Python model must use the same class name. Every Python model
that is created must have "TritonPythonModel" as the class name. """
def auto_complete_config(auto_complete_model_config):
def initialize(self, args):
def execute(self, requests):
def finalize(self):

يمكن لكل خلفية Python تنفيذ أربع وظائف رئيسية في ملف TritonPythonModel صف دراسي: auto_complete_config, initialize, executeو finalize.

initialize يتم استدعاء عند تحميل النموذج. تنفيذ initialize هو اختياري. initialize يسمح لك بإجراء أي تهيئة ضرورية قبل تشغيل الاستدلال. في ال initialize وظيفة ، نقوم بإنشاء خط أنابيب وتحميل خطوط الأنابيب باستخدام from_pretrained نقاط تفتيش. نقوم بتكوين المجدولين من تكوين جدولة خطوط الأنابيب pipe.scheduler.config. أخيرًا ، نحدد xformers تحسينات لتمكين xformer معلمة كفاءة الذاكرة enable_xformers_memory_efficient_attention. نحن نقدم المزيد من التفاصيل عن xformers لاحقًا في هذا المنشور. يمكنك الرجوع إلى model.py من كل نموذج لفهم تفاصيل خطوط الأنابيب المختلفة. يمكن العثور على هذا الملف في مستودع النموذج.

execute يتم استدعاء الوظيفة كلما تم تقديم طلب استنتاج. يجب أن يقوم كل نموذج من نماذج Python بتنفيذ الامتداد execute وظيفة. في ال execute وظيفة ، يتم إعطاؤك قائمة InferenceRequest أشياء. نقوم بتمرير موجه نص الإدخال إلى خط الأنابيب للحصول على صورة من النموذج. يتم فك تشفير الصور ويتم إرجاع الصورة التي تم إنشاؤها من استدعاء الوظيفة هذا.

نحصل على موتر الإدخال من الاسم المحدد في تكوين النموذج config.pbtxt ملف. من طلب الاستدلال ، نحصل عليه prompt, negative_promptو gen_args، وفك شفرتها. نقوم بتمرير جميع الحجج إلى كائن خط الأنابيب النموذجي. قم بتشفير الصورة لإرجاع تنبؤات الصورة التي تم إنشاؤها. يمكنك الرجوع إلى config.pbtxt ملف لكل نموذج لفهم تفاصيل خطوط الأنابيب المختلفة. يمكن العثور على هذا الملف في مستودع النموذج. أخيرًا ، نلتف الصورة التي تم إنشاؤها بتنسيق InferenceResponse ويعيد الرد.

تنفيذ finalize هو اختياري. تتيح لك هذه الوظيفة إجراء أي عمليات تنظيف ضرورية قبل إلغاء تحميل النموذج من Triton Inference Server.

عند العمل مع الواجهة الخلفية لـ Python ، تقع على عاتق المستخدم مسؤولية التأكد من معالجة المدخلات بطريقة مجمعة وإرسال الردود وفقًا لذلك. لتحقيق ذلك ، نوصي باتباع الخطوات التالية:

  1. تكرار جميع الطلبات الموجودة في ملف requests كائن لتشكيل أ batched_input.
  2. تشغيل الاستدلال على batched_input.
  3. قسّم النتائج إلى عدة InferenceResponse الأشياء وسلسلها على أنها الردود.

الرجوع إلى توثيق الواجهة الخلفية لـ Triton Python or استضف نماذج ML على Amazon SageMaker باستخدام Triton: Python backend لمزيد من التفاصيل.

مستودع نموذج NVIDIA Triton وتكوينه

يحتوي مستودع النموذج على البرنامج النصي الذي يقدم النموذج ، والقطع الأثرية للنموذج والتحف المميزة ، وبيئة كوندا مجمعة (مع التبعيات اللازمة للاستدلال) ، وملف تكوين Triton ، ونص Python النصي المستخدم للاستدلال. هذا الأخير إلزامي عند استخدام Python الخلفية ، ويجب عليك استخدام ملف Python model.py. دعنا نستكشف ملف التكوين لنموذج inpaint Stable Diffusion ونفهم الخيارات المختلفة المحددة:

name: "sd_inpaint"
backend: "python"
max_batch_size: 8
input [ { name: "prompt" data_type: TYPE_STRING dims: [ -1 ] }, { name: "negative_prompt" data_type: TYPE_STRING dims: [ -1 ] optional: true }, { name: "image" data_type: TYPE_STRING dims: [ -1 ] }, { name: "mask_image" data_type: TYPE_STRING dims: [ -1 ] }, { name: "gen_args" data_type: TYPE_STRING dims: [ -1 ] optional: true }
]
output [ { name: "generated_image" data_type: TYPE_STRING dims: [ -1 ] }
]
instance_group [ { kind: KIND_GPU }
]
parameters: { key: "EXECUTION_ENV_PATH", value: {string_value: "/tmp/conda/sd_env.tar.gz" }
}

يوضح الجدول التالي المعلمات والقيم المختلفة:

القفل التفاصيل
name لا يلزم تضمين خاصية اسم تكوين النموذج. في حالة عدم تحديد التكوين اسم النموذج ، فمن المفترض أن يكون مطابقًا لاسم دليل مستودع النموذج حيث يتم تخزين النموذج. ومع ذلك ، إذا تم توفير اسم ، فيجب أن يتطابق مع اسم دليل مستودع تخزين النموذج حيث يتم تخزين النموذج. sd_inpaint هو اسم خاصية التكوين.
backend هذا يحدد إطار عمل Triton لخدمة تنبؤات النموذج. هذا هو معيار إلزامي. نحدد python، لأننا سنستخدم الواجهة الخلفية Triton Python لاستضافة نماذج Stable Diffusion.
max_batch_size يشير هذا إلى الحد الأقصى لحجم الدُفعة الذي يدعمه النموذج لـ أنواع الخلط التي يمكن أن يستغلها تريتون.
input→ prompt موجه نص من نوع السلسلة. حدد -1 لقبول شكل موتر ديناميكي.
input→ negative_prompt موجه النص السلبي من نوع السلسلة. حدد -1 لقبول شكل موتر ديناميكي.
input→ mask_image صورة قناع Base64 المشفرة من نوع السلسلة. حدد -1 لقبول شكل موتر ديناميكي.
input→ image صورة Base64 مشفرة من نوع السلسلة. حدد -1 لقبول شكل موتر ديناميكي.
input→ gen_args قام JSON بترميز وسيطات إضافية من نوع سلسلة. حدد -1 لقبول شكل موتر ديناميكي.
output→ generated_image تم إنشاء صورة من نوع السلسلة. حدد -1 لقبول شكل موتر ديناميكي.
instance_group يمكنك استخدام هذا الإعداد لوضع مثيلات تشغيل متعددة لنموذج على كل وحدة معالجة رسومات أو على وحدات معالجة رسومات معينة فقط. نحدد KIND_GPU لعمل نسخ من النموذج على وحدات معالجة الرسومات المتوفرة.
parameters وضعنا مسار بيئة كوندا EXECUTION_ENV_PATH.

للحصول على تفاصيل حول مستودع النموذج والتكوينات لنماذج Stable Diffusion الأخرى ، ارجع إلى الكود في ملف جيثب ريبو. يحتوي كل دليل على عناصر أثرية لنماذج Stable Diffusion معينة.

قم بتعبئة بيئة كوندا وتوسيع حاوية SageMaker Triton

لا تحتوي صور حاوية SageMaker NVIDIA Triton على مكتبات مثل transformer, accelerate, and diffusers لنشر نماذج الانتشار المستقر وخدمتها. ومع ذلك ، يسمح لك Triton بإحضار تبعيات إضافية باستخدام حزمة كوندا. لنبدأ بإنشاء بيئة conda باستخدام التبعيات الضرورية الموضحة في ملف environment.yml ملف وإنشاء أداة نموذج القطران sd_env.tar.gz ملف يحتوي على بيئة conda مع تثبيت التبعيات فيه. قم بتشغيل ملف YML التالي لإنشاء ملف conda-pack الأداة ونسخها إلى الدليل المحلي حيث سيتم تحميلها إلى Amazon S3. لاحظ أننا سنقوم بتحميل عناصر conda كأحد النماذج في MME واستدعاء هذا النموذج لإعداد بيئة conda في مثيل ML الذي يستضيفه SageMaker.

%%writefile environment.yml
name: mme_env
dependencies: - python=3.8 - pip - pip: - numpy - torch --extra-index-url https://download.pytorch.org/whl/cu118 - accelerate - transformers - diffusers - xformers - conda-pack !conda env create -f environment.yml –force

قم بتحميل نماذج النماذج إلى Amazon S3

يتوقع SageMaker أن يتم استضافة ملف .tar.gz الذي يحتوي على كل مستودع نموذج Triton على نقطة النهاية متعددة النماذج. لذلك ، نقوم بإنشاء قطعة أثرية tar بمحتوى من مستودع نموذج Triton. يمكننا استخدام دلو S3 هذا لاستضافة الآلاف من القطع الأثرية للنماذج ، وسيستخدم SageMaker MME نماذج من هذا الموقع لتحميل وتقديم عدد كبير من النماذج ديناميكيًا. نقوم بتخزين جميع نماذج Stable Diffusion في موقع Amazon S3 هذا.

انشر برنامج SageMaker MME

في هذا القسم ، نتصفح الخطوات لنشر SageMaker MME من خلال تحديد مواصفات الحاوية ونموذج SageMaker وتكوينات نقطة النهاية.

حدد وعاء التقديم

في تعريف الحاوية ، حدد ملف ModelDataUrl لتحديد دليل S3 الذي يحتوي على جميع النماذج التي سيستخدمها SageMaker MME لتحميل وخدمة التنبؤات. تعيين Mode إلى MultiModel للإشارة إلى أن SageMaker سينشئ نقطة النهاية بمواصفات حاوية MME. قمنا بتعيين الحاوية بصورة تدعم نشر MMEs باستخدام وحدة معالجة الرسومات. يرى الخوارزميات والأطر والمثيلات المدعومة لمزيد من التفاصيل.

نرى كل النماذج الثلاثة في Amazon S3 التالية ModelDataUrl موقع:

container = {"Image": mme_triton_image_uri, "ModelDataUrl": model_data_url, "Mode": "MultiModel"}

قم بإنشاء كائن MME

نستخدم عميل SageMaker Boto3 لإنشاء النموذج باستخدام create_model API. نقوم بتمرير تعريف الحاوية إلى إنشاء نموذج API مع ModelName و ExecutionRoleArn:

create_model_response = sm_client.create_model( ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

تحديد التكوينات الخاصة بـ MME

قم بإنشاء تكوين MME باستخدام ملف create_endpoint_config واجهة برمجة تطبيقات Boto3. حدد مثيل حوسبة GPU المتسارعة بتنسيق InstanceType (نستخدم نفس نوع المثيل الذي نستخدمه لاستضافة دفتر SageMaker الخاص بنا). نوصي بتكوين نقاط النهاية الخاصة بك مع حالتين على الأقل من حالات الاستخدام الواقعية. يتيح ذلك لـ SageMaker توفير مجموعة عالية التوفر من التنبؤات عبر مناطق توافر خدمات متعددة للنماذج.

create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "InstanceType": instance_type, "InitialVariantWeight": 1, "InitialInstanceCount": 1, "ModelName": sm_model_name, "VariantName": "AllTraffic", } ],
)

قم بإنشاء MME

استخدم تكوين نقطة النهاية السابق لإنشاء نقطة نهاية SageMaker جديدة وانتظر انتهاء النشر:

create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)

ستتغير الحالة إلى InService عندما يكون النشر ناجحًا.

قم بإنشاء صور باستخدام إصدارات مختلفة من نماذج Stable Diffusion

لنبدأ باستدعاء النموذج الأساسي بموجه والحصول على الصورة التي تم إنشاؤها. نقوم بتمرير المدخلات إلى النموذج الأساسي باستخدام prompt, negative_prompt, and gen_args كقاموس. نقوم بتعيين نوع البيانات وشكلها لكل عنصر إدخال في القاموس ونمرره كمدخل إلى النموذج.

inputs = dict(prompt = "Infinity pool on top of a high rise overlooking Central Park", negative_prompt = "blur,low detail, low quality", gen_args = json.dumps(dict(num_inference_steps=50, guidance_scale=8))
)
payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
}
response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_base.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
decode_image(output[0]["data"][0])

موجه: حمام سباحة لا متناهي على قمة أحد المرتفعات تطل على سنترال بارك

بالعمل مع هذه الصورة ، يمكننا تعديلها باستخدام نموذج عمق الانتشار المستقر متعدد الاستخدامات. على سبيل المثال ، يمكننا تغيير نمط الصورة إلى لوحة زيتية ، أو تغيير الإعداد من سنترال بارك إلى حديقة يلوستون الوطنية ببساطة عن طريق تمرير الصورة الأصلية جنبًا إلى جنب مع مطالبة تصف التغييرات التي نرغب في رؤيتها.

نستدعي نموذج العمق بالتحديد sd_depth.tar.gz في ال TargetModel ل invoke_endpoint استدعاء وظيفة. في المخرجات ، لاحظ كيف يتم الحفاظ على اتجاه الصورة الأصلية ، ولكن على سبيل المثال ، تم تحويل مباني مدينة نيويورك إلى تشكيلات صخرية من نفس الشكل.

inputs = dict(prompt = "highly detailed oil painting of an inifinity pool overlooking central park", image=image, gen_args = json.dumps(dict(num_inference_steps=50, strength=0.9)) )
payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
}
response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_depth.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
print("original image")
display(original_image)
print("generated image")
display(decode_image(output[0]["data"][0]))

الصورة الأصلية صورة زيتية حديقة يلوستون

هناك نموذج مفيد آخر وهو Stable Diffusion inpainting ، والذي يمكننا استخدامه لإزالة أجزاء معينة من الصورة. لنفترض أنك تريد إزالة الشجرة في المثال التالي للصورة. يمكننا القيام بذلك عن طريق استدعاء نموذج inpaint sd_inpaint.tar.gz. لإزالة الشجرة ، نحتاج إلى تمرير mask_image، والذي يشير إلى مناطق الصورة التي يجب الاحتفاظ بها وأيها يجب ملؤه. يشير جزء البكسل الأسود من صورة القناع إلى المناطق التي يجب أن تظل بدون تغيير ، وتشير وحدات البكسل البيضاء إلى ما يجب استبداله.

image = encode_image(original_image).decode("utf8")
mask_image = encode_image(Image.open("sample_images/bertrand-gabioud-mask.png")).decode("utf8")
inputs = dict(prompt = "building, facade, paint, windows", image=image, mask_image=mask_image, negative_prompt = "tree, obstruction, sky, clouds", gen_args = json.dumps(dict(num_inference_steps=50, guidance_scale=10)) )
payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
}
response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_inpaint.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
decode_image(output[0]["data"][0])

الصورة الأصلية صورة قناع صورة غير مصقولة

في مثالنا الأخير ، قمنا بتقليص حجم الصورة الأصلية التي تم إنشاؤها مسبقًا من دقة 512 × 512 إلى 128 × 128. ثم استدعينا نموذج مقياس الانتشار الثابت لترقية الصورة إلى 512 × 512. ونستخدم نفس الموجه للترقية الصورة كما استخدمناها لتوليد الصورة الأولية. على الرغم من أنه ليس ضروريًا ، فإن تقديم موجه يصف الصورة يساعد في توجيه عملية الارتقاء بالمستوى ويجب أن يؤدي إلى نتائج أفضل.

low_res_image = output_image.resize((128, 128))
inputs = dict(prompt = "Infinity pool on top of a high rise overlooking Central Park", image=encode_image(low_res_image).decode("utf8")
) payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
} response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_upscale.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
upscaled_image = decode_image(output[0]["data"][0])

صورة منخفضة الدقة رفع مستوى الصورة

على الرغم من أن الصورة التي تمت ترقيتها ليست مفصلة مثل الصورة الأصلية ، إلا أنها تمثل تحسنًا ملحوظًا على الصورة منخفضة الدقة.

تحسين الذاكرة والسرعة

xformers المكتبة هي وسيلة لتسريع توليد الصور. هذا التحسين متاح فقط لوحدات معالجة الرسومات NVIDIA. يعمل على تسريع إنشاء الصور وتقليل استخدام VRAM. لقد استخدمنا xformers مكتبة من أجل الاهتمام بكفاءة الذاكرة والسرعة. عندما enable_xformers_memory_efficient_attention تم تمكين الخيار ، يجب أن تلاحظ انخفاض استخدام ذاكرة GPU واحتمال تسريع وقت الاستدلال.

تنظيف

اتبع التعليمات الموجودة في قسم التنظيف في دفتر الملاحظات لحذف الجزء المخصص للموارد من هذه المدونة لتجنب الرسوم غير الضرورية. يشير إلى الأمازون SageMaker التسعير للحصول على تفاصيل تكلفة مثيلات الاستدلال.

وفي الختام

في هذا المنشور ، ناقشنا نماذج الانتشار المستقر وكيف يمكنك نشر إصدارات مختلفة من نماذج الانتشار المستقر بتكلفة فعالة باستخدام نقاط النهاية متعددة النماذج من SageMaker. يمكنك استخدام هذا الأسلوب لإنشاء أداة لإنشاء الصور وتحريرها. تحقق من نماذج التعليمات البرمجية في ملف جيثب ريبو للبدء وإعلامنا بأداة الذكاء الاصطناعي التوليدية الرائعة التي تقوم بإنشائها.


حول المؤلف

سيمون زامارين هو مهندس حلول AI / ML الذي ينصب تركيزه الرئيسي على مساعدة العملاء على استخراج القيمة من أصول البيانات الخاصة بهم. في أوقات فراغه ، يستمتع Simon بقضاء الوقت مع العائلة ، وقراءة الخيال العلمي ، والعمل على العديد من مشاريع DIY المنزلية.

فيكرام إيلانجو هو مهندس حلول متخصص في الذكاء الاصطناعي / التعلم الآلي في AWS ، ومقرها في فرجينيا ، الولايات المتحدة. وهو يركز حاليًا على الذكاء الاصطناعي التوليدي ، وماجستير في إدارة الأعمال ، والهندسة السريعة ، وتحسين استدلال النماذج الكبيرة ، وتوسيع نطاق تعلم الآلة عبر المؤسسات. يساعد Vikram عملاء الصناعة المالية والتأمينية في التصميم والهندسة المعمارية لبناء ونشر تطبيقات ML على نطاق واسع. في أوقات فراغه ، يستمتع بالسفر والتنزه والطهي والتخييم مع عائلته.

جواو مورا هو مهندس حلول متخصص في الذكاء الاصطناعي / التعلم الآلي في AWS ، ومقره إسبانيا. إنه يساعد العملاء من خلال تدريب نموذج التعلم العميق وتحسين الاستدلال ، وبناء منصات ML على نطاق واسع على AWS. وهو أيضًا مؤيد نشط للأجهزة المتخصصة في ML وحلول ML ذات الشفرة المنخفضة.

سوراب تريكاندي هو مدير أول للمنتجات في Amazon SageMaker Inference. إنه متحمس للعمل مع العملاء وتحفزه هدف إضفاء الطابع الديمقراطي على التعلم الآلي. يركز على التحديات الأساسية المتعلقة بنشر تطبيقات ML المعقدة ، ونماذج ML متعددة المستأجرين ، وتحسين التكلفة ، وجعل نشر نماذج التعلم العميق أكثر سهولة. في أوقات فراغه ، يستمتع سوراب بالمشي لمسافات طويلة والتعرف على التقنيات المبتكرة واتباع TechCrunch وقضاء الوقت مع أسرته.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟