* 로컬 kohya-ss gui 버전기준으로, 코랩과는 다를 수 있음

* 순전히 본인의 경험, 뇌피셜로 정립한 학습 과정임. 

* 실사는 학습 안해봄

1. 데이터셋 구하기

*들어가기전에 : "Q.데이터셋 몇장 필요함?"

15장으로도 해보고 2800장 가지고도 해봤는데, 데이터셋과 퀄리티는 정직하게 비례함.

최소 30장은 돼야 볼만해지고 50장 이상이면 안정권이라고 봄. 대신 200장정도 넘어가면 그 이상은 의미없고 차라리 퀄리티 좋은것만 추려서 150장 정도로 하는게 낫지않나 싶음.


1) 노가다

 말 그대로 구글, 단부루, 픽시브, 트위터등을 뒤지며 손으로 직접 구함. 오래걸리고 귀찮지만 확실한 방법


2) Grabber 사용 (단부루 자료가 많을때)

그래버라는 booru 계열 사이트 크롤링 프로그램을 사용한다. Releases · Bionus/imgbrd-grabber (github.com)

자료를 받을때 단부루 이미지에 이미 태깅되어 있는것을 학습에 사용하려면 추가적인 설정이 필요하다

Imgur: The magic of the Internet 링크대로 설정하고 아무 이미지나 받아서 , 로 구분되어있는 태그가 적힌 txt 파일이 같이 받아지는지 확인.

Sources 버튼을 클릭하면 검색할 사이트를 고를 수 있는데, 보통은 gelbooru 가 낫고 가끔 야짤은 rule34가 자료가 더 많다. danbooru를 사용안하는 이유는 프리미엄 회원이 아니면 검색 태그 갯수 제한 2개 라는 븅신같은 점 때문

아 그리고 gelboooru, rule34 모두 한국에서는 막혀있어 검색이 안되니 goodbyedpi 등의 프로그램을 이용하도록 하자


한 태그 안에서의 띄어쓰기는 언더바 ( _ ), 각 태그 간의 구분은 스페이스바, 네거티브 태그는 앞에 -를 붙여서 검색해 적절히 긁을 짤들을 솎아내자.

그 다음 페이지 넘겨가며 서칭하면서 우클릭 - Save로 하나하나씩 다운하거나,

전부 다운하려면 프로그램 오른쪽 아래에 있는 

Get all 버튼을 클릭하고 상단의 Download 탭으로 이동 후


우클릭한 다음 다운하면 된다.


2. 이미지 정제

* 로라는 Bucket 기능(자동 리사이즈 & 크롭) 덕분에 이미지를 재단할 필요가 크게 없다. 학습 해상도가 512, 512라고 이미지를 512 x 512로 준비할 필요가 없다는 뜻. 원본 이미지에서 쓸데없는 부분만 크롭하는 방식으로 하자


1) 여백은 최대한 적게

기본적으로 여백이 없게 이미지에 캐릭터가 꽉차게 크롭해준다.

 Q. Bucket 기능은 이미지를 규격에 맞게 마음대로 크롭하기 때문에 신체일부가 잘릴 수 있지 않나?

그게 걱정되면 Bucket 해상도 규격에 맞게 이미지를 크롭하자 

학습 해상도 768,768 기준 Bucket 해상도는 이렇다.


Pixlr이나 Photopea 같은 사이트에서 적절한 Bucket 해상도를 종횡비에 넣고 크롭하자

당연히 이 과정은 데이터셋이 수백장 넘어가면 겁나 오래걸리니까 대다수 이미지는 눈대중으로 대충 자르고 전신 스탠딩 그림같은 귀한 자료만 이 방법을 쓴다. (가장 학습이 안되는 신발 부분이 잘리는거 방지)


2) 인물은 단독으로

캐릭학습의 경우 절대 2명 이상이 나오는 그림은 넣지말자

