본 글은 HollowStrawberry의 로라 학습 가이드 ( Guide - Make your own Loras, easy and free | Civitai ) 의 번역본입니다. 

원문 내용이 아닌 제가 개입한 부분은 #주석 처리하겠습니다.


당신이 도대체 어디서부터 시작해야할지 모른다해도, 저는 이 글을 보고 당신이 인생 첫 로라를 만들 수 있음을 확신합니다! 또한 새로운 지식들도 배워갈 수 있겠죠.


🏭 서론

당신이 만약 Stable Diffusion 에 처음이라면, 로라 학습에 들어가기 전 Full Guide 또한 참고하는게  좋습니다. 

Civitai ← 이건 지금까지 제가 만든 로라들입니다.

제 취미이자 작업물을 공유하는 즐거움만으로 이 가이드를 작성하였습니다. 모든 정보는 사람들에게 무료로 제공되어야 한다고 저는 생각합니다. AI 학습에 대해 윤리적인 이슈가 대두되고 있으나 저는 궁극적으로 이것이 이롭고 또한 모두가 쉽게 할 수 있게 되기를 바라고 있습니다. 하지만 전 AI 그림을 자신의 작품이라고 주장하거나, 사람들을 속이거나, 놀리는 것은 바라지 않습니다. 그저 재미로만 하기를 바랍니다.

📃준비물

  • 없음. 진짜로요, 당신이 원한다면 핸드폰으로도 할 수 있을겁니다.

  • 인내심. 당신이 인공지능이 아니라면, 이 글에 있는 거의 모든 정보가 새로울 것입니다. 최대한 쉽게 설명하려고 노력했으니, 주의 깊게 읽어주시기 바랍니다. 그리고 오류가 발생해도 당황하지 마시구요.


🎴로라 만들기

로라 학습은 사람들에게 어렵다고 알려져있습니다. 너무나 많은 설정이 있고 아무도 그것들이 무슨 역할을 하는지 설명해주지 않죠. 아마 당신은 로라 학습을 시도하려 했다가 막혔을지도 모릅니다. 아니면 시도조차 못해보거나요. 자, 그래서 전 정말 사전지식이 하나도 없는 누구라도 몇시간안에 로라를 만들 수 있게 학습과정을 작성했습니다. 또한 기존 학습자들에게도 유용한 정보도 몇개 있을겁니다.

 8GB VRAM 이상을 가진 NVIDIA 그래픽 카드를 가지고 있다면 당신의 컴퓨터를 이용해서 로라를 만들 수 있습니다. 하지만 이 글에선 그 방식은 다루지 않겠습니다. 설치과정이 오래걸리고 모두가 좋은 컴퓨터를 가지고 있는 것은 아니니까요.

우리는 구글 코랩(Colab)을 이용할 것입니다. 코랩은 하루에 몇시간(일주일에 20시간이라고도 함) 구글의 강력한 그래픽카드를 빌려줍니다. 필요하다면 당신은 $10 을 지불하고 50시간의 추가시간을 받을 수도 있습니다. 또한 우리는 조금의 구글드라이브 저장공간 또한 사용할 것입니다.

또한, 이 가이드는 아니메(Anime) 그림체에 중점을 두고 있습니다. 이 정보들을 실사에도 적용할 수는 있겠지만, 당신이 만약 당사자의 동의 없이 실사인물을 학습하려는거라면 도와주고 싶지않네요.

🎡 로라의 종류

당신이 로라가 무엇인지 모른다면 이 가이드를 참고하세요. 이제, 로라가 무엇을 학습할 수 있는지 봅시다:

  • 캐릭터

  • 그림체(화풍)

  • 자세 또는 체위

  • 기타등등

