Kohya_ss를 사용하여 Stable Diffusion Lora 훈련

Stable Diffusion 모델 미세 조정 방법

Stable Diffusion에는 Dreambooth, LoRA, Textual Inversion 및 Hypernetworks의 네 가지 주요 방법이 있습니다.

텍스트 반전(임베딩이라고도 함)은 원래 Diffusion 모델을 실제로 수정하지 않지만 딥 러닝을 사용하여 원하는 이미지와 일치하는 문자를 찾습니다. 이미지 특징 매개변수는 이 작은 모델을 통해 저장됩니다. 즉, 원래 모델에 이 측면의 훈련이 없으면 실제로 임베딩을 통해 "학습"하기가 어렵습니다. 확산 모델이 보지 못한 이미지 콘텐츠를 렌더링하도록 가르칠 수는 없습니다.

Dreambooth는 전체 신경망의 모든 레이어의 가중치를 조정하고, 입력 이미지를 Stable Diffusion 모델로 학습시킵니다. 그 본질은 소스 모델을 먼저 복사한 다음, 미세 조정을 바탕으로 기본적으로 무엇이든 할 수 있는 새로운 모델이 독립적으로 형성되었습니다. 단점은 훈련에 VRAM이 많이 필요하다는 점이며, 현재는 16GB의 비디오 메모리로 훈련을 완료하는 데 최적화되어 있습니다.

LoRA(Low-Rank Adaptation of Large Language Models)도 소수의 이미지를 사용하지만 별도의 특정 네트워크 계층의 가중치를 학습하고 새로운 계층을 삽입합니다. 원본 모델 네트워크 계층을 사용하므로 원본 모델 매개변수를 수정하고 전체 모델을 복사할 필요가 없으며 동시에 삽입 계층의 매개변수 양을 최적화하여 궁극적으로 매우 가벼운 모델 튜닝 방법을 달성합니다. LoRA로 생성된 모델은 크기가 작고 학습 속도가 빠르다. 추론을 위해서는 LoRA 모델 + 기본 모델이 필요하며, LoRA 모델은 기본 모델의 특정 네트워크 계층을 대체하므로 기본 모델에 따라 효과가 달라집니다.

Hypernetworks의 학습 원리는 LoRA와 유사합니다. LoRA와 달리 Hypernetwork는 별도의 신경망 모델입니다. 이 모델의 출력은 원본 중간에 삽입될 수 있습니다. 확산 모델 레이어. 따라서 훈련을 통해 원래의 확산 모델에 적절한 중간 레이어와 해당 매개변수를 삽입하여 출력 이미지와 입력 명령 간의 상관 관계를 생성할 수 있는 새로운 신경망 모델을 얻게 됩니다.

하드웨어 구성

그래픽 카드 선택 시 권장 사항: 그래픽 메모리 10GB 이상, RTX3060 이상의 GPU.

훈련 데이터 준비

사진집

  • 훈련을 위해서는 최소 10장의 사진을 준비해야 합니다.
  • 해상도는 적당하며 매우 작은 이미지를 수집하지 않습니다.
  • 데이터 세트에는 통일된 주제와 콘텐츠 스타일이 있어야 하며, 사진에는 복잡한 배경이나 기타 관련 없는 문자가 있어서는 안 됩니다.
  • 이미지 속 캐릭터는 최대한 다양한 각도, 표정, 자세를 취해야 합니다.
  • 얼굴을 강조하는 이미지 수의 비율은 약간 크고, 얼굴을 강조하는 이미지 수의 비율은 약간 적습니다.

이미지 전처리

(1) 사진 자르기

이미지를 다운로드한 후 훈련 이미지를 512x512픽셀로 자릅니다. SD WebUI를 사용하여 자동으로 자르거나 수동으로 자르도록 선택할 수 있습니다.

  1. 자를 이미지를 동일한 디렉토리에 배치하십시오.
  2. SD WebUI를 열고 Train → Preprocess Images 페이지로 이동합니다.
  3. 첫 번째 필드인 소스 디렉터리는 원본 이미지의 경로를 채웁니다.
  4. 두 번째 필드 대상 디렉터리는 출력 경로를 채웁니다.
  5. 너비와 높이는 512x512로 설정됩니다.
  6. 전처리를 클릭하면 이미지가 자동으로 잘립니다. 그런 다음 원본 이미지를 삭제하고 자른 이미지만 남길 수 있습니다.
