Lewati ke konten utama

Fine-tuning Stable Diffusion XL dengan DreamBooth dan LoRA

Pelajari cara melakukan fine-tuning Stable Diffusion XL pada foto pribadi menggunakan Hugging Face AutoTrain Advance, DreamBooth, dan LoRA untuk pembangkitan gambar kustom berkualitas tinggi.
Diperbarui 28 Sep 2026  · 14 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Dalam tutorial ini, kita akan mempelajari Stable Diffusion XL dan DreamBooth, serta cara mengakses model pembangkitan gambar menggunakan pustaka diffuser. Selain itu, kita akan belajar melakukan fine-tuning model pada foto pribadi dan mengevaluasi kinerjanya. Jika Anda baru di dunia AI, kami menyarankan untuk mengambil kursus AI Fundamentals sebagai pengantar.

Memahami Stable Diffusion XL

Tim Stability AI telah merilis Stable Diffusion XL (SDXL) 1.0, yang mewakili evolusi berikutnya dalam model AI teks-ke-gambar. Model open-source ini dibangun dari model SDXL 0.9 yang sebelumnya hanya untuk riset, dan menjadi model pembuatan gambar paling mumpuni yang tersedia untuk publik.

Analisis kuantitatif dan evaluasi kualitatif oleh manusia selama berminggu-minggu percobaan menunjukkan kemampuan SDXL untuk menghasilkan gambar dengan kualitas tertinggi dan paling disukai dibandingkan model open-source lainnya.

Gambar dari arxiv.org

Gambar dari arxiv.org

Kualitas tinggi ini dicapai dengan menggunakan ansambel dua model — generator dasar 3,5 miliar parameter dan refiner 6,6 miliar parameter. Pipeline ganda ini memaksimalkan kualitas gambar sekaligus tetap cukup efisien untuk dijalankan pada GPU konsumen.

Kini, dengan SDXL 1.0, pengguna tidak lagi membutuhkan prompt panjang dan kompleks untuk menghasilkan gambar yang memukau. Kecerdasannya memungkinkan pembuatan gambar rumit hanya dari beberapa kata.

Fine-tuning SDXL pada dataset dan tugas kustom kini semakin mudah. Ini memberi kita kontrol granular atas struktur, gaya, dan komposisi.

Apa itu DreamBooth?

DreamBooth, diperkenalkan pada 2022 oleh tim riset Google, merupakan kemajuan signifikan di bidang AI generatif, khususnya pada model teks-ke-gambar seperti Stable Diffusion.

Disebut DreamBooth karena, menurut para peneliti Google:

"Ini seperti bilik foto, tetapi menangkap subjek dengan cara yang memungkinkan disintesis di mana pun impian Anda membawanya."

image1.png

Gambar dari DreamBooth

DreamBooth memungkinkan Anda menyuntikkan subjek kustom tertentu sehingga model yang di-fine-tune menjadi andal untuk merendernya dalam berbagai cara. Jadi, dalam arti tertentu, ini membuka kemungkinan membuat generator gambar Anda sendiri yang berfokus pada orang, karakter, objek, atau adegan tertentu.

DreamBooth hanya memerlukan beberapa (biasanya 3–5) gambar subjek untuk melatih model secara efektif. Setelah dilatih, model dapat menempatkan subjek dalam berbagai pengaturan, adegan, dan pose, yang hanya dibatasi oleh imajinasi pengguna.

Contoh Penggunaan DreamBooth

Melakukan fine-tuning model pembangkitan gambar dengan DreamBooth dapat bermanfaat bagi banyak bidang. Ini memberi lebih banyak kebebasan untuk bereksperimen dan menghasilkan gambar berkualitas tinggi tanpa keterampilan Photoshop. Berikut beberapa contoh bagaimana ini dapat menambah nilai di tempat kerja dengan mudah.

  1. Industri kreatif seperti desain grafis, periklanan, dan hiburan dapat sangat diuntungkan dari DreamBooth, karena menawarkan tingkat kustomisasi dan keunikan yang tinggi dalam pembuatan konten visual.
  2. DreamBooth memungkinkan personalisasi dengan menciptakan skenario yang mungkin sulit direplikasi di dunia nyata atau benar-benar fiktif.
  3. Ini juga dapat diterapkan di bidang pendidikan dan riset di mana representasi visual sangat penting, karena dapat digunakan untuk membuat konten edukasi yang dipersonalisasi atau untuk tujuan penelitian.