또한 로라의 종류에는 다음과 같은 것들이 있습니다:

  • LoRA: 기본. Webui에서 별도의 설치없이 바로 사용가능합니다.

  • LoCon: 더 많은 레이어를 학습합니다, 그림체학습에서 좋다는 얘기가 있습니다.  Webui에 Lycoris extension 확장기능을 설치해야 일반적인 LoRA 처럼 사용할 수 있습니다.

  • LoHa: 더 많은 레이어 학습과 새로운 수학적 알고리즘. 시간이 오래걸리지만 더 복잡한 캐릭터와 그림체를 학습할 수 있습니다. Webui에 Lycoris extension 확장기능을 설치해야 일반적인 LoRA 처럼 사용할 수 있습니다.


📊 첫번째: 데이터셋 준비하기

로라를 만들때 가장 오래걸리면서도 중요한 과정입니다. 데이터셋이란 학습할 이미지와 그것에 대한 텍스트 파일을 뜻합니다. 이 둘은 동일한 파일 이름을 가지고 있습니다 (eg. "1.png" 와 "1.txt"). 이것들은 AI 학습에 필요한 가장 기본적인 준비물입니다.데이터셋의 퀄리티는 중요합니다: 다양한 상황, 구도, 자세, 옷, 기타등등. 더 많은 다양성(variety)을 가진 이미지를 준비할수록 학습또한 잘 될 것이고, 학습 이미지에는 없는 새로운 것들도 구현할 수 있을것입니다.

형편없는(mediocre) 수준의 로라는 이미지 5장 정도로도 가능합니다만, 저는 최소 20장 이상, 최대 1000개를 준비할 것을 추천합니다. 근데 이미지는 어떻게 모으죠? 텍스트 파일에는 무엇을 적어야 할까요?

다행히도, 당신이 아니메 캐릭터나 작가를 학습하려한다면, 제가 만든 📊 my dataset maker colab. 을 사용하실 수 있을겁니다.

이하 과정:

1️⃣ 셋업: 이 과정에서 당신의 구글 드라이브와 연결합니다. 간단한 프로젝트 이름을 입력하고 왼쪽의 파란 실행 버튼을 누르면 당신의 구글 드라이브 lora_traning 폴더안에 그 이름으로 하위폴더가 하나 생길 것입니다. 권한 관련 팝업창이 나온다면 학습 진행을 위해 모두 허락해주세요.

#공백(스페이스바) 금지

2️⃣ Gelbooru에서 이미지 수집: 우리는 로라 학습을 위해 많은 이미지들이 필요합니다. Gelbooru는 수천개의 태그들로 이미지를 분류하고 저장하고있는 사이트입니다. 당신이 캐릭터를 학습하려한다면, 간단하게 캐릭터이름을 적으면 그 캐릭터의 모든 이미지를 수집할 것입니다. 링크사이트 안의 설명을 따라주세요. 수백장의 이미지를 몇분만에 다운로드할 수 있을 것입니다. 이 과정을 수행하기 전에, 원한다면 페이지 밑에 있는 Extras 에서 당신이 적은 태그들이 어떤 이미지를 수집할지 미리 볼 수 있습니다.

#부가설명 : rating:g = 건전짤(general) , rating:s = 약후짤(sensitive) , rating:q = nsfw(questionable, 야스 X) , rating:e = nsfw(explicit, 야스 O). 공백 대신 언더바(_) 사용, 거를 태그(네거티브)는 태그 앞에 마이너스(-)

3️⃣ 이미지 정제: Gelbooru에는 중복되는 이미지들이 많습니다. 우리는 FiftyOne AI를 사용하여 그것들을 탐지하고 'delete'로 마킹할 것입니다. 이 과정은 수 분이 소요됩니다. 하단에 모든 이미지가 그리드 형태로 나타나며 상호작용할 수 있는 창이 뜰 것입니다. 거기에서 맘에 안드는 이미지가 있다면 선택 후 'delete'로 마킹할 수 있습니다. 저퀄리티의 이미지나 학습할 대상과 거리가 먼 이미지들은 삭제하는 것이 좋습니다. 마쳤다면 셀 밑에 있는 텍스트 박스에 엔터키를 눌러 적용할 수 있습니다.


