1. ComfyUI 개요 및 응용
1.1 ComfyUI란?
ComfyUI는 노드 기반 그래픽 사용자 인터페이스(GUI)로, 이미지 생성 과정을 모듈화하여 각 단계를 노드로 표현합니다. 사용자는 이 노드들을 연결해 맞춤형 워크플로우를 구성할 수 있어, Stable Diffusion 기반 이미지 생성 작업을 직관적이고 유연하게 관리할 수 있습니다.
1.2 핵심 구성 모듈
ComfyUI의 주요 모듈은 다음과 같습니다:
- 모델 로더: Load Checkpoint를 통해 Model, CLIP, VAE 세 부분을 포함한 기본 모델 파일을 불러옵니다.
- CLIP 모듈: 텍스트 입력을 잠재 공간 임베딩(latent space embedding)으로 변환하여 모델 입력으로 사용합니다.
- VAE 디코더: 잠재 공간의 임베딩을 픽셀 수준의 이미지로 디코딩합니다.
- 샘플러: 이미지 생성을 제어하며, 샘플링 방식에 따라 출력 품질과 다양성이 달라집니다. KSampler에서 주요 파라미터를 설정합니다:
seed: 노이즈 생성을 위한 난수 시드control_after_generate: 시드 변경 방식steps: 노이즈 제거 반복 횟수 (높을수록 정밀도 향상)cfg: 프롬프트 영향력 조절 (classifier free guidance)denoise: 노이즈 적용 비율sampler_name,scheduler: 노이즈 제거 파라미터
1.3 ComfyUI의 장점
- 모듈성 및 유연성: 드래그 앤 드롭으로 복잡한 워크플로우 구축 가능
- 시각적 인터페이스: 비전문가도 AI 모델과 데이터 흐름을 쉽게 이해하고 조작
- 다중 모델 지원: 여러 생성 모델을 통합 및 전환하여 사용
- 디버깅 및 최적화: 데이터 흐름 추적을 통한 문제 해결 및 결과 최적화
- 오픈소스 및 확장성: 새로운 모듈이나 플러그인 개발 가능
- 사용자 친화성: 복잡한 작업도 간단하게 처리 가능
2. ComfyUI 설치 및 워크플로우 실행
2.1 설치 방법
본 가이드에서는 모델스코프(Modelscope)의 노트북과 무료 GPU를 활용합니다.
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors_test_comfyui.git
mv kolors_test_comfyui/* ./
rm -rf kolors_test_comfyui/
mkdir -p /mnt/workspace/models/lightning_logs/version_0/checkpoints/
mv epoch=0-step=500.ckpt /mnt/workspace/models/lightning_logs/version_0/checkpoints/
파일 터미널을 열고 위 코드를 실행합니다. 설치 완료 후 제공된 URL을 브라우저에서 열면 ComfyUI 인터페이스에 접속할 수 있습니다. (일시적 오류 시 잠시 후 재시도)
2.2 워크플로우 예시
LoRA 없는 워크플로우
- kolors_example.json 파일을 다운로드
- ComfyUI에서 "Load" 버튼으로 해당 파일 로드
- 이미지 생성 실행 (첫 실행 시 리소스 로드 시간 소요)
LoRA 포함 워크플로우
- kolors_with_lora_example.json 파일을 다운로드
- ComfyUI에서 "Load" 버튼으로 해당 파일 로드
- LoRA 파일 경로를 이전에 미세 조정한 체크포인트로 설정 (예:
/mnt/workspace/models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt) - 이미지 생성 실행
3. LoRA 미세 조정
3.1 LoRA 개요
LoRA(Low-Rank Adaptation)는 사전 학습된 모델의 핵심 레이어에 저차원 행렬을 추가하여, 전체 모델 가중치를 변경하지 않고 특정 작업에 효율적으로 적응시키는 기술입니다. 이는 적은 데이터와 자원으로도 모델을 개인화할 수 있게 합니다.
3.2 LoRA 미세 조정 코드 분석
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \
--lora_alpha 4.0 \
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 1 \
--center_crop \
--use_gradient_checkpointing \
--precision "16-mixed"
""".strip()
os.system(cmd)
3.3 주요 파라미터 설명
| 파라미터 | 값 | 설명 |
|---|---|---|
pretrained_unet_path | models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors | 사전 학습된 UNet 모델 경로 |
pretrained_text_encoder_path | models/kolors/Kolors/text_encoder | 사전 학습된 텍스트 인코더 경로 |
pretrained_fp16_vae_path | models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors | 사전 학습된 VAE 모델 경로 |
lora_rank | 16 | LoRA의 랭크로, 모델 복잡도와 성능에 영향 |
lora_alpha | 4.0 | 미세 조정 강도 제어 |
dataset_path | data/lora_dataset_processed | 훈련 데이터셋 경로 |
output_path | ./models | 모델 저장 경로 |
max_epochs | 1 | 최대 훈련 에폭 수 |
center_crop | 활성화 | 중앙 크롭을 통한 이미지 전처리 |
use_gradient_checkpointing | 활성화 | 그래디언트 체크포인트를 통한 메모리 절약 |
precision | "16-mixed" | 혼합 16비트 정밀도로 훈련 속도 향상 |
3.4 UNet, VAE, 텍스트 인코더의 협력 관계
- UNet: 노이즈와 텍스트 조건을 입력받아 이미지 생성 과정에서 노이즈를 제거
- VAE: 입력 데이터를 잠재 공간으로 매핑하고, UNet 출력을 디코딩하여 최종 이미지 생성
- 텍스트 인코더: 텍스트 프롬프트를 벡터로 변환하여 UNet에 전달, 이미지 생성을 안내
4. 고품질 데이터셋 준비
4.1 목표 설정
- 응용 시나리오: 예술 스타일 변환, 제품 이미지 생성, 의료 영상 합성 등
- 데이터 유형: 실제 사진 또는 합성 이미지, 컬러 또는 흑백, 해상도 요구사항
- 데이터 양: 훈련 및 검증에 필요한 충분한 이미지 수
4.2 데이터셋 획득 방법
| 방법 | 설명 |
|---|---|
| 공개 데이터 플랫폼 | 모델스코프, ImageNet, Open Images, CelebA, LSUN 등 활용 |
| API 또는 크롤러 | Unsplash, Pexels 등에서 API를 통해 이미지 수집 (저작권 주의) |
| 데이터 합성 | Unity, Unreal Engine 등으로 합성 데이터 생성 |
| 데이터 증강 | 회전, 뒤집기, 크기 조정, 색상 변환 등으로 데이터 확장 |
| 구매 또는 커스터마이징 | 의료 영상, 위성 이미지 등 특수 분야는 신뢰할 수 있는 채널에서 구매 |