Dreambooth(드림부스) 사용법
드림부스로 직접 그림 데이터를 학습시켜 원하는 모델을 만들어 보자.
기본적으로는, 기존 모델에다가 원하는 그림을 추가하여 학습을 시켜서 원하는 그림체 또는 캐릭터가 반영된 그림을 생성 가능한 새로운 모델을 만드는 방식이다. 새로운 모델을 생성하는 것이므로 용량이 기존에 사용하는 모델만큼 크다.
나중에 소개할 LoRA는 마찬가지로 그림을 학습시켜 원하는 그림체 또는 캐릭터를 만들어낼 수 있다는 점에서 같다. 하지만 새로운 모델을 만드는 것이 아니라서 용량도 훨씬 작고 보조 모델로써 모델과 독립적으로 적용하는 방식이라 좀 더 유연하다는 장점이 있다.
공식적으로는 현재 모델 생성은 어느 정도 광범위하고 일반적인 특성이 부여된 완전히 새로운 모델을 만들고 싶은 경우에 권장된다. 기존 모델의 특징을 유지하되 특정 작가의 그림체나 특정 작품의 캐릭터 등을 추가하고 싶은 경우에 LoRA가 애용되고 있다.
설치 (kohya_ss)
드림부스를 쉽게 이용할 수 있는 툴인 kohya_ss
를 사용할 것이다. VRAM 요구사항은 최소 12GB이다.
git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
.\setup.bat
Windows 기준 위 명령어로 쉽게 설치 가능하다.
Optional: CUDNN 8.6
GPU가 엔비디아 RTX 30XX 또는 40XX 시리즈인 경우, 학습 속도를 높일 수 있는 옵션이다. 더 큰 배치 사이즈와 더 빠른 학습 속도를 제공한다!
여기에서 압축 파일을 다운로드 받고, kohya_ss
폴더에 압축을 풀어서 cudnn_windows
폴더가 생기도록 한다.
이후, 다음 명령어를 실행한다:
.\venv\Scripts\activate
python .\tools\cudann_1.8_install.py
업데이트
cd kohya_ss
git pull
.\venv\Scripts\activate
pip install --use-pep517 --upgrade -r requirements.txt
위 명령어로 모든 OS에서 쉽게 업데이트 가능하다. Windows라면 Update.bat
을 실행시키는 게 더욱 간편하다.
학습 및 모델 생성
이제 학습을 시작해 보자.
-
학습에 사용할 이미지 준비
이 글에서는 특정 캐릭터를 학습시키는 상황을 기준으로 진행할 것이다. 동일한 해상도, 일정한 퀄리티로 10~100장 정도 준비하는 것이 권장된다.
이 글에서 소개하는 노하우로는 10장의 배경을 포함한 일러스트, 그리고 투명 배경을 가진 전신 일러스트 10장으로 총 20장의 이미지를 사용하는 것이 좋다고 한다.
학습 대상 캐릭터 외에 노이즈가 될 수 있는 다른 캐릭터나 물체들이 포함되지 않은 사진을 선택하는 것이 학습에 도움이 된다.
필자는 밀리마스의 아이돌 토쿠가와 마츠리를 학습시키기로 하였다.
토쿠가와 마츠리
-
정규화 이미지 준비
모든 그림이 학습 대상을 따라 그리게 되는 과적합 현상을 방지하기 위한 작업이다. 학습 대상 캐릭터가 가진 일반적 특징을 가진 그림을 준비한다. 예를 들어 마츠리는 소녀이므로
girl
클래스의 이미지가 필요하다. 직접 자신이 구한 이미지를 사용해도 되고 새로 생성해도 되는데, 새로 생성하는 경우 퀄리티는 좋지 않아도 상관 없다.정규화 이미지 수는 일반적으로 학습 이미지 x100이 권장된다.
이곳 에서 미리 준비된 정규화 이미지를 다운받아도 된다.
학습 이미지와 정규화 이미지는 모두 짝수로 준비하는 것이 권장된다.
이제 프로젝트 폴더를 만들고 그 아래에 학습 대상 이미지와 정규화 이미지 폴더를 생성해야 한다.
폴더 이름은 다음과 같은 형식으로 지정해야 한다.
- 정규화 이미지 상위 폴더:
reg_<정규화 클래스>
형식으로 프로젝트 폴더 아래에 생성한다.
예시:
project_matsuri/reg_girl
- 정규화 이미지 폴더:
1_<정규화 클래스>
형식으로 정규화 이미지 상위 폴더 아래에 생성한다.
1은 정규화 이미지 반복 횟수로, 기본값은 1이다.
예시:
project_matsuri/reg_girl/1_girl
- 학습 대상 이미지 상위 폴더:
train_<학습 대상 이름>
형식으로 프로젝트 폴더 아래에 생성한다.
이때 학습 대상 이름은 identifier라고 하며, 말 그대로 학습 대상을 식별하는 이름이다.
예시:
project_matsuri/train_tokugawa_matsuri
- 학습 대상 이미지 폴더:
<반복 횟수>_<identifier> <정규화 클래스>
형식으로 학습 대상 이미지 상위 폴더 아래에 생성한다.
공식 가이드에 따르면 학습 이미지의 반복 횟수 정규화 이미지의 반복 횟수는 다음과 같은 조건을 만족해야 한다.
학습 이미지 반복 횟수 x 학습 이미지 장수 ≥ 정규화 이미지 반복 횟수(1) x 정규화 이미지 장수
즉, 학습 대상 이미지 폴더에서 반복 횟수에 입력해야 할 값은 사실상 정규화 이미지 장수를 학습 이미지 장수로 나눈 값이다.
위에서 소개된 노하우에 의하면 학습 이미지 한 장당 정규화 이미지 100장이 적절하다고 하니 이 경우 100을 입력하면 된다.
여기서 토큰은 WebUI 환경에서 프롬프트에 입력하는 태그에 해당한다.
예시:
project_matsuri/train_tokugawa_matsuri/100_tokugawa_matsuri girl
다 만들면 위와 같은 구조가 된다.
- 정규화 이미지 상위 폴더:
-
학습 대상 이미지 캡션(프롬프트) 만들기
학습용 이미지와 동일한 위치에 동일한 이름의
.txt
파일을 만들어 캡션을 입력한다.예를 들어 위 이미지의 경우 아래와 같이 캡션을 입력할 수 있다.
1girl, one eye closed, mushroom, microphone, brown eyes, green hair, ribbon, open mouth, solo, bow, looking at viewer, ;o, blush, hat, holding microphone, tokugawa_matsuri
-
학습 설정 및 학습 진행
학습 설정을 하기 위해 프로그램을 실행할 때 많은 수의 argument를 전달해야 하는데, 학습 시마다 일일이 입력할 수 없으므로
.bat
파일을 만들어서 실행해 보자.CALL E:\ArtistAI\kohya_ss\venv\Scripts\activate.bat cd E:\ArtistAI\kohya_ss accelerate launch --num_cpu_threads_per_process 8 train_db.py ^ --pretrained_model_name_or_path="E:\ArtistAI\stable-diffusion-webui\models\Stable-diffusion\abyssorangemix3AOM3_aom3a1b.safetensors" ^ --train_data_dir="E:\ArtistAI\train_images\project_matsuri\train_tokugawa_matsuri girl" ^ --reg_data_dir="E:\ArtistAI\train_images\project_matsuri\reg_girl" ^ --output_dir="E:\ArtistAI\stable-diffusion-webui\models\Stable-diffusion" ^ --prior_loss_weight=1.0 ^ --resolution=512 ^ --train_batch_size=1 ^ --learning_rate=1e-6 ^ --max_train_steps=2000 ^ --use_8bit_adam ^ --xformers ^ --mixed_precision="fp16" ^ --cache_latents ^ --caption_extention=".txt" ^ ^ --clip_skip=2 ^ ^ --gradient_checkpointing pause
예시
.bat
파일의 내용은 위와 같다.먼저
CALL E:\ArtistAI\kohya_ss\venv\Scripts\activate.bat
는 파이썬 가상환경을 활성화하는 명령어이다.이후
kohya_ss
경로로 이동하여 학습 스크립트를 실행한다.^
는 배치 파일에서 줄바꿈 없이 입력된다는 의미이다.--pretrained_model_name_or_path
는 학습에 사용할 모델을 지정한다.--train_data_dir
는 학습 이미지가 있는 폴더를 지정한다.--reg_data_dir
는 정규화 이미지가 있는 폴더를 지정한다.--output_dir
는 학습 결과로 생성될 모델을 저장할 폴더를 지정한다.--prior_loss_weight
는 과적합을 막기 위한 설정으로 기본값인1.0
으로 설정한다.--resolution
는 학습에 사용할 이미지의 해상도를 지정한다. 정사각형 이미지는512
와 같이 입력하고, 아닐 경우512, 768
과 같이 입력한다.--train_batch_size
는 학습에 사용할 배치 크기를 지정한다.1
~4
를 주로 사용한다.--learning_rate
는 학습에 사용할 학습률을 지정한다. 기본값은1e-6
이다.--max_train_steps
는 학습에 사용할 최대 스텝을 지정한다. 너무 높은 값을 지정하면 과적합이 발생할 수 있으니 주의해야 한다. 이미지 보통 1장당 100번이라고 생각하면 편하다.--use_8bit_adam
--xformers
--mixed_precision
--cache_latents
위 옵션들은 VRAM 최적화와 관련된 설정이다.
--caption_extention
는 학습에 사용할 캡션 파일의 확장자를 지정한다.--gradient_checkpointing
은 학습 속도를 높이기 위한 옵션이다.--clip_skip=2
의 경우 학습 베이스 모델의 clip skip 값을 그대로 사용해야 한다.이제부터 소개할 옵션은 위
.bat
파일에 명시되어 있지 않다.여러 비율 및 해상도를 학습할 때에는
--enable_bucket
옵션을 추가하면 된다.정규화 이미지가 없으면
--num_class_images=1000
과 같은 옵션으로 학습 실행 시에 정규화 이미지를 생성할 수 있다.이제
.bat
파일을 실행하면 학습이 시작된다.--save_sample_prompt="photo of a tokugawa_matsuri girl"
과 같은 옵션을 지정해 주면 학습이 끝난 후에 입력한 프롬프트로 샘플 이미지를 4장 생성해 주므로 학습이 잘 되었는지 간편하게 확인할 수 있다.