Este repositório contém scripts de treinamento, geração e utilitários para Difusão Estável.
O histórico de alterações é movido para a parte inferior da página. 更新履歴はページ末尾に移しました。
日本語版READMEはこちら
A versão de desenvolvimento está no branch dev
. Por favor, verifique o branch dev para as alterações mais recentes.
O suporte FLUX.1 e SD3/SD3.5 é feito na ramificação sd3
. Se você quiser treiná-los, use o branch sd3.
Para facilitar o uso (scripts GUI e PowerShell etc...), visite o repositório mantido por bmaltais. Obrigado a @bmaltais!
Este repositório contém os scripts para:
O arquivo não contém requisitos para PyTorch. Como a versão do PyTorch depende do ambiente, ela não está incluída no arquivo. Instale o PyTorch primeiro de acordo com o ambiente. Veja as instruções de instalação abaixo.
Os scripts são testados com Pytorch 2.1.2. 2.0.1 e 1.12.1 não foram testados, mas devem funcionar.
A maioria dos documentos está escrita em japonês.
A tradução para o inglês de darkstorm2150 está aqui. Graças a darkstorm2150!
Python 3.10.6 e Git:
Conceda acesso irrestrito de script ao PowerShell para que o venv possa funcionar:
Set-ExecutionPolicy Unrestricted
e responda AAbra um terminal Powershell normal e digite o seguinte dentro:
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
Se python -m venv
mostrar apenas python
, altere python
para py
.
Nota: Agora bitsandbytes==0.43.0
, prodigyopt==1.0
e lion-pytorch==0.0.6
estão incluídos no requirements.txt. Se desejar usar outra versão, instale-a manualmente.
Esta instalação é para CUDA 11.8. Se você usar uma versão diferente do CUDA, instale a versão apropriada do PyTorch e xformers. Por exemplo, se você usar CUDA 12, instale pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
e pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
.
Respostas para acelerar a configuração:
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
Se você quiser usar bf16, responda bf16
à última pergunta.
Nota: Alguns usuários relatam ValueError: fp16 mixed precision requires a GPU
ocorra no treinamento. Nesse caso, responda 0
para a 6ª pergunta: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(Será usada uma única GPU com id 0
)
Quando uma nova versão for lançada, você poderá atualizar seu repositório com o seguinte comando:
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
Depois que os comandos forem concluídos com sucesso, você estará pronto para usar a nova versão.
Se quiser atualizar o PyTorch, você pode atualizá-lo com o comando pip install
na seção Instalação do Windows. xformers
também precisa ser atualizado quando o PyTorch é atualizado.
A implementação do LoRA é baseada no repositório do cloneofsimo. Obrigado pelo excelente trabalho!
A expansão LoRA para Conv2d 3x3 foi inicialmente lançada pela cloneofsimo e sua eficácia foi demonstrada na LoCon por KohakuBlueleaf. Muito obrigado KohakuBlueleaf!
A maioria dos scripts é licenciada sob ASL 2.0 (incluindo códigos de Diffusers, cloneofsimo's e LoCon), no entanto, partes do projeto estão disponíveis sob termos de licença separados:
Pytorch de atenção com eficiência de memória: MIT
bits e bytes: MIT
BLIP: Cláusula BSD-3
svd_merge_lora.py
O uso de VRAM foi reduzido. No entanto, o uso da memória principal aumentará (32 GB é suficiente).svd_merge_lora.py
のVRAM使用量を削減しました。ただし、メインメモリの使用量は増加します(32GBあれば十分です)。 Corrigido um bug em svd_merge_lora.py
, sdxl_merge_lora.py
e resize_lora.py
onde o valor hash dos metadados LoRA não era calculado corretamente quando save_precision
era diferente da precision
usada no cálculo. Consulte a edição nº 1722 para obter detalhes. Obrigado a JujoHotaru por levantar a questão.
Ele será incluído no próximo lançamento.
svd_merge_lora.py
, sdxl_merge_lora.py
, resize_lora.py
oRAメタデータのハッシュ値が正しく計算されない不具合を修正しました。詳細はedição #1722 をご覧ください。問題提起していただいた JujoHotaru 氏に感謝します。
以上は次回リリースに含まれます。
sdxl_merge_lora.py
agora suporta OFT. Obrigado a Maru-mee pelo PR #1580.
svd_merge_lora.py
agora suporta LBW. Obrigado a terracottahaniwa. Consulte PR nº 1575 para obter detalhes.
sdxl_merge_lora.py
também oferece suporte a LBW.
Consulte LoRA Block Weight de hako-mikan para obter detalhes sobre LBW.
Eles serão incluídos na próxima versão.
sdxl_merge_lora.py
が OFT をサポートされました。PR #1580 Maru-mee 氏に感謝します。
svd_merge_lora.py
で LBW がサポートされました。PR #1575 terracottahaniwa 氏に感謝します。
sdxl_merge_lora.py
でも LBW がサポートされました。
LBW の詳細は hako-mikan 氏の LoRA Block Weight をご覧ください。
以上は次回リリースに含まれます。
Corrigido cache_latents.py
e cache_text_encoder_outputs.py
que não funcionavam. (Será incluído na próxima versão.)
cache_latents.py
およびcache_text_encoder_outputs.py
O valor padrão de huber_schedule
em Scheduled Huber Loss foi alterado de exponential
para snr
, o que deve fornecer melhores resultados.
huber_schedule
snr
exponential
imagesize
foi adicionado recentemente, portanto, se você não puder atualizar as bibliotecas imediatamente, instale com pip install imagesize==1.4.1
separadamente.bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
estão incluídos no requirements.txt.bitsandbytes
não requer mais procedimentos complexos, pois agora oferece suporte oficial ao Windows..toml
). Obrigado a bghira por levantar a questão.--console_log_simple
no script de treinamento para desabilitar o rich logging.train_network.py
e sdxl_train_network.py
são modificados para registrar algumas configurações do conjunto de dados nos metadados do modelo treinado ( caption_prefix
, caption_suffix
, keep_tokens_separator
, secondary_separator
, enable_wildcard
).train_network.py
e sdxl_train_network.py
. O salvamento e o carregamento do estado são mais rápidos, o tamanho do arquivo é menor e o uso de memória durante o carregamento é reduzido.--noise_offset_random_strength
e --ip_noise_gamma_random_strength
são adicionadas a cada script de treinamento. Essas opções podem ser usadas para variar o deslocamento de ruído e a gama de ruído IP na faixa de 0 até o valor especificado. PR #1177 Obrigado a KohakuBlueleaf!--save_state_on_train_end
são adicionadas a cada script de treinamento. PR #1168 Obrigado a gesen2egee!--sample_every_n_epochs
e --sample_every_n_steps
em cada script de treinamento agora exibem um aviso e as ignoram quando um número menor ou igual a 0
é especificado. Obrigado a S-Del por levantar a questão. .toml
para a configuração do conjunto de dados agora é lido na codificação UTF-8. PR #1167 Obrigado ao Horizon1704!secondary_separator
é adicionado para especificar o separador de tags que não é alvo de embaralhamento ou eliminação.secondary_separator=";;;"
. Ao especificar secondary_separator
, a parte não é embaralhada nem descartada.enable_wildcard
é adicionado. Quando definido como true
, a notação curinga {aaa|bbb|ccc}
pode ser usada. A legenda multilinha também está habilitada.keep_tokens_separator
é atualizado para ser usado duas vezes na legenda. Quando você especifica keep_tokens_separator="|||"
, a parte dividida pelo segundo |||
não é embaralhado ou descartado e permanece no final.caption_prefix
e caption_suffix
podem ser usados juntos. caption_prefix
e caption_suffix
são processados primeiro e, em seguida, enable_wildcard
, keep_tokens_separator
, embaralhamento e eliminação e secondary_separator
são processados em ordem.tag_image_by_wd14_tagger.py
(opção --onnx
apenas). PR #1192 Obrigado aos sdbds!pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
etc. Verifique também os comentários em requirements.txt
.--repo_id
em tag_image_by_wd14_tagger.py
. Isso armazena em cache vários modelos repo_id. Exclua os arquivos desnecessários em --model_dir
.tag_image_by_wd14_tagger.py
.--use_rating_tags
e --use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
--beam_search
e um valor 2 ou mais para --num_beams
em make_captions.py
. A perda mascarada é suportada em cada script de treinamento. Para ativar a perda mascarada, especifique a opção --masked_loss
.
O recurso não foi totalmente testado, portanto pode haver bugs. Se você encontrar algum problema, abra um problema.
O conjunto de dados ControlNet é usado para especificar a máscara. As imagens da máscara devem ser imagens RGB. O valor de pixel 255 no canal R é tratado como máscara (a perda é calculada apenas para os pixels com máscara) e 0 é tratado como não-máscara. Os valores de pixel 0-255 são convertidos em 0-1 (ou seja, o valor de pixel 128 é tratado como a metade do peso da perda). Veja detalhes para a especificação do conjunto de dados na documentação do LLLite.
A perda programada de Huber foi introduzida em cada script de treinamento. Este é um método para melhorar a robustez contra valores discrepantes ou anomalias (corrupção de dados) nos dados de treinamento.
Com a função de perda tradicional do MSE (L2), o impacto dos valores discrepantes pode ser significativo, levando potencialmente a uma degradação na qualidade das imagens geradas. Por outro lado, embora a função de perda de Huber possa suprimir a influência de outliers, ela tende a comprometer a reprodução de detalhes finos nas imagens.
Para resolver isso, o método proposto emprega uma aplicação inteligente da função de perda de Huber. Ao programar o uso da perda de Huber nos estágios iniciais do treinamento (quando o ruído é alto) e do MSE nos estágios posteriores, é alcançado um equilíbrio entre a robustez dos outliers e a reprodução de detalhes finos.
Os resultados experimentais confirmaram que este método atinge maior precisão em dados contendo valores discrepantes em comparação com a perda pura de Huber ou MSE. O aumento no custo computacional é mínimo.
Os argumentos recém-adicionados loss_type, huber_schedule e huber_c permitem a seleção do tipo de função de perda (Huber, smooth L1, MSE), método de agendamento (exponencial, constante, SNR) e parâmetro de Huber. Isso permite a otimização com base nas características do conjunto de dados.
Consulte PR nº 1228 para obter detalhes.
loss_type
: Especifique o tipo de função de perda. Escolha huber
para perda de Huber, smooth_l1
para perda suave de L1 e l2
para perda de MSE. O padrão é l2
, que é o mesmo de antes.huber_schedule
: Especifique o método de agendamento. Escolha exponential
, constant
ou snr
. O padrão é snr
.huber_c
: Especifique o parâmetro do Huber. O padrão é 0.1
.Por favor, leia os lançamentos para atualizações recentes.
imagesize
が新しく追加されていますので、すぐにライブラリの更新ができない場合はpip install imagesize==1.4.1
で個別にインストールしてください。bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
requisitos.txt necessários.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 e U-Net, codificador de texto, codificador de texto, 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
ファイルが Codificação UTF-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
melhor |||
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
オプションを指定してください。
Problemaを立てていただけると助かります。
Controle de rede ControlNet para controle de acesso RGB画像である必要があります。R チャンネルのピクセル値 255 がロス計算対象、0がロス計算対象外になります。0-255 の値は、0-1の範囲に変換されます(つまりピクセル値 128 LLLite ドキュメントをご覧ください。
Dados corrupção)への耐性を高めるための手法、Perda Programada de Huberが導入されました。
従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招く恐れがありました。一方、Huber損失関数は異常値の影響を抑えられますが、画像の細部再現性が損なわれがちでした。
この手法ではHuber損失関数の適用を工夫し、学習の初期段階(ノイズが大きい場合)ではHuber損失を、後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります。
実験の結果では、この手法が純粋なHuber損失やMSEと比べ、異常値を含むデータでより高い精度を達成することが確認されています。また計算コストの増加はわずかです。
具体的には、新たに追加された引数loss_type、huber_schedule、huber_cで、損失関数の種類(Huber, smooth L1, MSE)とスケジューリング方法(exponencial, constante, SNR)を選択できます。これによりデータセットに応じた最適化が可能になります。
Publicado PR #1228.
loss_type
: Tipo de perda: huber
, Huber, smooth_l1
, Smooth L1, l2
, MSE損失を選択します。デフォルトはl2
で、従来と同様です。huber_schedule
: exponential
で指数関数的、 constant
で一定、 snr
snr
huber_c
: Huber損失のパラメータを指定します。デフォルトは0.1
です。 --loss_type smooth_l1 --huber_schedule snr --huber_c 0.1
obter mais informações --loss_type smooth_l1 --huber_schedule snr --huber_c 0.1
などで試してみるとよいかもしれません。
最近の更新情報は Release をご覧ください。
O LoRA suportado por train_network.py
foi nomeado para evitar confusão. A documentação foi atualizada. A seguir estão os nomes dos tipos LoRA neste repositório.
LoRA-LierLa : (LoRA para camadas lineares )
LoRA para camadas lineares e camadas Conv2d com kernel 1x1
LoRA-C3Lier : (LoRA para camadas C olucionais com Kernel 3 x3 e camadas Lineares )
Além de 1., LoRA para camadas Conv2d com kernel 3x3
LoRA-LierLa é o tipo LoRA padrão para train_network.py
(sem argumento de rede conv_dim
).
Um arquivo de prompt pode ter esta aparência, por exemplo
# 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
As linhas que começam com #
são comentários. Você pode especificar opções para a imagem gerada com opções como --n
após o prompt. O seguinte pode ser usado.
--n
Solicitação negativa até a próxima opção.--w
Especifica a largura da imagem gerada.--h
Especifica a altura da imagem gerada.--d
Especifica a semente da imagem gerada.--l
Especifica a escala CFG da imagem gerada.--s
Especifica o número de etapas na geração. A ponderação imediata como ( )
e [ ]
está funcionando.