TL;DR : بدافع جزئي من FLAN وجزئيًا بواسطة InstructPix2Pix، نستكشف طريقة لضبط التوزيع المستقر للتعليمات. يتيح لنا ذلك توجيه نموذجنا باستخدام صورة مُدخلة و"تعليمات"، مثل - تطبيق مرشح رسوم متحركة على الصورة الطبيعية .
يمكنك قراءة منشور المدونة الخاص بنا لمعرفة المزيد من التفاصيل.
؟ تحفيز
؟ إعداد البيانات
؟ تمرين
؟ النماذج، مجموعات البيانات، العرض التوضيحي
️ الاستدلال
؟ نتائج
؟ شكر وتقدير
ضبط التعليمات هو طريقة خاضعة للإشراف لتدريس نماذج اللغة لاتباع التعليمات لحل مهمة ما. تم تقديمه في نماذج اللغة المضبوطة بدقة وهي عبارة عن متعلمين بدون فرصة (FLAN) بواسطة Google. من الآونة الأخيرة، قد تتذكر أعمالًا مثل Alpaca وFLAN V2، والتي تعد أمثلة جيدة على مدى فائدة ضبط التعليمات لمختلف المهام.
من ناحية أخرى، تم تقديم فكرة تدريس Stable Diffusion لاتباع تعليمات المستخدم لإجراء عمليات التحرير على الصور المدخلة في InstructPix2Pix: تعلم اتباع تعليمات تحرير الصور.
يأتي دافعنا وراء هذا العمل جزئيًا من خط أعمال FLAN وجزئيًا من InstructPix2Pix. أردنا استكشاف ما إذا كان من الممكن مطالبة Stable Diffusion بتعليمات محددة وصور إدخال لمعالجتها وفقًا لاحتياجاتنا.
فكرتنا الرئيسية هي أولاً إنشاء مجموعة بيانات موجهة للتعليمات (كما هو موضح في مدونتنا ثم إجراء تدريب على أسلوب InstructPix2Pix. والهدف النهائي هو جعل Stable Diffusion أفضل في اتباع تعليمات محددة تستلزم عمليات متعلقة بتحويل الصور.
عملية إعداد البيانات لدينا مستوحاة من FLAN. راجع الأقسام أدناه لمزيد من التفاصيل.
data_preparation
.نصيحة
في حالة استخدام مجموعات البيانات المخصصة، يحتاج المرء إلى تكوين مجموعة البيانات حسب اختياره طالما أنك تحافظ على التنسيق المعروض هنا. قد يتعين عليك تكوين أداة تحميل البيانات وفئة مجموعة البيانات الخاصة بك في حالة عدم رغبتك في الاستفادة من مكتبة datasets
. إذا قمت بذلك، فقد يتعين عليك ضبط البرامج النصية للتدريب وفقًا لذلك.
نوصي باستخدام بيئة بايثون الافتراضية لهذا الغرض. لا تتردد في استخدام المفضلة لديك هنا.
أجرينا تجاربنا مع PyTorch 1.13.1 (CUDA 11.6) ووحدة معالجة الرسومات A100 واحدة. نظرًا لأن تثبيت PyTorch يمكن أن يعتمد على الأجهزة، فإننا نحيلك إلى المستندات الرسمية لتثبيت PyTorch.
بمجرد تثبيت PyTorch، يمكننا تثبيت بقية التبعيات:
pip install -r requirements.txt
بالإضافة إلى ذلك، نوصي بتثبيت xformers أيضًا لتمكين التدريب الفعال للذاكرة.
ملاحظة : إذا كنت تستخدم PyTorch 2.0، فلن تحتاج إلى تثبيت xformers بشكل إضافي. وذلك لأننا نستخدم معالج الانتباه الموفر للذاكرة بشكل افتراضي في Diffusers عند استخدام PyTorch 2.0.
يستفيد كود التدريب الخاص بنا؟ الناشرون ، ؟ تسريع و ؟ محولات. وعلى وجه الخصوص، نقوم بتوسيع هذا المثال التدريبي ليناسب احتياجاتنا.
export MODEL_ID= " runwayml/stable-diffusion-v1-5 "
export DATASET_ID= " instruction-tuning-sd/cartoonization "
export OUTPUT_DIR= " cartoonization-scratch "
accelerate launch --mixed_precision= " fp16 " train_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png "
--validation_prompt= " Generate a cartoonized version of the natural image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
ملاحظة : باتباع InstructPix2Pix، نتدرب على دقة 256x256 ولا يبدو أن ذلك يؤثر على الجودة النهائية كثيرًا عندما نجري الاستدلال بدقة 512x512.
بمجرد إطلاق التدريب بنجاح، سيتم تتبع السجلات تلقائيًا باستخدام الأوزان والتحيزات. اعتمادًا على كيفية تحديد checkpointing_steps
وخطوات max_train_steps
، ستكون هناك نقاط تفتيش وسيطة أيضًا. في نهاية التدريب، يمكنك توقع وجود دليل (أي OUTPUT_DIR
) يحتوي على نقاط التفتيش الوسيطة وعناصر خط الأنابيب النهائية.
إذا تم تحديد --push_to_hub
، فسيتم دفع محتويات OUTPUT_DIR
إلى مستودع على Hugging Face Hub.
فيما يلي مثال لصفحة التشغيل حول الأوزان والتحيزات. فيما يلي مثال لكيفية ظهور مستودع خطوط الأنابيب على Hugging Face Hub.
export MODEL_ID= " timbrooks/instruct-pix2pix "
export DATASET_ID= " instruction-tuning-sd/cartoonization "
export OUTPUT_DIR= " cartoonization-finetuned "
accelerate launch --mixed_precision= " fp16 " finetune_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png "
--validation_prompt= " Generate a cartoonized version of the natural image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
export MODEL_ID= " runwayml/stable-diffusion-v1-5 "
export DATASET_ID= " instruction-tuning-sd/low-level-image-proc "
export OUTPUT_DIR= " low-level-img-proc-scratch "
accelerate launch --mixed_precision= " fp16 " train_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--original_image_column= " input_image "
--edit_prompt_column= " instruction "
--edited_image_column= " ground_truth_image "
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/derain_the_image_1.png "
--validation_prompt= " Derain the image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
export MODEL_ID= " timbrooks/instruct-pix2pix "
export DATASET_ID= " instruction-tuning-sd/low-level-image-proc "
export OUTPUT_DIR= " low-level-img-proc-finetuned "
accelerate launch --mixed_precision= " fp16 " finetune_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--original_image_column= " input_image "
--edit_prompt_column= " instruction "
--edited_image_column= " ground_truth_image "
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/derain_the_image_1.png "
--validation_prompt= " Derain the image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
جرب النماذج بشكل تفاعلي دون أي إعداد: العرض التجريبي
import torch
from diffusers import StableDiffusionInstructPix2PixPipeline
from diffusers . utils import load_image
model_id = "instruction-tuning-sd/cartoonizer"
pipeline = StableDiffusionInstructPix2PixPipeline . from_pretrained (
model_id , torch_dtype = torch . float16 , use_auth_token = True
). to ( "cuda" )
image_path = "https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png"
image = load_image ( image_path )
image = pipeline ( "Cartoonize the following image" , image = image ). images [ 0 ]
image . save ( "image.png" )
import torch
from diffusers import StableDiffusionInstructPix2PixPipeline
from diffusers . utils import load_image
model_id = "instruction-tuning-sd/low-level-img-proc"
pipeline = StableDiffusionInstructPix2PixPipeline . from_pretrained (
model_id , torch_dtype = torch . float16 , use_auth_token = True
). to ( "cuda" )
image_path = "https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/derain%20the%20image_1.png"
image = load_image ( image_path )
image = pipeline ( "derain the image" , image = image ). images [ 0 ]
image . save ( "image.png" )
ملاحظة : نظرًا لأن خطوط الأنابيب المذكورة أعلاه هي في الأساس من النوع
StableDiffusionInstructPix2PixPipeline
، فيمكنك تخصيص العديد من الوسائط التي يعرضها خط الأنابيب. الرجوع إلى المستندات الرسمية لمزيد من التفاصيل.
ارجع إلى منشور مدونتنا لمزيد من المناقشات حول النتائج والأسئلة المفتوحة.
شكرًا لـ Alara Dirik وZhengzhong Tu على المناقشات المفيدة.
@article {
Paul2023instruction-tuning-sd,
author = { Paul, Sayak } ,
title = { Instruction-tuning Stable Diffusion with InstructPix2Pix } ,
journal = { Hugging Face Blog } ,
year = { 2023 } ,
note = { https://huggingface.co/blog/instruction-tuning-sd } ,
}