이 저장소에는 Stable Diffusion을 위한 교육, 생성 및 유틸리티 스크립트가 포함되어 있습니다.
변경 내역 이 페이지 하단으로 이동되었습니다. 更新履歴は페이지末尾に移しました.
일본어版READMEは여기서
개발 버전은 dev
브랜치에 있습니다. 최신 변경 사항은 dev 브랜치를 확인하세요.
FLUX.1 및 SD3/SD3.5 지원은 sd3
브랜치에서 수행됩니다. 훈련시키려면 sd3 브랜치를 사용하세요.
더 쉽게 사용하려면(GUI 및 PowerShell 스크립트 등...) bmaltais에서 관리하는 저장소를 방문하세요. @bmaltais에게 감사드립니다!
이 저장소에는 다음을 위한 스크립트가 포함되어 있습니다.
파일에는 PyTorch에 대한 요구 사항이 포함되어 있지 않습니다. PyTorch의 버전은 환경에 따라 다르기 때문에 파일에는 포함되어 있지 않습니다. 환경에 따라 먼저 PyTorch를 설치해 주세요. 아래 설치 지침을 참조하세요.
스크립트는 Pytorch 2.1.2로 테스트되었습니다. 2.0.1 및 1.12.1은 테스트되지 않았지만 작동할 것입니다.
대부분의 서류는 일본어로 작성되어 있습니다.
darkstorm2150의 영어 번역은 여기 있습니다. darkstorm2150에게 감사드립니다!
Python 3.10.6 및 Git:
venv가 작동할 수 있도록 powershell에 무제한 스크립트 액세스 권한을 부여하세요.
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
로 변경합니다.
참고: 이제 bitsandbytes==0.43.0
, prodigyopt==1.0
및 lion-pytorch==0.0.6
요구사항.txt에 포함됩니다. 다른 버전을 사용하려면 수동으로 설치하세요.
이 설치는 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
설치하세요. 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
보고합니다. 이 경우 6번째 질문: What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
에 대해 0
대답하십시오. What GPU(s) (by id) should be used for training on this machine as a comma-separated list? [all]:
(ID가 0
인 단일 GPU가 사용됩니다.)
새 릴리스가 출시되면 다음 명령을 사용하여 저장소를 업그레이드할 수 있습니다.
cd sd - scripts
git pull
.venvScriptsactivate
pip install -- use-pep517 -- upgrade - r requirements.txt
명령이 성공적으로 완료되면 새 버전을 사용할 준비가 된 것입니다.
PyTorch를 업그레이드하려면 Windows 설치 섹션에서 pip install
명령을 사용하여 업그레이드할 수 있습니다. PyTorch가 업그레이드되면 xformers
도 업그레이드해야 합니다.
LoRA 구현은 cloneofsimo의 저장소를 기반으로 합니다. 훌륭한 작업에 감사드립니다!
Conv2d 3x3에 대한 LoRA 확장은 처음에 cloneofsimo에 의해 출시되었으며 LoCon에서 KohakuBlueleaf가 그 효과를 시연했습니다. KohakuBlueleaf 정말 감사합니다!
대부분의 스크립트는 ASL 2.0(Diffusers, cloneofsimo's 및 LoCon의 코드 포함)에 따라 라이센스가 부여되지만 프로젝트의 일부는 별도의 라이센스 조건에 따라 사용할 수 있습니다.
메모리 효율적인 주의 Pytorch: MIT
비트샌드바이트: MIT
블립: BSD-3-절
svd_merge_lora.py
VRAM 사용량이 감소했습니다. 그러나 메인 메모리 사용량이 증가합니다(32GB이면 충분합니다).svd_merge_lora.py
의 VRAM 사용량은 を削減しました입니다. save_precision
이 계산에 사용된 precision
와 다를 때 LoRA 메타데이터의 해시 값이 올바르게 계산되지 않는 svd_merge_lora.py
, sdxl_merge_lora.py
및 resize_lora.py
의 버그를 수정했습니다. 자세한 내용은 문제 #1722를 참조하세요. 문제를 제기한 JujoHotaru에게 감사드립니다.
다음 릴리스에 포함될 예정입니다.
svd_merge_lora.py
、 sdxl_merge_lora.py
、 resize_lora.py
로, 保存시계의 속도가 が計算시계의 속도와 일치하는지, LoRA메타데이타의 핫슈가 정확한지 확인하기가 불가능합니다. 詳細は 문제 #1722をご覧KU다い。問題提起していただいた JujoHotaru 氏に感謝しmas。
이제 더 이상 리리스에 대해 알아 볼 수 없습니다.
sdxl_merge_lora.py
이제 OFT를 지원합니다. PR #1580을 제공해 주신 Maru-mee에게 감사드립니다.
svd_merge_lora.py
이제 LBW를 지원합니다. 테라코타하니와에게 감사드립니다. 자세한 내용은 PR #1575를 참조하세요.
sdxl_merge_lora.py
LBW도 지원합니다.
LBW에 대한 자세한 내용은 hako-mikan의 LoRA 블록 가중치를 참조하세요.
이는 다음 릴리스에 포함될 예정입니다.
sdxl_merge_lora.py
는 OFT をSaポ- ツ れました입니다. PR #1580 Maru-mee는 氏に感謝しま 입니다.
svd_merge_lora.py
그리고 LBW는 사포트였습니다.PR #1575 terracottahaniwa 氏に感謝しまし。
sdxl_merge_lora.py
데도 LBW가 있었습니다.
LBW の詳細は hako-mikan 氏の LoRA Block Weight をご覧kuだsai.
이제 더 이상 리리스에 대해 알아 볼 수 없습니다.
cache_latents.py
및 cache_text_encoder_outputs.py
작동하지 않는 문제를 해결했습니다. (다음 릴리스에 포함될 예정입니다.)
cache_latents.py
まよびcache_text_encoder_outputs.py
が동작화되지 않았는데 を修수정했습니다.
Scheduled Huber Loss의 huber_schedule
기본값이 exponential
에서 snr
로 변경되어 더 나은 결과를 제공할 것으로 예상됩니다.
예정된 Huber Loss는 の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
)에 wandb API 키와 HuggingFace 토큰을 작성하는 것이 좋습니다. 문제를 제기한 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
옵션이 각 교육 스크립트에 추가됩니다. 이러한 옵션을 사용하면 0부터 지정된 값까지의 범위에서 노이즈 오프셋과 IP 노이즈 감마를 변경할 수 있습니다. PR #1177 코하쿠블루리프님 감사합니다!--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
으로 설치하거나 업데이트하시기 바랍니다.tag_image_by_wd14_tagger.py
의 --repo_id
라는 하위 디렉토리에 저장됩니다. 이는 여러 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 문서에서 데이터세트 사양에 대한 세부정보를 참조하세요.
예정된 Huber Loss가 각 훈련 스크립트에 도입되었습니다. 이는 학습 데이터의 이상치나 이상치(데이터 손상)에 대한 견고성을 향상시키는 방법입니다.
기존 MSE(L2) 손실 함수를 사용하면 이상값의 영향이 커 잠재적으로 생성된 이미지의 품질이 저하될 수 있습니다. 반면, Huber 손실 함수는 이상치의 영향을 억제할 수 있지만 이미지의 미세한 디테일 재현을 손상시키는 경향이 있습니다.
이를 해결하기 위해 제안된 방법은 Huber 손실 함수를 영리하게 적용합니다. 학습 초기 단계(잡음이 높을 때)에는 Huber 손실을 사용하고 후기 단계에서는 MSE를 사용하도록 예약함으로써 이상치 견고성과 미세한 세부 재현 간의 균형을 유지합니다.
실험 결과에 따르면 이 방법은 순수 Huber 손실 또는 MSE에 비해 이상값이 포함된 데이터에서 더 높은 정확도를 달성하는 것으로 확인되었습니다. 계산 비용의 증가는 최소화됩니다.
새로 추가된 인수 loss_type, Huber_schedule 및 Huber_c를 사용하면 손실 함수 유형(Huber, Smooth L1, MSE), 스케줄링 방법(지수, 상수, SNR) 및 Huber 매개변수를 선택할 수 있습니다. 이를 통해 데이터 세트의 특성에 따른 최적화가 가능합니다.
자세한 내용은 PR #1228을 참조하세요.
loss_type
: 손실 함수 유형을 지정합니다. Huber 손실에는 huber
선택하고, 원활한 L1 손실에는 smooth_l1
, MSE 손실에는 l2
선택합니다. 기본값은 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
が 요구 사항.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
が含まれRU불具합を修正しました。state 에 U-Net あよび Text Encoderの保存、読umi込まが高速化 が、fァirsizeもsmall sakuなり、また読umi込しがのmemory使사용량も削減军まし。--ip_noise_gamma_random_strength
~ --noise_offset_random_strength
결정되었습니다.--save_state_on_train_end
が追加 れました。 PR #1168 gesen2egee 氏に感謝しましも。--sample_every_n_epochs
あよび--sample_every_n_steps
Opshionni 0
以下の数値を指定した time、警告を表示守ともにそれRaを無視しよしよ変更しました。問題提起していただいたS-Del은 氏に感謝しまс。 .toml
파일은 UTF-8 인코딩을 사용하여 변경할 수 없습니다. PR #1167 Horizon1704는 거의 모든 것을 허용합니다.secondary_separator
secondary_separator=";;;"
분리하는 방법 secondary_separator
다음과 같습니다. 시니마토めて扱われまс.enable_wildcard
를 사용하시면 됩니다. 사실입니다.와일드카드법 {aaa|bbb|ccc}
true
있습니다.keep_tokens_separator
keep_tokens_separator="|||"
1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
제한했습니다. 1girl, hatsune miku, vocaloid ||| stage, mic ||| best quality, rating: general
토캐프션을 결정하는 것과, 2종目の|||
데분할은 れたは샤풀、drop れず末尾に残りまс。caption_prefix
와 caption_suffix
와 あわせて使えま됩니다. caption_prefix
와 caption_suffix
は一番最初に処理悌, その後, 와일르드카드, keep_tokens_separator
、샤프훌 りよび 드롭、 secondary_separator
の順に処理悌mas。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번째로 더 많은 시간을 설정했습니다. 各school 習스크리프트데마스크로스を사포트시마시타입니다.마스크로스を있다고 해서 は--masked_loss
오프션を指切してkuだ善합니다.
機能は完全にtest는 れていないため, 不具具䁌あなもしれません.その場合は Issue を立てていただけRUと助助偛ん。
마스크를 결정하려면 ControlNet 데이타셋을 사용하십시오. 마스크 이미지는 RGB 이미지로 사용할 수 있습니다. R 챠넬노 피크세르 255 がros計算対象、0がros計算対象외에는 없습니다.0-255 の値は、0-1 の範囲に変換揌まし(つまりピcrupicsel値 128のPART 分は 로스の半分になりまс.
各school習스크립트에、school習dayta中の異常値や外れ値(데이터 손상)への耐性を高めuruための手 法、Scheduled Huber Lossが導入しれました。
従来のMSE(L2)損失関数دは、異常値の影響を大ikiku受けてしまい、生成画imageのproduct質低下を招iku恐れがありました。 일방、Huber損失関数は異常値の影響を抑えracれmassが、画imageの細部再現性が損なわれがちした。
이 방법을 사용하면 Huber損失関数の適用を工夫し、school習の初期段階(노이즈が大失場합)はHuber損失を、後期段階多はMSE를 이용하려면 よU스케쥬링을 사용하는 것이 좋습니다.
実験の結果下、이쪽 수법은 Huber損失やMSE와 異常値を含む데이타입니다より高 い精道を達成實 는 이것으로 が確認 れてい마스입니다.
具体的には、新たに追加 れた引数loss_type、huber_schedule、huber_cde、損失関数の種類(Huber, Smooth L1, MSE)와 스케쥬링 방법(지수, 상수, SNR)を選択下をまし。 이쪽으로 더 나아가기 위해서는 더욱 더 강력해져야 합니다.
詳細は PR #1228 をご覧kuだい。
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
등으로 설명하면 너무 예뻐요.
最近の更新情報は 출시 をご覧kuだい。
train_network.py
에서 지원하는 LoRA는 혼동을 피하기 위해 이름이 지정되었습니다. 설명서가 업데이트되었습니다. 다음은 이 저장소에 있는 LoRA 유형의 이름입니다.
LoRA-LierLa : ( 리니어 레이어 용 LoRA)
1x1 커널을 사용하는 선형 레이어 및 Conv2d 레이어용 LoRA
LoRA-C3Lier : ( 3 x3 커널 및 Li n e r 레이어가 있는 C 솔루션 레이어용 LoRA)
1. 외에도 3x3 커널을 갖춘 Conv2d 레이어용 LoRA
LoRA-LierLa는 train_network.py
의 기본 LoRA 유형입니다( 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
생성의 단계 수를 지정합니다. ( )
, [ ]
등 프롬프트 가중치가 적용됩니다.