Pada bagian berikut, kita akan menyelami proses mengakses dan melakukan fine-tuning model SDXL pada dataset kustom menggunakan GPU Kaggle gratis.

Mengakses Stable Diffusion XL

Kita dapat mencoba demo Stable Diffusion XL Spaces di Hugging Face, yang dengan cepat menghasilkan empat gambar berdasarkan masukan Anda. Cobalah sebelum memutuskan apakah ini sesuai untuk aplikasi Anda.

Gambar dari Stable Diffusion XL pada TPUv5e

Gambar dari Stable Diffusion XL pada TPUv5e

Cara lainnya adalah menggunakan pustaka Python diffusers untuk menghasilkan gambar menggunakan prompt kustom.

Penyiapan

Sebelum menjalankan kode, pastikan Anda menggunakan mesin GPU dengan dukungan CUDA.

!nvidia-smi

image4.png

Setelah itu, instal paket diffuser menggunakan PIP.

%pip install --upgrade diffusers[torch] -q

Memuat Model Dasar dan Decoder VAE

Kita akan memuat decoder VAE kustom yang dimodifikasi untuk berjalan dalam presisi fp16 tanpa menghasilkan NaN.

Setelah itu, kita akan membangun pipeline dengan memuat model dasar SDXL dengan presisi fp16 dengan mengintegrasikan decoder VAE dalam alur kerja diffuser.

Kita bisa saja memuat model dasar langsung tanpa “fp16”, tetapi itu akan menyebabkan masalah memori GPU. Jadi, agar dapat berjalan di GPU Kaggle, Colab, dan Laptop, Anda harus mengakses model dalam varian fp16.

from diffusers import DiffusionPipeline, AutoencoderKL
import torch

vae = AutoencoderKL.from_pretrained(
    "madebyollin/sdxl-vae-fp16-fix", 
    torch_dtype=torch.float16
)
pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    vae=vae,
    torch_dtype=torch.float16,
    variant="fp16",
    use_safetensors=True,
)
pipe.to("cuda");

Menjalankan Pipeline Pembangkitan Gambar

Untuk menghasilkan gambar, Anda harus memberikan prompt sederhana, langkah inferensi, dan jumlah gambar per prompt.

Dalam kasus kita, kita akan menghasilkan empat gambar dari satu prompt.

prompt = "A man in a spacesuit is running a marathon in the jungle."

image = pipe(prompt=prompt, num_inference_steps=25, num_images_per_prompt = 4)

Untuk menampilkan gambar dalam grid, kita dapat menulis fungsi Python sederhana yang mengubah ukuran gambar dan menampilkannya dalam grid.

from PIL import Image

def image_grid(imgs, rows, cols, resize=256):
    assert len(imgs) == rows * cols

    if resize is not None:
        imgs = [img.resize((resize, resize)) for img in imgs]

    w, h = imgs[0].size
    grid_w, grid_h = cols * w, rows * h
    grid = Image.new("RGB", size=(grid_w, grid_h))

    for i, img in enumerate(imgs):
        x = i % cols * w
        y = i // cols * h
        grid.paste(img, box=(x, y))

    return grid

Kita akan menampilkan empat gambar dalam grid 2x2 untuk memudahkan membandingkan keluaran model.

image_grid(image.images, 2, 2)

Hasilnya luar biasa. Tentu, SDXL jauh lebih baik daripada Stable Diffusion 1.6.

image3.png

Mari tulis prompt lain dan hasilkan tiga gambar seekor monyet yang bermain dengan kembang api.

prompt = "A playful monkey handling fireworks with ease."
image = pipe(prompt=prompt, num_inference_steps=25, num_images_per_prompt = 3)
image_grid(image.images, 1, 3)

image14.png

Pelajari cara mengakses model Stable Diffusion secara daring dan lokal dengan mengikuti tutorial How to Run Stable Diffusion.

Meningkatkan Hasil dengan Refiner

