(긴급 수정) 5월30일 현 KOHYA_SS를 v21.5.14 update하지 말고 작업해라. 뭔가 깨져나가는 게 많고 메모리도 무지 많이 먹어서 배치를 올릴 수 없는 상태이다. 특히 Dadaptation은 엉망진창이어서 로스가 마구 증가하고 터져나간다. ㅠㅠ Dadaptation말고는 학습이 되긴 되지만 영 찝찝하다.

-----------------------

xRica 님이 "얼굴 로라 한번 만들어 봐요~!"  https://arca.live/b/aireal/77352406/364271819#c_364271819 에서 아낌없이 기술을 푸셨다. 여기에 나도 동참한다. (실사와 애니로라에 관심 열라 많음)

감추고 자시고 없고 내가 로라만드는 과정 몽땅이야. 실사로라 만드는 챈붕들도 이 캠페인에 참여해서 각자 초식을 서로 스까면 어떨까? (동일한 데이터로 해도 만드는 사람마다 다른 로라가 만들어지잖아?) 기대할께.

 작업환경: LOCAL PC, KOHYA_SS 

1. 데이터 가공

- 정규화 데이터 안씀: 과적합방지를 위한 효과와 로라의 범용성의 조금 올라가는 효과는 있는데, 다른 부정적인 효과도 있어. 그래서 실사로라에서는 정규화 데이터 안쓰고 있어. 애니는 여러가지 방법으로 정규화데이터를 쓰기도 해

- 위에서 xRica님의 데이터 (사실 이 정도 데이터 퀄이면 거의 얼굴의 복사가 가능하다고 판단됨) 를 768,768로 적당히 자르고 문지르고 해서 데이터를 가공하고, (실사로라용 데이터는 768은 되어야 하지 않을까? 디테일이 달라)

- KOHYA_SS의 Utilities>Captioning>BLIP Captioning으로 캡션을 자동으로 생성하고,
수동으로 캡션에 가중치를 삽입 -
예) xricav8 (face:1.4) of a woman with long hair and a white top ,(NSFW:1.4) 

- (face:1.4):   얼굴을 더 열심히 학습하라는 의도 (얼빠에게는 필수)

- xricav8: 로라 키워드로 사용할 수 있게 모든 데이터 파일에 삽입

- ,(NSFW:1.4): 뭐! 왜? NSFW 싫어? 이거 넣으면 나중에 아주 잘 벗어. 단 꼭 사진에 옷을 입었다고 캡션에 넣어야 해. 학습 때 옷이라고 알려줘야 AI가 나중에 그 옷을 훌러덩......아니면 Ai가 옷도 피부인줄 알아.
(팁: a woman with a very big breast in white dress posing for a picture ,(NSFW:1.4) - 작아도 크다고 우겨봐. 좋아)

작업한 데이터: https://drive.google.com/file/d/1T0ZY8VV6xvcUvXtiDheychlKXMW3CUHE/view?usp=share_link


2. Training Parameter 

내가 쓰는 것인데 정답이 아니고 나의 선택이야 그러니 이거저거 해봐서 자기에게 맞는 것을 찾는 것이 좋아. 그 전까지는 아래 것을 쓰면 되지 않을까?)


로라 타입: LyCORIS/LOHA (데이터를 더 많은 레이어에서 학습하니까 더 디테일하게 만들어 준다고 믿음)
베이스 모델은 기본 모델인 v1-5-pruned.safetensors 
실사학습을 위해서 SD1.5를 쓰려면 꼭 7.1G 짜리 FULL MODEL을 써라, pruned ema 이렇게 크기 줄인 모델은 로라학습에서 뭔가 부족해. 이건 모든 베이스 모델에 해당 돼. 
어떤 모델을 베이스모델로 쓰더라도 가능하면 줄이지 않은 모델을 로라의 베이스 모델로 써야해. 

애니의 경우는 NAI.model.animefull-latest.ckpt 7.1GB를 추천해.


관심이 많은 스텝:

Folder 20_xricav8: 19 images 

