Lab @8 : lr-gotcha - concept of getting caught when being naughty
세부 정보
파일 다운로드
이 버전에 대해
모델 설명
면책 조항
이 LoRA 시리즈는 LoRA 훈련 학습을 공유하기 위한 중간 단계의 실험용 LoRA를 제공합니다.
이 LoRA는 접두사로 *BAD*로 표시됩니다. 이들은 특정하게 후처리된 이미지를 제공하지 않습니다.
관심이 있다면 다운로드하여 성능을 확인하거나 부록의 일부 벤치마크 콘텐츠를 참고하세요.
소개
이 LoRA는 "소녀가 장난을 치다가 남자친구/남편에게 적발되는" 개념입니다.
적절한 모델로 전환
/model/1277670/janku-v30-noobai-eps-rouwei-nsfw-illustrious-xl
lab_8_11, lab_8_12,
- 이 모델에 기반하여 훈련되었으며, 생성된 이미지의 거의 모든 것이 왜곡되지 않습니다.
변경 내역
250427
Lab_8_12, 업데이트 (기반 모델은 Janku v3)
고정된 정규화 이미지 세트를 사용하여 LoRA를 재훈련
결과: 생성이 더 안정적이 됨
그리고 아, 왜 처음에 이렇게 혼란스러웠는지 알게 되었습니다!! (자신의 LoRA를 훈련하고 싶다면, 제가犯한 오류에 대한 정보를 이 LoRA의 발견 사항을 참고하세요: /model/1493162/lab-10-nude-pantyhose-natural-pantyhose-with-cotton-or-shiny-controlling)
발견 사항
데이터 전처리: 단일 행 캡션 형식이 중요함 (문서에서도 언급했고, 결과도 그 차이를 보여줌)
트리거 토큰: "inset" 태그가 대상 개념을 효과적으로 포착함. 정확한 선택이 중요함 (즉, 훈련을 안내할 더 나은 트리거 토큰을 선택하는 것이 어느 정도 중요함)
정규화: 단순하지만 고품질의 이미지가 가장 좋음. 복잡한 이미지는 AI가 이해하는 데 어려움을 줌
정규화 캡션: 이는 필요함 (sd-script 파이썬 스크립트를 확인했음. 정규화 이미지 세트의 캡션을 처리함. 재미있게도 sd-script 문서에는 정규화에는 캡션이 필요 없다고 되어 있음. 아마도 클래스 트레이닝 LoRA를 의미하는 것일 수 있음). 자동 태깅 (0.4 임계값 사용 가능)
데이터셋 품질: 고품질로 선별된 세트 (28장). SD 자체를 사용해 고품질 이미지를 생성하는 것이 좋은 방법임 (항상 데이터셋 및 정규화 세트에 대해 고해상도 수정 및 adetailer 수정 적용)
기반 모델: janku v3는 더 안정적인 출력과 적은 아티팩트를 생성함
일반 훈련 정보
참고: 기본 정보는 lab_8_1을 참고하세요 (거의 동일)
Lab 1 - 초기 설정
기반 모델: wai v13
데이터셋: 5장 (24회 반복 × 8에포크)
트리거 토큰: lr-gotcha, split frame
캡션: 한 줄
정규화: 없음
노트: 초기 시도
Lab 2 - 데이터셋 확장 및 오류
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep), 새로운 데이터셋
트리거 토큰: lr-gotcha, comic
캡션: 다중 줄 (잘못된 형식)
정규화: 없음
노트: 나중에 캡션 형식 오류 발견
Lab 3 - 정규화를 통한 기초 구축
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, 1boy in frame
캡션: 한 줄 (수정됨)
정규화: lab_8_3_reg (1girl 일반, 1girl 적발됨)
노트: 첫 성공적인 정규화 적용
Lab 4 - 트리거 변경 및 회귀
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, one inset boy
캡션: 다중 줄 (회귀)
정규화: Lab 3과 동일
노트: 잘못된 캡션 형식으로 되돌림
Lab 5 - 캡션 형식 수정
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, one inset boy
캡션: 한 줄 (다시 수정됨)
정규화: Lab 3과 동일
노트: 올바른 캡션 형식 재확립
Lab 6 - 핵심 발견 ('inset' 태그)
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, inset
캡션: 한 줄
정규화: lab_8_3_reg + 1boy pointing
노트: 'inset' 태그가 효과적임이 입증됨, 품질 향상
Lab 7 - 복잡한 정규화 실험
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, inset
캡션: 한 줄
정규화: 데이터셋 태그에서 자동 생성된 이미지
노트: 복잡한 정규화 이미지가 품질 저하를 유발함
Lab 8 - 정규화 캡션 제거
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, inset
캡션: 한 줄
정규화: Lab 7과 동일, 캡션 없음
노트: 여전히 최적의 결과 아님
Lab 9 - 개별 태그 시도
기반 모델: wai v13
데이터셋: 8장 (24r × 8ep)
트리거 토큰: lr-gotcha, inset
캡션: 한 줄
정규화: Lab 7과 동일, 개별 태그 적용
노트: 복잡한 프로그래밍 정규화 생성이 불안정함
Lab 10 - 품질 향상으로의 돌파구
기반 모델: wai v13
데이터셋: 28장 (8r × 8ep), 선별됨
트리거 토큰: lr-gotcha, inset
캡션: 한 줄
정규화: 스크립트 생성된 단순 이미지 (6개 카테고리)
노트: 고품질 데이터셋 + 단순한 정규화 이미지 = 성공
Lab 11 - 기반 모델 검증
기반 모델: janku v3
데이터셋: 28장 (8r × 8ep), Lab 10과 동일
트리거 토큰: lr-gotcha, inset
캡션: 한 줄
정규화: Lab 10과 동일
노트: janku v3는 더 안정적인 결과 생성
훈련 프로세스 개요
시작: 기본 설정
행동:
wai illustrious v13모델을 사용하여 초기 훈련 시도, 작은 데이터셋(5장), 특정 트리거 토큰(lr-gotcha, split frame), 올바른 단일 행 캡션 형식, 정규화 이미지 없음.발견: 시작 지점을 제공했으나 고품질이고 제어 가능한 LoRA를 얻기 위한 정규화 등의 정교함이 부족함.
초기 단계: 데이터셋 확장 및 핵심 전처리 오류
- 행동: 데이터셋 규모 확대(8장), 트리거 단어 변경(
lr-gotcha, comic).
- 행동: 데이터셋 규모 확대(8장), 트리거 단어 변경(
기초: 정규화 및 올바른 데이터 처리 도입
- 행동: 최초 정규화 이미지 세트(
lab_8_3_reg) 도입. Lab 2에서 발견된 캡션 형식 오류를 정정하여 태그를 쉼표로 구분된 한 줄 형식으로 사용. 트리거 토큰 변경(lr-gotcha, 1boy in frame).
- 행동: 최초 정규화 이미지 세트(
실험: 새로운 트리거, 우연한 회귀
- 행동: 트리거 토큰을
lr-gotcha, one inset boy로 변경. 그러나 필수적인 단일 행 형식 대신 잘못되게 다중 행 캡션을 사용함. Lab 3과 동일한 정규화 사용.
- 행동: 트리거 토큰을
교정: 올바른 캡션 형식 재도입
행동: Lab 4의 실수를 교정하여 캡션이 올바르게 쉼표로 구분된 단일 행 형식으로 유지함. 트리거 토큰(
lr-gotcha, one inset boy)과 이전 단계의 정규화 유지.발견: 훈련의 효율성을 위해 캡션 형식과 같은 기술적 요구 사항을 준수하는 것이 중요함을 강조.
핵심 발견: 'inset' 트리거 토큰
행동: 관찰 또는 가설을 바탕으로 트리거 토큰을
lr-gotcha, inset로 변경. 정규화 세트를 약간 확장.발견: 'inset' 태그는 원하는 시각적 개념을 효과적으로 포착함. 이 발견은 LoRA가 의도한 스타일을 생성하는 능력 향상을 의미하며, 정확한 트리거 단어의 중요성을 입증함. 그리고 정규화 세트는 괜찮은가? 품질이 눈에 띄게 향상됨.
실험: 자동화된 복잡한 정규화 이미지 생성
행동: 스크립트를 사용한 새로운 정규화 전략 구현. 스크립트는 데이터셋 이미지 태그(트리거 제외)를 기반 모델에 입력하여 정규화 이미지를 생성하고, 원래 캡션을 유지.
발견: 이 방법은 시각적으로 너무 복잡한 정규화 이미지를 생성하여 불안정성과 낮은 LoRA 성능을 초래함.
복잡한 정규화 개선 (캡션 제거)
행동: Lab 7에서의 복잡한 정규화 이미지를 계속 사용하고, 그에 연결된 모든 텍스트 캡션을 제거하여 캡션이 노이즈를 추가할 수 있다고 가정.
발견: 정규화 이미지의 캡션은 중요함.
복잡한 정규화 개선 (개별 태깅)
- 행동: Lab 7에서의 스크립트 생성 복잡한 정규화 이미지 사용. 각 정규화 이미지에 자동 태깅(0.4 임계값 적용)을 개별적으로 적용하여 개선 시도.
돌파구: 데이터셋 품질과 단순화된 정규화의 시너지
행동: 대규모 데이터셋 개편 수행 – 28장으로 확대, 기반 모델 및 수동 편집(Photoshop)을 사용해 품질을 신중하게 선별/생성. 동시에 정규화 접근법을 단순화하여 스크립트를 사용해 6개 카테고리의 고품질, 단순 구성 이미지를 생성하고 후처리(고해상도 수정, adetailer) 적용.
발견: 고품질이고 목표 지향적인 훈련 데이터 및 고품질이면서 관련성은 있으나 단순한 정규화 이미지의 결합 접근법이 원하는 LoRA 품질을 달성하는 핵심이었음.
우수한 기반 모델(
janku v3)으로 검증행동: Lab 10의 성공적인 구성(선별된 데이터셋, 단순화된 정규화,
inset트리거)을 재현하되,janku v3기반 모델을 활용.발견:
janku v3모델은 이전 기반 모델보다 출력의 안정성을 향상시키고 이미지 아티팩트를 줄임. (하지만 현재 이유는 모르겠음)
초기 단계 -- Lab 8_1 (기본 훈련 파라미터 및 목표)
목표 및 발견
목표
이는 첫 번째 훈련입니다. SD 모델이 일반적인 아이디어를 학습할 수 있는지 빠르게 확인하는 것이 목표입니다.
- 답변은 YES입니다. 그러나 기대만큼 좋지 않습니다.
데이터셋 소스 방법:
먼저 기반 모델을 사용하여 1girl이 놀라 있는 장면과 1boy가 가리키는 장면 각각 2장을 생성
Photoshop을 사용하여 스플릿 패널을 가진 이미지를 합성 (참고: 이 버전에서는
inset으로 처리하지 않았으며, 1girl 이미지를 절반으로 나누고 1boy를 중앙에 배치)
발견
혼란스러운 레이아웃으로 인해 LoRA는 사용 중에 비논리적인 지역 구성 생성
다른 지역(논리적인 경우)은 "좋은 품질"을 가지지만, 이 실험 단계에서 LoRA의 총체적 가치는 매우 낮음
이는 내가 만든 데이터셋이 적어도 합리적인 품질임을 확인시켜 줌
이미지가 적다면, LoRA 훈련을 안내하기 위해 모델이 잘 이해하지 못하는 태그보다는 기반 모델이 이미 "이해하는" 태그를 사용할 것
- 우연히 "inset" 태그가 더 적절함을 발견
이 단계에서 주어진 데이터셋은 구조상 위(1girl), 중앙(1boy), 아래(1girl)로 구분됨. 완전히 분리되어 있기 때문에(내 추측), 모델은 LoRA 훈련 중 상하부를 잘 연결하지 못하여 스플릿 구성 이미지를 생성할 때 상하부가 종종 서로 다른 이미지에서 왔을 것처럼 보임
- 이것이 나는 "inset"에 집중하는 이유. inset은 전체 이미지에서 주요 배경을 완전히 분리하지 않아 모델이 "배경" 전체를 더 잘 학습할 수 있음
훈련 파라미터
# Model & Data
pretrained_model_name_or_path="... /wai_i13.safetensors"
# image count = 5 pics
train_data_dir="... /lora_lab_8_1_gotcha/dataset"
# reg image count = 0
reg_data_dir=""
# Training
max_train_epochs=8
train_batch_size=1
seed=1861
resolution="832,1280"
max_bucket_reso=1280
min_bucket_reso=256
bucket_reso_steps=64
bucket_no_upscale=true
enable_bucket=true
cache_latents_to_disk=true
persistent_data_loader_workers=true
shuffle_caption=true
caption_extension=".txt"
keep_tokens=2
max_token_length=225
# LoRA Network
network_module="networks.lora"
network_dim=16
network_alpha=8
# Optimizer & LR
learning_rate=0.0001
unet_lr=0.0001
text_encoder_lr=0.00001
optimizer_type="AdamW8bit"
lr_scheduler="cosine_with_restarts"
lr_warmup_steps=0
lr_scheduler_num_cycles=1
# Precision & Device
mixed_precision="bf16"
xformers=true
lowram=true
# Saving & Logging
save_model_as="safetensors"
save_precision="fp16"
save_every_n_epochs=2
log_with="tensorboard"
log_prefix="lora_lab_8_1_gotcha--"
output_name="lora_lab_8_1_gotcha"
# Loss
prior_loss_weight=1

















