반응형

https://civitai.com/models/22530

 

[Guide] Make your own Loras, easy and free - colabs | Stable Diffusion Other | Civitai

You don't need to download anything, this is a guide with online tools. Click "Show more" below. 🏭 Preamble Even if you don't know where to start o...

civitai.com

원본 글은 22년 03월 22일 마지막으로 수정되었습니다
따라서 원본의 내용이 이 글의 내용과 약간 다를수도 있습니다

 

시작하기에 앞서

필요한 것들

LoRA 만들기

LoRA의 종류

1단계: 데이터셋 만들기

2단계: 설정과 학습

3단계: 테스트

 

반응형

 

시작하기에 앞서

어디서부터 해야할지 모르거나 고성능 컴퓨터가 없더라도 로라 만드는 방법을 알려드릴 수 있습니다!

 

이 가이드에서는 제 깃헙(GitHub) 페이지의 리소스를 사용하겠습니다. 스테이블 디퓨전을 처음 사용하는 경우 이미지를 직접 생성하고 유용한 도구를 배울 수 있는 전체 가이드도 준비되어 있습니다.

 

제 취미와 그 취미에 쏟는 노력을 공유하는 기쁨을 위해 이 가이드를 만들고 있습니다. 필자는 이미지 생성 소프트웨어를 포함한 모든 정보가 모든 사람에게 무료로 제공되어야 한다고 생각합니다. 하지만 AI를 이용해 사람들을 속이거나 사기를 치거나 불법 행위를 하는 것을 지지하지 않습니다. 저는 그냥 재미로 하는 것입니다.

 

또한 홀로라이브(Hololive) 로라를 수집하는 페이지도 있습니다.

 

필요한 것들

  • 인터넷 연결
    (탭이 닫히는 것을 방지할 수 있다면 휴대폰에서도 작업할 수 있습니다)
  • 로라가 무엇이고 어떻게 사용하는지에 대한 지식
  • 인내심
    새로운 개념을 쉽게 설명하도록 노력하겠습니다. 주의 깊게 읽고 비판적 사고를 사용해 문제가 생기더라도 포기하지 마십시오.

 

LoRA 만들기

어렵기로 소문나 있습니다. 옵션이 너무 많고 어떤 기능을 하는지 설명하는 글도 없으니까요. 이 글은 누구나 1시간 이내에 아무것도 모르는 상태에서 나만의 LoRA를 만들 수 있도록 과정을 간소화 했습니다. 나중에 사용할 수 있는 몇가지 고급 설정은 그대로 유지하면서요.

 

물론 6GB 이상의 VRAM이 있는 엔비디아 그래픽카드가 있다면 독자의 컴퓨터에서 LoRA를 학습시킬 수 있습니다. 그러나 이 가이드에서는 그렇게 하지 않고 구글의 고성능 컴퓨터와 그래픽카드를 하루에 몇시간(몇몇은 주당 20시간이라 함) 대여할 수 있는 구글 코랩(Google Colab) 을 사용해보겠습니다. 10달러를 결제하면 최대 50시간까지 추가로 이용할 수 있지만 필수 사항은 아닙니다. 또한 구글 드라이브의 저장 용량도 약간 사용하게 됩니다.

 

이 글은 애니메이션 위주로 설명하지만 실사 사진에도 적용됩니다. 하지만 실제 사람의 얼굴을 무단으로 사용하는 경우에는 도움을 드리지 않습니다.

 

LoRA의 종류

아시는것처럼 LoRA는 아래의 용도로 학습, 사용할 수 있습니다.

  • 캐릭터나 인물
  • 스타일
  • 자세나 컨셉
  • 그 외

하지만 지금은 다양한 종류의 LoRA가 있습니다.

  • LoRA: 고전적입니다. 아무 문제 없이 WEBUI에서 사용할 수 있습니다.
  • LoCon: 더 많은 학습 레이어가 있으며 그림체에 좋은 것으로 알려졌습니다. WEBUI에서 일반 LoRA처럼 사용하려면 Lycoris 확장 프로그램이 필요합니다.
  • LoHa: 더 많은 학습 레이어와 새로운 수학적 알고리즘이 있습니다. 학습하는데 훨씬 오랜 시간이 걸리지만 스타일과 캐릭터와 같은 복잡한 것을 동시에 학습할 수 있습니다. 필자는 추천하지 않습니다. 일반 LoRA처럼 사용하려면 WEBUI에 Lycoris 확장 프로그램이 필요합니다.

 

1단계: 데이터셋 만들기

