TL; DR : ส่วนหนึ่งได้รับแรงบันดาลใจจาก FLAN และอีกส่วนหนึ่งโดย InstructPix2Pix เราสำรวจวิธีการปรับแต่งคำสั่ง Stable Diffusion สิ่งนี้ช่วยให้เราสามารถแจ้งโมเดลของเราโดยใช้รูปภาพอินพุตและ “คำแนะนำ” เช่น - ใช้ฟิลเตอร์การ์ตูนกับรูปภาพธรรมชาติ
คุณสามารถอ่านโพสต์บนบล็อกของเราเพื่อทราบรายละเอียดเพิ่มเติม
- แรงจูงใจ
- การเตรียมข้อมูล
- การฝึกอบรม
- โมเดล ชุดข้อมูล การสาธิต
️ การอนุมาน
- ผลลัพธ์
- รับทราบ
การปรับแต่งคำสั่งเป็นวิธีการสอนโมเดลภาษาที่ได้รับการดูแลเพื่อให้ปฏิบัติตามคำแนะนำในการแก้ปัญหางาน ได้รับการแนะนำใน Fine-tuned Language Models Are Zero-Shot Learners (FLAN) โดย Google จากครั้งล่าสุด คุณอาจจำงานอย่าง Alpaca และ FLAN V2 ได้ ซึ่งเป็นตัวอย่างที่ดีว่าการปรับแต่งคำสั่งมีประโยชน์ต่องานต่างๆ ได้อย่างไร
ในทางกลับกัน แนวคิดในการสอน Stable Diffusion ให้ทำตามคำแนะนำของผู้ใช้เพื่อดำเนินการแก้ไขภาพที่ป้อนเข้ามาได้รับการแนะนำใน InstructPix2Pix: การเรียนรู้การปฏิบัติตามคำแนะนำในการแก้ไขภาพ
แรงจูงใจของเราเบื้องหลังงานนี้ส่วนหนึ่งมาจากสายงาน FLAN และอีกส่วนหนึ่งมาจาก InstructPix2Pix เราต้องการสำรวจว่าเป็นไปได้หรือไม่ที่จะกระตุ้นให้ Stable Diffusion พร้อมคำแนะนำเฉพาะและป้อนรูปภาพเพื่อประมวลผลตามความต้องการของเรา
แนวคิดหลักของเราคือการสร้างชุดข้อมูลที่พร้อมท์คำสั่งก่อน (ตามที่อธิบายไว้ในบล็อกของเรา จากนั้นจึงดำเนินการฝึกอบรมสไตล์ InstructPix2Pix วัตถุประสงค์สุดท้ายคือทำให้ Stable Diffusion ดีขึ้นในการทำตามคำแนะนำเฉพาะที่เกี่ยวข้องกับการดำเนินการที่เกี่ยวข้องกับการแปลงรูปภาพ
กระบวนการเตรียมข้อมูลของเราได้รับแรงบันดาลใจจาก FLAN โปรดดูส่วนด้านล่างสำหรับรายละเอียดเพิ่มเติม
data_preparation
เคล็ดลับ
ในกรณีที่ใช้ชุดข้อมูลที่กำหนดเอง เราจำเป็นต้องกำหนดค่าชุดข้อมูลตามตัวเลือก ตราบใดที่คุณคงรูปแบบที่แสดงไว้ที่นี่ คุณอาจต้องกำหนดค่าตัวโหลดข้อมูลและคลาสชุดข้อมูลในกรณีที่คุณไม่ต้องการใช้ไลบรารี datasets
หากคุณทำเช่นนั้น คุณอาจต้องปรับสคริปต์การฝึกอบรมให้เหมาะสม
เราขอแนะนำให้ใช้สภาพแวดล้อมเสมือน Python สำหรับสิ่งนี้ รู้สึกอิสระที่จะใช้สิ่งที่คุณชื่นชอบที่นี่
เราทำการทดลองกับ PyTorch 1.13.1 (CUDA 11.6) และ A100 GPU ตัวเดียว เนื่องจากการติดตั้ง 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 } ,
}