Repositori ini menyediakan implementasi DreamBooth menggunakan KerasCV dan TensorFlow. Implementasinya banyak mengacu pada contoh diffusers
Hugging Face.
DreamBooth adalah cara cepat mengajarkan (menyempurnakan) Difusi Stabil tentang konsep visual baru. Untuk lebih jelasnya, lihat dokumen ini.
Kode yang disediakan dalam repositori ini hanya untuk tujuan penelitian . Silakan periksa bagian ini untuk mengetahui lebih banyak tentang potensi kasus penggunaan dan batasannya.
Dengan memuat model ini, Anda menerima lisensi CreativeML Open RAIL-M di https://raw.githubusercontent.com/CompVis/stable-diffusion/main/LICENSE.
Jika Anda hanya mencari sumber daya yang menyertai repositori ini, berikut tautannya:
Pembaruan 15/02/2023 : Terima kasih kepada Soumik Rakshit; kami sekarang memiliki utilitas yang lebih baik untuk mendukung Bobot dan Bias (lihat #22).
Instal prasyarat: pip install -r requirements.txt
.
Pertama-tama Anda harus memilih kelas yang ditambahkan pengidentifikasi unik. Basis kode repositori ini diuji menggunakan sks
sebagai pengenal unik dan dog
sebagai kelasnya.
Kemudian dua jenis prompt dihasilkan:
(a) perintah instance : f"foto {self.unique_id} {self.class_category}" (b) perintah kelas : f"foto {self.class_category}"
Gambar contoh
Dapatkan beberapa gambar (3 - 10) yang mewakili konsep yang akan disempurnakan oleh model. Gambar-gambar ini akan dikaitkan dengan instance_prompt
. Gambar-gambar ini disebut sebagai instance_images
dari basis kode. Arsipkan gambar-gambar ini dan simpan di suatu tempat online sehingga arsip dapat diunduh menggunakan fungsi tf.keras.utils.get_file()
secara internal.
Gambar kelas
DreamBooth menggunakan kehilangan preservasi untuk mengatur pelatihan. Singkat cerita, hilangnya pelestarian sebelumnya membantu model untuk secara perlahan beradaptasi dengan konsep baru yang sedang dipertimbangkan berdasarkan pengetahuan sebelumnya yang mungkin dimiliki tentang konsep tersebut. Untuk menggunakan kehilangan pelestarian sebelumnya, kita memerlukan prompt kelas seperti yang ditunjukkan di atas. Prompt kelas digunakan untuk menghasilkan sejumlah gambar yang telah ditentukan sebelumnya yang digunakan untuk menghitung kerugian akhir yang digunakan untuk pelatihan DreamBooth.
Berdasarkan sumber ini, 200 - 300 gambar yang dihasilkan menggunakan class prompt berfungsi dengan baik untuk sebagian besar kasus.
Jadi, setelah Anda memutuskan instance_prompt
dan class_prompt
, gunakan Notebook Colab ini untuk menghasilkan beberapa gambar yang akan digunakan untuk pelatihan dengan kehilangan pelestarian sebelumnya. Kemudian arsipkan gambar yang dihasilkan sebagai arsip tunggal dan host secara online sehingga dapat diunduh menggunakan fungsi tf.keras.utils.get_file()
secara internal. Dalam basis kode, kami cukup menyebut gambar ini sebagai class_images
.
Pelatihan DreamBooth dapat dilakukan TANPA menggunakan kehilangan preservasi sebelumnya. Repositori ini selalu menggunakannya. Agar orang dapat menguji basis kode ini dengan mudah, kami menghosting gambar instance dan kelas di sini.
Luncurkan pelatihan! Ada sejumlah hyperparameter yang bisa Anda mainkan. Lihat skrip train_dreambooth.py
untuk mengetahui lebih banyak tentangnya. Berikut adalah perintah yang meluncurkan pelatihan dengan presisi campuran dan nilai default lainnya:
python train_dreambooth.py --mp
Anda juga dapat menyempurnakan encoder teks dengan menentukan opsi --train_text_encoder
.
Selain itu, skrip mendukung integrasi dengan Bobot dan Bias ( wandb
). Jika Anda menentukan --log_wandb
,
wandb
Anda menggunakan panggilan balik WandbMetricsLogger
.wandb
Anda sebagai artefak untuk pembuatan versi model. Hal ini dilakukan menggunakan DreamBoothCheckpointCallback
yang dibuat menggunakan callback WandbModelCheckpoint
.wandb.Table
. Tabel di dasbor wandb
Anda. Hal ini dilakukan dengan menggunakan QualitativeValidationCallback
, yang juga mencatat gambar yang dihasilkan ke dalam panel media di dasbor wandb
Anda di akhir pelatihan.Berikut adalah perintah yang meluncurkan pelatihan dan mencatat metrik pelatihan serta menghasilkan gambar ke ruang kerja Bobot & Bias Anda:
python train_dreambooth.py
--log_wandb
--validation_prompts
" a photo of sks dog with a cat "
" a photo of sks dog riding a bicycle "
" a photo of sks dog peeing "
" a photo of sks dog playing cricket "
" a photo of sks dog as an astronaut "
Berikut ini contoh proses wandb
di mana Anda dapat menemukan gambar yang dihasilkan serta pos pemeriksaan model.
Kami telah menguji implementasi kami dalam dua metode berbeda: (a) menyempurnakan model difusi (UNet) saja, (b) menyempurnakan model difusi bersama dengan pembuat enkode teks. Eksperimen dilakukan pada berbagai hyperparameter untuk learning rate
dan training steps
selama pelatihan dan untuk number of steps
dan unconditional guidance scale
(ugs) selama inferensi. Namun hanya hasil yang paling menonjol (dari sudut pandang kami) yang disertakan di sini. Jika Anda penasaran tentang pengaruh berbagai hyperparameter terhadap kualitas gambar yang dihasilkan, temukan tautan ke laporan lengkap di setiap bagian.
Perhatikan bahwa eksperimen kami dipandu oleh postingan blog dari Hugging Face ini.
Berikut adalah beberapa hasil terpilih dari berbagai percobaan yang kami lakukan. Log eksperimental kami untuk pengaturan ini tersedia di sini. Gambar visualisasi lainnya (dihasilkan dengan pos pemeriksaan dari eksperimen ini) tersedia di sini.
Gambar | Tangga | UGS | Pengaturan |
---|---|---|---|
50 | 30 | LR: 1e-6 Langkah pelatihan: 800 (Berat) | |
25 | 15 | LR: 1e-6 Langkah pelatihan: 1000 (Berat) | |
75 | 15 | LR: 3e-6 Langkah pelatihan: 1200 (Berat) |
Gambar | Tangga | jelek |
---|---|---|
75 | 15 | |
75 | 30 |
dengan kecepatan pembelajaran=9e-06, langkah kereta maks=200 (bobot | laporan)
Gambar | Tangga | jelek |
---|---|---|
150 | 15 | |
75 | 30 |
dengan kecepatan pembelajaran=9e-06, langkah latihan maks=200 (kumpulan data | laporan)
Perpustakaan diffusers
menyediakan peralatan canggih untuk bereksperimen dengan model Difusi yang berbeda, termasuk Difusi Stabil. Ini mencakup berbagai teknik pengoptimalan yang dapat dimanfaatkan untuk melakukan inferensi yang efisien dengan diffusers
saat menggunakan pos pemeriksaan Difusi Stabil yang besar. Salah satu fitur yang sangat menguntungkan yang dimiliki diffusers
adalah dukungannya untuk penjadwal berbeda yang dapat dikonfigurasi selama runtime dan dapat diintegrasikan ke dalam model Difusi apa pun yang kompatibel.
Setelah Anda mendapatkan pos pemeriksaan DreamBooth yang disempurnakan menggunakan basis kode ini, Anda sebenarnya dapat mengekspornya ke StableDiffusionPipeline
yang praktis dan menggunakannya langsung dari perpustakaan diffusers
.
Pertimbangkan repositori ini: chansung/dreambooth-dog. Anda dapat menggunakan pos pemeriksaan repositori ini di StableDiffusionPipeline
setelah menjalankan beberapa langkah kecil:
from diffusers import StableDiffusionPipeline
# checkpoint of the converted Stable Diffusion from KerasCV
model_ckpt = "sayakpaul/text-unet-dogs-kerascv_sd_diffusers_pipeline"
pipeline = StableDiffusionPipeline . from_pretrained ( model_ckpt )
pipeline . to ( "cuda" )
unique_id = "sks"
class_label = "dog"
prompt = f"A photo of { unique_id } { class_label } in a bucket"
image = pipeline ( prompt , num_inference_steps = 50 ). images [ 0 ]
Ikuti panduan ini untuk mengetahui lebih banyak.
Kami telah mengubah pos pemeriksaan yang disempurnakan untuk gambar anjing menjadi StableDiffusionPipeline yang kompatibel dengan Diffuser dan menjalankan berbagai eksperimen dengan pengaturan penjadwal yang berbeda. Misalnya, parameter DDIMScheduler
berikut diuji pada kumpulan guidance_scale
dan num_inference_steps
yang berbeda.
num_inference_steps_list = [ 25 , 50 , 75 , 100 ]
guidance_scale_list = [ 7.5 , 15 , 30 ]
scheduler_configs = {
"DDIMScheduler" : {
"beta_value" : [
[ 0.000001 , 0.02 ],
[ 0.000005 , 0.02 ],
[ 0.00001 , 0.02 ],
[ 0.00005 , 0.02 ],
[ 0.0001 , 0.02 ],
[ 0.0005 , 0.02 ]
],
"beta_schedule" : [
"linear" ,
"scaled_linear" ,
"squaredcos_cap_v2"
],
"clip_sample" : [ True , False ],
"set_alpha_to_one" : [ True , False ],
"prediction_type" : [
"epsilon" ,
"sample" ,
"v_prediction"
]
}
}
Di bawah ini adalah perbandingan antara nilai parameter beta_schedule
yang berbeda sementara nilai lainnya ditetapkan ke nilai defaultnya. Lihatlah laporan asli yang menyertakan hasil dari penjadwal lain seperti PNDMScheduler
dan LMSDiscreteScheduler
.
Sering kali diamati bahwa pengaturan default menjamin menghasilkan gambar dengan kualitas lebih baik. Misalnya, nilai default guidance_scale
dan beta_schedule
diatur ke 7.5 dan linear
. Namun, ketika guidance_scale
diatur ke 7,5, scaled_linear
dari beta_schedule
tampaknya berfungsi lebih baik. Atau, ketika beta_schedule
disetel ke linear
, guidance_scale
yang lebih tinggi tampaknya berfungsi lebih baik.
Kami menjalankan 4.800 eksperimen yang menghasilkan total 38.400 gambar. Eksperimen tersebut dicatat dalam Bobot dan Bias. Jika Anda penasaran, periksa di sini serta skrip yang digunakan untuk menjalankan eksperimen.
Selain tips dan trik yang dibagikan dalam postingan blog ini, kami mengikuti hal-hal berikut saat mempersiapkan contoh untuk melakukan pelatihan DreamBooth pada wajah manusia:
Terima kasih kepada Abhishek Thakur karena telah berbagi tips ini.