تلوين الصور باستخدام Stable Diffusion باستخدام Amazon SageMaker JumpStart

تلوين الصور باستخدام Stable Diffusion باستخدام Amazon SageMaker JumpStart

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

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

في هذا المنشور ، نقدم دليلًا شاملاً حول نشر وتشغيل الاستدلال باستخدام نموذج الرسم الثابت للانتشار الثابت بطريقتين: من خلال واجهة مستخدم JumpStart (UI) في أمازون ساجميكر ستوديو، وبرمجيًا من خلال واجهات برمجة تطبيقات JumpStart متوفر في SageMaker بيثون SDK.

حل نظرة عامة

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

قم برسم الصور باستخدام Stable Diffusion باستخدام Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.

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

ترشدك الأقسام التالية خلال نشر النموذج وتشغيل الاستدلال باستخدام إما Studio UI أو JumpStart APIs.

لاحظ أنه باستخدام هذا النموذج ، فإنك توافق على CreativeML Open RAIL ++ - ترخيص M..

قم بالوصول إلى JumpStart من خلال Studio UI

في هذا القسم ، نوضح نشر نماذج JumpStart باستخدام Studio UI. يوضح الفيديو المصاحب تحديد موقع نموذج الطلاء بالانتشار المستقر الذي تم تدريبه مسبقًا على JumpStart ونشره. تقدم صفحة النموذج تفاصيل أساسية حول النموذج واستخدامه. لإجراء الاستدلال ، نستخدم نوع المثيل ml.p3.2xlarge ، والذي يوفر تسريع GPU المطلوب للاستدلال بزمن انتقال منخفض بسعر مناسب. بعد تكوين مثيل استضافة SageMaker ، اختر نشر. ستكون نقطة النهاية جاهزة للعمل وجاهزة للتعامل مع طلبات الاستدلال في غضون 10 دقائق تقريبًا.

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

استخدم JumpStart برمجيًا مع SageMaker SDK

يمكّنك استخدام JumpStart UI من نشر نموذج مدرب مسبقًا بشكل تفاعلي ببضع نقرات فقط. بدلاً من ذلك ، يمكنك استخدام نماذج JumpStart برمجيًا باستخدام واجهات برمجة التطبيقات المدمجة في SageMaker Python SDK.

في هذا القسم ، نختار نموذجًا مناسبًا تم تدريبه مسبقًا في JumpStart ، وننشر هذا النموذج في نقطة نهاية SageMaker ، ونقوم بالاستدلال على نقطة النهاية المنشورة ، وكل ذلك باستخدام SageMaker Python SDK. تحتوي الأمثلة التالية على مقتطفات التعليمات البرمجية. للوصول إلى الرمز الكامل مع جميع الخطوات المضمنة في هذا العرض التوضيحي ، راجع مقدمة في تحرير الصور في JumpStart - طلاء بالانتشار المستقر مثال مفكرة.

انشر النموذج المدرب مسبقًا

يستخدم SageMaker حاويات Docker لمختلف مهام الإنشاء ووقت التشغيل. يستخدم JumpStart ملف حاويات التعلم العميق من SageMaker (DLC) الخاصة بإطار العمل. نقوم أولاً بإحضار أي حزم إضافية ، بالإضافة إلى البرامج النصية للتعامل مع التدريب والاستدلال على المهمة المحددة. ثم يتم جلب القطع الأثرية للنموذج المدربة مسبقًا بشكل منفصل 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")

بعد ذلك ، نقدم هذه الموارد إلى نموذج 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,
)

بعد نشر النموذج ، يمكننا الحصول على تنبؤات في الوقت الفعلي منه!

إدخال

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

