스테이블 디퓨전의 핵심, LoRA 학습의 세계로 초대합니다
최근 생성형 AI 분야, 특히 스테이블 디퓨전(Stable Diffusion) 커뮤니티에서 가장 뜨거운 키워드는 단연 LoRA(Low-Rank Adaptation)입니다. 단순히 프롬프트(Prompt)만으로는 내가 원하는 일관된 캐릭터나 독특한 화풍을 유지하는 데 한계가 있기 때문입니다. 거대한 체크포인트 모델을 처음부터 다시 학습시키는 '드림부스(Dreambooth)' 방식은 엄청난 시간과 고사양의 하드웨어를 요구하지만, LoRA는 기존 모델에 '얇은 막'을 덧씌우는 방식으로 적은 리소스만으로도 특정 캐릭터나 화풍을 놀라울 정도로 정교하게 학습시킬 수 있습니다.
많은 분들이 자신이 좋아하는 애니메이션 캐릭터를 고정하거나, 자신만의 독특한 그림체를 AI에게 가르치고 싶어 합니다. 하지만 막상 시작하려 하면 복잡한 설정값(Hyperparameters)과 데이터셋 준비 과정에서 좌절하곤 합니다. 이 글에서는 초보자도 따라 할 수 있도록 스테이블 디퓨전 LoRA 학습의 A부터 Z까지, 특히 특정 화풍과 캐릭터를 학습시키는 비법을 상세하게 다뤄보겠습니다. 이 가이드를 통해 여러분은 단순한 '사용자'에서 '크리에이터'로 거듭나게 될 것입니다.
1. LoRA 학습을 위한 준비: 하드웨어와 소프트웨어
본격적인 학습에 앞서 환경 구축이 필수적입니다. 클라우드 환경(Google Colab 등)을 이용할 수도 있지만, 최근 코랩의 정책 변화로 인해 로컬 PC에서 학습을 진행하는 것이 장기적으로 유리합니다. 로컬 학습을 위해서는 최소한의 사양을 갖춰야 합니다.
필수 하드웨어 요구사항
성공적인 학습을 위해서는 하드웨어의 성능이 뒷받침되어야 합니다. 특히 GPU의 성능은 학습 속도와 직결됩니다.
- GPU (그래픽 카드): NVIDIA 그래픽 카드가 필수적입니다. AMD나 Mac 환경에서도 가능은 하지만 설정이 매우 복잡합니다. 학습 속도와 안정성을 위해 VRAM 8GB 이상을 권장하며, 최신 SDXL 기반의 LoRA를 학습하려면 12GB 이상의 VRAM이 필요할 수 있습니다. VRAM이 부족하면 학습 도중 'OOM(Out Of Memory)' 오류가 발생할 수 있습니다.
- RAM (메모리): 최소 16GB 이상을 권장합니다. 수십, 수백 장의 이미지를 전처리하고 캐싱하는 과정에서 메모리 사용량이 급격히 늘어날 수 있습니다. 32GB 이상이라면 더욱 쾌적한 환경에서 작업할 수 있습니다.
- 저장 공간 (SSD): 수천 장의 이미지와 학습된 모델 파일을 저장하기 위해 넉넉한 SSD 공간(50GB 이상)을 확보하세요. HDD보다는 SSD가 데이터 로딩 속도 면에서 월등히 유리합니다.
소프트웨어 도구: Kohya_ss
현재 가장 대중적이고 강력한 LoRA 학습 도구는 Kohyass GUI입니다. 과거에는 명령 프롬프트(CMD)에 복잡한 코드를 입력해야 했지만, Kohyass는 이를 직관적인 그래픽 인터페이스로 변환해 주어 접근성이 매우 높습니다.
- Python 설치: 파이썬 3.10.x 버전을 설치해야 호환성 문제가 없습니다.
- Git 설치: 리포지토리를 복제하기 위해 Git이 필요합니다.
- 설치 및 실행: Kohya_ss 리포지토리를 클론(
git clone)하고setup.bat를 실행하여 의존성 패키지를 설치합니다. 설치가 완료되면 로컬 서버(보통 localhost:7860)를 통해 브라우저에서 학습 설정을 제어할 수 있습니다.
2. 데이터셋 준비: 학습의 90%를 결정하는 핵심 단계
"Garbage in, Garbage out"(쓰레기가 들어가면 쓰레기가 나온다)이라는 말은 AI 학습의 진리입니다. 아무리 좋은 그래픽 카드와 완벽한 설정값을 사용하더라도, 원본 이미지의 품질이 나쁘면 결과물도 처참할 수밖에 없습니다. 스테이블 디퓨전 LoRA 학습에서 가장 공을 들여야 할 부분이 바로 데이터셋 준비입니다.
이미지 수집 및 가공 가이드
- 이미지 수량: 무조건 많다고 좋은 것이 아닙니다. 캐릭터 학습의 경우 15~30장 정도의 고품질 이미지만 있어도 충분히 학습이 가능합니다. 화풍(Style) 학습의 경우 다양성을 확보해야 하므로 50장 이상을 권장합니다. 너무 많은 데이터는 오히려 학습 시간을 늘리고 과적합을 유발할 수 있습니다.
- 해상도 및 크롭: 512x512, 768x768 또는 1024x1024(SDXL) 등 64의 배수로 맞추는 것이 좋습니다. Birme와 같은 온라인 크롭 도구를 사용해 주요 부위(얼굴 등)가 잘리지 않도록 정성스럽게 잘라주세요. 다양한 종횡비(Aspect Ratio)를 지원하는 'Bucketing' 기능을 사용할 수도 있지만, 초보자는 정방형으로 시작하는 것이 좋습니다.
- 배경 제거: 캐릭터만 학습시키고 싶다면 배경이 투명하거나 단순한 흰색/검은색인 이미지를 포함하는 것이 도움이 됩니다. 배경이 복잡하면 AI가 배경까지 캐릭터의 일부로 인식할 위험이 있습니다.
태깅(Captioning)의 중요성과 전략
이미지를 AI가 이해할 수 있는 텍스트로 변환하는 과정입니다. 보통 .txt 파일을 이미지와 같은 이름으로 생성하여 저장합니다. Kohya_ss 내의 'WD14 Tagger' 기능을 사용하면 자동으로 태그를 생성할 수 있습니다.
캐릭터 학습 시 태깅 전략:
- 캐릭터의 고유 특징(예:
blue eyes,long hair,horns)을 제외한 나머지 요소들만 태깅하는 것이 일반적입니다. 예를 들어, 파란 눈을 가진 캐릭터를 학습시킬 때blue eyes태그를 지우면, AI는 "이 캐릭터는 원래 눈이 파란색이구나"라고 학습하게 됩니다. 반대로blue eyes를 태그에 남겨두면, 프롬프트에blue eyes를 입력해야만 파란 눈이 나올 확률이 높아집니다. - 핵심은 트리거 워드(Trigger Word)를 설정하여 해당 단어를 입력했을 때만 캐릭터가 나오도록 하는 것입니다. 잘 쓰이지 않는 고유명사(예:
sh_yuna,my_char_01)를 트리거 워드로 사용하세요.
- 캐릭터의 고유 특징(예:
화풍 학습 시 태깅 전략:
- 그림체 자체를 학습해야 하므로, 이미지 속에 있는 모든 객체(사람, 사물, 배경)를 상세하게 태깅해야 합니다. 그래야 AI가 "아, 이건 '소녀'라는 태그니까 그림체만 배워야겠구나"라고 인식하게 됩니다.
- 예를 들어 반 고흐 스타일을 학습시킨다면, '해바라기', '별이 빛나는 밤' 등의 피사체 내용을 모두 태그로 적어주어야 AI가 피사체와 화풍을 분리해서 학습합니다.
3. 폴더 구조 및 Kohya_ss 설정 정복하기
데이터가 준비되었다면 폴더 구조를 정확하게 맞춰야 합니다. Kohya_ss는 폴더 이름을 통해 학습 반복 횟수를 인식합니다.
폴더 구조 예시
train_data(최상위 폴더)img폴더10_sls character(폴더명:반복횟수_트리거워드 클래스명)- 이미지 파일들 (.png, .jpg)
- 캡션 파일들 (.txt)
model폴더: 학습된 결과물(.safetensors)이 저장될 곳log폴더: 학습 기록 저장
여기서 10_sls character의 의미는, 이 폴더 안의 이미지들을 10번 반복(Repeats)해서 학습하며, 트리거 워드는 sls이고, 클래스(개념)는 character라는 뜻입니다.
핵심 파라미터 설정 가이드
이 부분이 초보자들이 가장 어려워하는 부분입니다. 정답은 없지만, 실패 확률을 줄이는 기준값을 제시합니다.
- Train Batch Size: 한 번에 몇 장의 이미지를 학습할지 결정합니다. VRAM이 허용하는 한 높이는 것이 좋지만, 보통 2~4 정도로 설정합니다. 배치 사이즈가 크면 학습 속도가 빨라지지만 VRAM을 많이 먹습니다.
- Epoch (에포크): 전체 데이터셋을 몇 번 반복 학습할지 결정합니다. 보통 10~15 Epoch 정도면 충분합니다. 과적합(Overfitting)을 막기 위해 너무 높게 설정하지 마세요. 총 스텝 수(Total Steps)는
이미지 수 x 반복 횟수 x 에포크 / 배치 사이즈로 계산됩니다. 보통 1500~3000 스텝 사이에서 좋은 결과가 나옵니다. - Learning Rate (학습률): 가장 중요한 변수입니다. 기본값은
1e-4(0.0001)입니다. 화풍 학습의 경우 조금 더 낮게(5e-5), 캐릭터 학습의 경우 기본값을 유지하거나 상황에 따라 조정합니다. 최근에는 Unet LR과 Text Encoder LR을 다르게 주는 방식도 고급 사용자들이 애용합니다. (예: Unet1e-4, TE5e-5) - Network Rank (Dimension) & Alpha: LoRA의 용량과 표현력을 결정합니다. 보통 Rank 128 / Alpha 64 또는 Rank 32 / Alpha 16 조합을 많이 사용합니다. Alpha 값은 Rank의 절반이나 동수로 두는 것이 일반적입니다. Rank가 높을수록 파일 용량이 커지고 미세한 디테일을 잘 잡아내지만, 학습이 어려워질 수 있습니다.
4. 캐릭터 vs 화풍: 학습 전략의 차이점
스테이블 디퓨전 LoRA 학습은 목적에 따라 전략을 달리해야 합니다. 두 가지 경우의 결정적인 차이점을 정리해 드립니다.
캐릭터 학습 (Character LoRA)
- 목표: 어떤 상황, 어떤 옷을 입혀도 얼굴과 신체 특징이 유지되는 것.
- 데이터 구성: 다양한 의상, 다양한 구도, 다양한 조명 하의 이미지를 수집하세요. 만약 특정 의상만 입은 이미지만 학습하면, AI는 그 의상을 캐릭터의 피부처럼 인식해버립니다(의상 고착화 현상).
- 팁: 정규화 이미지(Regularization Images)를 사용하지 않는 경우가 많습니다. 캐릭터의 고유성을 극대화하기 위해서입니다. 트리거 워드는 잘 쓰이지 않는 고유명사(예:
sh_yuna)로 설정하세요.
화풍 학습 (Style LoRA)
- 목표: 캐릭터는 바뀌더라도 붓 터치, 색감, 명암 처리 방식이 유지되는 것.
- 데이터 구성: 최대한 다양한 주제(인물, 풍경, 사물)가 포함된 해당 작가의 그림을 모으세요. 주제가 다양할수록 공통 분모인 '화풍'만 추출하기 쉬워집니다. 인물화만 넣으면 AI가 구도까지 화풍으로 인식할 수 있습니다.
- 팁: 캡션(태그)을 매우 상세하게 달아주세요. AI에게 "이건 여자아이야", "이건 자동차야"라고 알려주어야 AI가 그 대상들을 그리는 '방식(Style)'에만 집중할 수 있습니다.
5. 학습 결과 테스트 및 문제 해결 (Troubleshooting)
학습이 완료되면 .safetensors 파일이 생성됩니다. 이를 WebUI의 models/Lora 폴더에 넣고 테스트를 진행합니다. 처음부터 완벽한 결과가 나오기는 힘듭니다. 다음 증상을 확인하고 재학습 시 반영해 보세요.
과적합 (Overfitting)
- 증상: 이미지가 깨지거나(노이즈 발생), 색감이 너무 진하게 타버리거나, 프롬프트를 무시하고 원본 학습 이미지만 그대로 출력하는 경우입니다.
- 해결: 학습 횟수(Epoch)를 줄이거나, 학습률(Learning Rate)을 낮춰야 합니다. 또는 Network Alpha 값을 줄여보세요. WebUI에서 LoRA 가중치를 1.0이 아닌 0.6~0.8 정도로 낮춰서 사용하는 것도 방법입니다.
과소적합 (Underfitting)
- 증상: 트리거 워드를 입력했는데도 캐릭터나 화풍이 전혀 반영되지 않는 경우입니다.
- 해결: 학습 데이터가 너무 적지 않은지 확인하세요. 학습 횟수(Epoch)를 늘리거나, 학습률을 조금 높여야 합니다. 데이터셋의 태깅이 너무 엉성하지 않은지도 점검해야 합니다.
유연성 부족 (Rigidity)
- 증상: 캐릭터는 나오는데 포즈나 의상이 바뀌지 않는 경우입니다.
- 해결: 데이터셋의 다양성이 부족한 것입니다. 원본 이미지를 좌우 반전(Flip augmentation) 옵션을 켜서 학습하거나, 더 다양한 구도의 이미지를 추가해야 합니다. 캡션에서 의상 태그를 더 상세하게 달아주는 것도 도움이 됩니다.
마무리하며: 끊임없는 실험이 정답입니다
스테이블 디퓨전 LoRA 학습은 과학이자 예술입니다. 정해진 수치보다는 내 데이터셋의 특성에 맞는 값을 찾아가는 과정이 필요합니다. 한 번의 실패에 좌절하지 마시고, X/Y Plot 기능을 활용해 다양한 가중치와 프롬프트 조합을 실험해 보세요. 이 과정에서 얻는 노하우는 그 어떤 가이드보다 값진 자산이 될 것입니다.
나만의 LoRA를 만드는 과정은 단순한 이미지 생성을 넘어, AI와 소통하며 내가 원하는 창작물을 정확하게 구현해 내는 즐거움을 선사할 것입니다. 지금 바로 여러분만의 데이터셋을 모아 학습을 시작해 보세요. 세상에 단 하나뿐인 모델이 여러분을 기다리고 있습니다.