이런 단체사진의 경우 한명만 나오게 크롭 후, 필요하면 다른 인물 신체는 인페인트로 지우자


예시


3) 난잡한 그림 / 너무 특이한 그림체는 제외

AI가 봤을때 배경, 인물, 의상 구분이 안될 것 같은 그림체

미친 이펙트 떡칠

무언가를 들고있거나, 사물에 의해 신체 일부가 가려지는 경우


*이거까지 제외하면 쓸만한게 없을수도 있으므로 데이터셋 사정에 따라 적당히 타협

3. 데이터셋 태깅

 Grabber를 사용해 데이터셋을 모았다면 태깅이 이미 다 되어있을거고, 손으로 직접 다운한 이미지들은 Webui의 확장기능 WD 1.4 Tagger를 이용해 태깅해준다. 확장기능 사용법은  kohya_ss 드림부스 기반 LoRA GUI 학습 사용법 - AI 그림 채널 (arca.live) 링크 8번에 잘 설명되어있으니 참고. 



태그 정제 효용성은 현재 실험중. 할 사람만 하셈  학습 해상도 차이 및 태그 정제 유무 비교 - AI그림 학습 채널 (arca.live) 

1차적으로 태깅된 파일은 kohya_ss 의 Basic Captoning 탭에서 한번 더 정제해준다. 

오른쪽 위 Overwrite 뭐시기 체크박스를 켜고, Find text 에 , 지워야할태그 를 넣고 Replacement text 를 비워두면 해당 태그만 txt파일에서 지워진다. 로라의 경우 이미지에 라벨링된 태그들이 트리거 워드가 된다는 것은 알고 있을 것이다. 그렇다면 태그를 최대한 압축하는 것이 사용하기도 편하고 특히 여러 의상을 구현할때 중요하다. 이에 대해서는 후술. 지워야 할 태그들은 다음과 같다

1. 내가 프롬프트로 사용하지 않을 태그 (ex : highres, simple background, white background...)

2. 어짜피 로라 사용할때 100% 같이 넣을 태그 (1girl, solo 및 캐릭터 고유 특성 등)

3. 표정관련


1번은 그렇다쳐도 2, 3번은 뭔가 싶을건데, 예로들어 pink hair, blue eyes 특성을 지닌 캐릭터가 있다면 보통은 캐릭을 구현할때 머리와 눈색은 바꾸지 않으니 굳이 저것들을 넣어서 트리거 워드를 분산시킬 필요가 없다. 여러 의상을 구현하려 할 때 특히 독이 되는데, A의상이나 B의상이나 둘 다 pink hair 태그를 가지고 있다면 pink hair 태그에 A의상과 B의상 정보가 섞여 저장되는 불상사가 생겨버린다. 이를 제거하는 것.

3번도 2번과 같은 이치. open mouth, closed mouth, smile, angry, crying, blush, looking at viewer 등의 태그는 A의상 B의상 상관없이 공통적으로 들어갈 수 있으니까 지워준다.


배경, 표정 프롬 지우면 고정되는거 아니냐?(접기)

최소한 내가 만들었던 로라중에서는 태그 제외했다고 배경, 표정이 고정되는일은 없었음. 인물 그림마다 있는게 배경, 표정이고 모델에 pre trained 된게 많을거니까 어짜피 태그에서 빼도 괜찮을거라고 생각했고. 실제로 별 문제없다고 느꼈음. 정 찜찜하면 냅둬도 됨

* 물론 기존 프롬으로는 구현이 힘든 empty eyes, ahegao 같은 건 태깅을 해줘야 너가 그 태그를 넣을때 구현이 가능하겠지?


※ Tagger 확장기능으로 태깅할 사람은 굳이 kohya에서 태그를 뺄 필요없이 아예 태깅할때부터 Exclude tags 칸에 태깅 금지할 것들을 적으면 된다.


번외) 1토큰 태깅

 더 나아가, 여러 의상을 구현하고 싶을때 아예 각 의상 정보를 1토큰 단어에 압축해버리면 어떨까해서 시도해본 방식