تقبل نقطة النهاية الصورة الأساسية والقناع كقيم 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 (اختياري) - عدد خطوات تقليل التشويش أثناء إنشاء الصورة. تؤدي المزيد من الخطوات إلى الحصول على صورة ذات جودة أعلى. إذا تم تحديده ، يجب أن يكون عددًا صحيحًا موجبًا. لاحظ أن المزيد من خطوات الاستدلال ستؤدي إلى وقت استجابة أطول.
  • مقياس التوجيه (اختياري) - ينتج عن مقياس التوجيه الأعلى صورة أكثر ارتباطًا بالموجه ، على حساب جودة الصورة. إذا تم تحديده ، يجب أن يكون عددًا عشريًا. 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 أو أعلى) ، قد تواجه الطريقة صعوبة في الحفاظ على المستوى المطلوب من الجودة والتفاصيل.
  • على الرغم من أن استخدام البذور يمكن أن يساعد في التحكم في قابلية التكاثر ، إلا أن الطلاء بالانتشار المستقر قد ينتج عنه نتائج متنوعة مع تعديلات طفيفة على المدخلات أو المعلمات. قد يجعل ذلك من الصعب ضبط المخرجات وفقًا لمتطلبات محددة.
  • قد تواجه الطريقة صعوبة في إنشاء مواد وأنماط معقدة ، خاصةً عندما تمتد لمساحات كبيرة داخل الصورة أو تكون ضرورية للحفاظ على التماسك العام والجودة للمنطقة الملوثة.

لمزيد من المعلومات حول القيود والتحيز ، راجع انتشار مستقر بطاقة نموذج Inpainting.

حل Inpainting مع قناع تم إنشاؤه عبر موجه

CLIPSeq هي تقنية متقدمة للتعلم العميق تستخدم قوة نماذج CLIP (التدريب المسبق للغة المتباينة والصورة) المدربة مسبقًا لإنشاء أقنعة من الصور المدخلة. يوفر هذا الأسلوب طريقة فعالة لإنشاء أقنعة لمهام مثل تجزئة الصورة ، و inpainting ، والمعالجة. يستخدم CLIPSeq CLIP لإنشاء وصف نصي للصورة المدخلة. ثم يتم استخدام وصف النص لإنشاء قناع يحدد وحدات البكسل في الصورة ذات الصلة بالوصف النصي. يمكن بعد ذلك استخدام القناع لعزل الأجزاء ذات الصلة من الصورة لمزيد من المعالجة.

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

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

لمزيد من المعلومات ، راجع تصميم أزياء افتراضي باستخدام الذكاء الاصطناعي التوليدي باستخدام Amazon SageMaker.

تنظيف

بعد الانتهاء من تشغيل دفتر الملاحظات ، تأكد من حذف جميع الموارد التي تم إنشاؤها في العملية لضمان إيقاف الفواتير. يتوفر رمز تنظيف نقطة النهاية في الملف المرتبط مفكرة.

وفي الختام

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

لمعرفة المزيد حول النموذج وكيفية عمله ، راجع الموارد التالية:

لمعرفة المزيد حول JumpStart ، تحقق من المنشورات التالية:


حول المؤلف

قم برسم الصور باستخدام Stable Diffusion باستخدام Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.الدكتور فيفيك مادان هو عالم تطبيقي مع فريق Amazon SageMaker JumpStart. حصل على الدكتوراه من جامعة إلينوي في Urbana-Champaign وكان باحثًا بعد الدكتوراه في Georgia Tech. وهو باحث نشط في التعلم الآلي وتصميم الخوارزمية وقد نشر أوراقًا علمية في مؤتمرات EMNLP و ICLR و COLT و FOCS و SODA.

قم برسم الصور باستخدام Stable Diffusion باستخدام Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.ألفريد شين هو أخصائي أول في الذكاء الاصطناعي / تعلم الآلة في AWS. كان يعمل في وادي السيليكون ، حيث شغل مناصب فنية وإدارية في قطاعات متنوعة بما في ذلك الرعاية الصحية والتمويل والتكنولوجيا الفائقة. وهو باحث تطبيقي متخصص في الذكاء الاصطناعي والتعلم الآلي ، مع التركيز على السيرة الذاتية ومعالجة اللغة الطبيعية والوسائط المتعددة. تم عرض أعماله في منشورات مثل EMNLP و ICLR و Public Health.

الطابع الزمني:

اكثر من التعلم الآلي من AWS