Folder 20_xricav8: 380 steps  (한 에포크에 300-500 step이 적당한 것 같아. 그러니까 300개가 넘는 데이터 셋을 준비하면 리피트는 1을 추천해)

에포크 10

배치 2  (실사에서 진짜 각잡고 로라 뽑을 때는 1로 해. 결과가 달라). 

max_train_steps = 1900


나머지 파라미터들:

lr_warmup_steps = 5%

weighted_captions (학습 시에 강조할 내용을 지정할 수 있어)

resolution=768,768 (실사로라용 데이터는 768은 되어야 해)

network_dim=8 (요즘 대세야. 이걸 8로 하면 아래 alpha/conv_dim/conv_alpha 를 4,4,1로 하고 이걸 16으로 하면 8,8,1로 하는 것을 추천해, 근데 이것도 정답은 없어)

network_alpha=4 

conv_dim=4

conv_alpha=1

text_encoder_lr=0.000321 (아래 learning_rate 최적값 찾는 방법 참조해서 반값으로 넣어)

unet_lr=0.000643 (아래 learning_rate 최적값 찾는 방법 참조해서 같은 값으로 넣어)

learning_rate=0.000643 (아래 learning_rate 최적값 찾는 방법 참조)

lr_scheduler_num_cycles=3 (해골물이야, 근데 효과가 커)

lr_scheduler=constant_with_warmup (개취인데 learning_rate의 최적화 값을 사용하기 위해 이 스케줄러를 쓰고 있어)

lr_warmup_steps=5 (해골물이야)

optimizer_type=AdamW8bit (개취인데 여러 optimizer_type를 시도해 보는 것 추천해)

max_token_length=150 (해골물이야)

bucket_reso_steps=64 (해골물이야)

min_snr_gamma=1 (데이터의 노이즈를 적당히 걸러주기때문에 수렴을 아주 빠르게 잘해, 그렇다고 이 값을 왕창 올리면 디테일이 죽어서 로라가 밋밋해. 애니 로라는 원래 SNR이 높으니까 와장창 크게 3 이렇게 줘도 돼)

shuffle_caption (꼭 해라)

xformers (꼭 해라)

noise_offset=0.05 (과적합 방지를 위해 꼭 넣어라. 만약 대량의 데이터를 가지고 있고 로라를 정말 단단하게 만들고 싶으면 이것을 0.2정도로 놓고 과적합을 방지하면서 max_train_steps을 수만 단위로 돌려봐. 아주 고집 쎈 로라가 만들어져. ) 

Rate of caption dropout=0.0 (마찬가지로 과적합 방지를 위한 거야. 나는 noise_offset으로 해결이 안되면 그때가서 이걸 써. 적당한 값은 에포크 다 0.03 추천)

사실 Stop text encoder training이 과적합 방지에 직빵인 것 같은 데 이 옵션을 KOHYA가 GUI에 넣어 놓은 지는 한참 되었는데 미적거리면서 활성화를 안하네. 패턴이나 작풍에 대한 섬세한 로라를 원하는 사람은 과적합 근처에서 text_encoder_lr를 아주 작게 1E-8으로 변경해서 2차 작업을 하기도 해. 만약 이 섬세한 작업을 하고 싶은 사람은 2차 작업에는 데이터 셋을 변경하는 것을 추천해. 예를 들어 얼굴만 파겠다든가 특정부위만 파겠다든가.......


clip skip 1 (실사 베이스는 모두 SD1.5 기반이고 애니 베이스는 NAI가 기반이라고 가정하면, SD1.5 와 NAI의 모델 학습 시에 사용한 동일한 clip skip으로 로라도 학습시키는 것이 타당하다고 봐. SD1.5 모델 학습 시 clip skip 1 & NAI 모델 학습 시 clip skip 2가 사용되었다고 하더라)


아래는 학습 중 확인하는 샘플이니까 대충 해

sample_sampler=euler_a 