이미지 폴더를 이런식으로 만들고, 각 폴더에 의상별 학습 이미지 20장씩을 넣어주고 태깅도 style 이름과 동일하게 1개만 해줬음

8에포크 학습(각 의상당 1600스탭씩 학습한셈), 프롬에 각각 1토큰 프롬만 적었을때 결과. 구현하고자 하는 의상이 늘어날수록 각 의상의 구현도는 떨어질 수 밖에 없고 학습시간도 배로 늘어나니 이 점은 참고


4.학습

1) 정규화에 대해

본인은 정규화 이미지를 쓰지 않음

정규화를 쓴다고 딱히 자세, 구도, 의상 체인지가 다양해지는 느낌 못받았고, 정규화를 안쓰니까 자세, 그림체가 고정된다?= 애초에 데이터셋 자체가 글러먹었다고 생각.


개인적으로 '잘만든 로라'의 기준으로 삼은 양키들이 만든 로라의 경우

1. 모델 그림체에 영향을 미치지 않으면서도 높은 캐릭터 구현도

2. 트리거워드를 사용하지 않고 로라만 적용해도 잘 나옴

3. 다른 포즈, 그림체 로라랑 같이 적용가능한 안정성

인데, 정규화를 사용하면 1 2 3번 모두 만족하기 어려운 결과가 나왔음

정규화 이미지가 스탭 수에 들어가면서 학습시간이 늘어나는건 덤.


물론 이는 100% 내 개인적인 의견이고 정규화 사용여부는 의견이 많이 갈리므로 직접 만들어서 비교해보고 결정하는 것이 좋다

정규화 유무 비교(접기)

정규화 O


정규화 X


정규화 O


정규화 X


Lora 이미지 정규화가 꼭 필요한가? 개인적으로 그냥 비교해봄 - AI그림 학습 채널 (arca.live)

정규화이미지가 캐릭터로라에 필요한가 비교해봤음 - AI 그림 채널 (arca.live)


2) 학습 파라미터


학습하는 사람마다 제각각인게 파라미터로, 참고만 하길 바람

*학습 모델은 NAI(animefull-final-pruned) 사용

Train batch size = 1 : 본인컴이 VRAM 8기가라 768,768 해상도에선 1밖에 못돌림. VRAM이 허용하는 만큼 최대한 올리는게 학습 시간 단축에 도움이 된다. 이 때 러닝 레이트도 같이 올려주는게 좋다고함


Epoch : Epoch는 준비한 데이터셋의 양에 따라 유연하게 적자. 나는 데이터셋  x 리핏이 1000 언저리로 되게 설정하고 총 학습 스탭 수는 데이터셋 x 80 ~ 100 정도로 맞춰준다. 예) 데이터셋이 50장이면 repeat = 20, Epoch = 5  → 1 Epoch 당 1000 스탭 총 5 Epoch 5000스탭


LR_Scheduler = constant_with_warmup : 스케쥴러 별 차이는  LoRA 학습 가이드 (번?역 중) - AI 그림 채널 (arca.live)  $scheduler  부분 참고. 여러개 써봤는데 체감상 크게 다른건 없는거 같음. 


Optimizer = AdamW8bit : 기본 옵티마이저. 최근 업데이트로 추가된 자동으로 LR을 조정해주는 D-adapatatoin, 동일 스탭 수에서 더 빠르게 학습이 된다는 Lion 도 고려대상.

D-adaptation 의 경우 Learning Rate, Unet, Text Encoder 을 1, Network Rank 와 Alpha를 동일값으로 설정해줘야 하고,

Lion은 러닝레이트를 기존의 3분의 1 이하로 내려줘야 됨.

개인적으로 둘 다 결과가 마음에 들지 않아서 사용하지는 않음


Network Rank = 128, Network Alpha = 1 