(2) 그림 프롬프트 단어를 미리 제공(그림 마킹)

그런 다음 AI가 어떤 프롬프트 단어를 학습해야 하는지 알 수 있도록 그림에 프롬프트 단어가 미리 라벨 지정되어야 합니다.

  1. SD WebUI를 시작하고 Train 페이지로 들어갑니다.
  2. 전처리 페이지로 들어가서 원본에 자른 이미지의 경로를 입력하고 대상에 처리된 이미지의 출력 경로를 입력합니다.
  3. 그런 다음 뒤집힌 복사본 만들기를 선택하여 뒤집힌 이미지를 만들어 훈련 횟수를 늘립니다.
  4. 그런 다음 Stable Diffusion을 사용하여 실제 그림을 훈련하고 캡션에 BLIP 사용을 선택하고, 애니메이션 캐릭터를 훈련할 때는 캡션에 DeepBooru 사용을 선택합니다.
  5. Preprocess를 클릭하면 몇 분 안에 프로세스가 완료됩니다. 출력 디렉토리에는 각 그림에 해당하는 프롬프트 단어 txt 파일이 포함됩니다.
  6. 이미지 주석이 완료되면 이미지 폴더에 이미지와 동일한 이름의 txt 파일이 생성됩니다. txt 파일을 열고 관련이 없고 중복되는 기능을 모두 삭제하려면 클릭하세요.
(3) 프롬프트 워드 태그 최적화
  • 방법 1: 모든 태그 유지

라벨 삭제 처리는 수행되지 않으며 학습에 직접 사용됩니다. 페인팅 스타일을 훈련할 때 또는 수고를 덜고 캐릭터 모델을 빠르게 훈련시키고 싶을 때 사용하세요. 호출하려면 더 많은 태그를 입력해야 하고, 훈련 중에 에포크 훈련 라운드를 늘려야 하므로 훈련 시간이 길어집니다.

  • 방법 2: 일부 태그 삭제

예를 들어 특정 캐릭터를 훈련할 때 특정 기능을 자체 기능으로 유지하려면 해당 바인딩 레이블을 삭제해야 합니다.

삭제해야 할 태그:

긴 머리와 파란 눈과 같은 캐릭터 특성 등.

삭제할 필요가 없는 태그:

예를 들어 일어서거나 달리는 등의 캐릭터 액션, 미소 짓고 입을 벌리는 등의 캐릭터 표정, 단순한 배경과 흰색 배경 등의 배경, 전신, 상체, 클로즈업 등의 프레임 위치 등이 있습니다.

실행 단어 추가(선택 사항):

각 이미지의 태그를 정리하고 각 이미지에 해당하는 태그의 첫 번째 문장에 훈련시키고 싶은 유발어를 추가합니다. 예를 들어 qibaishi라고 부르고 싶다면 각 태그 파일(txt) 파일을 열어서 다음 위치에 추가하세요. 전면 키워드 qibaishi.

kohya_ss 설치

환경 준비

Python 3.10, git 설치

풀 코드

git clone https://github.com/bmaltais/kohya_ss

kohya_ss 디렉터리를 입력하세요.

cd kohya_ss

설정 스크립트 실행

.\setup.bat

GUI 시작

gui.bat

원격 액세스 허용

gui.bat --listen 0.0.0.0 --server_port 7860 —headless

구성 경로

다음 세 개의 디렉터리를 구성해야 합니다.

  • 이미지 폴더: 훈련 세트를 저장합니다.
  • 로깅 폴더: 로그 파일 저장
  • 출력 폴더: 훈련된 모델을 저장합니다.

먼저 이미지 폴더에 100_xxxx라는 새 폴더를 만듭니다. 100은 100번 훈련된 단일 이미지를 나타내는 데 사용됩니다. 그런 다음 이전에 레이블이 지정된 모든 훈련 데이터를 폴더에 넣습니다.

자세한 구성은 다음과 같습니다.


​​​​​​​

훈련 매개변수를 구성합니다:

