Repositori ini menyediakan kode untuk menyempurnakan difusi stabil di keras. Itu diadaptasi dari naskah ini dengan memeluk wajah. Model pra-terlatih yang digunakan untuk fine-tuning berasal dari Kerascv. Untuk mengetahui tentang model asli, lihat dokumentasi ini.
Kode yang disediakan dalam repositori ini hanya untuk tujuan penelitian . Silakan periksa bagian ini untuk mengetahui lebih lanjut tentang potensi kasus dan batasan penggunaan.
Dengan memuat model ini, Anda menerima lisensi Rail-M CreativeMl di https://raw.githubusercontent.com/compvis/stable-diffusion/main/license.
Jika Anda hanya mencari sumber daya yang menyertainya dari repositori ini, berikut adalah tautannya:
Daftar isi :
Repositori ini memiliki repositori Sister (keras-sd-serving) yang mencakup berbagai pola penyebaran untuk difusi yang stabil.
UPDATE 13 Januari 2023 : Proyek ini mengamankan tempat ke-2 di Kompetisi Hadiah Komunitas Keras pertama yang diselenggarakan oleh Google.
Mengikuti skrip asli dari wajah memeluk, repositori ini juga menggunakan dataset Pokemon. Tapi itu diregenerasi untuk bekerja lebih baik dengan tf.data . Versi yang diregenerasi dari dataset di -host di sini. Lihat tautan itu untuk detail lebih lanjut.
Kode penyesuaian disediakan di finetune.py . Sebelum menjalankan pelatihan, pastikan Anda memiliki dependensi (lihat requirements.txt ) diinstal.
Anda dapat meluncurkan pelatihan dengan argumen default dengan menjalankan python finetune.py . Jalankan python finetune.py -h untuk mengetahui tentang argumen baris perintah yang didukung. Anda dapat mengaktifkan pelatihan presisi campuran dengan melewati bendera --mp .
Saat Anda meluncurkan pelatihan, pos pemeriksaan model difusi akan dihasilkan-dari-bijaksana hanya jika kerugian saat ini lebih rendah dari yang sebelumnya.
Untuk menghindari pelatihan OOM dan lebih cepat, setidaknya ada GPU V100. Kami menggunakan A100.
Beberapa detail penting untuk dicatat :
Detail Pelatihan :
Kami menyempurnakan model pada dua resolusi yang berbeda: 256x256 dan 512x512. Kami hanya memvariasikan ukuran batch dan jumlah zaman untuk disempurnakan dengan dua resolusi yang berbeda ini. Karena kami tidak menggunakan akumulasi gradien, kami menggunakan cuplikan kode ini untuk memperoleh jumlah zaman.
python finetune.py --batch_size 4 --num_epochs 577python finetune.py --img_height 512 --img_width 512 --batch_size 1 --num_epochs 72 --mpUntuk resolusi 256x256, kami sengaja mengurangi jumlah zaman untuk menghemat waktu komputasi.
Bobot yang disempurnakan :
Anda dapat menemukan bobot model difusi yang disempurnakan di sini.
Dataset Pokemon default yang digunakan dalam repositori ini hadir dengan struktur berikut:
pokemon_dataset/
data.csv
image_24.png
image_3.png
image_550.png
image_700.png
... data.csv terlihat seperti:
Selama dataset khusus Anda mengikuti struktur ini, Anda tidak perlu mengubah apa pun di basis kode saat ini kecuali untuk dataset_archive .
Jika dataset Anda memiliki beberapa teks per gambar, Anda dapat secara acak memilih satu dari kumpulan teks per gambar selama pelatihan.
Berdasarkan dataset, Anda mungkin harus menyetel hyperparameters.
import keras_cv
import matplotlib . pyplot as plt
from tensorflow import keras
IMG_HEIGHT = IMG_WIDTH = 512
def plot_images ( images , title ):
plt . figure ( figsize = ( 20 , 20 ))
for i in range ( len ( images )):
ax = plt . subplot ( 1 , len ( images ), i + 1 )
plt . title ( title )
plt . imshow ( images [ i ])
plt . axis ( "off" )
# We just have to load the fine-tuned weights into the diffusion model.
weights_path = keras . utils . get_file (
origin = "https://huggingface.co/sayakpaul/kerascv_sd_pokemon_finetuned/resolve/main/ckpt_epochs_72_res_512_mp_True.h5"
)
pokemon_model = keras_cv . models . StableDiffusion (
img_height = IMG_HEIGHT , img_width = IMG_WIDTH
)
pokemon_model . diffusion_model . load_weights ( weights_path )
# Generate images.
generated_images = pokemon_model . text_to_image ( "Yoda" , batch_size = 3 )
plot_images ( generated_images , "Fine-tuned on the Pokemon dataset" ) Anda dapat membawa weights_path Anda (harus kompatibel dengan diffusion_model ) dan menggunakan kembali cuplikan kode.
Lihat buku catatan Colab ini untuk dimainkan dengan kode inferensi.
Awalnya, kami menyempurnakan model pada resolusi 256x256. Berikut adalah beberapa hasil bersama dengan perbandingan dengan hasil model asli.
| Gambar | Meminta |
|---|---|
| Yoda | |
| Kucing robot dengan sayap | |
| Hello Kitty |
Kita dapat melihat bahwa model fine-tuned memiliki output yang lebih stabil daripada model asli. Meskipun hasilnya dapat ditingkatkan secara estetis lebih banyak, efek fine-tuning terlihat. Kami juga mengikuti hyperparameter yang sama dari skrip memeluk Face untuk resolusi 256x256 (terlepas dari jumlah zaman dan ukuran batch). Dengan hiperparameter yang lebih baik, hasilnya kemungkinan akan membaik.
Untuk resolusi 512x512, kami mengamati sesuatu yang serupa. Jadi, kami bereksperimen dengan parameter unconditional_guidance_scale dan memperhatikan bahwa ketika diatur ke 40 (sambil menjaga argumen lain tetap), hasilnya keluar lebih baik.
| Gambar | Meminta |
|---|---|
| Yoda | |
| Kucing robot dengan sayap | |
| Hello Kitty |
Catatan : Fine-tuning pada 512x512 masih berlangsung pada tulisan ini. Tetapi butuh banyak waktu untuk menyelesaikan zaman tunggal tanpa adanya pelatihan terdistribusi dan akumulasi gradien. Hasil di atas berasal dari pos pemeriksaan yang diturunkan setelah zaman ke -60.
Dengan resep yang sama (tetapi dilatih untuk langkah yang lebih optimisasi), Lambda Labs menunjukkan hasil yang luar biasa.