4️⃣ 이미지 태깅: 우리는 WD 1.4 Tagger AI를 이용하여 학습 이미지를 서술하는 태그를 작성할 것입니다. 이 과정은 수 분 소요됩니다. 저는 threshold 수치를 0.3 정도로 설정하는 것을 추천합니다. 작은 threshold = 많은 태그. 태깅이 끝났다면 무슨 태그가 얼마나 많이 태깅됐는지 보여줍니다. 이 것은 다음 과정에서 유용하게 쓰일겁니다. (왜 이미 Gelbooru에 태깅되어있는 태그를 그대로 안쓰는지 궁금하실 수 있습니다. 그것들은 비일관적이고 몇몇 태그들은 불필요하기에 이렇게 따로 태깅하는 것입니다)

5️⃣ 태그 정제: 이 과정은 필수는 아니지만, 유용합니다. 이 과정에서 당신이 만들 로라의 트리거 워드(activation tag)를 지정할 수 있습니다. 트리거 워드란 모든 데이터셋 텍스트 파일의 제일 앞에 공통되게 들어가 로라를 사용할때 이 태그를 프롬프트로 사용하면 더욱 강력하게 사용하게 할 수 있게 하는 태그입니다. 그러나, 당신이 그림체를 학습한다면 트리거 워드를 안넣어도 언제나 그림체가 적용되기에 필요하지 않습니다. 당신이 캐릭터를 학습하려한다면, 머리카락 / 눈 색등 캐릭터의 고유 특성은 태그에서 삭제하는 것을 추천합니다. 그것들은 당신의 트리거 워드에 '흡수(absorbed)' 될 것입니다. 또한 캐릭터의 옷은 태그에서 제외하지 않는 것이 좋습니다. 아래에 다른 옵션들이 몇개 있지만 상관쓸 필요는 없습니다. 준비가 됐다면 실행하십시오.

#트리거 워드(activation tag)에 관해 : global_activation_tag 에 1토큰을 집어넣으라는것 같은데 설명이 빠져있습니다. 할거면 iom 넣읍시다