kohya_ss는 배치 크기, 학습 속도, 최적화 프로그램 등과 같은 조정 가능한 다양한 매개변수를 제공합니다. 실제 상황에 맞게 구성할 수 있습니다.​ 

매개변수 설명:

  • train_batch_size: 훈련 배치 크기, 동시 훈련 이미지 수를 지정합니다. 기본값은 1입니다. 값이 클수록 훈련 시간은 짧아지고 메모리는 늘어납니다. 소비되었습니다.
  • 코어당 CPU 스레드 수: 훈련 중 CPU 코어당 스레드 수입니다. 기본적으로 숫자가 높을수록 효율적이지만 사양에 따라 설정 조정이 필요할 것입니다.
  • 시대: 훈련 기간입니다. 그림 50장을 10번 읽어 학습한다고 가정해 보겠습니다. 이 경우 1 에포크는 50x10=500개의 훈련 세션입니다. 2 epoch라면 2번 반복되므로 500x2=1000 학습 횟수가 됩니다. LoRA의 경우 2~3세대의 학습이면 충분합니다.
  • N epoch마다 저장: N epoch마다 저장합니다. 중간 LoRA를 생성할 필요가 없으면 값을 "Epoch"와 동일하게 설정합니다.
  • 혼합 정밀도:훈련 중 가중치 데이터의 혼합 정밀도 유형을 지정합니다. 가중치 데이터는 처음에는 32비트 단위이지만, 16비트 단위 데이터를 섞어서 학습하면 메모리가 많이 절약되고 필요할 경우 속도가 빨라집니다. fp16은 정밀도가 절반인 데이터 형식이고, bf16은 32비트 데이터와 동일한 숫자 너비를 처리하도록 설계된 데이터 형식입니다. fp16에서는 충분히 높은 정확도를 얻을 수 있습니다.
  • 정밀도 저장:LoRA 파일에 저장할 체중 데이터 유형을 지정합니다. float는 32비트이고, fp16 및 bf16은 16비트 단위입니다. 기본값은 fp16입니다.
  • 학습률: 학습률, 주어진 이미지를 더 많이 통합하기 위해 가중치를 약간 변경합니다. 기본값은 0.0001입니다.
  • LR 스케줄러: 스케줄러는 학습률을 변경하는 방법에 대한 설정입니다. 기본값은 코사인입니다.

LR 스케줄러 값 설명:

  • adafactor: 학습 중 상황에 따라 학습률을 자동으로 조정하여 VRAM 절약
  • 상수: 학습률이 처음부터 끝까지 변하지 않습니다.
  • Constant_with_warmup: 학습률 0부터 시작하여 워밍업 중에는 학습률 설정값까지 점차 증가하고, 본 학습 시에는 학습률 설정값을 사용합니다.
  • cosine: 코사인 곡선을 그릴 때 점차적으로 학습률을 0으로 줄입니다.
  • cosine _with_restarts: 코사인을 여러 번 반복
  • 선형: 선형, 학습률 설정에서 시작하여 0을 향해 선형으로 감소
  • 다항식(polynomial): 다항식, 선형과 동일한 동작이지만 축소하기가 조금 더 복잡합니다.

전체 훈련 매개변수 참조:

LoRA 훈련 매개변수 · bmaltais/kohya_ss Wiki · GitHubGitHub에 계정을 만들어 bmaltais/kohya_ss 개발에 기여하세요.icon-default.png?t=N7T8https:// github.com/bmaltais/kohya_ss/wiki/LoRA-training-parameters

인텔 그래픽 카드와 호환 가능

kohya_ss의 최신 버전에는 Linux/WSL에 Intel ARC GPU 지원 및 IPEX 지원이 추가되었습니다.

  • 혼합 정밀 선택 BF16
  • 최적화 프로그램은 AdamW(또는 기타 8비트가 아닌)를 선택합니다.
  • CrossAttention은 SDPA를 선택합니다

setup.sh를 실행합니다.

./setup.sh --use-ipex

gui.sh를 실행합니다:

./gui.sh --use-ipex

Supongo que te gusta

Origin blog.csdn.net/watson2017/article/details/134358717
Recomendado
Clasificación