Rank 와 Alpha 값에 딱히 이유는 없음. Rank가 높을수록 로라 용량이 크니까 퀄리티가 더 좋지 않을까? 싶을텐데, LoRA에서 rank는 얼마가 적당할까? - AI 그림 채널 (arca.live) 참고, 내가 직접 Rank 리사이징해서 비교해봤을때도 Rank랑 퀄리티랑 크게 관련이 없다고 판단됐음. 다만 최소 4 이상은 주는걸 추천.

나는 단순히 Alpha / Rank 값이 변화하면 러닝 레이트도 다시 조정해야해서 귀찮기 때문에 학습 처음했을때 쓰던 1 / 128 로 고정중.


Unet Learning Rate : 캐릭 학습의 경우 1e-3 ~ 6e-4 유동적으로 (데이터셋 양이 많으면 높게, 적으면 낮게), 그림체 학습의 경우 4e-4를 자주 쓴다

Text Encoder Learning Rate : Unet 의 절반으로 설정


LR Scheduler :  cosine_with_restarts

Network Rank(4 ~ 128) = Network Alpha (4~ 128)

Unet : 0.00015, Text Encoder : 0.000015

잘 만든 로라 셋팅 돚거 한건데 이거 잘나오는거 같음


Max resolution = 768,768 : 학습 해상도의 차이 크다고 생각함. 세세한 디테일까지 학습하길 원하면 고해상도 학습이 훨씬 만족감이 높을것

Clip Skip = 2 : 자신이 그림 뽑을때 쓰는 clip skip 수치로 설정

Flip augmentation : 그림체 학습이거나 학습할게 좌우대칭인 것은 키자. (랜덤으로 이미지를 좌우반전으로 학습)


| 그 외 쓸만해보이는 옵션들 (나도 별로 안써봄) |

Don't upscale bucket resolution : 기본으로 체크가 되어있는데, 이 옵션을 끄면 저해상도 이미지를 최대 bucket 해상도에 맞게 업스케일링해서 학습함.

Random crop instead of center crop : 항상 중앙을 기준으로 이미지를 자르는 bucket 기능의 단점을 보완하는 옵션. 근데 이게 Everydream 처럼 포커스를 이리저리 옮겨다니면서 자르는건지는 불명. 아마 맞을거 같긴한데 Cache latent 를 꺼야해서 학습속도 손해가 있음.

Caption Dropout :  Caption Dropout을 써야 하는 이유에 대한 정보글 - AI그림 학습 채널 (arca.live) 

Noise Offset :  너무 어두운 이미지를 학습하지 못하는 이유와 해결방법에 대한 정보글(Noise offset) - AI그림 학습 채널 (arca.live) 



3)그 외

LoRA Training Guide (rentry.org)

THE OTHER LORA TRAINING RENTRY

나보다 500배는 신뢰성있는 양키햄들의 강의


1. 로스율만으로는 판단 금지 : 로스 0.1 부터 시작해서 0.06까지 잘 수렴한 학습이 과적합으로 망했던적도 있고 하루종일 0.12 언저리에서 놀았던 학습이 오히려 잘 나왔던 적도 있음. 다만 로스율이 1.14 이상으로 높게 유지되는 경우는 러닝 레이트를 낮춰보자

2. 학습한 로라 테스트는 오렌지 sfw에서 로라 가중치 1, cfg scale 7로 뒀을때로 함. 오렌지보다 세세한 디테일 잘 드러나는 모델있으면 추천좀.

3. Locon은 테스트중. 학습속도가 30% 가량 느려지는거에 비해서 결과가 좋은지는 아직 의문


정보글 쓰면서 만든 로라 및 

https://drive.google.com/drive/folders/1wkZecNOo5IEKefSvGZU_dZGx6vEkHP5u?usp=쉐어_링크 지금까지 만든 로라 공유


우매봉, 틀린 부분있으면 제발 지적좀 '해줘' 학습 관련 정보 조온나 없다 진짜로