*** 나는 WebUI가 이미 깔려 있다는 전제 하에 시작.
이 과정은 protogen과 2.1 버전에서도 적용 가능하다고 합니다 하하
stable-diffusion-webui 파일 > webui-user 배치파일 복사! > 복사본 우클릭 > 편집
이렇게 뜨는거 확인.
이렇게 추가.
Command Line Arguments and Settings · AUTOMATIC1111/stable-diffusion-webui Wiki (github.com)
Command Line Arguments and Settings
Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.
github.com
*** xformer : speed 상승, vram 사용량 감소
(8gb와 같이 낮은 vram일 경우에는 --medvram)
disable 같은 경우는 선택적이라고 함. Colab에서 학습시킬 경우에는 작동을 안 할 수 있음.
나는 전부 똑같이 만든 상태에서 시작!
stabilityai/sd-vae-ft-mse-original at main (huggingface.co)
stabilityai/sd-vae-ft-mse-original at main
Detected Pickle imports (4) "torch._utils._rebuild_tensor_v2", "torch.IntStorage", "torch.FloatStorage", "collections.OrderedDict" What is a pickle import?
huggingface.co
여기서 VAE 파일 다운받아서 models 폴더 안 VAE 파일 안에 넣는다.
(C:\Users\admin\stable-diffusion-webui\models\VAE)
쓰는 이유 : human image generation 성능을 향상시키기 때문에.
* VAE : 각 generation은 압축된 표현으로 수행되는데, VAE는 압축된 결과를 가져와서 전체 크기의 이미지로 변환한다.
Stable Diffusion은 이미 VAE와 함께 제공되지만 일부 모델은 해당 모델에 더 적합한 사용자 지정 VAE를 제공할 수 잇고, SD 1.5버전 모델은 최신 VAE를 사용하지 않기 때문에. (2.1버전은 최신 VAE 사용!)
*** 여기서 pruned ckpt 파일 사용.
(finetuning 종류에 pruned와 emaonly 두가지가 있는 것으로 보임.
emaonly는 단순 반복 생성작업에 적합
pruned는 파인튜닝에 적합)
이제 배치파일 들어가서 실행 후
settings - training -
"Move VAE and CLIP to RAM when training if possible. Saves VRAM."
"Turn on pin_memory for DataLoader. Makes training slightly faster but can increase memory usage."
두개 체크
(1번은 Vram 사용량 줄이는 듯
2번은 ram 용량 늘리는듯
나는 둘다 체크)
"Use cross attention optimizations while training"
이걸 체크하면 학습 속도가 올라가고 Vram 사용 용량을 줄일 수 잇지만,
가끔 훈련 성공 확률이 줄어든다. GPU 용량 충분하다면 체크 X!
https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/6483
[Bug]: Enabling "cross-attention for training" results in bad embeddings · Issue #6483 · AUTOMATIC1111/stable-diffusion-webui
Is there an existing issue for this? I have searched the existing issues and checked the recent builds/commits What happened? using Settings -> Training -> Use cross attention optimizations while t...
github.com
여기 보면 버그 토픽에서 많은 의견 나온다.
이 부분도 1로 바꿔준다.
이후 apply settings > reload ui !
최종적으로 이 모습.
<여기서부터 Textual inversion train 단계>
1. create embedding 파트
name은 우리의 임베딩을 활성화시키는 단계. 길이도 상관없고, 결과나 토큰 수에 영향을 안끼친다.
그렇다면 initialization text는????
결론부터 말하자면 빈칸으로 비워둬라.
https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/6667
Allow creation of zero vectors for TI by Shondoit · Pull Request #6667 · AUTOMATIC1111/stable-diffusion-webui
What this pull request is trying to achieve. This will allow the ability to create zeroed out vectors for training embeddings. I've found that sometimes it's beneficial to start from scratch, as to...
github.com
여기서 누군가가 zero initialization text as empty로 진행하는 것이 좋다는 결론을 냈다.
* 여기서 Textual inversion 논문에서는 *로 프롬프트를 채우지만, embedding inspector에 *을 넣으면 벡터가 보여서!
(embedding inspector는 extension - available - load from - 화면 검색창에 embedding inspector 검색, install 후 Restart)
https://huggingface.co/openai/clip-vit-large-patch14/tree/main
openai/clip-vit-large-patch14 at main
Detected Pickle imports (4) "torch.FloatStorage", "torch._utils._rebuild_tensor_v2", "torch.LongStorage", "collections.OrderedDict" What is a pickle import?
huggingface.co
여기서 tokenizer.json 클릭하면 49408개의 SD 내부 토큰들을 모두 볼 수 있다.
extension - available - load from - tokenizer script, tab 설치 후에도 볼 수 있음.
number of vectors per token :
임베딩 단어가 몇 개의 벡터로 저장될 지. 1~3개가
벡터 수를 늘리면 늘릴수록 품질이 떨어진다고 한다.
논문에서는 아래쪽에서 3 벡터를 썼다고 한다.
유투버들은 1~ 2개를 쓴다고 한다. (test 필요할 듯)
2. Preprocess image 파트
source/destination directory 아래에 하위 directory를 만들 경우 그것들을 모두 스캔하기 때문에 굳이 생성하지 말아야함.
filpped copies : 얼굴 학습 성능을 낮추기 때문에 , 얼굴 학습 시에는 체크 X
split oversized images : 얼굴에 적합 X
Auto focal point crop & BLIP : 체크
BLIP: 실사화에 Good
deepbooru : 애니메이션이 Good
focal point를 사용할 경우 아래에 이런 식으로 수치가 뜬다. 가만히 냅둔다.
debug image도 체크하지 않는다.
512*512로 setting하는 이유는 버전 1.5가 512*512를 기반으로 하고 있어서
(수를 바꿔도 문제는 없지만... 최적은 512*512아닐까?)
모델의 기본 해상도를 지키면서 이미지를 처리하는 것이 생각보다 중요하다고 한다!
버전 2.1은 512*768
Existing Caption txt Action도 ignore 그대로 냅둔다.
3. Train 파트
learning rate의 경우 기본으로 0.005로 setting 되어있음.
논문에서도 0.005로 진행했기 때문에 그대로 진행한다.
(((*** Batch size & Gradient accumulation steps
공식 논문 implementation detail에 의하면 !
: 충분한 RAM, VRAM 메모리가 있는 경우 배치 크기와 그래디언트 누적 단계를 늘리면 훈련 속도가 증가한다.
이때 주의 할 점은 훈련 이미지 수가 이 두 수의 곱으로 나누어 지는지 확인하는 것.
ex ) 10개의 이미지 데이터셋 일 경우
batch size : 2, gradient step : 5
40개의 이미지 데이터셋일 경우
batch size : 2, gradient step : 5
혹은
2/10, 4/5 등으로!
즉 batch size * gradient step 으로 데이터셋 갯수 나누면 나머지 0되게
*** learning rate
batch size * gradient step 값이 10이라면 learning rate도 10으로 곱해야 한다.
공식 논문에서는 두 개의 GPU를 사용하기 때문에 batch size를 4로 설정하고, 기본 learning rate를 8로 곱하여 변경한다. 왜냐하면 두 개의 GPU, batch size 4에 2를 곱하면 8이되고, 0.005에 8을 곱하면 0.04가 되니까. (이해불가...)
결론적으로는 그냥 !!!!!! batch size &gradient step 늘리면 learning rate도 늘려야함!!!
그렇지만!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
전문가가 아니면 바꾸지 않는 것을 추천.
log directory도 textual_inversion에서 변경 X
Prompt template file 부분에서
파일 경로를 타고 가면
이렇게 있는 것이 보인다.
여기서 새로운 txt 파일 하나 생성해서 [name]만 넣고 그 파일로 경로 재지정.
(사실 다양한 방법이 있겠지만 일단은 file word의 정의를 정확하게 파악하기가 어려움)
나는 dtest라는 이름으로 저장
이렇게.
이미지 데이터셋 내에 같은 배경의 사진이 여러장 있다면
배경을 노이즈로 지워주거나 바꿔준다
이 작업을 해주면 퀄리티가 올라간다!
(그래야 정확히 어떤 것을 인식하고 학습할지 판단하는 듯 하다. )
paint 3d라는 프로그램으로 노이즈를 주고 노이즈 색상 역시 변경.
만약 이미지가 이미 512*512라면 do not resize image에 체크
max step에는 지정된 숫자를 넣지 않아도 된다.
save an image to log directory every N steps, 0 to disable > 이거는 dreambooth에 epoch랑은 좀 다름
각 image는 one step이며 여기는 epoch saving이 없다. 이거는 step saving임.
10개의 이미지를 학습시킨다면 10개의 epoch동안 100개의 이미지를 설정해야 한다.
공식 : one epoch가 학습시킬 훈련 데이터셋의 개수.
그래서 이미지수 10장이면 10에포크에 10 곱하는 거니까 100에포크마다 저장
이미지수 20장이면 10 에포크에 20 곱하는거니까 200에포크마다 저장
save images with embedding in png chunks :
이게 embedding을 generated preview image에 세이브한다.
shuffle tags by ‘,’ when creating prompts :
fileword 사용 시 이게 학습때 섞인다.
이거는 테스트해보고 결과좋으면 사용하라고 함 (fileword 사용할때) > 나는 사용 안할거임
drop out tags when creating prompts :
random하게 file description, file caption을 drop함. 아마도 퍼센테이지다 (0.1 = 10퍼센트)
file word 사용안하면 안써도 됨. 0으로 두라는 뜻.
choose latent sampling method : 논문에서는 random 사용.
그러나 어떤 커뮤니티의 사용자가 deterministic이 제일 낫다고 주장함.
나도 그래서 deterministic을 사용할 것
train 과정 중에서 over train을 판단할 수 있다.
GitHub - Zyin055/Inspect-Embedding-Training: Python script to analyze textual inversion embedding files used with AI image gener
Python script to analyze textual inversion embedding files used with AI image generators - GitHub - Zyin055/Inspect-Embedding-Training: Python script to analyze textual inversion embedding files us...
github.com
여기서 파일 다운
하 이거는 그냥 나중에 따로 정리해야겠다 발표까지 시간이 넘 없음
'혼자서' 카테고리의 다른 글
인공지능 코딩 파이썬 공부 Day 1 (0) | 2023.03.07 |
---|---|
FID, IS, precision, recall, PSNR, SSIM, LPIPS (0) | 2023.02.13 |
Kaggle 정리 (0) | 2022.12.16 |
Textual inversion 하는 과정 (실패후 성공!) (0) | 2022.11.25 |
Open AI Glide: Text-to image Generation Explained with code 따라해보기 2 (inpaint.ipynb) (0) | 2022.07.25 |