sample_prompts 
NSFW, xricav8, 1girl, solo, nude, face shot, photography, detailed face, (masterpiece, best quality, realistic:1.3), (photo-realistic:1.4), (hyper realistic:1.3), professional photography, editorial photography, extremely detailed CG unity 8k wallpaper, HDR, RAW, extremely intricate, extremely delicate, ultra detailed, aesthetic, lifelike rendering, immersive atmosphere, chiaroscuro, cinematic lighting, Depth of Field --n (low quality, worst quality:1.4), poor, bad anatomy, wrong anatomy, bad body composition,low effort, bad anatomy,blur,lowres,cartoon, greyscale, monochrome, abstract art,text, title, signature, error, jpeg artifacts, watermark, signature, multi scene --w 512 --h 768


참고: learning_rate 최적값을 찾아서 써보자
learning_rate를 해골물인 0.0001 이런 값 대신, 아래의 신박한 방법의 사용하여 적절한 값을 찾아서 쓰고 있어. 이 방법이 정답인지는 몰라. 하지만 학습초반에 버벅이지 않고 바로 수렴하는 값을 찾아 주는 것인지도 몰라.

적절한 Learning Rate 찾기 귀찮을 때 사용가능한 방법 https://arca.live/b/breaking/72745770?target=all&keyword=dadaptation&p=1


이런 결과가 나와 -  learning_rate가 어떤 값(여기서는 0.000643)으로 수렴하지. 그 값을 사용하는거야 . 

(이런 그림은 KOHYA_SS에서 왼쪽 아래에 Start Tensorboard를 누르면 나와. 여러가지 학습의 결과가 LOG에 기록되는데 그걸 그래픽으로 보여주는 거야.)

SD1.5모델을 사용하여 실사로라를 만드는 경우, 기괴하고 뒤틀어지고 사람인지 뭔지 구별이 안가는 샘플을 많이 봤을꺼야.
이런 샘플을 보면 불안하지. 이거 망하는 거 아냐. 계속 돌리면 나아지나?...아마 SD1.5를 베이스 모델로 잘 안쓰게되는 이유 중 하나일꺼야.
근데 이 방법으로 learning_rate 최적값을 찾아 써보면 속이 편안해. 에포크 1부터 멀쩡한 샘플이 나올 확률이 높거든.

(수정: Optimizer를 DAdaptation으로 작업하는 위의 내용은 다른 Optimizer를 사용할 때 보다 VRAM을 많이 먹는다. 그래서 배치를 크게 잡으려면1-2기가 정도 여유가 있는 상태에서 작업을 하는 것을 추천. 아님 터진다.)


최종적으로 내가 사용한 Training Parameter 화면



3. 학습 및 낙점과정

에포크가 10까지 주욱 로스가 감소하는 결과를 보임 (이렇다고 에포크10의 결과가 가장 좋은 것 아님, 그저 참조)

각 에포크당 샘플 1-5 / 6-10

에포크 9에서 과적의 냄새가 난다. 그런데 에포크10에서는 과적을 억지로 우겨서 홀라당 타 버린 결과는 나오지 않았어.
지금부터는 개취의 영역이야.
원래는 WEBUI를 열어서 모델 몇가지를 가지고 로라의 에포크 결과를 테스트해야해, 어떤 에포크가 좋은지, 최적의 가중치는 무엇인지...아주 골치아프고 가장 시간걸리는 일이 남아있어.
아래 왼쪽이 데이터, 오른쪽이 로라 학습 결과야. 이 정도면 거의 복사한 수준이니까 그냥 8번째 에포크 결과로 진행하는 걸로 결정.
로라 완성!


로라를 가지고 그림 그린 결과는 추가할께. 만들어진 로라를 공유할께 테스트하면 좋고.

에포크 8 https://drive.google.com/file/d/1GeDhfMYBPVwNhjV7T7dOeJQNj84cEiUt/view?usp=share_link

에포크 9 https://drive.google.com/file/d/1xETrBTAsMpRbTT0K6oJUT-7XhBUTVS-z/view?usp=share_link

에포크 10 https://drive.google.com/file/d/1iLOLBycFmofUtBsVHQqgbjc5md-chLwV/view?usp=share_link


