Repositori ini berisi skrip pelatihan, pembuatan, dan utilitas untuk Difusi Stabil.
Riwayat Perubahan dipindahkan ke bagian bawah halaman. 更新履歴はページ末尾に移しました。
本語版READMEはこちら
Versi pengembangan ada di cabang dev
. Silakan periksa cabang dev untuk perubahan terbaru.
Dukungan FLUX.1 dan SD3/SD3.5 dilakukan di cabang sd3
. Jika ingin melatihnya silahkan gunakan cabang sd3.
Untuk penggunaan yang lebih mudah (skrip GUI dan PowerShell dll...), silakan kunjungi repositori yang dikelola oleh bmaltais. Terima kasih kepada @bmaltais!
Repositori ini berisi skrip untuk:
File tidak berisi persyaratan untuk PyTorch. Karena versi PyTorch bergantung pada lingkungan, maka versi tersebut tidak disertakan dalam file. Silakan instal PyTorch terlebih dahulu sesuai dengan lingkungannya. Lihat petunjuk pemasangan di bawah.
Skrip diuji dengan Pytorch 2.1.2. 2.0.1 dan 1.12.1 tidak diuji tetapi seharusnya berfungsi.
Sebagian besar dokumen ditulis dalam bahasa Jepang.
Terjemahan bahasa Inggris oleh darkstorm2150 ada di sini. Terima kasih kepada darkstorm2150!
Python 3.10.6 dan Git:
Berikan akses skrip tidak terbatas ke PowerShell agar venv dapat berfungsi:
Set-ExecutionPolicy Unrestricted
dan jawab ABuka terminal Powershell biasa dan ketik yang berikut ini di dalamnya:
git clone https: // github.com / kohya - ss / sd - scripts.git
cd sd - scripts
python - m venv venv
.venvScriptsactivate
pip install torch == 2.1 . 2 torchvision == 0.16 . 2 -- index - url https: // download.pytorch.org / whl / cu118
pip install -- upgrade - r requirements.txt
pip install xformers == 0.0 . 23. post1 -- index - url https: // download.pytorch.org / whl / cu118
accelerate config
Jika python -m venv
hanya menampilkan python
, ubah python
menjadi py
.
Catatan: Sekarang bitsandbytes==0.43.0
, prodigyopt==1.0
dan lion-pytorch==0.0.6
disertakan dalam persyaratan.txt. Jika Anda ingin menggunakan versi lain, silakan instal secara manual.
Instalasi ini untuk CUDA 11.8. Jika Anda menggunakan versi CUDA yang berbeda, harap instal versi PyTorch dan xformers yang sesuai. Misalnya, jika Anda menggunakan CUDA 12, silakan instal pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
dan pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
.
Jawaban untuk mempercepat konfigurasi:
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
Jika Anda ingin menggunakan bf16, harap jawab bf16
pada pertanyaan terakhir.
Catatan: Beberapa laporan pengguna ValueError: fp16 mixed precision requires a GPU
terjadi dalam pelatihan. Dalam hal ini, jawab 0
untuk pertanyaan ke-6: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(GPU tunggal dengan id 0
akan digunakan.)
Ketika rilis baru keluar, Anda dapat mengupgrade repo Anda dengan perintah berikut:
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
Setelah perintah berhasil diselesaikan, Anda harus siap menggunakan versi baru.
Jika Anda ingin mengupgrade PyTorch, Anda dapat mengupgradenya dengan perintah pip install
di bagian Instalasi Windows. xformers
juga perlu diupgrade saat PyTorch diupgrade.
Implementasi LoRA didasarkan pada repo cloneofsimo. Terima kasih atas kerja bagusnya!
Ekspansi LoRA ke Conv2d 3x3 awalnya dirilis oleh cloneofsimo dan efektivitasnya ditunjukkan di LoCon oleh KohakuBlueleaf. Terima kasih banyak Kohaku Blueleaf!
Mayoritas skrip dilisensikan di bawah ASL 2.0 (termasuk kode dari Diffusers, cloneofsimo, dan LoCon), namun sebagian dari proyek tersedia di bawah persyaratan lisensi terpisah:
Perhatian Hemat Memori Pytorch: MIT
bitsandbyte: MIT
BLIP: Klausul BSD-3
svd_merge_lora.py
penggunaan VRAM telah dikurangi. Namun, penggunaan memori utama akan meningkat (cukup 32GB).svd_merge_lora.py
のVRAM使用量を削減しました。ただし、メインメモリの使用量は増加します(32GBあれば十分です)。 Memperbaiki bug di svd_merge_lora.py
, sdxl_merge_lora.py
, dan resize_lora.py
di mana nilai hash metadata LoRA tidak dihitung dengan benar ketika save_precision
berbeda dari precision
yang digunakan dalam perhitungan. Lihat edisi #1722 untuk detailnya. Terima kasih kepada JujoHotaru yang telah mengangkat masalah ini.
Ini akan disertakan dalam rilis berikutnya.
svd_merge_lora.py
、 sdxl_merge_lora.py
、 resize_lora.py
で、保存時の精度が計算時の精度と異なる場合、LoRAメタデータのハedisi #1722 をご覧ください。問題提起していただいた JujoHotaru 氏に感謝します。
Bagaimana cara kerjanya?
sdxl_merge_lora.py
sekarang mendukung OFT. Terima kasih kepada Maru-mee untuk PR #1580.
svd_merge_lora.py
sekarang mendukung BBLR. Terima kasih kepada terracottahaniwa. Lihat PR #1575 untuk detailnya.
sdxl_merge_lora.py
juga mendukung BBLR.
Lihat Berat Blok LoRA oleh hako-mikan untuk detail tentang BBLR.
Ini akan disertakan dalam rilis berikutnya.
sdxl_merge_lora.py
が OFT をサポートされました。PR #1580 Maru-mee 氏に感謝します。
svd_merge_lora.py
で BBLR がサポートされました。PR #1575 terracottahaniwa 氏に感謝します。
sdxl_merge_lora.py
でも BBLR がサポートされました。
BBLR の詳細は hako-mikan 氏の LoRA Block Weight をご覧ください。
Bagaimana cara kerjanya?
Memperbaiki cache_latents.py
dan cache_text_encoder_outputs.py
tidak berfungsi. (Akan disertakan dalam rilis berikutnya.)
cache_latents.py
cache_text_encoder_outputs.py
動作しなくなっていたのを修正しました。(次回リリースに含まれます。)
Nilai default huber_schedule
pada Scheduled Huber Loss diubah dari exponential
menjadi snr
, yang diharapkan dapat memberikan hasil yang lebih baik.
snr
exponential
huber_schedule
imagesize
yang baru ditambahkan, jadi jika Anda tidak dapat segera memperbarui perpustakaan, silakan instal dengan pip install imagesize==1.4.1
secara terpisah.bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
disertakan dalam persyaratan.txt.bitsandbytes
tidak lagi memerlukan prosedur yang rumit karena sekarang secara resmi mendukung Windows..toml
). Terima kasih kepada bghira karena telah mengangkat masalah ini.--console_log_simple
dalam skrip pelatihan untuk menonaktifkan logging kaya.train_network.py
dan sdxl_train_network.py
dimodifikasi untuk mencatat beberapa pengaturan kumpulan data dalam metadata model yang dilatih ( caption_prefix
, caption_suffix
, keep_tokens_separator
, secondary_separator
, enable_wildcard
).train_network.py
dan sdxl_train_network.py
. Penyimpanan dan pemuatan status lebih cepat, ukuran file lebih kecil, dan penggunaan memori saat memuat berkurang.--noise_offset_random_strength
dan --ip_noise_gamma_random_strength
ditambahkan ke setiap skrip pelatihan. Opsi ini dapat digunakan untuk memvariasikan noise offset dan ip noise gamma dalam kisaran 0 hingga nilai yang ditentukan. PR #1177 Terima kasih kepada KohakuBlueleaf!--save_state_on_train_end
ditambahkan ke setiap skrip pelatihan. PR #1168 Terima kasih kepada gesen2egee!--sample_every_n_epochs
dan --sample_every_n_steps
di setiap skrip pelatihan sekarang menampilkan peringatan dan mengabaikannya ketika angka yang ditentukan kurang dari atau sama dengan 0
. Terima kasih kepada S-Del yang telah mengangkat masalah ini. .toml
untuk konfigurasi himpunan data sekarang dibaca dalam pengkodean UTF-8. PR #1167 Terima kasih kepada Horizon1704!secondary_separator
ditambahkan untuk menentukan pemisah tag yang bukan target pengacakan atau pelepasan.secondary_separator=";;;"
. Saat Anda menentukan secondary_separator
, bagian tersebut tidak diacak atau dihilangkan.enable_wildcard
ditambahkan. Jika disetel ke true
, notasi karakter pengganti {aaa|bbb|ccc}
dapat digunakan. Teks multi-baris juga diaktifkan.keep_tokens_separator
diperbarui untuk digunakan dua kali dalam keterangan. Saat Anda menentukan keep_tokens_separator="|||"
, bagian dibagi |||
kedua tidak dikocok atau dijatuhkan dan tetap berada di akhir.caption_prefix
dan caption_suffix
dapat digunakan secara bersamaan. caption_prefix
dan caption_suffix
diproses terlebih dahulu, lalu enable_wildcard
, keep_tokens_separator
, shuffling and drop, dan secondary_separator
diproses secara berurutan.tag_image_by_wd14_tagger.py
( opsi --onnx
saja). PR #1192 Terima kasih kepada sdbds!pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
dll. Silakan periksa juga komentar di requirements.txt
.--repo_id
di tag_image_by_wd14_tagger.py
. Ini menyimpan beberapa model repo_id dalam cache. Harap hapus file yang tidak diperlukan di bawah --model_dir
.tag_image_by_wd14_tagger.py
.--use_rating_tags
dan --use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
--beam_search
dan nilai 2 atau lebih untuk --num_beams
di make_captions.py
. Kerugian yang terselubung didukung di setiap skrip pelatihan. Untuk mengaktifkan kerugian yang disamarkan, tentukan opsi --masked_loss
.
Fitur ini belum sepenuhnya diuji, jadi mungkin ada bug. Jika Anda menemukan masalah apa pun, silakan buka Masalah.
Kumpulan data ControlNet digunakan untuk menentukan topeng. Gambar topeng harus berupa gambar RGB. Nilai piksel 255 di saluran R diperlakukan sebagai masker (kerugian dihitung hanya untuk piksel dengan masker), dan 0 diperlakukan sebagai non-mask. Nilai piksel 0-255 dikonversi menjadi 0-1 (yaitu, nilai piksel 128 diperlakukan sebagai setengah bobot kerugian). Lihat detail spesifikasi kumpulan data di dokumentasi LLLite.
Kerugian Huber Terjadwal telah diperkenalkan ke setiap skrip pelatihan. Ini adalah metode untuk meningkatkan ketahanan terhadap outlier atau anomali (kerusakan data) pada data pelatihan.
Dengan fungsi kerugian MSE (L2) tradisional, dampak outlier bisa menjadi signifikan, dan berpotensi menyebabkan penurunan kualitas gambar yang dihasilkan. Di sisi lain, meskipun fungsi kerugian Huber dapat menekan pengaruh outlier, fungsi ini cenderung mengganggu reproduksi detail halus dalam gambar.
Untuk mengatasi hal ini, metode yang diusulkan menggunakan aplikasi cerdas dari fungsi kerugian Huber. Dengan menjadwalkan penggunaan kerugian Huber pada tahap awal pelatihan (saat kebisingan tinggi) dan MSE pada tahap selanjutnya, hal ini menghasilkan keseimbangan antara ketahanan outlier dan reproduksi detail yang halus.
Hasil eksperimen telah mengkonfirmasi bahwa metode ini mencapai akurasi yang lebih tinggi pada data yang mengandung outlier dibandingkan dengan kerugian Huber atau MSE murni. Peningkatan biaya komputasi minimal.
Argumen yang baru ditambahkan loss_type, huber_schedule, dan huber_c memungkinkan pemilihan jenis fungsi kerugian (Huber, smooth L1, MSE), metode penjadwalan (eksponensial, konstan, SNR), dan parameter Huber. Hal ini memungkinkan pengoptimalan berdasarkan karakteristik kumpulan data.
Lihat PR #1228 untuk detailnya.
loss_type
: Tentukan jenis fungsi kerugian. Pilih huber
untuk kerugian Huber, smooth_l1
untuk kerugian L1 mulus, dan l2
untuk kerugian MSE. Standarnya adalah l2
, yang sama seperti sebelumnya.huber_schedule
: Tentukan metode penjadwalan. Pilih exponential
, constant
, atau snr
. Standarnya adalah snr
.huber_c
: Tentukan parameter Huber. Standarnya adalah 0.1
.Silakan baca Rilis untuk pembaruan terkini.
pip install imagesize==1.4.1
imagesize
個別にインストールしてください。bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
が persyaratan.txt に含まれるようになりました。bitsandbytes
が公式に Windows をサポートしたため複雑な手順が不要になりました。.toml
)への記載をお勧めします。問題提起していただいた bghira 氏に感謝します。--console_log_simple
ロギングを無効してお試しください。train_network.py
よびsdxl_train_network.py
で、学習したモデルのメタデータに一部のデータセット設定が記録されるよう修正しました( caption_prefix
、 caption_suffix
、 keep_tokens_separator
、 secondary_separator
、 enable_wildcard
)。train_network.py
およびsdxl_train_network.py
で、state に U-Net および Text Encoder が含まれる不具合を修正しました。state の保存、読み込Layanan Pelanggan削減されます。--noise_offset_random_strength
kekuatanおよび--ip_noise_gamma_random_strength
が追加されました。 PR #1177 KohakuBlueleaf 氏に感謝します。--save_state_on_train_end
オプションが追加されました。 PR #116 8 gesen2egee 氏に感謝します。--sample_every_n_epochs
および--sample_every_n_steps
オプションに0
以下の数値を指定した時、警告S-Del 氏に感謝します。 .toml
ファイルが UTF-8 coding で読み込まれるようになりました。PR #1167 Horizon1704 氏に感謝します。secondary_separator
secondary_separator=";;;"
のようにsecondary_separator
.enable_wildcard
. true
{aaa|bbb|ccc}
ンも有効になります。keep_tokens_separator
をキャプション内に 2 lalu keep_tokens_separator="|||"
と指定したとき、 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
とキャプションを指定すると、二番目の|||
で分割された部分はシャッフル、drop されず末尾に残ります。caption_prefix
とcaption_suffix
caption_suffix
一番最初に処理され、その後、ワイcaption_prefix
ドカード、 keep_tokens_separator
、シャッフルおよび drop、 secondary_separator
の順に処理されます。tag_image_by_wd14_tagger.py
で v3 のリポジトリがサポートされました( --onnx
指定時のみ有効)。 PR #1192 sdbds 氏に感謝します。pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
requirements.txt
のコメントもあわせてご確認ください。tag_image_by_wd14_tagger.py
で、モデルを--repo_id
のサブディレクトリに保存するようにしました。これにより--model_dir
直下の不要なファイルは削除願います。tag_image_by_wd14_tagger.py
にいくつかのオプションを追加しました。--use_rating_tags
および--use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
make_captions.py
で--beam_search
を指定し--num_beams
に2以上の値を指定した時のエラーを修正しました。 --masked_loss
オプションを指定してください。
Edisi を立てていただけると助かります。
Kontrol Jaringan Kontrol RGB 。R チャンネルのピクセル値 255 がロス計算対象、0 がロス計算対象外になります。0-255 の値は、0-1 の範囲に変換されます(つまりピクセル値 128 の部分はロスの重みが半分になります)。データセットの詳細は LLLite ドキュメント をご覧ください。
kerusakan data)への耐性を高めるための手法、Terjadwal Kerugian Huber
従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招Huber adalah salah satu perusahaan yang paling berpengaruh di dunia.細部再現性が損なわれがちでした。
この手法ではHuber損失関数の適用を工夫し、学習の初期段階(ノイズが大きい場合)ではHuber損失を、後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります。
Huber adalah perusahaan yang bertanggung jawab atas layanan yang diberikan oleh Huber. 。また計算コストの増加はわずかです。
具体的には、新たに追加された引数loss_type、huber_schedule、huber_cで、損失関数の種類(Huber, smooth L1, MSE)とスケジューリング方法(eksponensial, konstan, SNR)を選択できます。これによりデータセットに応じた最適化が可能になります。
詳細は PR #1228 をご覧ください。
loss_type
: huber
で Huber損失、 smooth_l1
で smooth L1 損失、 l2
で MSE 損失を選択します。デフォルトはl2
で、従来と同様です。huber_schedule
: スケジューリング方法を指定します。 exponential
で指数関数的、 constant
で一定、 snr
で信号対雑音比に基づくスケジューリングを選択します。デフォルトはsnr
です。huber_c
: Huber損失のパラメータを指定します。デフォルトは0.1
です。 PR --loss_type smooth_l1 --huber_schedule snr --huber_c 0.1
などで試してみるとよいかもしれません。
最近の更新情報は Rilis をご覧ください。
LoRA yang didukung oleh train_network.py
diberi nama untuk menghindari kebingungan. Dokumentasi telah diperbarui. Berikut ini adalah nama-nama tipe LoRA yang ada pada repositori ini.
LoRA-LierLa : (LoRA untuk Lapisan Linier )
LoRA untuk lapisan Linear dan lapisan Konv2d dengan kernel 1x1
LoRA -C3Lier : (LoRA untuk lapisan Kolusional dengan lapisan Kernel dan Linier 3 x3)
Selain 1., LoRA untuk lapisan Konv2d dengan kernel 3x3
LoRA-LierLa adalah tipe LoRA default untuk train_network.py
(tanpa argumen jaringan conv_dim
).
File prompt mungkin terlihat seperti ini, misalnya
# prompt 1
masterpiece, best quality, (1girl), in white shirts, upper body, looking at viewer, simple background --n low quality, worst quality, bad anatomy,bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28
# prompt 2
masterpiece, best quality, 1boy, in business suit, standing at street, looking back --n (low quality, worst quality), bad anatomy,bad composition, poor, low effort --w 576 --h 832 --d 2 --l 5.5 --s 40
Baris yang dimulai dengan #
adalah komentar. Anda dapat menentukan opsi untuk gambar yang dihasilkan dengan opsi seperti --n
setelah perintah. Berikut ini dapat digunakan.
--n
Prompt negatif hingga opsi berikutnya.--w
Menentukan lebar gambar yang dihasilkan.--h
Menentukan tinggi gambar yang dihasilkan.--d
Menentukan benih gambar yang dihasilkan.--l
Menentukan skala CFG dari gambar yang dihasilkan.--s
Menentukan jumlah langkah dalam generasi. Pembobotan cepat seperti ( )
dan [ ]
berfungsi.