يوفر هذا المستودع رمزًا لنشر الاستقرار المستقر في الكيراس. يتم تكييفه من هذا البرنامج النصي عن طريق معانقة الوجه. النموذج الذي تم تدريبه مسبقًا المستخدم في الضبط الدقيق يأتي من kerascv. لمعرفة النموذج الأصلي ، تحقق من هذا الوثائق.
الرمز المقدم في هذا المستودع هو لأغراض البحث فقط . يرجى مراجعة هذا القسم لمعرفة المزيد عن حالات الاستخدام المحتملة والقيود.
من خلال تحميل هذا النموذج ، تقبل ترخيص CreativeMl Open Mair-M على https://raw.githubusercontent.com/compvis/stable-diffusion/main/license.
إذا كنت تبحث فقط عن الموارد المصاحبة لهذا المستودع ، فإليك الروابط:
جدول المحتويات :
يحتوي هذا المستودع على مستودع أخت (KERAS-SD-Serving) الذي يغطي أنماط النشر المختلفة للانتشار المستقر.
تحديث 13 يناير 2023 : حصل هذا المشروع على المركز الثاني في مسابقة جائزة كيراس المجتمعية الأولى التي تنظمها Google.
بعد البرنامج النصي الأصلي من Hugging Face ، يستخدم هذا المستودع أيضًا مجموعة بيانات Pokemon. ولكن تم تجديده للعمل بشكل أفضل مع tf.data . يتم استضافة النسخة المجددة من مجموعة البيانات هنا. تحقق من هذا الرابط لمزيد من التفاصيل.
يتم توفير رمز الضبط في finetune.py . قبل تشغيل التدريب ، تأكد من تثبيت التبعيات (الرجوع إلى requirements.txt ).
يمكنك إطلاق التدريب مع الحجج الافتراضية عن طريق تشغيل python finetune.py . قم بتشغيل python finetune.py -h لمعرفة وسيطات سطر الأوامر المدعومة. يمكنك تمكين التدريب المختلط الدقة عن طريق تمرير علامة --mp .
عند تشغيل التدريب ، سيتم إنشاء نقطة تفتيش نموذج الانتشار فقط إذا كانت الخسارة الحالية أقل من السابقين.
لتجنب تدريب OOM وأسرع ، يوصى باستخدام وحدة معالجة الرسومات V100 على الأقل. استخدمنا A100.
بعض التفاصيل المهمة التي يجب ملاحظة :
تفاصيل التدريب :
قمنا بتدفق النموذج على قرارين مختلفين: 256 × 256 و 512x512. قمنا بتغيير حجم الدُفعة وعدد الحقبة فقط لضبط هذين القرارين المختلفين. نظرًا لأننا لم نستخدم تراكم التدرج ، فإننا نستخدم مقتطف الرمز هذا لاستخلاص عدد الحصر.
python finetune.py --batch_size 4 --num_epochs 577python finetune.py --img_height 512 --img_width 512 --batch_size 1 --num_epochs 72 --mpلدقة 256 × 256 ، قمنا بتقليل عدد الحصر عن عمد لتوفير وقت حساب.
الأوزان المضبوطة :
يمكنك العثور على أوزان نموذج الانتشار الدقيقة هنا.
تأتي مجموعة بيانات بوكيمون الافتراضية المستخدمة في هذا المستودع مع الهيكل التالي:
pokemon_dataset/
data.csv
image_24.png
image_3.png
image_550.png
image_700.png
... data.csv يشبه ذلك:
طالما أن مجموعة البيانات المخصصة تتبع هذا الهيكل ، فلن تحتاج إلى تغيير أي شيء في قاعدة الشفرة الحالية باستثناء dataset_archive .
في حالة وجود مجموعة توضيحية متعددة لكل صورة ، يمكنك تحديد واحد بشكل عشوائي من مجموعة التسميات التوضيحية لكل صورة أثناء التدريب.
استنادًا إلى مجموعة البيانات ، قد تضطر إلى ضبط المقاييس المفرطة.
import keras_cv
import matplotlib . pyplot as plt
from tensorflow import keras
IMG_HEIGHT = IMG_WIDTH = 512
def plot_images ( images , title ):
plt . figure ( figsize = ( 20 , 20 ))
for i in range ( len ( images )):
ax = plt . subplot ( 1 , len ( images ), i + 1 )
plt . title ( title )
plt . imshow ( images [ i ])
plt . axis ( "off" )
# We just have to load the fine-tuned weights into the diffusion model.
weights_path = keras . utils . get_file (
origin = "https://huggingface.co/sayakpaul/kerascv_sd_pokemon_finetuned/resolve/main/ckpt_epochs_72_res_512_mp_True.h5"
)
pokemon_model = keras_cv . models . StableDiffusion (
img_height = IMG_HEIGHT , img_width = IMG_WIDTH
)
pokemon_model . diffusion_model . load_weights ( weights_path )
# Generate images.
generated_images = pokemon_model . text_to_image ( "Yoda" , batch_size = 3 )
plot_images ( generated_images , "Fine-tuned on the Pokemon dataset" ) يمكنك إحضار weights_path (يجب أن تكون متوافقة مع diffusion_model ) وإعادة استخدام مقتطف الكود.
تحقق من دفتر كولاب هذا للعب مع رمز الاستدلال.
في البداية ، قمنا بتنشيط النموذج على دقة 256x256. فيما يلي بعض النتائج إلى جانب مقارنات مع نتائج النموذج الأصلي.
| الصور | مطالبات |
|---|---|
| يودا | |
| قطة آلية مع أجنحة | |
| مرحبا كيتي |
يمكننا أن نرى أن النموذج الذي تم ضبطه يحتوي على مخرجات أكثر استقرارًا من النموذج الأصلي. على الرغم من أن النتائج يمكن تحسينها من الناحية الجمالية ، إلا أن التأثيرات الدقيقة مرئية. أيضًا ، تابعنا نفس المقاييس المفرطة من البرنامج النصي الذي يعانقه لدقة 256 × 256 (بصرف النظر عن عدد الأحداث وحجم الدُفعة). مع وجود فرط النطق بشكل أفضل ، من المحتمل أن تتحسن النتائج.
لدقة 512x512 ، نلاحظ شيئًا مشابهًا. لذلك ، جربنا معلمة unconditional_guidance_scale ولاحظنا أنه عندما يتم تعيينه على 40 (مع الحفاظ على الحجج الأخرى ثابتة) ، ظهرت النتائج بشكل أفضل.
| الصور | مطالبات |
|---|---|
| يودا | |
| قطة آلية مع أجنحة | |
| مرحبا كيتي |
ملاحظة : لا يزال ضبط 512 × 512 قيد التقدم حتى كتابة هذه السطور. لكن الأمر يستغرق الكثير من الوقت لإكمال حقبة واحدة دون وجود تدريب موزع وتراكم التدرج. النتائج أعلاه هي من نقطة التفتيش المشتقة بعد فترة 60.
مع وصفة مماثلة (ولكن تم تدريبها على المزيد من خطوات التحسين) ، تُظهر Lambda Labs نتائج مذهلة.