MarblingTIXL - v2.0
추천 프롬프트
award-winning Art Nouveau xlmrblng15-1300, analog realistic colour photo of a Japanese mermaid sitting on a rock in the midst of crashing waves, very detailed
cybernetic nun, xlmrblng15-1300
fantasy winter landscape, xlmrblng15-1300
(__Art_Movements__:0.5) xlmrblng15-1300, mature __Nationalities__ (__Character_MF__) riding a __BW_Animals__ in a white-tinted __Landscapes__, __Metal_Color__ filigree inlay
very detailed, intricate
추천 매개변수
samplers
steps
cfg
resolution
vae
other models
추천 고해상도 매개변수
upscaler
upscale
steps
denoising strength
팁
더 좋은 결과를 위해 TI 토큰 앞에 3~5개의 토큰을 넣어 사용하세요(예: 'portrait of a woman, xlmrblng15-1300').
최상의 결과는 30~45 토큰의 프롬프트에 부정적 프롬프트 없이 얻어집니다.
TI 트리거 단어가 SDXL이 이미 아는 개념(예: 'marbling')과 겹치지 않도록 하세요. 예상치 못한 결과가 생깁니다.
Dynamic Prompts의 와일드카드 시스템을 사용해 다양하고 창의적인 프롬프트를 만들어보세요.
kohya_ss 훈련 시 init word 선택이 중요하며, 반복 패턴 방지를 위해 'pattern'을 권장합니다.
TI는 8개의 벡터로 구성되어 긴 프롬프트에 강력하며, 짧거나 단순한 프롬프트에는 과도할 수 있습니다.
DPM++ 2M Karras 샘플러와 CFG 7, 40 스텝을 사용해 생성하세요.
1MP(1024x1024, 960x1344, 1344x960) 해상도가 좋으며, 1344x960은 7"x5" 인쇄에 적합합니다.
버전 하이라이트
본 내용은 현재 kohya_ss(v22.6.0 시점) 환경에서 새로 진행한 내용입니다. 이전 버전 설정과 달리 결과가 다르게 나타나서 참고용으로 훈련 데이터와 메모를 포함했습니다. 훈련 시 gradient accumulation = 4를 사용해 500 스텝이 GA 미사용 시 2000 스텝과 유사합니다.
2024년 1월 31일
v2.0은 MarblingTIXL의 더 나은 버전이 아니라 단지 다른 버전입니다. v1.0도 여전히 잘 작동합니다.
kohya의 변경으로 인해 이 TI의 v1을 만든 방식이 더 이상 작동하지 않거나, 적어도 유용한 결과를 내지 못한다는 것을 알게 되었습니다.
이에 대해 알려준 @raken에게 감사드립니다.
저는 여전히 SDXL 임베딩에 큰 가능성이 있다고 생각하여 갓 설치한 kohya_ss(v22.6.0 시점)에서 여러 매개변수와 설정을 조절해 본 결과 원래 MarblingTIXL의 근연 버전을 만드는 조합을 찾았습니다.
SDXL TI에 관심 있으신 분(적어도 두 분 계신다는 걸 압니다!)을 위해 훈련 데이터와 kohya_ss 구성 JSON, 그리고 유용할 수 있는 메모도 포함했습니다.
장점으로는 이번 TI가 더 빠르게 훈련되었지만, 단점은 이전 TI만큼 일관성이 없다는 점입니다. 혹은 제가 충분히 다루지 못했을 수도 있겠죠. 첨단 영역에서는 누가 알겠습니까?!
질문, 의견, 지혜가 있으시면 아래에 댓글 남겨 주세요. 현재 TI 스타일 생성에 관한 확실한 정보가 많지 않은 것 같습니다... 모순되는 관점도 많이 접했습니다. 그래도 가능하며 제가 지금까지 만든 것보다 더 나은 TI 개발 가능성은 있다고 생각합니다.
LoRA와 경쟁하냐고요? 아닙니다 - LoRA는 체크포인트에 무언가를 추가하는 반면, TI는 체크포인트에 이미 있는 내용을 활용합니다. 제가 올바르게 이해했다면 TI는 체크포인트 가능성 공간에서 일관되게 접근하기 어려운 영역에 닿게 해 줍니다. 그래서 TI와 LoRA는 각각 다른 목적의 별개 개념이며 같이 사용할 수도 있습니다. 모두가 행복해지죠 :-)
관련 기술 논문들도 있긴 하지만(TI의 개념, 훈련법, 텍스트 인코더 관련 등) 저는 첫 장을 반쯤 읽고 나면 이해하기 어렵더군요 :-(
제가 알기로 kohya_ss는 SDXL에서 첫 번째 TE(텍스트 인코더)만 훈련합니다. 이는 auto1111 SDXL 생성에서 작동 예정이지만 현재는 작동하지 않는 SD v1.x에서 가져온 TE입니다. (일부는 SD v1.x TI가 Comfy에서 동작한다고 보고했으나 경험은 다양합니다.) 두 번째 TE(즉, SD v2.x에서 온 것은 kohya_ss에서 훈련되지 않는 것으로 보입니다. 아마 TE1의 복제본일까요?
OneTrainer(두 TE 모두 옵션 있음)를 시도했으나 여러 차례 성공하지 못해 현재는 kohya_ss에 집중하고 있습니다.
참고로 저는 RTX-3060 12GB를 탑재한 평범한 PC에서 작업합니다. 현재 kohya_ss 실행 시 12GB를 겨우 초과하며(샘플 생성 시 추가 6GB 소모) 리소스 요구가 LoRA보다 무겁습니다. TI가 적거나 동일한 자원을 필요로 할 줄 알았기에 조금 놀랐습니다. 아직 TI 최적화의 필요성이 체감되지 않은 걸까요?
본 TI는 다음 모델에서 훈련했습니다:
sd_xl_base_1.0_0.9vae.safetensors
쇼케이스 이미지는 다음으로 생성했습니다:
crystalClearXL_ccxl.safetensors [0b76532e03]
즉, 기본 베이스에서 훈련된 TI는 다른 체크포인트와도 작동해야 합니다.
이미지 생성은 a1111 v1.7.0에서 이루어졌고, Hires.fix만 사용했으며 기타 조정자는 사용하지 않았습니다.
아래 추가 갤러리는 TI가 적용되지 않은/적용된 쌍 이미지로 TI가 특정 프롬프트에 미치는 영향을 볼 수 있게 합니다. 'xlmrblnh36-500'은 미적용, 'xlmrblng36-500'은 적용 상태 라벨입니다. 두 프롬프트를 최대한 비슷하게 유지하려 그렇게 했습니다.
관심 있다면 교육 데이터 압축 파일에는 25스텝(*4 배치 누적=100 일반 스텝) 간격으로 저장된 모든 TI가 포함되어 있습니다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
참고: 현재 자동1111 웹UI(v1.6.0) 버전의 SDXL에 문제가 있습니다. 정제기(refiner) 체크포인트를 사용하면, 웹UI가 임베딩을 모두 잊어버리는데, 다른 체크포인트를 불러온 후 원래 체크포인트를 다시 불러오거나 웹UI를 재시작해야 합니다. 문제를 개발자에게 보고했습니다:
https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/13117
버그로 확인되었습니다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
***요약***
이 임베딩은 빈티지 마블드 페이퍼 패턴에서 영감을 받은 초현실적/판타지 미학을 적용합니다. 효과는 프롬프트가 이 미학과 얼마나 "가까운지"에 따라 낮음에서 극대까지 다양합니다.
본 TI 훈련에는 아티스트 작품이나 태그가 포함되지 않았습니다.
쇼케이스 이미지에서 생성 데이터를 복사해 취향에 맞게 조정하거나, 다음과 같은 프롬프트로 어느 시드에서도 괜찮은 결과를 얻을 수 있습니다:
award-winning Art Nouveau xlmrblng15-1300, analog realistic colour photo of a Japanese mermaid sitting on a rock in the midst of crashing waves, very detailed
체크포인트: crystalClearXL_ccxl.safetensors [0b76532e03]
샘플러: DPM++ 2M Karras
스텝: 40
CFG: 7
높이=너비=1024
이후 원하는 대로 용어를 변경해 보세요. "xlmrblng15-1300" 앞에 3~5 단어를 유지하려고 노력하세요.
시도해볼 만한 가장 간단한 프롬프트는 다음과 같습니다:
cybernetic nun, xlmrblng15-1300
fantasy winter landscape, xlmrblng15-1300
하지만 일반적으로 더 많은 단어가 있어야 흥미로운 결과가 나옵니다.
많은 실험 끝에 30~45 토큰 길이의 프롬프트에서 최상의 결과를 얻었고, 부정적 프롬프트는 사용하지 않았습니다.
추가 갤러리에서 전후 이미지 쌍을 제공했습니다.
xlmrblnh15 = 이 TI 미적용
xlmrblng15 = 이 TI 적용
보시다시피, 이 TI는 단순히 마블드 페이퍼 패턴을 추가하는 것 이상을 수행합니다 :-)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
***상세 및 훈련 정보***
이것은 TI(텍스추얼 인버전) 임베딩으로, 프롬프트에 따라 마블드 페이퍼 패턴을 추가하거나 해당 패턴 쪽으로 조정하여 이미지 생성에 영향을 줍니다. SDXL 시스템 특성상 길거나 복잡한 프롬프트에서는 효과가 단순하지 않고 구조적일 수 있습니다.
이는 제 SD v1.5용 MarblingTI의 SDXL 후속작입니다:
https://civitai.com/models/69768/marblingti
SDXL의 변화 때문에 20회 이상의 실패를 경험했지만, 이번 새 TI가 예전 것보다 더 유용하다고 봅니다... 적어도 제가 선호하는 초현실적/일러스트 스타일에는 말이죠.
automatic1111에서 kohya_ss로 훈련을 전환하는 것은 쉽지 않았습니다. 이에 대해 아래에 더 서술했습니다.
TI는 8개의 벡터(즉 8 토큰을 차지)로 구성됩니다. 짧고 단순한 프롬프트에서는 너무 강력합니다. 의도된 바입니다 - 몇 가지 미묘한 버전도 만들었으나 SDXL에서 사용하는 긴 복잡한 프롬프트에는 도움이 안 됐습니다. Stable Diffusion 관점에서 4 벡터로도 충분해야 하나, 저는 4 벡터로 일관된 결과를 얻지 못했습니다.
소스는 빈티지 마블드 페이퍼의 스캔 및 사진으로 여러 전구체 TI를 생성했고, 이들을 혼합해 본 TI를 만들었습니다.
프롬프트 시 3~5 토큰을 앞쪽에 두어야 합니다.
예시:
portrait of a woman, xlmrblng15-1300
이렇게 하고
xlmrblng15-1300, portrait of a woman
같이 쓰지 마세요.
짧고 단순한 프롬프트를 쓰면 빈티지 마블드 페이퍼 패턴만 나오기 쉽습니다. 괜찮지만 지루할 수 있죠. 또 짧은 프롬프트 시 TI가 이미지에 약간의 녹색 색조를 추가할 수도 있는데 이유는 모르겠습니다; 훈련 이미지에는 전체적인 색조가 없습니다.
가중치는 프롬프트에 따라 0.81에서 1.33까지 사용할 수 있습니다. 토큰 위치를 바꾸는 게 가중치를 쓰는 것보다 더 일관된 결과를 줍니다.
모든 이미지 생성은 자동1111 웹UI v1.6.0에서 이루어졌으며, 확장기능으로 Dynamic Prompts만 사용했습니다. Hires.fix나 인페인트, 기타 TI/LoRA 등은 쓰지 않아 쇼케이스/갤러리 이미지만으로 TI의 효과를 판단할 수 있습니다.
https://github.com/AUTOMATIC1111/stable-diffusion-webui
https://github.com/adieyal/sd-dynamic-prompts
주로 CrystalClearXL을 사용합니다:
https://civitai.com/models/122822?modelVersionId=133832
또는 SDXL FaeTastic
https://civitai.com/models/129681?modelVersionId=157988
등 SDXL 이미지 생성용 체크포인트이며, 이 TI는 제가 시도한 모든 SDXL 체크포인트에서 작동합니다.
프롬프트 동작 특성상 TI 적용 여부를 확인하려면 한 글자만 바꿔 보세요.
예를 들어
적용: cybernetic nun, xlmrblng15-1300
미적용: cybernetic nun, xlmrblnh15-1300
트리거 단어는 다운로드한 safetensors 파일 이름을 바꿔 바꿀 수 있습니다. 문제는 SDXL이 "marbling"과 같이 이미 아는 단어로 바꾸면 예기치 않은 결과가 생깁니다. "newmarbling"처럼 단어를 붙여도 SDXL이 "new"와 "marbling"을 분리해 처리하여 TI보다 SDXL 고유 효과가 작동합니다.
제가 쓴 이름은 SDXL TI이며, 'marbling'(mrblng) 관련, 1300 스텝 15버전임을 알려줍니다.
프롬프트 맨 앞에 미술 사조를 넣는 걸 즐깁니다. 예: Art Nouveau, 그대로 쓰거나 0.3~0.5 사이 가중치로 줄여 쓴다 등. 미술 사조 목록은 다음에서 참고:
https://en.wikipedia.org/wiki/List_of_art_movements
https://en.wikipedia.org/wiki/Periods_in_Western_art_history
프롬프트를 엄격하게 유지하는 분께 맞지 않으면 "award-winning illustrative" 같은 표현을 대신 써 보세요. 저는 좋아하는 미술 사조를 넣으면 나머지 프롬프트를 조정하지 않아도 비슷한 효과가 나옵니다. 좋아하는 미술 사조 목록은 txt 파일로 만들어 Dynamic Prompts의 와일드카드 폴더에 넣어 "__Art_Movements__"로 간단히 사용합니다.
아티스트 이름은 보통 쓰지 않으며 가끔 특정 효과를 위해 고인 작가 이름(예: René Lalique)만 씁니다.
https://en.wikipedia.org/wiki/Ren%C3%A9_Lalique
자동1111이 SDXL 훈련 기능을 웹UI에 추가하지 않을 것 같아 kohya_ss(v21.8.9)로 TI 훈련을 시작했습니다.
https://github.com/bmaltais/kohya_ss
kohya_ss에는 매우 많은 설정이 있고 절반도 이해 못 했지만, SDXL TI 스타일 훈련을 돕기 위한 정보를 공유합니다. SDXL TI 객체를 직접 시도하지 않았고 kohya_ss에서 LoRA 훈련은 작동하지 않습니다(훈련 시작 실패 또는 중도 실패).
본인 PC에서 성공한 설정만 기술하지만 비슷한 PC에는 참고가 되길 바랍니다.
본인 PC 사양:
Nvidia 3060/12GB(티버전 아님), MSI X570 메인보드, Ryzen 7-2700(8코어/16스레드), 64GB RAM, 다수 SSD, 윈도우10 프로.
폴더 구조 생성:
XLmrblng15
\--img
\--\--50_XLmrblng15 style
\--log
\--model
훈련 이미지:
1024x1024 크기의 이미지를 45장 생성해 "50_XLmrblng15 style" 폴더에 넣고 각 이미지에 대해 .caption 파일 작성. 예:
cliff with waterfall.png
cliff with waterfall.caption
.caption 파일은 텍스트 파일이며, 내용은 다음 패턴을 따릅니다:
xlmrblng15, cliff with waterfall
TI 이름, 쉼표, 한 칸 띄우기, 설명 파일명
캡션 유틸리티는 사용하지 않습니다.
아래 미기재 파라미터는 기본값 그대로입니다.
kohya_ss의 'Textual Inversion' 탭에서:
Source model 탭
Model Quick Pick = custom
훈련 완료 모델 저장 형식 = safetensors
Pretrained model name or path = G:/stable-diffusion-webui-master/webui/models/Stable-diffusion/SDXL/sd_xl_base_1.0_0.9vae.safetensors
SDXL model = 선택됨
Folders 탭
Image folder = G:/KOHYA/TRAIN/XLmrblng15/img
Output folder = G:/KOHYA/TRAIN/XLmrblng15/model
Logging folder = G:/KOHYA/TRAIN/XLmrblng15/log
Model output name = xlmrblng15
Parameters (basic) 탭
Token string = xlmrblng
Init word = pattern
Vectors = 8
Template = caption
Mixed precision = bf16
Save precision = bf16
Number of CPU threads per core = 1
Cache latents = 선택됨
Cache latents to disk = 선택됨
LR Scheduler = constant
Optimizer = AdamW8bit
Learning rate = 0.001
Max resolution = 1024,1024
No half VAE = 선택됨
Parameters (advanced) 탭
VAE = G:/KOHYA/sdxl_vae.safetensors
Save every N steps = 100
Gradient checkpointing = 선택됨
Memory efficient attention = 선택됨
Max num workers for DataLoader = 4
Parameters (samples) 탭
Sample every n steps = 100
Sample prompts =
아날로그 사실적 사진, 탁자 위 멋진 주전자와 유리잔 세트, 매우 상세하고 정교함, xlmrblng15 --w 1024 --h 1024
xlmrblng15, 아날로그 사실적 사진, 빅토리아 시대 수영복을 입은 멋진 영국 여성, 매우 상세하고 정교함 --w 1024 --h 1024
위 설정으로 훈련 시간은 약 6초/반복입니다. PC를 다른 작업에 병행 사용해 변동이 있습니다. xlmrblng15-1300은 약 2시간 10분 경에 완성되었습니다.
훈련 중 GPU RAM 사용량은 제 3060의 12GB에 겨우 맞춰졌지만, 샘플 생성과 100 스텝마다 TI 저장 시 추가 7GB("공유 GPU 메모리"=메인 시스템 RAM) 사용되어 총 19GB가 소모되었습니다.
공유 GPU 메모리 사용 시 속도가 약 10배 느려졌습니다. 슬프군요 :-(
kohya_ss에서 생성된 샘플 이미지 품질은 자동1111 웹UI에서 기본 SDXL 모델로 생성한 것보다 매우 떨어집니다. 하지만 훈련 방향 확인용으로는 남겨 두었습니다.
당연히 훈련 데이터셋이 매우 중요합니다. 저는 다양한 생성 및 실제 이미지 조합을 시도해 이 페이지의 TI를 만들어냈습니다.
45장 이미지, 배치 크기 기본 1 사용 시 "50_XLmrblng15 style" 폴더명은 kohya에게 이미지를 45회 처리하라는 신호입니다. 45 * 50 = 총 2250 스텝입니다. 저장된 TI를 100, 200, 300 ... 스텝별로 테스트해 1300 스텝 것이 가장 좋았습니다.
Parameters-Basic 탭 'Init word' 필드는 훈련 시 매우 민감함을 발견했습니다. 본 경우 "pattern"(SDXL 기준 1토큰)을 썼고, 이론상 8토큰 구문을 써야 한다는 콘솔 경고가 있습니다. 일부 시도에서는 여러 토큰 사용으로 흥미로운 TI가 나왔으나 원하는 결과는 아니었습니다.
"pattern" 사용 단점은 프롬프트에 따라 반복 무늬가 자주 나타날 수 있다는 점입니다(벽지나 포장지 무늬처럼).
"marblng" 혹은 "paper marbling"은 작동하지 않았습니다: SDv1.x와 달리 SDXL은 마블링에 대해 더 잘 알고 있습니다. 프롬프트에 대리석/마블링/마블드 등을 넣어 보세요! SDXL이 SDv1.x보다 훨씬 우수한 처리량을 보입니다. 훈련어가 'marbling'이나 유사어 일 때 SDXL 내장 마블링 기능이 우선 적용되어 제가 만든 학습 효과가 묻힙니다 :-(
마블드 페이퍼 역사도 살펴봤고, 터키 마블드 페이퍼인 'ebru' 같은 용어도 시도했지만 별 효과 없었습니다. 결국 매우 광범위한 "pattern" 단어가 원하는 결과를 거의 다 줬습니다.
kohya_ss에서 Parameters-Basic 탭에 "style" 템플릿 옵션도 있는데, 다른 SDXL TI에선 괜찮았지만 이 마블드 페이퍼 TI에선 만족스럽지 않았습니다.
텍스추얼 인버전 .vs. LoRA
저는 (a) LoRA를 완성까지 학습시키지 못했고, (b) SDXL 내부 콘텐츠를 활용하고자 TI에 집중합니다. LoRA에 반대하지 않으며, konyconi 등 LoRA를 즐겁게 사용 중이고 좋은 결과도 냅니다 :-)
그러나 현재는 TI가 더 끌립니다. 제 생각에는 TI는 단어만으로 도달하기 힘든 SDXL 영역을 조정하지만, LoRA는 SDXL 위에 새로운 내용을 추가해 프롬프트를 통해 SDXL과 "병합"하는 방식입니다.
매우 단순화한 설명이며, SDXL의 전체 샘플 공간 .vs. 확률 공간, 상위집합 내 작용 등 복잡한 이론은 관심 없습니다. 이건 취미니까요 :-)
마지막으로, 저는 Dynamic Prompts의 와일드카드 시스템을 많이 씁니다. 본 xlmrblng15-1300 TI를 쓰는 전형적 프롬프트는 다음과 같습니다:
(__Art_Movements__:0.5) xlmrblng15-1300, mature __Nationalities__ (__Character_MF__) riding a __BW_Animals__ in a white-tinted __Landscapes__, __Metal_Color__ filigree inlay
실제 적용된 프롬프트(이를 통해 확인가능)는 대략 30~45 토큰 범위입니다.
자동1111 웹UI의 "PNG Info" 탭에 생성된 이미지를 드래그하면 위 프롬프트의 일반적 예가 34 토큰입니다:
(Surrealism:0.5) xlmrblng15-1300, mature Swedish (male vampire) riding a dalmation in a white-tinted mudflats with scarlet cranes, black filigree inlay
왜 민족명을 넣느냐고요? SDXL은 긴 프롬프트에서 민족명을 무시하지 않고 편향되게 처리해, 예를 들어 Scottish가 들어가면 붉은 머리, Egyptian이면 피라미드, Japanese면 후지산 등 연관된 소품을 추가합니다. SDv1.x보다 문맥 연결이 강해 제어하기 어렵습니다 :-(
SDXL 해상도는 주로 1024x1024, 960x1344, 1344x960을 씁니다. 온라인 권장 해상도는 기본 1메가픽셀(1024x1024) 및 1메가픽셀에 최대한 근접한 비율을 권하지만 실제로 1344x768보다 1024x1024, 1344x960의 품질 인식이 높았습니다. 1344x960은 7"x5" 사진지 크기와도 정확히 맞아 좋습니다 :-)