Untuk lebih meningkatkan kualitas gambar dan akurasi model, kita akan menggunakan Refiner.

  1. Muat SDXL refiner 1.0 menggunakan diffusion pipeline.
  2. Hasilkan gambar dengan model dasar SDXL. Kita akan mengubah jenis keluaran menjadi “latent” yang akan mengembalikan representasi laten dari masukan, bukan gambar yang direkonstruksi.
  3. Berikan refiner prompt dan representasi laten dari gambar yang dihasilkan.
refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    vae=vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner.to("cuda")

n_steps = 40
high_noise_frac = 0.7

image = pipe(
    prompt=prompt,
    num_inference_steps=n_steps,
    denoising_end=high_noise_frac,
    output_type="latent",
).images

image = refiner(
    prompt=prompt,
    num_inference_steps=n_steps,
    denoising_start=high_noise_frac,
    image=image,
).images[0]

image

Gambar yang telah diperhalus berkualitas tinggi dan mengikuti prompt dengan tepat.

image17.png

Pelajari cara menghasilkan gambar fotorealistik menggunakan Python dengan model difusi mutakhir melalui sesi code-along Generating Photorealistic Images using AI with Diffusers in Python.

Fine-Tuning SDXL menggunakan AutoTrain Advanced

Seiring waktu, fine-tuning SDXL menjadi jauh lebih mudah. Berkat AutoTrain Advance, kini kita dapat melakukan fine-tuning model hanya dengan satu skrip Python. Pustaka Automatic Machine Learning ini dirancang untuk melatih dan menerapkan model machine learning mutakhir dengan kode minimal.

Anda dapat memasang paket Python menggunakan PIP:

%pip install -U autotrain-advanced

Jika Anda tertarik melakukan fine-tuning model SDXL dengan accelerate dan transformers, lihat Colab Notebook SDXL DreamBoot LoRA. Notebook tersebut agak usang, dan Anda mungkin perlu melakukan perubahan agar dapat berjalan dengan baik.

Penyiapan

Sebelum menjalankan skrip DreamBooth, kita perlu menyiapkan beberapa variabel yang akan digunakan untuk menjalankan skrip.

  1. Menamai proyek.
  2. Lokasi model dasar.
  3. Direktori dataset.
  4. Repo ID untuk mendorong model ke Hugging Face.
PROJECT_NAME = "Dreambooth_SDXL"
MODEL_NAME = "stabilityai/stable-diffusion-xl-base-1.0"
DATA_DIR = "/kaggle/input/abids-photos"
REPO_ID = "kingabzpro/sdxl-lora-abid"

Berikutnya, Anda akan menyiapkan token Hugging Face dengan menggunakan fitur Secret milik Kaggle. Pelajari cara menyiapkan secret dengan membaca Mistral 7B Tutorial: Step-by-Step Guide for Using Mistral 7B.

from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
HF_TOKEN = user_secrets.get_secret("HUGGINGFACE_TOKEN")

Membuat Dataset Privat di Kaggle

Untuk membuat dataset privat selfie Anda di Kaggle, Anda harus mengklik tombol unggah pada panel sisi kanan notebook.

image10.png

Tambahkan judul dataset dan unggah berkas zip yang berisi lima foto selfie yang diambil di lokasi berbeda. Dalam hal ini, itu adalah foto-foto penulis.

image7.png

Untuk melihat semua lima gambar di Jupyter Notebook, kita akan memuat gambar menggunakan PIL dan memberikannya ke fungsi image_grid kita.

from PIL import Image

def image_grid(imgs, rows, cols, resize=256):
    assert len(imgs) == rows * cols

    if resize is not None:
        imgs = [img.resize((resize, resize)) for img in imgs]

    w, h = imgs[0].size
    grid_w, grid_h = cols * w, rows * h
    grid = Image.new("RGB", size=(grid_w, grid_h))

    for i, img in enumerate(imgs):
        x = i % cols * w
        y = i // cols * h
        grid.paste(img, box=(x, y))

    return grid

import glob

Kami menampilkan lima gambar berkualitas tinggi dari penulis di lokasi berbeda. Pastikan semua foto berkualitas tinggi dan berukuran serupa.

imgs = [Image.open(path) for path in glob.glob("/kaggle/input/abids-photos/*.jpg")]
image_grid(imgs, 1, 5)

image11.png

Skrip Pelatihan AutoTrain DreamBooth

