Этот репозиторий содержит сценарии обучения, генерации и утилиты для Stable Diffusion.
История изменений перемещена в конец страницы. 更新履歴はページ末尾に移しました。
日本語版READMEはこちら
Версия для разработки находится в ветке dev
. Пожалуйста, проверьте ветку разработки на наличие последних изменений.
Поддержка FLUX.1 и SD3/SD3.5 осуществляется в ветке sd3
. Если вы хотите их обучить, используйте ветку sd3.
Для более простого использования (графический интерфейс пользователя, сценарии PowerShell и т. д.) посетите репозиторий, поддерживаемый bmaltais. Спасибо @bmaltais!
Этот репозиторий содержит скрипты для:
Файл не содержит требований для PyTorch. Поскольку версия PyTorch зависит от среды, она не включена в файл. Пожалуйста, сначала установите PyTorch в соответствии с средой. См. инструкции по установке ниже.
Скрипты протестированы с помощью Pytorch 2.1.2. 2.0.1 и 1.12.1 не проверялись, но должны работать.
Большая часть документов написана на японском языке.
Английский перевод от darkstorm2150 находится здесь. Спасибо darkstorm2150!
Python 3.10.6 и Git:
Предоставьте неограниченный доступ сценариям к PowerShell, чтобы venv мог работать:
Set-ExecutionPolicy Unrestricted
и ответьте A.Откройте обычный терминал Powershell и введите в него следующее:
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
Если python -m venv
показывает только python
, измените python
на py
.
Примечание. Теперь в файл require.txt включены bitsandbytes==0.43.0
, prodigyopt==1.0
и lion-pytorch==0.0.6
. Если вы хотите использовать другую версию, установите ее вручную.
Эта установка предназначена для CUDA 11.8. Если вы используете другую версию CUDA, установите соответствующую версию PyTorch и xformers. Например, если вы используете CUDA 12, установите pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
и pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
.
Ответы для ускорения конфига:
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
Если вы хотите использовать bf16, ответьте bf16
на последний вопрос.
Примечание. Некоторые пользовательские отчеты ValueError: fp16 mixed precision requires a GPU
. В этом случае ответьте 0
на 6-й вопрос: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(Будет использоваться один графический процессор с идентификатором 0
)
Когда выйдет новая версия, вы можете обновить свой репозиторий с помощью следующей команды:
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
После успешного выполнения команд вы будете готовы к использованию новой версии.
Если вы хотите обновить PyTorch, вы можете обновить его с помощью команды pip install
в разделе «Установка Windows». xformers
также необходимо обновить при обновлении PyTorch.
Реализация LoRA основана на репозитории cloneofsimo. Спасибо за отличную работу!
Расширение LoRA для Conv2d 3x3 было первоначально выпущено cloneofsimo, а его эффективность была продемонстрирована на LoCon компанией KohakuBlueleaf. Огромное спасибо, KohakuBlueleaf!
Большинство скриптов лицензируется под ASL 2.0 (включая коды от Diffusers, cloneofsimo's и LoCon), однако части проекта доступны по отдельным условиям лицензии:
Эффективное использование памяти. Pytorch: Массачусетский технологический институт.
биты и байты: Массачусетский технологический институт
BLIP: пункт BSD-3
svd_merge_lora.py
Использование VRAM было уменьшено. Однако использование основной памяти увеличится (достаточно 32 ГБ).svd_merge_lora.py
のVRAM 用量を削減しました。ただし、メインメモリの使用量は増加します(32 ГБあれば十分です)。 Исправлена ошибка в svd_merge_lora.py
, sdxl_merge_lora.py
и resize_lora.py
, из-за которой хэш-значение метаданных LoRA вычислялось неправильно, если save_precision
отличалась от precision
использованной при расчете. Подробности см. в выпуске № 1722. Спасибо ДжуджоХотару за поднятый вопрос.
Он будет включен в следующий выпуск.
svd_merge_lora.py
、 sdxl_merge_lora.py
、 resize_lora.py
で、保存時の精度が計算時の精度と異なる場合、L oRAメタデータのハッシュ値が正しく計算されない不具合を修正しました。詳細はвыпуск № 1722 をご覧ください。問題提起していただいた ДжуджоХотару 氏に感謝します。
以上は次回リリースに含まれます。
sdxl_merge_lora.py
теперь поддерживает OFT. Спасибо Мару-ми за PR №1580.
svd_merge_lora.py
теперь поддерживает LBW. Спасибо terracottahaniwa. Подробности см. в PR № 1575.
sdxl_merge_lora.py
также поддерживает LBW.
Подробную информацию о LBW см. в разделе «Вес блока LoRA» от hako-mikan.
Они будут включены в следующий выпуск.
sdxl_merge_lora.py
が OFT をサポートされました。PR #1580 Мару-ми 氏に感謝します。
svd_merge_lora.py
で LBW がサポートされました。PR #1575 terracottahaniwa 氏に感謝します。
sdxl_merge_lora.py
でも LBW がサポートされました。
LBW の詳細は hako-mikan 氏の LoRA Block Weight をご覧ください。
以上は次回リリースに含まれます。
Исправлены неработающие cache_latents.py
и cache_text_encoder_outputs.py
. (Будет включено в следующий выпуск.)
cache_latents.py
およびcache_text_encoder_outputs.py
が動作しなくなっていたのを修正しました。(次回リリースに含まれます。)
Значение по умолчанию huber_schedule
в Scheduled Huber Loss изменено с exponential
на snr
, что, как ожидается, даст лучшие результаты.
Запланированные потери Хубера のhuber_schedule
のデフォルト値をexponential
から、より良い結果が期待できるsnr
に変更しました。
imagesize
, поэтому, если вы не можете обновить библиотеки немедленно, установите его с помощью pip install imagesize==1.4.1
отдельно.bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
включены в файл требований.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
. Сохранение и загрузка состояния происходят быстрее, размер файла меньше, а использование памяти при загрузке уменьшается.--noise_offset_random_strength
и --ip_noise_gamma_random_strength
добавляются в каждый тренировочный скрипт. Эти параметры можно использовать для изменения смещения шума и гаммы IP-шума в диапазоне от 0 до указанного значения. PR №1177 Спасибо KohakuBlueleaf!--save_state_on_train_end
добавляются в каждый сценарий обучения. PR #1168 Спасибо gesen2egee!--sample_every_n_epochs
и --sample_every_n_steps
в каждом сценарии обучения теперь отображают предупреждение и игнорируют их, если указано число меньше или равное 0
. Спасибо S-Del за поднятие проблемы. .toml
конфигурации набора данных теперь читается в кодировке UTF-8. PR #1167 Спасибо Horizon1704!secondary_separator
добавляется для указания разделителя тегов, который не является целью перетасовки или удаления.secondary_separator=";;;"
. Когда вы указываете secondary_separator
, часть не перемешивается и не отбрасывается.enable_wildcard
добавлен. Если установлено значение true
, можно использовать обозначение подстановочных знаков {aaa|bbb|ccc}
. Многострочный заголовок также включен.keep_tokens_separator
обновлен и теперь может использоваться в заголовке дважды. Когда вы указываете keep_tokens_separator="|||"
, часть, разделенная на вторую |||
не перемешивается и не отбрасывается и остается в конце.caption_prefix
и caption_suffix
можно использовать вместе. caption_prefix
и caption_suffix
обрабатываются первыми, а затем по порядку обрабатываются enable_wildcard
, keep_tokens_separator
, перетасовка и удаление, а также secondary_separator
.tag_image_by_wd14_tagger.py
(только опция --onnx
). PR #1192 Спасибо sdbds!pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
и т. д. Также проверьте комментарии в файле requirements.txt
.--repo_id
в 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
--beam_search
и значении 2 или более для --num_beams
в make_captions.py
. Маскированная потеря поддерживается в каждом сценарии обучения. Чтобы включить маскированную потерю, укажите опцию --masked_loss
.
Функция не полностью протестирована, поэтому могут быть ошибки. Если вы обнаружите какие-либо проблемы, пожалуйста, откройте вопрос.
Набор данных ControlNet используется для указания маски. Изображения маски должны быть изображениями RGB. Значение пикселя 255 в канале R рассматривается как маска (потери рассчитываются только для пикселей с маской), а значение 0 рассматривается как не-маска. Значения пикселей 0–255 преобразуются в 0–1 (т. е. значение пикселя 128 рассматривается как половина веса потери). Подробности спецификации набора данных см. в документации LLLite.
Запланированная потеря Хубера была введена в каждый сценарий обучения. Это метод повышения устойчивости к выбросам или аномалиям (повреждению данных) в обучающих данных.
При использовании традиционной функции потерь MSE (L2) влияние выбросов может быть значительным, что потенциально может привести к ухудшению качества создаваемых изображений. С другой стороны, хотя функция потерь Хубера может подавлять влияние выбросов, она имеет тенденцию ухудшать воспроизведение мелких деталей на изображениях.
Чтобы решить эту проблему, предлагаемый метод использует хитроумное применение функции потерь Хубера. Планируя использование потерь Хубера на ранних этапах обучения (при высоком уровне шума) и MSE на более поздних этапах, достигается баланс между устойчивостью к выбросам и воспроизведением мелких деталей.
Экспериментальные результаты подтвердили, что этот метод обеспечивает более высокую точность данных, содержащих выбросы, по сравнению с чистыми потерями Хубера или MSE. Увеличение вычислительных затрат минимально.
Недавно добавленные аргументы loss_type, Huber_schedule и Huber_c позволяют выбирать тип функции потерь (Huber, Smooth L1, MSE), метод планирования (экспоненциальный, постоянный, SNR) и параметр Хубера. Это обеспечивает оптимизацию на основе характеристик набора данных.
Подробности см. в PR № 1228.
loss_type
: укажите тип функции потерь. Выберите huber
для потерь Huber, smooth_l1
для плавных потерь L1 и l2
для потерь MSE. По умолчанию используется l2
, то же самое, что и раньше.huber_schedule
: укажите метод планирования. Выберите exponential
, constant
или snr
. По умолчанию — snr
.huber_c
: укажите параметр Huber. Значение по умолчанию — 0.1
.Пожалуйста, прочтите «Релизы», чтобы узнать о последних обновлениях.
imagesize
в формате pip install imagesize==1.4.1
で個別にインストールしてください。bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
, require.txt に含まれるようになりました。bitsandbytes
が公式に Windows をサポートしたため複雑な手順が不要になりました。.toml
)への記載をお勧めします。問題提起していただいた bghira 氏に感謝します。--console_log_simple
オプションを指定し、richのロギングを無効してお試しください。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の保存、読み込みが高速化され、ファイルサイズも小さくなり、また読み込み時のメモリ使用量も削減されます。--noise_offset_random_strength
および--ip_noise_gamma_random_strength
が追加されました。 PR № 1177 KohakuBlueleaf 氏に感謝します。--save_state_on_train_end
オプションが追加されました。 PR #1168 gesen2egee 氏に感謝します。--sample_every_n_epochs
および--sample_every_n_steps
オプションに0
以下の数値を指定した時、警告を表示するとともにそれらを無視するよう変更しました。問題提起していただいたS-Del 氏に感謝します。 .toml
-8 で読み込まれるようになりました。PR #1167 Horizon1704氏に感謝します。secondary_separator
を追加しました。 secondary_separator=";;;"
のように指定します。 secondary_separator
で区切ることで、その部分はシャッフル、drop時にまとめて扱われます。enable_wildcard
を追加しました。 true
にするとワイルドカード記法{aaa|bbb|ccc}
が使えます。また複数行キャプションも有効になります。keep_tokens_separator
をキャプション内に 2つ使えるようにしました。たとえばkeep_tokens_separator="|||"
と指定したとき、 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
|||
されず末尾に残ります。caption_prefix
とcaption_suffix
とあわせて使えます。 caption_prefix
とcaption_suffix
は一番最初に処理され、その後、ワイルドカード、 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
オプションを指定してください。
Проблемаを立てていただけると助かります。
マスクの指定には ControlNet или RGB画像である必要があります。R チャンネルのピクセル値 255 がロス計算対象、0がロス計算対象外になります。0-255 の値は、0-1の範囲に変換されます(つまりピクセル値 128 LLLite ドキュメントをご覧ください。
Данные коррупция)への耐性を高めるための手法、Запланированная потеря Хубераが導入されました。
従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招く恐れがありました。一方、Huber損失関数は異常値の影響を抑えられますが、画像の細部再現性が損なわれがちでした。
この手法ではHuber損失関数の適用を工夫し、学習の初期段階(ノイズが大きい場合)ではHuber損失を、後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります。
実験の結果では、この手法が純粋なHuber 損失やMSEと比べ、異常値を含むデータでより高い精度を達成することが確認されています。また計算コストの増加はわずかです。
具体的には、新たに追加された引数loss_type、huber_schedule、huber_cで、損失関数の種類(Huber, Smooth L1, MSE)とスケジューリング方法(экспоненциальный, постоянный, 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
などで試してみるとよいかもしれません。
最近の更新情報は Release をご覧ください。
LoRA, поддерживаемый train_network.py
, назван во избежание путаницы. Документация обновлена. Ниже приведены имена типов LoRA в этом репозитории.
LoRA -LierLa : (LoRA для линейных слоев )
LoRA для линейных слоев и слоев Conv2d с ядром 1x1
LoRA-C3Lier : ( LoRA для вычислительных слоев с ядром 3 x3 и линейными слоями )
В дополнение к 1. LoRA для слоев Conv2d с ядром 3x3.
LoRA-LierLa — это тип LoRA по умолчанию для train_network.py
(без сетевого аргумента conv_dim
).
Файл подсказки может выглядеть, например, так:
# 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
Строки, начинающиеся с #
являются комментариями. Вы можете указать параметры сгенерированного изображения с помощью таких параметров, как --n
после запроса. Можно использовать следующее.
--n
Отрицательное приглашение к следующему варианту.--w
Определяет ширину создаваемого изображения.--h
Указывает высоту создаваемого изображения.--d
Указывает начальное значение сгенерированного изображения.--l
Указывает масштаб CFG сгенерированного изображения.--s
Указывает количество шагов в генерации. Оперативные взвешивания, такие как ( )
и [ ]
работают.