Este repositorio contiene scripts de capacitación, generación y utilidades para Stable Diffusion.
El historial de cambios se mueve al final de la página. 更新履歴はページ末尾に移しました.
日本語版READMEはこちら
La versión de desarrollo está en la rama dev
. Consulte la rama de desarrollo para conocer los últimos cambios.
La compatibilidad con FLUX.1 y SD3/SD3.5 se realiza en la rama sd3
. Si desea capacitarlos, utilice la rama sd3.
Para un uso más sencillo (guiones GUI y PowerShell, etc.), visite el repositorio mantenido por bmaltais. ¡Gracias a @bmaltais!
Este repositorio contiene los scripts para:
El archivo no contiene requisitos para PyTorch. Debido a que la versión de PyTorch depende del entorno, no está incluida en el archivo. Instale PyTorch primero de acuerdo con el entorno. Consulte las instrucciones de instalación a continuación.
Los scripts se prueban con Pytorch 2.1.2. 2.0.1 y 1.12.1 no se han probado, pero deberían funcionar.
La mayoría de los documentos están escritos en japonés.
La traducción al inglés de darkstorm2150 está aquí. ¡Gracias a darkstorm2150!
Python 3.10.6 y Git:
Otorgue acceso al script sin restricciones a powershell para que venv pueda funcionar:
Set-ExecutionPolicy Unrestricted
y responda AAbra una terminal Powershell normal y escriba lo siguiente 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
Si python -m venv
muestra solo python
, cambie python
a py
.
Nota: Ahora bitsandbytes==0.43.0
, prodigyopt==1.0
y lion-pytorch==0.0.6
están incluidos en el archivo require.txt. Si desea utilizar otra versión, instálela manualmente.
Esta instalación es para CUDA 11.8. Si utiliza una versión diferente de CUDA, instale la versión adecuada de PyTorch y xformers. Por ejemplo, si usa CUDA 12, instale pip install torch==2.1.2 torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121
y pip install xformers==0.0.23.post1 --index-url https://download.pytorch.org/whl/cu121
.
Respuestas para acelerar la configuración:
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
Si desea utilizar bf16, responda bf16
a la última pregunta.
Nota: Algunos usuarios informan que se produjo ValueError: fp16 mixed precision requires a GPU
durante el entrenamiento. En este caso, responda 0
a la sexta pregunta: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(Se utilizará una GPU única con ID 0
).
Cuando salga una nueva versión, puede actualizar su repositorio con el siguiente comando:
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
Una vez que los comandos se hayan completado correctamente, debería estar listo para usar la nueva versión.
Si desea actualizar PyTorch, puede actualizarlo con el comando pip install
en la sección Instalación de Windows. También es necesario actualizar xformers
cuando se actualiza PyTorch.
La implementación de LoRA se basa en el repositorio de cloneofsimo. ¡Gracias por el gran trabajo!
La expansión LoRA a Conv2d 3x3 fue lanzada inicialmente por cloneofsimo y KohakuBlueleaf demostró su eficacia en LoCon. ¡Muchas gracias KohakuBlueleaf!
La mayoría de los scripts tienen licencia ASL 2.0 (incluidos códigos de Difusores, cloneofsimo's y LoCon); sin embargo, partes del proyecto están disponibles bajo términos de licencia separados:
Atención eficiente de la memoria Pytorch: MIT
bits y bytes: MIT
BLIP: Cláusula BSD-3
svd_merge_lora.py
. Sin embargo, el uso de la memoria principal aumentará (32 GB son suficientes).svd_merge_lora.py
のVRAM使用量を削減しました。ただし、メインメモリの使用量は増加します(32GBあれば十分です)。 Se corrigió un error en svd_merge_lora.py
, sdxl_merge_lora.py
y resize_lora.py
donde el valor hash de los metadatos de LoRA no se calculaba correctamente cuando save_precision
era diferente de la precision
utilizada en el cálculo. Consulte el número 1722 para obtener más detalles. Gracias a JujoHotaru por plantear el problema.
Se incluirá en la próxima versión.
svd_merge_lora.py
, sdxl_merge_lora.py
, resize_lora.py
で、保存時の精度が計算時の精度と異なる場合、LoRAメタデータのハッシュ値が正しく計算されない不具合を修正しました。詳細は número 1722. 。問題提起していただいた JujoHotaru 氏に感謝します.
以上は次回リリースに含まれます.
sdxl_merge_lora.py
ahora es compatible con OFT. Gracias a Maru-mee por el PR #1580.
svd_merge_lora.py
ahora admite LBW. Gracias a terracotaaniwa. Consulte PR #1575 para obtener más detalles.
sdxl_merge_lora.py
también admite BPN.
Consulte Peso del bloque LoRA de hako-mikan para obtener detalles sobre el LBW.
Estos se incluirán en la próxima versión.
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 氏の Peso del bloque LoRA をご覧ください。
以上は次回リリースに含まれます.
Se corrigió que cache_latents.py
y cache_text_encoder_outputs.py
no funcionaran. (Se incluirá en la próxima versión).
cache_latents.py
およびcache_text_encoder_outputs.py
が動作しなくなっていたのを修正しました。(次回リリースに含まれます。)
El valor predeterminado de huber_schedule
en Pérdida Huber programada se cambia de exponential
a snr
, lo que se espera que dé mejores resultados.
exponential
de snr
huber_schedule
imagesize
se agregó recientemente, por lo que si no puede actualizar las bibliotecas de inmediato, instálelas con pip install imagesize==1.4.1
por separado.bitsandbytes==0.43.0
, prodigyopt==1.0
, lion-pytorch==0.0.6
están incluidos en el archivo require.txt.bitsandbytes
ya no requiere procedimientos complejos porque ahora es oficialmente compatible con Windows..toml
). Gracias a bghira por plantear el problema.--console_log_simple
en el script de entrenamiento para deshabilitar el registro enriquecido.train_network.py
y sdxl_train_network.py
se modifican para registrar algunas configuraciones del conjunto de datos en los metadatos del modelo entrenado ( caption_prefix
, caption_suffix
, keep_tokens_separator
, secondary_separator
, enable_wildcard
).train_network.py
y sdxl_train_network.py
. El guardado y la carga del estado son más rápidos, el tamaño del archivo es más pequeño y se reduce el uso de memoria durante la carga.--noise_offset_random_strength
y --ip_noise_gamma_random_strength
se agregan a cada script de entrenamiento. Estas opciones se pueden utilizar para variar la compensación de ruido y la gamma de ruido IP en el rango de 0 al valor especificado. PR #1177 ¡Gracias a KohakuBlueleaf!--save_state_on_train_end
se agregan a cada script de entrenamiento. PR #1168 ¡Gracias a gesen2egee!--sample_every_n_epochs
y --sample_every_n_steps
en cada script de entrenamiento ahora muestran una advertencia y las ignoran cuando se especifica un número menor o igual a 0
. Gracias a S-Del por plantear el problema. .toml
para la configuración del conjunto de datos ahora se lee en codificación UTF-8. PR #1167 ¡Gracias a Horizon1704!secondary_separator
para especificar el separador de etiquetas que no es el objetivo de barajar o soltar.secondary_separator=";;;"
. Cuando especifica secondary_separator
, la parte no se mezcla ni se elimina.enable_wildcard
. Cuando se establece en true
, se puede utilizar la notación comodín {aaa|bbb|ccc}
. El título de varias líneas también está habilitado.keep_tokens_separator
se actualiza para usarse dos veces en el título. Cuando especifica keep_tokens_separator="|||"
, la parte dividida por la segunda |||
no se baraja ni se descarta y permanece al final.caption_prefix
y caption_suffix
se pueden utilizar juntas. caption_prefix
y caption_suffix
se procesan primero, y luego enable_wildcard
, keep_tokens_separator
, barajar y soltar y secondary_separator
se procesan en orden.tag_image_by_wd14_tagger.py
(solo opción --onnx
). PR #1192 ¡Gracias a sdbds!pip install onnx==1.15.0 onnxruntime-gpu==1.17.1
, etc. Consulte también los comentarios en requirements.txt
.--repo_id
en tag_image_by_wd14_tagger.py
. Esto almacena en caché varios modelos repo_id. Elimine los archivos innecesarios en --model_dir
.tag_image_by_wd14_tagger.py
.--use_rating_tags
y --use_rating_tags_as_last_tag
--character_tags_first
--character_tag_expand
--always_first_tags
--tag_replacement
--beam_search
y un valor de 2 o más para --num_beams
en make_captions.py
. La pérdida enmascarada está respaldada en cada guión de entrenamiento. Para habilitar la pérdida enmascarada, especifique la opción --masked_loss
.
La función no se ha probado completamente, por lo que puede haber errores. Si encuentra algún problema, abra un Problema.
El conjunto de datos ControlNet se utiliza para especificar la máscara. Las imágenes de máscara deben ser imágenes RGB. El valor de píxel 255 en el canal R se trata como la máscara (la pérdida se calcula solo para los píxeles con la máscara) y 0 se trata como sin máscara. Los valores de píxel 0-255 se convierten en 0-1 (es decir, el valor de píxel 128 se trata como la mitad del peso de la pérdida). Consulte los detalles de la especificación del conjunto de datos en la documentación de LLLite.
La pérdida de Huber programada se ha introducido en cada guión de entrenamiento. Este es un método para mejorar la solidez contra valores atípicos o anomalías (corrupción de datos) en los datos de entrenamiento.
Con la función de pérdida tradicional MSE (L2), el impacto de los valores atípicos podría ser significativo, lo que podría provocar una degradación en la calidad de las imágenes generadas. Por otro lado, si bien la función de pérdida de Huber puede suprimir la influencia de los valores atípicos, tiende a comprometer la reproducción de detalles finos en las imágenes.
Para abordar esto, el método propuesto emplea una aplicación inteligente de la función de pérdida de Huber. Al programar el uso de la pérdida de Huber en las primeras etapas del entrenamiento (cuando el ruido es alto) y MSE en las etapas posteriores, se logra un equilibrio entre la robustez de los valores atípicos y la reproducción de detalles finos.
Los resultados experimentales han confirmado que este método logra una mayor precisión en los datos que contienen valores atípicos en comparación con la pérdida pura de Huber o MSE. El aumento del coste computacional es mínimo.
Los argumentos recién agregados loss_type, huber_schedule y huber_c permiten la selección del tipo de función de pérdida (Huber, suave L1, MSE), el método de programación (exponencial, constante, SNR) y el parámetro de Huber. Esto permite la optimización basada en las características del conjunto de datos.
Consulte PR #1228 para obtener más detalles.
loss_type
: especifica el tipo de función de pérdida. Elija huber
para la pérdida de Huber, smooth_l1
para una pérdida suave de L1 y l2
para una pérdida de MSE. El valor predeterminado es l2
, que es el mismo que antes.huber_schedule
: especifica el método de programación. Elija exponential
, constant
o snr
. El valor predeterminado es snr
.huber_c
: especifica el parámetro de Huber. El valor predeterminado es 0.1
.Lea Lanzamientos para conocer las actualizaciones recientes.
imagesize
が新しく追加されていますので、すぐにライブラリの更新ができない場合はpip install imagesize==1.4.1
で個別にインストールしてください.bitsandbytes==0.43.0
、 prodigyopt==1.0
、 lion-pytorch==0.0.6
が requisitos.txt に含まれるようになりました。bitsandbytes
para Windows para 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 の保存、読み込みが高速化され、ファイルサイズも小さくなり、また読み込み時のメモリ使用量も削減されます.--noise_offset_random_strength
よび--ip_noise_gamma_random_strength
が追加されました。 PR #1177 KohakuBlueleaf 氏に感謝します。--save_state_on_train_end
。--sample_every_n_epochs
および--sample_every_n_steps
オプションに0
以下の数値を指定した時、警告を氏に感 S-Del 氏に感謝します。 .toml
します。secondary_separator
secondary_separator=";;;"
のように指.定します。 secondary_separator
で区切ることで、その部分はシャッフル、drop 時にまとめて扱われます。enable_wildcard
を追加しました。 true
にするとワイルドカード記法{aaa|bbb|ccc}
が使えます。また複数行キャプションも有効になります.keep_tokens_separator
2 1 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
keep_tokens_separator="|||"
1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
とキャプションを指定すると、二番目の|||
で分割された部分はシャッフル、drop されず末尾に残ります。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
してください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いただけると助かります.
ControlNet ControlNet Controlador RGBチャンネルのピクセル値 255 がロス計算対象、0 がロス計算対象外になります。0-255 の値は、0-1 の範囲に変換されます(つまりピクセル値 128 の部分はロスの重みが半分になります)。データセットの詳細は LLLite ドキュメント をご覧ください。
各学習スクリプトに、学習データ中の異常値や外れ値)への耐性を高めるための手法、Programado Pérdida de Huber.
従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招く恐れがありました。一方、Huber損失関数は異常値の影響を抑えられますが、画像の細部再現性が損なわれがちでした.
この手法ではHuber損失関数の適用を工夫し、学習の初期段階(ノイズが大きい場合)ではHuber損失を、後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります。
実験の結果では、この手法が純粋なHuber損失やMSEと比べ、異常値を含むデータでより高い精度を達成することが確認されています。また計算コストの増加はわずかです.
具体的には、新たに追加された引数loss_type、huber_schedule、huber_cで、損失関数の種類(Huber, smooth L1, MSE)とスケジューリング方法(exponencial, constante, 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
などで試してみるとよいかもしれません.
最近の更新情報は Liberación をご覧ください.
Se ha nombrado el LoRA compatible con train_network.py
para evitar confusiones. La documentación ha sido actualizada. Los siguientes son los nombres de los tipos de LoRA en este repositorio.
LoRA -LierLa : (LoRA para capas lineales )
LoRA para capas lineales y capas Conv2d con kernel 1x1
LoRA-C3Lier : (LoRA para capas C olucionales con 3 x3 Kernel y capas lineales )
Además de 1., LoRA para capas Conv2d con kernel 3x3
LoRA-LierLa es el tipo LoRA predeterminado para train_network.py
(sin conv_dim
network arg).
Un archivo de solicitud podría verse así, por ejemplo
# 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
Las líneas que comienzan con #
son comentarios. Puede especificar opciones para la imagen generada con opciones como --n
después del mensaje. Se puede utilizar lo siguiente.
--n
Mensaje negativo hasta la siguiente opción.--w
Especifica el ancho de la imagen generada.--h
Especifica la altura de la imagen generada.--d
Especifica la semilla de la imagen generada.--l
Especifica la escala CFG de la imagen generada.--s
Especifica el número de pasos de la generación. Las ponderaciones rápidas como ( )
y [ ]
están funcionando.