Saatnya melakukan fine-tuning model kita pada lima gambar ini menggunakan skrip AutoTrain DreamBooth.

  1. Berikan model dasar, nama proyek, dan direktori data.
  2. Pastikan instance prompt unik, mendeskripsikan orang atau objek. Gunakan nama lengkap orang tersebut, "Abid Ali Awan," dan deskripsikan foto secara detail.
  3. Biarkan argumen lainnya sama untuk mendapatkan performa terbaik.
  4. Berikan token akses Hugging Face dan repository ID untuk mengunggah adopter LoRA model ke Hugging Face Hub.
!autotrain dreambooth \
--model $MODEL_NAME \
--project-name $PROJECT_NAME \
--image-path $DATA_DIR \
--prompt "A photo of Abid Ali Awan wearing casual clothes, taking a selfie, and smiling." \
--resolution 1024 \
--batch-size 1 \
--num-steps 500 \
--gradient-accumulation 4 \
--lr 1e-4 \
--fp16 \
--gradient-checkpointing \
--push-to-hub \
--token $HF_TOKEN \
--repo-id $REPO_ID

Dibutuhkan 2 jam 15 menit untuk melatih model dan mendorong bobot LoRA ke Hugging Face.

LoRA, singkatan dari Low-Rank Adaptation, adalah teknik yang melibatkan penambahan lapisan kecil yang dapat dilatih ke model yang ada tanpa memodifikasi bobot aslinya.

LoRA bermanfaat karena memungkinkan pengenalan konsep baru, seperti gaya seni, karakter, atau tema, ke dalam model tanpa memerlukan komputasi atau penggunaan memori yang besar.

Steps: 100%|█████████| 500/500 [2:15:11<00:00, 14.49s/it, loss=0.119, lr=0.0001]Model weights saved in Dreambooth_SDXL/pytorch_lora_weights.safetensors
Steps: 100%|█████████| 500/500 [2:15:11<00:00, 16.22s/it, loss=0.119, lr=0.0001]
pytorch_lora_weights.safetensors: 100%|████| 23.4M/23.4M [00:01<00:00, 11.9MB/s]

Alih-alih menyimpan berkas model 7GB, kita akan menyimpan adapter LoRA sebesar 23,4MB yang akan dilampirkan ke model dasar saat inferensi.

Gambar dari kingabzpro/sdxl-lora-abid

Gambar dari kingabzpro/sdxl-lora-abid

Inferensi Model SDXL yang Telah Di-fine-tune

Kita akan membuat diffusion pipeline untuk menghasilkan gambar, menggunakan decoder VAE kustom dan model dasar SDXL dengan presisi FP16.

Lalu, kita akan memuat bobot LoRA dan menambahkannya ke model dasar menggunakan repo ID Hugging Face kita.

Terakhir, kita akan menjalankan pipeline dengan prompt dan menghasilkan tiga gambar.

from diffusers import DiffusionPipeline, AutoencoderKL, StableDiffusionXLImg2ImgPipeline

import torch

vae = AutoencoderKL.from_pretrained(
    "madebyollin/sdxl-vae-fp16-fix", 
    torch_dtype=torch.float16
)
pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    vae=vae,
    torch_dtype=torch.float16,
    variant="fp16",
    use_safetensors=True,
)
pipe.to("cuda");
pipe.load_lora_weights(REPO_ID, weight_name="pytorch_lora_weights.safetensors")


prompt = "A photo of Abid Ali Awan participating in a marathon."

image = pipe(prompt=prompt, num_inference_steps=25, num_images_per_prompt = 3)
image_grid(image.images, 1, 3)

Hasilnya mengesankan. Kita berhasil melakukan fine-tuning model untuk menghasilkan gambar penulis “Abid Ali Awan”.

image6.png

Mari coba lagi dengan prompt lain.

prompt = "A photo of Abid Ali Awan giving a press conference."

image = pipe(prompt=prompt, num_inference_steps=25, num_images_per_prompt = 3)
image_grid(image.images, 1, 3)

Hasilnya kembali luar biasa.

image9.png

Menggunakan Refiner

Pada bagian ini, kita akan meningkatkan gambar yang dihasilkan dengan SDXL Refiner 1.0.

Pertama, kita akan menghasilkan gambar menggunakan pipeline Stable Diffusion dan memberikan seed manual untuk memastikan reprodusibilitas.