이것은 LoRA를 만드는데 있어서 가장 길고 중요한 부분입니다. 데이터셋은 이미지와 그 설명의 모음으로 각 쌍은 동일한 파일 이름(1.png, 1.txt) 을 가지며, 모두 AI가 학습하기를 원하는 공통점을 갖고 있습니다. 데이터셋의 품질은 중요합니다. 이미지에는 자세, 각도, 배경, 옷 등의 예시가 2개 이상 있어야 합니다. 예를 들어서 모든 이미지가 얼굴 근접샷이면 몇가지 예시를 추가하지 않으면 LoRA가 전신샷을 생성하는데 어려울 수도 있습니다(생성하는것이 가능은 합니다). 더 다양한 이미지를 추가하려면 개념을 더 잘 이해할 수 있으므로 AI가 학습 데이터에 없던 새로운 것을 생성해 낼 수 있습니다. 예를 들어서 새로운 자세와 다른 옷을 입은 캐릭터가 나올 수 있습니다. 최소 5개의 이미지로 평범한 LoRA를 학습시킬 수 있지만 20개 이상, 최대 1,000개 까지 사용하는 것을 권장합니다.

 

일반적인 이미지의 경우 "full body photograph of a woman with blonde hair sitting on a chair" 와 같이 짧고 자세한 문장이 필요합니다. 애니메이션의 경우 booru 태그(1girl, blonde hair, full body, on chair, 그 외) 를 사용해야 합니다. 데이터셋에서 태그가 어떻게 작동하는지 보겠습니다. LoRA는 학습에 사용하는 기본 모델을 사용하여 무슨 일이 일어나고 있는지 참조하므로 상세하게 알려줘야 합니다. 태그에 포함하지 않은것들은 모두 LoRA의 일부가 됩니다. LoRA는 얼굴이나 액세서리 등 말로 쉽게 설명할 수 없는 디테일을 흡수하기 때문입니다. 이 사실을 알면 모든 텍스트 파일의 시작 부분에 있는 고유한 단어나 문구인 활성화 태그(activation tag) 에 이러한 세부 정보를 포함시켜 LoRA가 쉽게 메시지를 표시하도록 할 수 있습니다.

 

온라인에서 이미지를 수집하고 수동으로 설명할 수 있습니다. 다행히도 새로운 데이터셋 제조기 코랩을 사용하면 이 과정의 대부분을 자동으로 할 수 있습니다.

 

