4-2. 데이터셋과 캡션
LoRA의 품질은 설정이 아니라 데이터에서 정해진다. 어떤 그림을 몇 장 모으고, 각 그림에 어떤 설명을 붙이느냐. 이번 수업의 핵심은 한 문장이다. 설명에 적은 것은 프롬프트로 조절할 수 있게 되고, 적지 않은 것은 LoRA에 굳는다.
학습 데이터의 모양
그림과 설명의 쌍이다. 기반 모델을 학습할 때와 같은 형식이다(1-5).
dataset/
001.png 001.txt
002.png 002.txt
...
.txt 파일에 그 그림의 설명이 들어 있다. 이 설명을 캡션이라고 한다.
몇 장이 필요한가
| 목적 | 장수 | 비고 |
|---|---|---|
| 캐릭터 | 15~30장 | 적어도 된다. 다양성이 더 중요하다 |
| 화풍 | 50~수백 장 | 다양한 대상이 그 화풍으로 그려져 있어야 한다 |
| 개념, 자세, 의상 | 20~100장 | 그 개념이 여러 상황에서 나타나야 한다 |
많다고 좋은 것이 아니다. 나쁜 그림 100장보다 좋은 그림 20장이 낫다. 모델은 데이터의 결점까지 배운다.
무엇을 다양하게, 무엇을 일정하게
LoRA는 데이터 전체에 공통으로 나타나는 것을 배운다. 여기서 원칙이 나온다.
가르치고 싶은 것은 모든 그림에 일정하게. 가르치고 싶지 않은 것은 그림마다 다르게.
캐릭터 LoRA
| 일정해야 하는 것 | 다양해야 하는 것 |
|---|---|
| 얼굴, 머리 모양과 색, 눈 색, 체형 | 자세, 각도, 표정 |
| (기본 의상을 가르치려면) 의상 | 배경, 조명, 구도(얼굴, 상반신, 전신) |
흔한 실패가 있다. 모든 그림이 정면 상반신에 흰 배경이다. 그러면 LoRA는 "이 캐릭터는 정면 상반신에 흰 배경"이라고 배운다. 옆모습을 시켜도 정면이 나오고, 배경을 지정해도 흰색이 나온다. 자세와 배경이 캐릭터의 일부로 굳은 것이다.
화풍 LoRA
| 일정해야 하는 것 | 다양해야 하는 것 |
|---|---|
| 선, 채색, 명암 처리, 색감 | 그려진 대상. 사람, 풍경, 사물, 여러 캐릭터 |
한 캐릭터만 그려진 그림으로 화풍을 학습하면 화풍과 캐릭터가 함께 굳는다. 무엇을 시켜도 그 캐릭터가 나온다.
그림 고르기와 손질
- 해상도: 모델의 기본 해상도 이상. 작은 그림을 키워 쓰면 흐릿함을 배운다.
- 품질: 흐린 것, 압축 자국이 심한 것, 글자나 워터마크가 박힌 것은 뺀다. 워터마크가 여러 장에 있으면 워터마크를 배운다.
- 잘라 내기: 대상이 화면에서 너무 작으면 잘라 낸다. 전신, 상반신, 얼굴을 골고루 넣는다.
- 중복: 거의 같은 그림이 여러 장이면 그 구도가 굳는다. 하나만 남긴다.
그림의 가로세로 비율은 달라도 된다. 학습 도구가 비슷한 비율끼리 묶어 처리한다. 버킷이라고 부른다. 억지로 정사각형으로 자를 필요가 없다.
캡션의 원리
학습은 "이 캡션이 붙었을 때 이 그림이 나오게" 가중치를 움직이는 일이다. 캡션에 이미 있는 말은 기반 모델이 아는 말이다. 그 말로 설명되는 부분은 이미 설명됐으니 LoRA가 새로 배울 것이 없다. 설명되지 않고 남은 부분을 LoRA가 떠맡는다.
그래서:
- 캡션에 적은 것: 그 단어에 묶인다. 쓸 때 그 단어를 넣거나 빼서 조절할 수 있다.
- 캡션에 적지 않은 것: 설명할 길이 없으니 LoRA 자체에 흡수된다. LoRA를 켜면 항상 나온다.
예: 캐릭터 LoRA
은빛 머리에 붉은 눈, 검은 교복을 입은 캐릭터를 가르친다. 창가에 앉은 그림 한 장의 캡션을 두 가지로 써 보자.
캡션 A
mychar, sitting, window, classroom, sunset, smile
캡션 B
mychar, silver hair, red eyes, black school uniform, sitting, window, classroom, sunset, smile
| 캡션 A | 캡션 B | |
|---|---|---|
| 은빛 머리, 붉은 눈 | mychar에 흡수된다. mychar만 쓰면 나온다 | silver hair, red eyes 태그에 묶인다. 태그를 써야 나오고, 바꿀 수도 있다 |
| 검은 교복 | mychar에 흡수된다. 옷을 갈아입히기 어렵다 | black school uniform에 묶인다. 다른 옷 태그로 갈아입힐 수 있다 |
| 자세, 배경, 표정 | 둘 다 캡션에 적었다. 프롬프트로 조절된다 |
정답은 목적에 달렸다. 흔히 쓰는 방식은 이렇다.
- 바뀌면 안 되는 고유한 특징(얼굴, 머리, 눈)은 적지 않는다. 트리거 단어에 흡수시킨다.
- 바꾸고 싶은 것(의상, 자세, 표정, 배경)은 적는다.
mychar 같은 단어를 트리거 단어라고 한다. 기반 모델이 모르는 새 단어를 지어서 쓴다. 이미 뜻이 있는 단어를 쓰면 그 뜻과 섞인다.
예: 화풍 LoRA
화풍은 캡션에 적지 않는다. 그려진 내용만 적는다.
1girl, long hair, sitting, park, bench, autumn
내용은 캡션으로 다 설명됐다. 설명되지 않고 남는 것은 화풍뿐이다. LoRA가 그것을 떠맡는다. 그래서 화풍 LoRA는 트리거 단어 없이 켜기만 해도 화풍이 적용된다.
캡션을 만드는 법
수십 장의 캡션을 손으로 쓰지 않는다. 자동으로 만들고 손으로 고친다.
| 기반 모델 | 캡션 형식 | 만드는 도구 |
|---|---|---|
| 태그 모델 (Illustrious 등) | 태그 나열 | 태그를 붙여 주는 모델 |
| 문장 모델 (Flux 계열 등) | 설명문 | 그림을 보고 설명을 쓰는 언어 모델 |
기반 모델이 학습 때 본 형식을 따른다(2-3). 태그 모델에 문장 캡션으로 학습하면 잘 안 된다.
자동으로 만든 뒤 반드시 훑어본다.
- 틀린 태그를 고친다.
- 트리거 단어를 맨 앞에 넣는다.
- 흡수시킬 특징의 태그를 지운다.
- 모든 그림에 공통인데 가르치고 싶지 않은 것(예: 흰 배경)은 확실히 적는다.
가르치고 싶지 않은 것이 모든 그림에 있을 때
자료가 설정화뿐이라 전부 흰 배경에 서 있는 자세다. 어떻게 할까.
- 캡션에 적는다.
white background, standing을 모든 캡션에 넣는다. 흡수되는 것을 줄인다. 완전히 막지는 못한다. - 데이터를 늘린다. 3단계의 편집 모델로 다른 자세, 다른 배경의 그림을 만들어 보탠다(3-4). 지금은 이 방법이 가장 효과적이다.
- 먼저 약하게 학습해서 그 LoRA로 그림을 뽑는다. 잘 나온 것을 골라 데이터에 넣고 다시 학습한다.
정규화 그림
캐릭터 LoRA를 학습했더니 모든 소녀가 그 캐릭터가 되어 버렸다. 1girl이라는 일반 개념까지 물든 것이다.
이것을 막으려고 "평범한 소녀 그림"을 함께 넣어 학습하는 방법이 있다. 내 캐릭터는 mychar, 1girl로, 평범한 소녀는 1girl로 캡션을 단다. 모델이 "1girl만으로는 여전히 평범한 소녀"라는 것을 잊지 않는다. 이 평범한 그림들을 정규화 그림이라고 한다.
LoRA는 변화가 작고 강도로 조절할 수 있어서, 요즘은 생략하는 경우가 많다.
권리에 관하여
- 남의 그림으로 화풍 LoRA를 만들어 공개하거나 파는 것은 분쟁의 소지가 크다.
- 실제 사람의 사진으로 학습해 그 사람의 그림을 만드는 것은 동의가 없으면 여러 나라에서 불법이다.
- 내가 그렸거나 권리를 가진 그림, 내가 만든 캐릭터로 하는 것이 안전하다.
확인 문제
- 캐릭터 LoRA의 학습 그림이 전부 같은 옷이고 캡션에 옷을 적지 않았다. 무슨 일이 생기나?
- 화풍 LoRA의 캡션에 화풍을 적지 않는 이유는?
- 트리거 단어로
girl을 쓰면 안 되는 이유는?
풀이
- 옷이 트리거 단어에 흡수된다. 그 캐릭터는 항상 그 옷을 입고 나오고, 다른 옷으로 갈아입히기 어렵다.
- 캡션으로 설명되지 않은 것이 LoRA에 흡수되기 때문이다. 내용만 적으면 남는 것은 화풍뿐이다.
- 기반 모델이 이미 아는 단어라서 그 뜻과 섞인다. 모든 소녀가 그 캐릭터로 물든다.