prompt = "A photo of Abid Ali Awan wearing a business suit at an office meeting."

seed = 65
generator = torch.Generator("cuda").manual_seed(seed)
image = pipe(prompt=prompt, num_inference_steps=25, generator=generator).images[0]
image.resize((300, 300))

image12.png

Berikutnya, kita akan memuat SDXL refiner dan menjalankan pipeline refiner dengan prompt, generator, dan gambar yang sama.

refiner = StableDiffusionXLImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    vae=vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner.to("cuda");

image = refiner(prompt=prompt, num_inference_steps=25, generator=generator, image=image)
image.images[0].resize((300, 300))

Refiner gambar telah meningkatkan kualitas gambar, tetapi hasilnya tidak menyerupai foto asli penulis. Sebaliknya, gambar menampilkan pebisnis umum dari Asia Selatan. Mungkin, untuk model yang telah di-fine-tune, sebaiknya kita menghindari penggunaan refiner.

image16.png

Setelah melakukan fine-tuning model SDXL, langkah selanjutnya adalah membangun aplikasi AI Generatif. Untuk inspirasi dalam membuat proyek Anda, lihat blog 5 Projects Built with Generative Models and Open Source Tools.

Kesimpulan

Dalam tutorial ini, kita telah mempelajari model Stable Difusion XL dan teknik DreamBooth. Selain itu, kita juga mempelajari cara melakukan fine-tuning Stable Diffusion XL menggunakan skrip DreamBooth dari AutoTrain Advance untuk pembangkitan gambar yang dipersonalisasi.

Setelah memuat model dasar SDXL, kita melatih adapter LoRA yang ringan hanya dengan lima foto penulis. Lalu, bobot LoRA dilampirkan ke SDXL dasar, memungkinkannya menghasilkan gambar berkualitas tinggi dari penulis dalam berbagai skenario imajiner sambil mempertahankan kapabilitas model multi-miliar parameter penuh.

Meskipun SDXL Refiner meningkatkan kualitas gambar, alat ini paling efektif untuk prompt generik dan tampaknya menimpa sebagian personalisasi yang dicapai melalui fine-tuning. Namun demikian, tutorial ini menunjukkan betapa mudahnya melakukan fine-tuning model SDXL menggunakan AutoTrain Advance hanya dengan beberapa gambar.

Jika Anda baru di dunia AI dan ingin memahami apa yang membuatnya ramai dibicarakan, kami menyarankan untuk mengambil kursus AI Fundamentals. Ini akan membantu Anda mempelajari tentang AI Generatif dan model bahasa yang kompleks. Selain itu, Anda dapat memulai karier di bidang rekayasa AI dengan mengikuti jalur karier Machine Learning Scientist with Python. Program lengkap ini akan membantu Anda mempelajari pemrosesan bahasa alami dan pemrosesan gambar, serta paket machine learning Python populer seperti scikit-learn, PySpark, dan Keras.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sebagai data scientist tersertifikasi, saya bersemangat memanfaatkan teknologi mutakhir untuk menciptakan aplikasi machine learning yang inovatif. Dengan latar belakang kuat di pengenalan ucapan, analisis dan pelaporan data, MLOps, conversational AI, dan NLP, saya mengasah keterampilan dalam mengembangkan sistem cerdas yang berdampak nyata. Selain keahlian teknis, saya juga komunikator andal yang mampu menyederhanakan konsep kompleks menjadi bahasa yang jelas dan ringkas. Karena itu, saya menjadi blogger yang dicari di bidang data science, membagikan wawasan dan pengalaman kepada komunitas profesional data yang terus berkembang. Saat ini, saya berfokus pada pembuatan dan penyuntingan konten, bekerja dengan large language model untuk mengembangkan konten yang kuat dan menarik agar membantu bisnis dan individu memaksimalkan data mereka.

Topik
Kecerdasan Buatan
Machine Learning

Mulai Perjalanan AI Anda Hari Ini!

Program

Dasar-Dasar Kecerdasan Buatan

10 jam
Pelajari dasar-dasar kecerdasan buatan (AI), pelajari cara memanfaatkan AI secara efektif untuk pekerjaan, dan jelajahi model seperti ChatGPT untuk memahami lanskap AI yang dinamis.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

Lihat SelengkapnyaLihat Selengkapnya