얼굴 로라 학습을 통해 사용자가 원하는 얼굴을 만들어 활용하면 그림을 그릴 때 스테이블 디퓨전 얼굴 유지가 가능합니다. 본문에서 알려드리는 로라 얼굴 학습 가이드를 차근차근 따라오시면 어렵지 않게 로라 얼굴 학습을 직접 해보실 수 있습니다.
Kohya_ss 설치
먼저 로라 학습을 위해 깃허브 페이지에서 kohya_ss를 깃클론해서 다운 받습니다. 깃허브 페이지 주소는 아래를 참고하시기 바랍니다.
Kohya_ss를 설치할 위치에서 터미널을 열고 위에서 복사한 주소를 아래와 같이 git clone 해줍니다.
git clone https://github.com/bmaltais/kohya_ss.git
깃 클론이 완료되면 gui-user.bat 파일로 Kohya_ss를 실행할 수 있습니다.
학습 데이터 정제
이제 실제 학습에 사용될 이미지를 정제해야 합니다. 이미지 크기는 되도록 512×512 이상의 해상도를 가지는 것이 좋습니다. 학습은 512×512 또는 768×768 해상도로 진행하는데, 속도 차이가 꽤 나는 편입니다. 개인의 취향에 따라 다르겠지만, 정말 좋은 화질의 정제된 로라 얼굴 학습을 원하시는 분들은 학습 데이터 또한 768×768 해상도로 맞춰주시는 것이 좋습니다.
로라 얼굴 학습을 진행하려는 목적에 맞게, 학습 데이터 또한 얼굴위주로 모으는 것이 좋습니다. 되도록 장신구가 없고, 배경이 없거나 단순한 이미지를 사용하는 것이 좋습니다. 필요하다면 직접 누끼를 따서 배경을 지운 이미지를 활용하시는 것도 가능합니다.
경험상 학습 데이터는 10장 내외로 진행하더라도 10장의 데이터가 잘 정제만 이뤄진다면 로라 얼굴 학습에는 큰 문제가 되지 않았습니다.
로라 얼굴 학습
로라 얼굴 학습 데이터 태깅
이제 학습을 위해 모은 데이터들의 태깅(태그 작성)을 해줘야 합니다. 각 이미지마다 수작업으로 일일이 텍스트 파일을 만드는 것은 비효율적이므로 아래 그림과 같이 Kohya_ss를 실행한 뒤 utilities 탭으로 이동해 학습 데이터 폴더를 지정해준 뒤 Caption Images 버튼을 눌러줍니다.
캡션 작업이 완료되면 아래와 같이 로라 얼굴 학습 데이터가 모여있는 폴더에 개별 이미지에 대응하는 텍스트파일(.txt)이 생성된 것을 확인할 수 있습니다. 만약 태깅이 잘 안된다면 Basic Captioning 외에도 BLIP Captioning 또는 WD14 Captioning으로 진행하셔도 됩니다.
필요한 경우 텍스트 파일을 직접 수정하시는 것도 가능합니다.
학습 세팅값 설정 및 로라 얼굴 학습
이제 로라 얼굴 학습을 진행할 준비가 다 되었습니다. 본격적으로 Kohya_ss에서 학습을 진행해보도록 하겠습니다. 학습은 다음과 같은 절차로 진행됩니다.
- 베이스 모델 선택
- 학습 폴더 준비
- 학습 세팅값 설정
- 학습
베이스 모델 선택
가장 먼저 학습이 이뤄질 베이스 모델을 선택해줘야 합니다. Kohya_ss를 실행한 뒤 Dreambooth LoRA 탭에서 Source model 탭으로 이동합니다. 보통 기본 값으로 설정되어 있는 SD1.5를 이용하면 대부분의 SD1.5 체크포인트(모델)에서 로라가 잘 적용됩니다. 특정 모델에 특화된 로라를 만들고 싶으신 분들은 기본값 대신 해당 모델을 선택해주시면 됩니다.
학습 폴더 준비
학습이 이뤄질 데이터 폴더, 학습을 마치고 결과 모델(로라)를 저장할 폴더, 학습 로그를 저장할 폴드 등을 준비하는 단계입니다. Dreambooth LoRA > Tools 탭으로 이동합니다.
위 이미지를 참고하여 폴더를 만들어 줍니다. Instant prompt는 로라의 트리거워드로 사용될 단어를, Class prompt는 해당 로라의 클래스를 나타냅니다. 예를들어 여성인 경우 girl, 사람인 경우 person 등을 입력할 수 있습니다.
Training Images는 앞서 준비한 태깅이 완료된 이미지 폴더를 지정해줍니다. Repeats의 경우 한 이미지에 대해 몇번의 반복 학습을 진행할 것인지를 정하는 단계로 보통 100정도를 주면 충분하다고 합니다. 마지막으로 로라 얼굴 학습을 위한 폴더가 준비될 위치(Destination training directory)를 지정해준 뒤 Prepare training data를 눌러줍니다.
정상적으로 준비 과정을 마쳤다면 위와 같이 앞서 설정한 Destination training directory 위치에 img, log, model 폴더가 각각 생성되어 있을 것입니다. img 폴더 내에는 100_XXX XXX와 같이 Repeats_Instant prompts Class prompt 순서로 작성된 폴더 내에 로라 얼굴 학습을 위해 준비한 이미지 및 태깅 텍스트 파일이 준비됩니다.
이제 이렇게 준비된 폴더를 학습 후 저장될 공간에 할당해주도록 하겠습니다. Dreambooth LoRA > Folders 탭으로 이동한 뒤 아래와 같이 Image folder, Output folder, Logginf folder를 지정해줍니다,.
Regularisation folder는 정규화 이미지 폴더를 의미하는데, 우리는 정규화 이미지를 준비하지 않았으므로 공란으로 둬도 무방합니다. 주의할 점은 Image folder를 지정할 때, 100_XXX XXX 폴더 자체를 지정하는 것이 아니라 해당 폴더가 들어있는 부모 폴더(img 폴더)를 지정해야 한다는 점입니다.
학습 세팅값 설정 및 학습
이제 정말 로라 얼굴 학습을 진행하기 위해 Dreambooth LoRA탭의 Training paramters 탭으로 이동한 뒤 학습 세팅값을 아래를 참고해 설정합니다.
Train batch size는 학습 진행 시 한 번에 몇장의 이미지를 동시에 학습할 것인가를 나타냅니다. 사용중인 그래픽카드의 VRAM이 높을수록 더 많은 이미지를 동시에 학습 가능하므로 학습 시간을 단축시킬 수 있습니다. 하지만 만약 학습 대상이 되는 이미지의 일관성이 높지 않다면 동시에 다수의 이미지를 학습하는 것은 로라의 정확도 측면에서는 손해를 볼 수 있는 부분입니다. 따라서 제작된 로라의 결과물 퀄리티가 중요하다면 배치 사이즈를 낮게 가져가는 것이 좋고, 반면 빠르게 학습을 마치고 싶으신 분들은 본인의 VRAM을 고려해 배치사이즈를 크게 가져가는 것이 좋습니다. 개인적으로 VRAM 12G GPU 기준으로 배치사이즈 6까지는 문제없이 학습이 진행되는 것을 확인하였습니다.
Epoch는 1로 설정하였습니다. 매 1Epoch마다 로라를 저장하도록 세팅했기 때문에 1로 설정하면 1개의 로라를, 2,3,4 등 복수 Epoch로 설정하면 매 로라 학습 중 매 Epoch마다 로라가 1개씩 생성됩니다.
Caption Extension은 앞서 우리가 이미지를 태깅한 파일이 텍스트 파일이므로 .txt를 적어줍니다. 이후 아래로 조금 더 내리면 Network Rank와 Network Alpha 값을 설정할 수 있습니다. 여기서는 둘 모두 8로 설정합니다.
더 아래로 내리면 Advanced Configuration을 열수 있습니다. 해당 메뉴를 열어 아래와 같이 세팅합니다.
Gradient checkpointing, Shuffle caption, Persistent data loader를 활성화 하고, Random crop instead of center crop는 선택옵션입니다. 단, 해당 옵션을 활성화 하기 위해서는 세팅 화면 가장 상단에서 Number of CPU threads per core 부분에 Cache latents 옵션을 비활성화 해줘야 합니다. 개인적으로는 Cache latents 보다는 Random crop을 활성화 했을때 더 품질이 높은 로라를 학습할 수 있었습니다.
이제 모든 준비를 마쳤으므로 마지막으로 Train model 버튼을 눌러 학습을 진행합니다. 최초 실행시 로라 학습에 필요한 여러 준비 파일을 다운받는 과정에서 꽤 큰 용량의 파일을 다운받게 되어 시간이 소요될 수 있습니다. 학습을 마치면 앞서 지정해둔 model 폴더에 로라 파일이 생성되어 있습니다.