#샘플샷
(위 @asanagi / 아래 @healthyman)
| ANIMA_HybridStyle_V2 | ANIMA_HybridStyle_V2.5 |
#LORA 학습
- 1-1
먼저 taggui 프로그램과 학습하고자 하는 데이터셋을 준비한다.
- 1-2
본격적인 lora 학습에 앞서 컨셉에 맞게 데이터셋에 태깅을 할 차례인데 먼저 학습할 LORA의 주제에 따라 트리거 워드 혹은 컨셉을 설명하는 태그를 정해야한다. (화풍 스타일 등을 학습하고자 한다면 트리거 워드를 굳이 넣을필요없이 스킵해도 무방함.)
본 게시글에서는 '3d반실사 바디, 2d 스타일 얼굴' 이라는 컨셉을 학습하기 위해
Semi2D, HybridStyle, anime face, flat color face, stylized eyes, 2d face, realistic body, photorealistic skin texture, blended style, contrast between face and body, dot nose
라는 태그를 공통적으로 넣기로 정했다.
- 1-3
컨셉 태그들을 정리했다면
먼저 taggui 프로그램을 실행한다.
이후 file - load directory 또는 중앙에 위치한 load directory 버튼을 눌러 데이터셋을 정리해둔 폴더의 경로를 선택한다.
데이터셋 폴더를 불러오는데 성공했다면 최상단 그림을 우클릭 한 뒤 select all images 를 눌러 모든 그림을 선택해준다.
- 1-4
준비해뒀던
Semi2D, HybridStyle, anime face, flat color face, stylized eyes, 2d face, realistic body, photorealistic skin texture, blended style, contrast between face and body, dot nose
라는 태그들을 미리 복사한 뒤 'Add Tag' 박스에 붙여넣기-입력을 한다.
성공했다면 위 사진처럼 순서대로 입력되고 폴더 내에 이 태그들이 적힌 '파일명.txt' 캡션파일이 생겼을것이다.
- 1-5
이제 자동태깅 기능을 이용할 차례이다.
방법을 설명하기 앞서, 간략하게 정리를 하자면 일단 anima는 단부루 형식 & 자연어 형식 캡션을 사용하는게 가능한데 직접 학습해 보니 둘 중 하나만 사용하기보다는 둘 다 사용하는것이 효과적인것가탕서 두가지 모델을 사용해서 태깅을 할 것이다.
먼저 wd-eva02-large-tagger-v3 캡션 모델을 사용하여 데이터셋 사진들에서 단부루 형식의 프롬프트로 태깅할것이다.
위와 같이 세팅한 뒤
start auto-captioning 버튼을 눌러주면 자동으로 태깅이 진행된다.
- 1-6
1차 태깅이 완료되었으면 이제 자연어로 2차 태깅을 할 차례이다.
자연어는 Florence-2-large-ft 모델을 사용해준다.
이전과 마찬가지로 start auto-captioning 버튼을 눌러주면 자동으로 태깅이 진행된다.
- 1-7
만약 태깅이 성공적으로 완료되었다면 데이터셋 폴더 내에 파일명.txt 캡션 파일들이 생성되었을것이다.
| Semi2D, HybridStyle, anime face, flat color face, stylized eyes, 2d face, realistic body, photorealistic skin texture, blended style, contrast between face and body, dot nose, 1girl, nipples, solo, pussy, black hair, flat chest, navel, loli, blush, pantyhose, lying, on back, open mouth, pantyhose pull, sweat, clothes pull, looking at viewer, topless, black eyes, short hair, thighband pantyhose, cleft of venus, pulled by self, medium hair, censored, black pantyhose, undressing, mosaic censoring, stomach, heavy breathing, uncensored, Anime girl is sitting on a couch. She is completely naked. She has black hair that is falling over her shoulders. Her eyes are open and she has tears on her face. She also has black stockings on her legs. The couch she is sitting in is black. |
위의 예시처럼 컨셉태그 + 단부루태그 + 자연어태그가 합쳐져 구성된 캡션파일이 만들어졌다면 이제 데이터셋 정리 단계가 완료되었다.
- 2-1
여기서부터는 kohya_ss gui 에 대해 설명한다.
먼저 lora-training 탭에서 configuration 을 눌러 설정 세이브/로드를 활성화 시킨 뒤 열기버튼을 눌러 LORA 세팅 폴더에 있는 ANIMA 기본세팅.json 설정파일을 불러온다.
- 2-2
이제 기본적인 몇가지를 설정해줘야 할 차례다.
먼저 모델, 폴더 설정이다. 기본적으로는 위와 같이 세팅하면되는데
model - Pretrained model name or path 에 anima-preview3-base.safetensors (anima3 모델)
model - Image folder 아래에 위와 같이 아까 정리한 데이터셋 이미지 경로를
Folders - Output directory for trained model 아래에 학습이 끝난 lora 파일이 저장될 폴더를
Folders - Logging directory에 log 파일이 저장될 폴더를 설정해주면 된다.
추가적인 팁을 주자면, 폴더 하나를 만든 뒤 아래처럼 정리하면 편하다.
여기서 img 폴더 내부에는 이런식으로 폴더를 하나 더 만들어줘야 하는데 폴더 이름은 학습 Repeat(숫자)_무작위단어 형식으로 작성한다. 리핏 숫자 뒤의 단어는 아무런 역할도 하지 않기 때문에 굳이 건들 필요 없이 예시처럼 '10_iom' 이런식으로 구성하는걸 추천한다.
- 2-3
다음은 Basic 탭을 열어 몇가지 설정을 해야 한다.
우선 lora type 을 anima로 설정하고
그 아래에 있는 배치사이즈, 에포치를 설정해야 하는데 나같은 경우는 10 epoch를 고정으로 두고 쓰는 편이다.
이렇게 할 경우 총 스텝수는 (폴더명 10_iom 세팅기준) 10Repeat * 10epoch 로 데이터셋 * 100이 된다.
( 사실 이정도로 딥하게 학습시키지 않아도 데이터셋 상태에 따라 4epoch~ 정도에서도 충분히 쓸만한 lora가 나옴)
배치사이즈의 경우 학습을 돌렸을 때 vram이 허용하는 한도 내에서 최소 1Gb정도 여유를 두고 설정하면 되는데 내가 쓰는 rtx3090 24vram 환경 기준으로는 배치 6~8도 여유롭게 돌아가기에 (8배치 기준 피크때 21~22gb) 보통 이정도 수치로 두고 사용한다.
다음은 스케쥴러, 옵티마이저인데 나같은경우는 AdamW8bit를 제일 선호해서 이걸 고정으로 두고 쓴다.
LR Scheduler의 경우는 constant 혹은 cosine_with_restarts를 사용하는걸 추천한다.
lr값(Learning rate)의 경우는 경험상 AdamW8bit 기준 0.00005이 스윗스팟이니 이 값을 기준점으로 두고 세팅하는것을 추천한다.
만약 1만스텝 (데이터셋 100장) 이하의 학습을 할 경우엔 0.0001 정도로 세팅해도 무방하지만 어느 정도 스텝수가 많아지면 과적합의 위험이 있으니 소규모 학습이 아니라면 0.00005로 세팅하는걸 추천한다.
Unet learning rate 부분에는 아까 설정한 lr값과 동일한 값을 넣어주면 되고, Text Encoder learning rate 같은 경우는 필수는 아니지만 만약 학습하게 된다면 lr값의 5분의1 혹은 10분의 1을 넣는걸 추천한다.
Stop TE (% of total steps)의 경우는 대충 10% 아래로 적은 비중으로 세팅하는걸 추천하고 경험상 5000스텝 이하가 되도록 세팅하는걸 추천한다.
마지막으론 rank/alpha 값을 설정해야하는데 이 값들에 대해 간략히 설명하면
rank (dim) : 기억 저장소의 크기. 숫자가 작을수록 핵심적인 특징만 골라 담고, 숫자가 클수록 자잘한 배경이나 화풍까지 학습함.
alpha : 학습 내용의 가중치. Rank의 절반으로 설정하는걸 추천.
정도로 정리할 수 있다.
디테일한 화풍스타일을 학습한다면 128/64를, 특정 개념을 학습한다면 32/16 혹은 16/8을 추천한다.
글 상단의 샘플 이미지에있는 로라의 경우
ANIMA_HybridStyle_V2 (RANK 32/16)
ANIMA_HybridStyle_V2.5 (RANK 128/64) 을 사용했는데
이번 컨셉의 경우 아무래도 반실사풍 그림체를 더 디테일하게 학습하는것이 유효했는지 작가스타일 프롬프트를 사용했을 시에 ANIMA_HybridStyle_V2.5(RANK 128/64) 로라가 더 원본lora 화풍에 맞는 체형을 보여주고, ANIMA_HybridStyle_V2(RANK 32/16) 같은 경우는 그림체에 따라 체형이 변하는 모습이 더 잘 관찰된다.
샘플샷만 봤을때는 V2 lora가 스타일 프롬프트를 더 잘 반영하는 모습을 보여주고, V2.5 lora가 원본 스타일에 비교적 더 가까운 모습으로 보인다.
- 2-4
초반 image folder 아래에 있는 Anima 체크박스를 체크했다면 basic 아래에 anima 탭이 활성화되는데 여기에는 anima모델을 사용할때 필요한 텍스트인코더, vae의 경로를 적어주면 된다.
- 2-5
다음은 이제 Advanced 탭을 설정하겠다.
여기서 중요한 옵션들이 몇가지 있는데 하나하나 살펴보면
먼저 Keep n tokens 설정이 있는데, 이 설정의 경우에는 아래 설명할 ' Shuffle caption ' 옵션을 사용할 때 앞에서부터 몇 토큰을 유지할지를 묻는 설정이다.
용도는 '절대 변하지 않는 핵심 키워드를 AI의 머릿속에 가장 먼저 박아넣는 기능' 이고, AI의 경우 프롬프트를 읽을 때 앞부분에 나오는 단어일수록 더 중요하게 인식하는 특성이 있기 때문에 만약 컨셉 태깅을 했다면 이 설정을 해주는걸 추천한다.
만약 컨셉태깅을 하지 않았다면 값을 1로 둬도 무방하다.
사용 예를들어보면, 앞서 태깅단계에서
Semi2D, HybridStyle, anime face, flat color face, stylized eyes, 2d face, realistic body, photorealistic skin texture, blended style, contrast between face and body, dot nose
라는 공통 태그를 넣어줬는데
이같은 경우 총 12개의 태그를 섞이지 않고 맨 앞에 오도록 유지해야 하니 값을 12로 설정해주면 된다.
아래쪽에
이렇게 2가지 옵션 체크박스가 있는데
Shuffle caption은 안에 적어둔 태그들의 순서를 매 epoch마다 무작위로 섞어주는 옵션인데
매번 순서를 뒤바꿈으로써 AI가 모든 태그를 "순서와 상관없이 골고루 중요하게" 공부하게 만드는 역할을 하기도 하고
무엇보다 데이터셋 태깅단계에서 단부루태그+자연어 태그 조합을 사용했기에 Max Token Length(225)를 초과할 가능성이 있어서 이 기능을 통해 골고루 섞어서 학습하는 기능을 하기에 필수로 사용하는걸 권장한다.
Flip augmentation 같은 경우는 데이터셋 갯수가 부족하거나 할때 좌우반전을 통해 데이터셋을 뻥튀기시킬수 있는 기능이다. 평소에는 꺼두는걸 추천하지만 가끔 소량의 데이터셋으로 학습을 하게되는 경우에는 이 옵션을 키는걸 추천한다.
참고로 특정 캐릭터를 학습하는경우에는 장식물이나 헤어스타일 방향 등이 섞이게되기에 이 기능을 사용하는걸 비추천한다.
마지막으론 Min SNR gamma 에 대한 설명이다.
Min SNR gamma는 정보량이 적은 구간에서 불필요한 디테일을 억지로 학습하려는 것을 방지하는 기능이다.
쉽게 말해, 미세한 노이즈보다는 데이터셋의 지배적이고 특징적인 구조에 가중치를 두어 학습의 수렴 속도와 안정성을 높여주는 기능인데 이 기능을 사용하면 자잘한 잡음 학습은 줄어드는 대신, 데이터셋의 핵심적인 형상과 스타일 같은 평균적인 경향성을 더 빠르고 정확하게 포착해서 빠르게 수렴하는 효과가 있다.
만약 사용하게된다면 값은 5를 추천하고
개인적으로는 경험상 이 옵션을 쓰면 학습된 lora를 사용할때 뭔가 경직된 느낌이 나는것처럼 느껴져서 컨셉학습같은 특별한 경우가 아닌 스타일학습같은 일반적인 학습에서는 이 옵션을 사용하지 않는 편이다.
이외에 나머지 옵션들은 건들지않고 고정으로 쓰는 편이라 굳이 설명하지않는다.
# 참고자료 공유링크
(30일, 국룰)
aHR0cHM6Ly9raW8uYWMvYy9ia05OOHB3dEpXVF9IOVp4Y04xajBi
lora의 경우엔 TEST~3이 있는데
TEST는 추가학습을 위한 데이터셋 확보용 으로 만든 lora고, 사용하는 용도로 쓰는거면 v2와 v2.5가 메인이니까 둘 중 하나 쓰면 될것같음.
세부적인 세팅의 경우 경우 샘플사진들의 exif 가 살아있으니 이것들을 comfyui에 넣어서 참고하면 될것같고
추가로 해당 lora 사용할때 작가 스타일 프롬프트를 넣어주면 더 안정적으로 나오니 사용하는걸 추천함.
( 화풍 침식이 있으니 [@asanagi] 이런식으로 가중치를 줄이고 사용하는걸 추천 )
++
요청이 있어서 글 올려봄.
이 글에서 사용한 세팅들이 완벽한 정답이라고는 장담할 수는 없지만 내가 직접 사용하면서 안정적이라고 생각한 학습방법과 세팅들을 글로 정리해봤음.
야밤에 심심한김에 대충 생각나는대로 사족 붙이면서 쓴 글이라 좀 두서없이 늘어놓은거같긴한데 여튼 대충 필요한건 다 적은것같음..
