Diffusers documentation
Generasi gambar tanpa syarat
Generasi gambar tanpa syarat
Model generasi gambar tanpa syarat tidak dikondisikan pada teks atau gambar selama pelatihan. Model ini hanya menghasilkan gambar yang menyerupai distribusi data pelatihannya.
Panduan ini akan membahas skrip pelatihan train_unconditional.py untuk membantu Anda memahaminya, serta bagaimana Anda dapat menyesuaikannya untuk kebutuhan Anda sendiri.
Sebelum menjalankan skrip, pastikan Anda menginstal pustaka dari sumber:
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .Lalu, navigasikan ke folder contoh yang berisi skrip pelatihan dan instal dependensi yang diperlukan:
cd examples/unconditional_image_generation
pip install -r requirements.txt🤗 Accelerate adalah pustaka untuk membantu Anda melatih pada beberapa GPU/TPU atau dengan presisi campuran. Pustaka ini akan mengonfigurasi pengaturan pelatihan Anda secara otomatis berdasarkan perangkat keras dan lingkungan Anda. Lihat Tour singkat 🤗 Accelerate untuk mempelajari lebih lanjut.
Inisialisasi lingkungan 🤗 Accelerate:
accelerate config
Untuk menyiapkan lingkungan 🤗 Accelerate default tanpa memilih konfigurasi apa pun:
accelerate config default
Atau jika lingkungan Anda tidak mendukung shell interaktif seperti notebook, Anda dapat menggunakan:
from accelerate.utils import write_basic_config
write_basic_config()Terakhir, jika Anda ingin melatih model pada dataset Anda sendiri, lihat panduan Membuat dataset untuk pelatihan untuk mempelajari cara membuat dataset yang berfungsi dengan skrip pelatihan.
Parameter skrip
Bagian-bagian berikut menyoroti bagian dari skrip pelatihan yang penting untuk dipahami agar Anda dapat memodifikasinya, namun tidak membahas setiap aspek skrip secara detail. Jika Anda tertarik untuk mempelajari lebih lanjut, silakan membaca skrip tersebut dan beri tahu kami jika Anda memiliki pertanyaan atau kekhawatiran.
Skrip pelatihan menyediakan banyak parameter untuk membantu Anda menyesuaikan eksekusi pelatihan Anda. Semua parameter dan deskripsinya dapat ditemukan di fungsi parse_args(). Fungsi ini menyediakan nilai default untuk setiap parameter, seperti ukuran batch pelatihan dan learning rate, tetapi Anda juga dapat mengatur nilai Anda sendiri dalam perintah pelatihan jika Anda mau.
Sebagai contoh, untuk mempercepat pelatihan dengan presisi campuran menggunakan format bf16, tambahkan parameter --mixed_precision ke perintah pelatihan:
accelerate launch train_unconditional.py \
--mixed_precision="bf16"Beberapa parameter dasar dan penting yang perlu ditentukan meliputi:
--dataset_name: nama dataset di Hub atau jalur lokal ke dataset yang akan digunakan untuk pelatihan--output_dir: tempat menyimpan model yang telah dilatih--push_to_hub: apakah model yang dilatih akan didorong ke Hub--checkpointing_steps: frekuensi penyimpanan checkpoint saat model dilatih; ini berguna jika pelatihan terputus, Anda dapat melanjutkan pelatihan dari checkpoint tersebut dengan menambahkan--resume_from_checkpointke perintah pelatihan Anda
Bawa dataset Anda, dan biarkan skrip pelatihan menangani semuanya!
Skrip pelatihan
Kode untuk prapemrosesan dataset dan loop pelatihan dapat ditemukan di fungsi main(). Jika Anda perlu menyesuaikan skrip pelatihan, di sinilah Anda perlu melakukan perubahan.
Skrip train_unconditional menginisialisasi UNet2DModel jika Anda tidak menyediakan konfigurasi model. Anda dapat mengonfigurasi UNet di sini jika diinginkan:
model = UNet2DModel(
sample_size=args.resolution,
in_channels=3,
out_channels=3,
layers_per_block=2,
block_out_channels=(128, 128, 256, 256, 512, 512),
down_block_types=(
"DownBlock2D",
"DownBlock2D",
"DownBlock2D",
"DownBlock2D",
"AttnDownBlock2D",
"DownBlock2D",
),
up_block_types=(
"UpBlock2D",
"AttnUpBlock2D",
"UpBlock2D",
"UpBlock2D",
"UpBlock2D",
"UpBlock2D",
),
)Selanjutnya, skrip menginisialisasi scheduler dan optimizer:
# Initialize the scheduler
accepts_prediction_type = "prediction_type" in set(inspect.signature(DDPMScheduler.__init__).parameters.keys())
if accepts_prediction_type:
noise_scheduler = DDPMScheduler(
num_train_timesteps=args.ddpm_num_steps,
beta_schedule=args.ddpm_beta_schedule,
prediction_type=args.prediction_type,
)
else:
noise_scheduler = DDPMScheduler(num_train_timesteps=args.ddpm_num_steps, beta_schedule=args.ddpm_beta_schedule)
# Initialize the optimizer
optimizer = torch.optim.AdamW(
model.parameters(),
lr=args.learning_rate,
betas=(args.adam_beta1, args.adam_beta2),
weight_decay=args.adam_weight_decay,
eps=args.adam_epsilon,
)Lalu, memuat dataset dan Anda dapat menentukan cara praproses dataset tersebut:
dataset = load_dataset("imagefolder", data_dir=args.train_data_dir, cache_dir=args.cache_dir, split="train")
augmentations = transforms.Compose(
[
transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
transforms.CenterCrop(args.resolution) if args.center_crop else transforms.RandomCrop(args.resolution),
transforms.RandomHorizontalFlip() if args.random_flip else transforms.Lambda(lambda x: x),
transforms.ToTensor(),
transforms.Normalize([0.5], [0.5]),
]
)Terakhir, training loop menangani hal-hal lainnya seperti menambahkan noise pada gambar, memprediksi residual noise, menghitung loss, menyimpan checkpoint pada langkah-langkah tertentu, serta menyimpan dan mendorong model ke Hub. Jika Anda ingin mempelajari lebih lanjut tentang cara kerja training loop, lihat tutorial Understanding pipelines, models and schedulers yang menguraikan pola dasar dari proses denoising.
Jalankan skrip
Setelah Anda melakukan semua perubahan atau merasa puas dengan konfigurasi default, Anda siap untuk menjalankan skrip pelatihan! 🚀
Satu putaran pelatihan penuh membutuhkan waktu 2 jam pada 4xV100 GPU.
accelerate launch train_unconditional.py \
--dataset_name="huggan/flowers-102-categories" \
--output_dir="ddpm-ema-flowers-64" \
--mixed_precision="fp16" \
--push_to_hubJika Anda melatih dengan lebih dari satu GPU, tambahkan parameter --multi_gpu ke perintah pelatihan:
accelerate launch --multi_gpu train_unconditional.py \
--dataset_name="huggan/flowers-102-categories" \
--output_dir="ddpm-ema-flowers-64" \
--mixed_precision="fp16" \
--push_to_hubSkrip pelatihan membuat dan menyimpan file checkpoint di repositori Anda. Sekarang Anda dapat memuat dan menggunakan model terlatih Anda untuk inferensi:
from diffusers import DiffusionPipeline
import torch
pipeline = DiffusionPipeline.from_pretrained("anton-l/ddpm-butterflies-128").to("cuda") # or "mps", "xpu", "cpu"
image = pipeline().images[0]