TL;DR : Dimotivasi sebagian oleh FLAN dan sebagian lagi oleh InstructPix2Pix, kami mengeksplorasi cara untuk menyesuaikan Difusi Stabil dengan instruksi. Hal ini memungkinkan kita untuk meminta model kita menggunakan gambar masukan dan “instruksi”, seperti - Terapkan filter kartun ke gambar alami .
Anda dapat membaca postingan blog kami untuk mengetahui lebih detail.
? Motivasi
? Persiapan data
? Pelatihan
? Model, kumpulan data, demo
️ Inferensi
? Hasil
? Ucapan Terima Kasih
Penyetelan instruksi adalah cara pengajaran model bahasa yang diawasi untuk mengikuti instruksi untuk menyelesaikan suatu tugas. Ini diperkenalkan di Model Bahasa yang Disempurnakan Adalah Pembelajar Zero-Shot (FLAN) oleh Google. Belakangan ini, Anda mungkin ingat karya seperti Alpaca dan FLAN V2, yang merupakan contoh bagus tentang betapa bermanfaatnya penyetelan instruksi untuk berbagai tugas.
Di sisi lain, ide mengajarkan Difusi Stabil untuk mengikuti instruksi pengguna untuk melakukan pengeditan pada gambar masukan diperkenalkan di InstructPix2Pix: Belajar Mengikuti Petunjuk Pengeditan Gambar.
Motivasi kami di balik pekerjaan ini sebagian berasal dari karya FLAN dan sebagian lagi dari InstructPix2Pix. Kami ingin mengeksplorasi apakah mungkin untuk meminta Difusi Stabil dengan instruksi spesifik dan memasukkan gambar untuk memprosesnya sesuai kebutuhan kami.
Ide utama kami adalah pertama-tama membuat kumpulan data yang diminta instruksi (seperti yang dijelaskan di blog kami dan kemudian melakukan pelatihan gaya InstructPix2Pix. Tujuan akhirnya adalah membuat Difusi Stabil lebih baik dalam mengikuti instruksi spesifik yang memerlukan operasi terkait transformasi gambar.
Proses persiapan data kami terinspirasi oleh FLAN. Lihat bagian di bawah untuk lebih jelasnya.
data_preparation
.Tip
Jika menggunakan kumpulan data khusus, seseorang perlu mengonfigurasi kumpulan data sesuai pilihannya selama Anda mempertahankan format yang disajikan di sini. Anda mungkin harus mengonfigurasi pemuat data dan kelas kumpulan data jika Anda tidak ingin menggunakan pustaka datasets
. Jika Anda melakukannya, Anda mungkin harus menyesuaikan skrip pelatihannya.
Kami merekomendasikan penggunaan lingkungan virtual Python untuk ini. Jangan ragu untuk menggunakan yang favorit Anda di sini.
Kami melakukan eksperimen dengan PyTorch 1.13.1 (CUDA 11.6) dan satu GPU A100. Karena instalasi PyTorch bergantung pada perangkat keras, kami merujuk Anda ke dokumen resmi untuk menginstal PyTorch.
Setelah PyTorch diinstal, kita dapat menginstal dependensi lainnya:
pip install -r requirements.txt
Selain itu, kami merekomendasikan untuk menginstal xformers juga untuk mengaktifkan pelatihan hemat memori.
Catatan : Jika Anda menggunakan PyTorch 2.0 maka Anda tidak perlu menginstal xformers tambahan. Ini karena kami menggunakan prosesor perhatian hemat memori secara default di Diffusers saat PyTorch 2.0 digunakan.
Kode pelatihan kami memanfaatkan ? diffuser, ? mempercepat, dan ? transformator. Secara khusus, kami memperluas contoh pelatihan ini agar sesuai dengan kebutuhan kami.
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
Catatan : Mengikuti InstructPix2Pix, kami berlatih pada resolusi 256x256 dan hal itu tampaknya tidak terlalu memengaruhi kualitas akhir saat kami melakukan inferensi dengan resolusi 512x512.
Setelah pelatihan berhasil diluncurkan, log akan otomatis dilacak menggunakan Bobot dan Bias. Bergantung pada cara Anda menentukan checkpointing_steps
dan max_train_steps
, akan ada pos pemeriksaan perantara juga. Di akhir pelatihan, Anda dapat mengharapkan direktori (yaitu OUTPUT_DIR
) yang berisi pos pemeriksaan perantara dan artefak alur akhir.
Jika --push_to_hub
ditentukan, konten OUTPUT_DIR
akan dikirim ke repositori di Hugging Face Hub.
Berikut adalah contoh halaman yang dijalankan pada Bobot dan Bias. Berikut adalah contoh tampilan repositori pipeline di 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
Cobalah model secara interaktif TANPA pengaturan apa pun: Demo
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" )
Catatan : Karena alur di atas pada dasarnya bertipe
StableDiffusionInstructPix2PixPipeline
, Anda dapat menyesuaikan beberapa argumen yang diekspos oleh alur tersebut. Lihat dokumen resmi untuk lebih jelasnya.
Lihat postingan blog kami untuk diskusi lebih lanjut tentang hasil dan pertanyaan terbuka.
Terima kasih kepada Alara Dirik dan Zhengzhong Tu atas diskusinya yang bermanfaat.
@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 } ,
}