아래는 사용 방법입니다.

 

  1. 설정: 이 작업은 구글 드라이브에 연결됩니다. 프로젝트의 간단한 이름과 원하는 폴더를 선택한 다음 왼쪽에 있는 재생 버튼을 눌러 셀을 실행합니다. 권한을 묻는 창이 나오면 Google Drive에 연결 → 계정 선택 → 허용을 눌러줍니다.
    • 학습할 이미지를 갖고 있다면 구글 드라이브에 Loras/[프로젝트_이름]/dataset 폴더에 이미지를 업로그 하면 3단계부터 하면 됩니다.
  2. Gelbooru에서 이미지 모으기: 애니메이션의 경우 많은 짤들을 사용하여 LoRA를 학습시킵니다. Gelbooru는 이미지에 대한 모든 것을 설명하는 수천개의 booru 태그를 통해 이미지를 분류하며 나중에 이미지에 태그를 지정하는 방법입니다. 이 단계에서는 기본적으로 컨셉, 캐릭터, 스타일을 나타내는 특정 태그가 포함된 이미지를 요청하는 것이 좋습니다. 이 셀을 실행하면 결과가 표시되고 계속할 것인지 묻는 메시지가 표시됩니다. 결과가 마음에 들면 네(Yes) 라고 입력하고 이미지가 다운로드 될 때 까지 잠시 기다립니다.
  3. 이미지 선별 작업: Gelbooru에는 중복된 이미지가 많기 떄문에 FiftyOne AI를 사용해 중복된 이미지를 감지해서 삭제할 수 있도록 표시할겁니다. 이 셀은 실행하면 몇 분 정도 걸립니다. 하지만 아직 삭제되지 않고 셀 아래에 모든 이미지를 격자로 표시하는 대화형 영역이 나타납니다. 여기서 마음에 들지 않은 이미지를 선택하고 삭제하도록 표시할 수 있습니다. 품질이 낮거나 관련 없는 이미지가 있는 경우에는 삭제하는 것이 좋습니다. 모든 작업을 마쳤으면 대화형 영역 위의 텍스트 상자에 Enter 키를 눌러 변경 사항을 적용해줍니다.
  4. 이미지에 태그 달기:이미지를 설명하는 애니메이션 태그를 할당하는데는 WD 1.4 tagger AI를 사용하고 실사나 기타 이미지에 대한 캡션은 BLIP AI를 사용하면 됩니다. 이 작업은 몇 분 정도 소요됩니다. threshold 값을 0.35 ~ 0.5 정도로 설정하면 좋은 결과를 얻을 수 있습니다. 이 셀을 실행하면 데이터셋에서 가장 일반적인 태그가 표시되며 다음 단게에서 유용하게 사용할 수 있습니다.
  5. 태그 선별: 이 과정은 애니메이션 태그에 대해서 매우 유용합니다. 여기에서는 LoRA에 대한 activation tag(또는 트리거 워드, trigger word) 을 지정할 수 있습니다. 스타일을 학습하는 경우 LoRA가 항상 활성화 되도록 activation tag가 필요하지 않을수도 있습니다. 캐럭터를 학습하는 경우 신체의 특징이나 머리카락, 눈 색깔과 같이 캐릭터의 고유한 공통 태그를 삭제(가지치기) 하는 경향이 있습니다. 이렇게 하면 activation tag에 흡수됩니다. 이 과정을 하면 LoRA의 프롬프트를 사용하는 것이 더 쉽지만 유연성은 떨어집니다. 몇몇 사람들은 캐릭터 의상을 정의하는 단일 태그를 갖기 위해 모든 의상을 가지치기하는 경향이 있습니다. 과도한 가지치기는 일부 디테일에 영향을 미치므로 권장하지 않습니다. 보다 유연한 접근 방식은 'striped shirt, vertical stripes, vertical-striped shirt' 와 같은 중복이 있는 태그를 모두 'striped shirt' 태그로 병합하는 것입니다. 이 단계는 원하는 만큼 여러번 실행할 수 있습니다.
  6. 준비: 데이터셋은 구글 드라이브에 저장됩니다. 이 데이터셋으로 원하는 모든 작업을 할 수 있지만 이 글의 다음 단계로 이동하여 LoRA 학습을 시작해 보도록 하겠습니다!

 

2단계: 설정과 학습

이 부분이 까다롭습니다. LoRA를 학습시키기 위해 제 LoRA 학습 코랩을 사용하겠습니다. 필요한 모든 설정이 포함된 단일 셀로 구성되어 있습니다. 이런 설정 중 대부분은 변경할 필요가 없습니다. 하지만 이 글에 있는 코랩에서 각 설정이 어떤 기능을 하는지 설명해 드리니 나중에 이 설정들로 활용할 수 있습니다.

 