잘깍아논 모델을 베이스로 하여 로라를 만들어서, 다른 모델에 사용하면 엉뚱한 사진이 나오는 것을 경험해 봤을꺼야. SD1.5를 베이스로 한 실사로라는 실사 2.5 2D 모두 잘 먹는다. (근데 데이터의 누님이 눈알이 너무 희번덕거려서 눈이 에러야)

로라를 넣어서 그림을 그리면 데이터의 사진이 잘 복사된 로라임을 확인할 수 있어. (모델 henmixReal_v40, icbinpICantBelieveIts_v6)

POS prompt

1 woman, (solo:1.3) , upper body  shot,  large breasts, narrow waist, well defined sexy body, 

(best quality, realistic, masterpiece :1.3), (photorealistic:1.2), (intricate details),  rembrandt lighting, , ray tracing,  clean  skin texture, xricav8, <lyco:xricav8_sd15_LOHA-08:0.8>

NEG prompt

(low quality , worst quality:1.3) , (malformed body, bad anatomy , wrong anatomy:1.4) , low effort , blur , poor , lowres , cartoon , greyscale , monochrome , (text , title , signature , jpeg artifacts , watermark , frame, photo box, signature:1.3) , (multi scene:1.2), tatoo,(skin trouble, spot, age spots:1.1), muscle, mucular, nipples


근데, 위에 그림처럼 원본의 인물이 너무 얼굴에 비해 몸이 조금 부실해서(학습때 캡션에 왜 NSFW를 넣었겠어? 응?), 로라를 얼굴에만 쓰는 것이 내 취향에 맞아. 혹자는 실사로라의 참 맛이 옷입은 사진안의 몸매를 Ai가 놀라울 정도로 꽤뚫어 본다는 것에 있다고 하지. 난 모르는 일이야.

POS prompt

1 woman, (solo:1.3) , upper body  shot,  large breasts, narrow waist, well defined sexy body, 

(best quality, realistic, masterpiece :1.3), (photorealistic:1.2), (intricate details),  rembrandt lighting, , ray tracing,  clean  skin texture, __hair-female__,  __neckwear__, __neckwear__, __feminine cloth__, { __scenario-scifi__ | __dateplace__} 


NEG prompt

(low quality , worst quality:1.3) , (malformed body, bad anatomy , wrong anatomy:1.4) , low effort , blur , poor , lowres , cartoon , greyscale , monochrome , (text , title , signature , jpeg artifacts , watermark , frame, photo box, signature:1.3) , (multi scene:1.2), tatoo,(skin trouble, spot, age spots:1.1), muscle, mucular, nipples


DDSD  Positive 1 Prompt 로 얼굴만 집어넣어서 그림 그림들

<lyco:xricav8_sd15_LOHA-08:0.85> extremely detailed face,   Perfect facial skin texture,  shy smile, looking at another, (best quality, realistic, masterpiece :1.3), (photorealistic:1.2), (intricate details),  rembrandt lighting, ray tracing


chilloutmix_Ni
epicrealism_newEra
anindeMix_vasi20
henmixReal_v40
braBeautifulRealistic_brav5
lofi_V21
xRica_v5.6_2.5D
4moonAni_v1
abyssorangemix3AOM3_aom3a1b
basilticabyssdream_ba01Ver1


실사 로라 만들기 별거 없지?

(괜히 시작했다)


(수정: 각잡고 다시 만든 로라)

데이터: 누끼따고 배경 단색 처리


모델 fresh_anindeMix_vasi20 적용  에포크 2-10(에포크에서 고르기 무지 어려워 - 예쁜 에포크를 고르는 것이 아니라 데이터와 적합성이 높은 에포크를 골라야 하는데, 이게 순전히 주관적이라서 ....아래는 데이터 누님 자신의 몸매인데 많이 아쉬워)


(수정2)
실사 로라에 진심이면 https://arca.live/b/hypernetworks/77796541?p=1
개고생하고 조금 나아지는 실사로라를 위한 가성비 떨어지는 노가다의 길이야