6️⃣ 준비: 당신의 데이터셋이 구글 드라이브에 저장되었습니다. 원하면 다른 것들(#임베딩, 하이퍼등을 말하는듯)도 할 수 있지만 일단 튜토리얼의 두번째 과정으로 가서 로라를 학습해봅시다.

⭐ 두번째: 설정, 학습

이 부분은 어려울 수 있습니다. 로라 학습을 위해 제가 만든 ⭐ Lora trainer colab. 를 이용하겠습니다. 한 cell 에 당신에게 필요한 모든 설정을 담아놨습니다. 대다수의 설정은 바꿀 필요가 없습니다만, 이 가이드에서는 무슨 설정이 어떤 역할을 하는지에 대해 설명해드리겠습니다 (익숙해졌다면 설정을 이리저리 바꿔서 시도해보시길 위해).

설정에 관한 설명입니다:

▶️ Setup: 첫번째 과정에서 입력한 프로젝트 이름과 동일하게 설정하면 자동으로 작동합니다. 학습에 사용할 베이스(소스) 모델도 변경할 수 있습니다. 하지만 바꾸질 않는 것을 권장합니다. 기본으로 설정된 NAI 모델은 모든 아니메 모델의 기반으로 대부분의 모델에서 안정적이며 일관되게 작용합니다.

▶️ Files: 데이터셋을 어떻게 처리하고 학습할지 설정하는 곳입니다:

  • 학습 해상도(resolution)는 512로 해봅시다, 기본 Stable Diffusion의 학습 해상도입니다.

  • flip_aug  랜덤으로 이미지를 좌우반전해서 학습합니다. 그림체 학습이거나 좌우대칭인 캐릭일 경우 체크해줍니다.

  • keep_tokens 태깅 과정에서 트리거 워드를 지정해주었다면 1로 설정해줍니다.

  • shuffle_caption 항상 켜주는게 좋습니다. 로라를 사용할때 프롬프트를 더 유연하게(flexible) 만들어준다고 합니다.

▶️ Steps(스탭 수): 여기는 주의깊게 봐야 할 필요가 있습니다. 스탭 수에 영향을 주는 요인 4개가 있습니다. 1. 학습 이미지 개수, 2.리핏(repeats) 수, 3. 에포크(epochs) 수 4. 배치 사이즈(batch size) 

위 4개의 수치는 로라 학습이 얼마나 오래 걸릴지 결정하게 됩니다 (제 설정에서는 1000 ~ 6000 총 스탭 수, 15~90분 정도 소요됩니다). 당신이 50개 미만의 이미지를 준비했다면 기본 설정 그대로 해도 괜찮고, 코랩에 수치에 대한 설명들을 적어놨으니 참고하시고 변경해도 됩니다. 기본적으로 학습할 이미지가 많을수록 더 많은 스탭 수가 필요합니다.

너무 적은 스탭 수는 과소적합(undercook)을 일으키고 너무 많은 스탭 수는 과적합(overcook) 현상이 일어나고 그림이 망가집니다. 이것이 바로 우리가 왜 매 에포크마다 로라를 저장하는지(#save_every_n_epochs)에 대한 이유이기도 합니다. 각 에포크마다의 로라를 비교하고 사용할 것을 정할 수 있습니다.

시도해볼 수 있는 검증된 수치 몇개:

  • 20 images × 10 repeats × 10 epochs ÷ 2 batch size = 1000 steps

  • 100 images × 3 repeats × 20 epochs ÷ 2 batch size = 3000 steps

  • 400 images × 1 repeat × 20 epochs ÷ 2 batch size = 4000 steps

  • 1000 images × 1 repeat × 30 epochs ÷ 5 batch size = 6000 steps

▶️ Training: 가장 중요한 파트입니다만, 처음 학습을 시도하는 사람이라면 아무 설정도 바꿀 필요 없습니다. 그래도 설명을 하자면:

  • Unet learning rate 는 로라가 얼마나 많이 정보를 학습할지를 결정합니다. 스탭 수와 마찬가지로, 값이 너무 작다면 로라는 아무것도 학습하지 못합니다. 그렇다고 너무 크게 하면 생성하는 모든 이미지를 deepfry(#과적합?) 시킬 것입니다. 로라의 강도를 조절하고 싶을때 유연하게 조정합니다. 과적합되었다면 수치를 내려야하고 과소적합되었다면 수치를 올려야할 것입니다. 캐릭터 학습에는 5e-4, 그림체 학습에는 1e-4를 추천합니다. 지수 표기법에 대한 부가설명 : 1e-4 = 0.0001

  • Text encoder learning rate 는 그렇게 중요하지 않습니다 (특히 그림체 학습에서). 통상적으로 Unet 의 절반이나 1/5 으로 설정합니다. 너무 작은 숫자 계산이 힘들다면 구글검색창을 계산기로 활용합시다.

  • 스케쥴러(Scheduler)는 수학적 알고리즘으로 학습 중 learning rate 값에 영향을 끼칩니다. 저는 항상 cosine with 3 restarts 를 사용합니다 (과적합을 방지하는 느낌이 듬). constant, constant with warmup, cosine 도 나쁘지 않으니 시도해보십시오. 

  • dim/alpha는 논쟁의 여지가 있습니다: 지난 몇달동안 사람들은 실험을 통해 128/128 이 가장 좋은 디테일을 보여준다고 믿고있었지만, 당시엔 낮은 dim 과 alpha 에서도 learning rate를 높이면 그것과 동일한 디테일을 보여준다는 것을 몰랐기에 후에 이것은 결함있는 실험임이 밝혀졌습니다. 이는 유감스럽게도 144 MB의 로라 파일 용량 대부분은 쓸모가 없었다는 것을 보여줍니다. 현재는 아래와 같은 수치가 권장됩니다. (물론 더 많은 실험 및 시도는 환영입니다)

  • LoRA: dim=32 alpha=16

  • LoCon: dim=16 alpha=8 conv_dim=8 conv_alpha=1

  • LoHa: dim=8 alpha=4 conv_dim=4 conv_alpha=1

▶️ Lora Type: 위에서 설명한 로라 종류 3가지중 하나를 선택할 수 있습니다. LoCon 또는 LoHa를 선택했다면 바로 위에 설명한 conv dim, conv alpha 값을 설정할 수 있습니다. (LoRA는 적용 X)

▶️ Ready: 설정을 마쳤다면 마침내 이 거대한 cell 을 실행할 준비가 되었다는 뜻입니다. 부팅하고 학습을 시작하는데 5분 가량 소요됩니다. 학습은 1시간 이내로 종료될 것이며 학습파일은 당신의 구글 드라이브에 저장될 것입니다.


🏁 세번째: 테스트

로라 학습을 마친 뒤에는 그것이 잘 작동하는지 사용을 해봐야 합니다. 당신의 구글 드라이브 경로 /lora_training/outputs/ 폴더에 있는 모든 로라 파일들을 다운로드 하십시오. 각자의 파일들은 뒤에 숫자를 가지고 있을 것입니다(ex. -01)

다음은 적절히 학습된 로라를 찾는 최적의 방법입니다:

  1. 당신의 최종결과물(숫자가 제일 높은 파일) 로라를 프롬프트에 넣고 가중치를 0.7로 설정합니다. 그 다음 가장 많이 태깅된 태그들을 프롬프트에 입력하고 그림을 생성하면... 당신이 원하는 그림이 나왔길 바랍니다. 만족할때까지, 또는 이 이상 좋아질 수 없다고 생각될때까지 프롬프트를 조정합니다.

  2. X/Y/Z 스크립트를 사용하여 각 에포크 결과물끼리 비교합니다. 당신의 첫 에포크 로라를 프롬프트에 적습니다. 그리고 X value 에 다음과 같은 방식으로 적습니다 "-01, -02, -03, ..." 이것은 당신의 프롬프트를 변경하여 모든 에포크의 로라를 하나씩 생성하게 만듭니다. 시간을 절약하려면 2 에포크, 또는 5 에포크마다의 결과물로 비교해도 좋습니다. 배치 이미지의 상태에서 더욱 공평한 비교가 가능합니다.

  3. 가장 마음에 드는 에포크를 찾았다면, 다음은 적합한 가중치를 찾습니다. X/Y/Z 스크립트를 다시 이용합니다. 로라를 가중치 0.5로 프롬에 입력한다음 이번엔 X value 에 "0.5, 0.6, 0.7, 0.8, 0.9, 1.0" 과 같이 적으면 됩니다. 원한다면 2번과 3번 과정을 동시에 진행해도 됩니다. X / Y 에 각각 에포크와 가중치를 적으면 됩니다. 이렇게 되면 시간은 배로 오래 걸리지만 더욱 세밀한 비교가 가능해집니다. #자세한 내용은 챈럼이 쓴 글 확인

  4. 당신이 원하는 결과물을 찾았다면, 축하드립니다! 다양한 구도와 옷으로 테스트를 계속하십시오, 특정 데이터셋에 과적합되지 않았는지 확인하고 학습하지 않은것을 구현할 수 있는지에 대해 실험해봅시다.


끝입니다, 이제 결과물을 Civitai 에 업로드하여 다른 사람들도 당신의 멋진 작품을 사용할 수 있게 합시다. 부끄러워하지말고요. Cheers.