설정은 아래와 같습니다.

 

  • Setup: 1단계에서 사용한 것과 동일한 프로젝트 이름을 이름을 입력하면 자동으로 적용됩니다. 여기에서 학습을 위한 기본 모델을 변경할 수 있습니다. 기본 모델은 2가지가 권장되지만 원하는 경우 사용자가 직접 다운로드 링크를 추가해서 사용할 수 있습니다. 데이터셋 생성시 사용할 때 지정한 폴더 경로를 동일하게 사용하면 됩니다.
  • Processing: 데이터셋의 처리 방식을 변경하는 설정은 아래와 같습니다.
    • 해상도는 512로 설정해야 하며 이는 스테이블 디퓨전의 기본값입니다. 해상도를 높이면 학습 속도가 훨씬 느려지지만 정밀한 디테일을 표현하는데 도움됩니다.
    • flip_aug는 더 많은 이미지가 있는 것처럼 더 고르게 학습시키는 트릭이지만 AI가 좌우를 헷갈리게 만들 수 있으므로 사용자가 선택해야 합니다.
      번역자의 추가 설명: 캐릭터를 학습시키는 경우 좌우 대칭이 아닌 경우(머리 한 쪽에만 장식이 있는 경우 등) 에는 해당 설정을 사용하지 말아야 합니다.
    • 애니메이션 태그를 사용하는 경우 shuffle_tags를 활성화 해둬야지 프롬프트가 더 유연해지고 편향성을 줄일 수 있습니다.
    • 활성화 태그(activation_tags) 는 중요하므로 이 글의 데이터셋 부분에서 추가한 경우 1로 설정하세요. 이것을 keep_tokens라고도 합니다.
  • Steps: 여기에서 주의해야 할 점이 있습니다. 이미지 수, 반복 횟수(repeats), 에폭 수(epochs), 배치 크기(batch size) 등 4가지 변수가 작용합니다. 이런 변수에 따라 총 단계가 결정됩니다.

    총 에폭 또는 최종 단계를 설정하도록 선택할 수 있으며 아래에서 몇 가지 예시를 보겠습니다. 단계가 너무 적으면 LoRA가 덜 학습되어서 쓸모 없고 단계가 너무 많으면 이미지가 왜곡됩니다. 그렇기 때문에 LoRA를 에폭마다 저장하여 나중에 비교하고 결정할 수 있도록 합니다. 따라서 반복 횟수를 줄이고 에폭 값을 늘리는 것이 좋습니다.

    LoRA를 학습시키는 방법에는 여러가지가 있습니다. 필자 개인적으로 하는 방법은 빠르게 학습할지, 천천히 학습할지 여부에 따라 10~20개의 에폭 중에서 선택할 수 있도록 에폭의 균형을 맞추는데 중점을 둡니다. 또한 일반적으로 이미지가 많을수록 안정화 단계가 더 많이 필요하다는 것을 알게 되었습니다. 새로운 min_snr_gamma 옵션 덕분에 LoRA를 학습시키는데 걸리는 에폭이 줄어들었습니다. 아래는 시도해 볼 수 있는 몇 가지 설정들입니다.
    • 20 이미지 * 10 반복 횟수 / 2 배치 크기 = 1,000 학습
    • 100 이미지 * 3 반복 횟수 / 2 배치 크기 = 1,500 학습
    • 400 이미지 * 1 반복 횟수 / 2 배치 크기 = 2,000 학습
    • 1,000 이미지 * 1 반복 횟수 / 3 배치 크기 = 3,300 학습
  •  Learning: 가장 중요한 설정입니다. 하지만 이 중 어떤 것도 처음부터 변경할 필요는 없습니다.
    • unet learning rate는 LoRA가 정보를 얼마나 빨리 흡수하는지를 결정합니다. 스텝 수와 마찬가지로 너무 적으면 LoRA는 아무것도 하지 않고 너무 크면 생성하는 모든 이미지가 왜곡됩니다. 특히 프롬프트에서 LoRA의 가중치를 변경할 수 있기 때문에 작업 값에 유연한 범위가 있습니다. dim 값을 8~32 사이로 설정한다 가정하면(아래 참조 바람) 거의 모든 상황에서 unet learning rate는 5e-4를 권장합니다. 천천히 학습시키고 싶다면 1e-4, 2e-4가 더 좋을겁니다.
    • text encoder learning rate은 특히 스타일에서 덜 중요합니다. 태그를 더 잘 학습하는데 도움이 되지만 태그가 없어도 학습이 되기 떄문입니다. 일반적으로 unet learning rate의 1/2 또는 1/5이어야 하고 권장 값은 1e-4, 5e-5입니다.
    • scheduler는 시간이 지남에 따라 학습 속도를 조절해 줍니다. 이것이 중요하지는 않지만 도움이 됩니다. 필자는 항상 cosine with 3 restarts을 사용하는데 개인적으로 LoRA를 잘 학습시키는것 같습니다. cosine, constant, and constant with warmup들도 한번 사용해보세요. 이들이 잘못되는 일은 없습니다. 또한 warmup ratio는 학습을 효율적으로 시작하는데 도움이 되며 기본값인 5%가 잘 작동합니다.
  • Structure: 앞서 설명한 3가지 LoRA 중 원하는 LoRA 유형을 선택하면 됩니다. 개인적으로 캐릭터는 LoRA를, 스타일은 LoCon을 사용하는 것을 추천합니다. LoHa는 학습하기에 어렵습니다.

    dim/alpha는 LoRA의 용량과 스케일링을 의미하며 논란의 여지가 있습니다. 몇 달 동안은 모두가 각각 128이 가장 좋다고 서로에게 알렸는데 그 이유는 이 설정이 디테일이 가장 좋았다는 실험 결과 때문입니다. 그러나 당시에는 dim/alpha를 낮추면 학습률을 높여야 동일한 수준의 디테일을 구현할 수 있다는 사실이 알려지지 않았기 때문에 이런 실험에는 문제가 많았습니다. 이 LoRA 학습 설정은 144MB로 나오기에 안타깝습니다. 필자는 개인적으로 캐릭터에 적합한 설정이고 용량이 18MB 밖에 안되는 16/8을 사용합니다. 현재 권장되는 값은 아래와 같습니다(더 많은 실험 환영).

  • Ready: 이제 LoRA를 학습시킬 이 셀을 실행할 준비가 되었습니다. 사전 준비 작업에는 5분 정도가 걸리고 그 이후로 학습 단계를 합니다. 시간은 1시간이 걸리지 않으며 결과물은 구글 드라이브에 저장됩니다.

 

3단계: 테스트

LoRA 학습을 완료한 뒤에도 테스트해서 제대로 작동하는지를 확인해야 합니다. 
구글 드라이브의 /lora_training/outputs/ 폴더로 이동해서 [프로젝트_이름] 폴더 안에 있는 모든 파일들을 다운로드 하세요. 이 파일들은 각각 학습의 다른 시점에 저장된 다른 LoRA들입니다. 각각 01, 02, 03 등과 같은 숫자가 있습니다.

 

다음은 LoRA를 사용하는 최적의 방법을 찾기 위한 간단한 워크플로입니다.

 

  1. 마지막 LoRA에 0.7~1.0의 가중치로 프롬프트에 입력하고 가이드의 태그 지정 부분에서 본 가장 일반적인 태그 중 일부를 포함하세요. 학습하려고 했던 것과 비슷하거나 유사한 것을 볼 수 있을겁니다. 만족하거나 더 이상 개선할 수 없을 때 까지 프롬프트를 조정하세요.
  2. X/Y/Z 플롯(plot) 을 사용해 서로 다른 에폭을 비교합니다. 이것은 WEBUI의 기본 기능입니다. 아래로 이동해서 Script에서 X/Y/Z plot를 선택하세요. 프롬프트에 첫 번째 에폭의 LoRA를 입력하고 (예를 들어서 <lora:projectname-01:0.7>) 스크립트의 X 값에 '-01, -02, -03 등'을 입력합니다. X 값이 Prompt S/R인지 확인하십시오. 이렇게 하면 프롬프트에서 교체가 수행되어 LoRA의 다른 숫자를 통과하므로 품질을 비교할 수 있습니다. 시간을 절약하려면 먼저 2번째 또는 5번째 마다 비교할 수 있습니다. 보다 공정하게 비교하려면 이미지를 일괄 처리하는 것이 이상적입니다.
  3. 마음에 드는 에폭을 찾았다면 최적의 가중치를 찾아보세요. 이번에는 '0.5>, 0.6>, 0.7>, 0.8>, 0.9>, 1>' 과 같은 X값을 사용해서 X/Y/Z 플롯을 다시 실행합니다. 이렇게 하면 다른 LoRA 가중치로 변경하라는 프롬프트의 일부를 대체할 수 있습니다. 다시 말하지만 일괄적으로 비교하는 것이 좋습니다. 이미지를 왜곡하지 않으면서 최상의 디테일을 구현하는 가중치를 찾고 있습니다. 원하는 경우 2단계와 3단계를 X/Y로 동시에 돌리면 시간이 더 오래 걸리지만 더 확실하게 작업할 수 있습니다.
  4. 마음에 드는 결과물을 찾았다면 축하합니다! 다양한 상황, 방향, 옷 등을 계속 테스트해서 LoRA가 학습 데이터에 없는 창의적인 작업을 할 수 있는지 확인하세요.

마지막으로 잘못되었을 수도 있는 몇 가지 사항들을 알려드립니다.

  • LoRA가 아무것도 하지 않거나 아주 조금만 작동하는 경우에는 학습률을 낮게 설정했거나 더 오래 학습해야 하는 과소적합 상태일 수도 있습니다. 프롬프트 입력에서 실수한 부분은 없는지 확인해보세요.
  • LoRA가 작동은 하지만 원하는 것과 비슷하지 않다면 마찬가지로 충분히 학습되지 않았거나 데이터셋(이미지와 태그) 의 품질이 낮기 때문일 수도 있습니다. 일부 컨셉은 학습하기 훨씬 더 어렵기 때문에 방법을 잘 모르는 경우에는 커뮤니티의 도움을 받는것이 좋습니다.
  • LoRA가 왜곡된 이미지나 아티팩트를 생성하고, 이전 에폭이 도움이 되지 않거나, NaN 오류가 발생하는 경우에는 학습률이나 반복 횟수가 너무 높아서 생기는 과대적합입니다.
  • LoRA가 수행하는 작업이 너무 제한되어 있다면 이를 오버핏이라 합니다. 데이터셋이 너무 적거나 태그가 제대로 지정되지 않았거나 약간 과대적합 되었을 수도 있습니다.
반응형

+ Recent posts