MarblingTIXL - v2.0
Prompts Recomendados
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
Parâmetros Recomendados
samplers
steps
cfg
resolution
vae
other models
Parâmetros Recomendados para Alta Resolução
upscaler
upscale
steps
denoising strength
Dicas
Use de 3 a 5 tokens antes do token TI (ex: 'retrato de mulher, xlmrblng15-1300') para obter melhores resultados.
Os melhores resultados vêm de prompts entre 30 e 45 tokens sem prompts negativos.
Evite usar palavras gatilho TI que se sobreponham a conceitos conhecidos do SDXL (como 'marbling'), pois causam resultados inesperados.
Use o sistema de curingas do Dynamic Prompts para prompts variados e criativos.
O treinamento com kohya_ss requer seleção cuidadosa da palavra inicial; use 'pattern' para melhor equilíbrio e evitar padrões repetitivos.
O TI consiste em 8 vetores para maior efeito, o que é excessivo para prompts curtos/simples.
Use samplers como DPM++ 2M Karras com CFG 7 e 40 passos para geração.
Resoluções próximas a 1MP (1024x1024, 960x1344, 1344x960) fornecem boa qualidade; 1344x960 escala bem para impressões 7"x5".
Destaques da Versão
Esta é uma reedição com o kohya_ss atual (v22.6.0 na época da escrita) pois as configurações que usei na versão antiga não produzem o mesmo resultado. Os dados de treinamento e notas estão incluídos para quem se interessar. O treinamento usou acumulação de gradiente = 4, então os 500 passos são similares a 2000 passos sem GA.
31 Jan 2024
v2.0 não é uma versão melhor do MarblingTIXL. Apenas diferente. A v1.0 ainda funciona bem.
Com as mudanças no kohya, descobri que a forma como fiz a v1 deste TI não funciona mais, ou pelo menos não produz nada muito útil.
Obrigado ao @raken por me informar sobre isso.
Ainda acredito que há grande potencial nos embeddings SDXL, então fiz uma instalação nova do kohya_ss (v22.6.0 na época da escrita) e testei vários parâmetros/configurações até encontrar uma combinação que faz um parente próximo do MarblingTIXL original.
Para quem se interessar por SDXL TIs (e sei que existem pelo menos 2 de vocês por aí!), inclui meus dados de treinamento e o JSON de configuração do kohya_ss. Provavelmente algumas notas também, se eu conseguir pensar em algo útil.
Como vantagem, este TI treinou mais rápido... como desvantagem, não é tão consistente quanto o TI antigo. Ou talvez eu ainda não tenha explorado o suficiente. Quem pode dizer aqui na vanguarda?!
Se alguém tiver perguntas, observações, opiniões ou sabedoria para compartilhar, por favor deixe um comentário abaixo. Não parece haver muita informação concreta sobre como criar estilos TI no momento... Li/assisti muitos pontos de vista contraditórios. Mas pode ser feito, e acho que há espaço para TIs melhores do que consegui até agora.
Concorrência para LoRAs? Não, na verdade não - LoRAs adicionam algo a um checkpoint, enquanto TIs aproveitam o que já está no checkpoint. Se entendi certo, TIs permitem acessar áreas no espaço de possibilidades do checkpoint que seriam difíceis de alcançar consistentemente. Então TIs e LoRAs são coisas diferentes para propósitos diferentes... que você pode usar juntos. Todo mundo fica feliz :-)
Existem artigos técnicos (sobre o que é um TI, como treinar um, sobre codificadores de texto, etc), mas geralmente fico fora da minha área pela metade da primeira página :-(
Até onde sei, o kohya_ss treina apenas o primeiro TE (codificador de texto) no SDXL. Esse é o do SD v1.x que deveria funcionar no auto1111 geração SDXL, mas não funciona. (Algumas pessoas relataram que os TIs do SD v1.x funcionam no Comfy, mas a experiência parece ser variável.) Até onde sei o segundo TE não está sendo treinado no kohya_ss (é o do SD v2.x). Ou talvez seja um duplicado do TE1?
Tentei usar o OneTrainer (que tem opções para ambos os TEs), mas não tive sucesso nos poucos testes que fiz, então vou continuar com o kohya_ss por enquanto.
Para referência, uso uma RTX-3060 com 12GB em um PC razoável. As execuções atuais do kohya_ss exatamente ultrapassam os 12GB (+ mais 6GB se estiver gerando amostras), então ele é mais pesado em recursos do que um LoRA. Achei que TIs precisariam de menos (ou os mesmos) recursos, então estou um pouco surpreso. Talvez não haja necessidade percebida de otimizar para TIs? Ainda :-)
O TI aqui foi treinado em:
sd_xl_base_1.0_0.9vae.safetensors
As imagens de vitrine foram geradas usando:
crystalClearXL_ccxl.safetensors [0b76532e03]
Ou seja, um TI treinado no base vanilla deve funcionar com outros checkpoints.
As imagens são geradas no a1111 v1.7.0 e usei Hires.fix, mas nenhum outro ajuste.
A galeria adicional abaixo mostra pares sem/com para que você veja como o TI afeta alguns prompts selecionados. O rótulo “xlmrblnh36-500” significa sem, o rótulo “xlmrblng36-500” significa com. Fiz assim para manter os dois prompts o mais similares possível.
Se estiver interessado, o zip dos Dados de Treinamento contém todos os TIs salvos em intervalos de 25 passos (*4 acumulação de gradiente = 100 passos normais).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTA: Há um problema com SDXL na versão atual do automatic1111’s webui (v1.6.0). Se usar um checkpoint refinador, o webui esquece todos os seus embeddings até que você carregue um checkpoint diferente e depois recarregue o original (ou reinicie o webui). Reportei a questão aos desenvolvedores:
https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/13117
e foi confirmado como bug.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
***RESUMO***
Este embedding aplica uma estética surreal/fantasia inspirada em padrões vintage de papel marmorizado. O efeito varia de baixo a extremo dependendo de quão “próximo” seu prompt já está dessa estética.
O treinamento deste TI não incluiu trabalhos de artistas ou tags.
Copie os dados de geração de uma das imagens da vitrine e ajuste ao seu gosto, ou comece com um prompt assim, que deve dar um resultado decente com qualquer semente:
award-winning Art Nouveau xlmrblng15-1300, foto em cor analógica realista de uma sereia japonesa sentada numa pedra em meio a ondas quebrando, muito detalhado
checkpoint: crystalClearXL_ccxl.safetensors [0b76532e03]
sampler: DPM++ 2M Karras
passos: 40
CFG: 7
altura=largura=1024
e então varie os termos como quiser. Tente manter entre 3 e 5 palavras antes de “xlmrblng15-1300”.
Os prompts mais simples que valem a pena tentar são deste tipo:
freira cibernética, xlmrblng15-1300
paisagem de inverno fantasia, xlmrblng15-1300
mas geralmente você precisará de mais palavras para obter resultados interessantes.
Depois de muitas experimentações, descobri que os melhores resultados vieram com prompts entre 30 e 45 tokens, sem prompts negativos.
Forneci alguns pares de imagem antes/depois nas galerias extras abaixo.
xlmrblnh15 = sem este TI
xlmrblng15 = com este TI
Como você verá, este TI faz mais do que simplesmente adicionar padrões de papel marmorizado :-)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
***MAIS DETALHES & INFORMAÇÕES DE TREINAMENTO***
Este é um embedding TI (inversão textual) que ajusta suas gerações de imagem adicionando padrões de papel marmorizado, ou ajustando elementos para esses padrões dependendo dos seus prompts. Devido ao funcionamento do sistema SDXL, o efeito com prompts mais longos/complexos será muitas vezes estrutural e não simplista.
É o sucessor SDXL do meu MarblingTI para SD v1.5:
https://civitai.com/models/69768/marblingti
Por causa de todas as mudanças no SDXL, tive muitos falsos começos (20+), mas acho que este novo TI é mais útil que o antigo... pelo menos para as coisas surreais/ilustrativas que gosto de criar.
Mudar do automatic1111 para kohya_ss para treinamento não foi um processo fácil. Mais a seguir.
O TI é composto de 8 vetores (isto é, ele ocupa 8 tokens do seu prompt). É superpotente para prompts curtos/simples. Isso é proposital - fiz algumas versões sutis, mas não serviam para os prompts mais longos/complexos que tenho usado com SDXL. Pelo que entendo do Stable Diffusion, 4 vetores seriam suficientes, mas não consegui resultados consistentes com 4 vetores.
O material base é composto de scans/fotos de papel marmorizado vintage que foram transformados em vários TIs precursoras, usadas depois para criar imagens híbridas, que se tornaram as entradas para este TI.
Para prompting, você precisará colocar de 3 a 5 tokens antes.
Ou seja:
retrato de mulher, xlmrblng15-1300
em vez de
xlmrblng15-1300, retrato de mulher
Se usar um prompt curto/simples, provavelmente obterá apenas um padrão vintage de papel marmorizado. Ok, mas chato. Além disso, para prompts curtos, o TI pode adicionar uma leve tonalidade verde às imagens. Não sei por quê; as imagens de treinamento não têm nenhuma tonalidade geral.
Peso/enfase: de 0.81 até 1.33 é utilizável dependendo do prompt. Acho que obtenho resultados mais consistentes movendo o token TI em vez de usar peso.
Toda a geração de imagem para este TI foi feita na webui automatic1111 v1.6.0. A única extensão não embutida que uso é Dynamic Prompts (instalada via aba de Extensões). Não usei Hires.fix, in/outpainting, detalhadores, outros TIs ou LoRAs, assim você pode obter uma ideia pelas imagens da vitrine/galeria se vale a pena tentar este TI.
https://github.com/AUTOMATIC1111/stable-diffusion-webui
https://github.com/adieyal/sd-dynamic-prompts
Normalmente uso o CrystalClearXL:
https://civitai.com/models/122822?modelVersionId=133832
ou SDXL FaeTastic
https://civitai.com/models/129681?modelVersionId=157988
checkpoints para geração de imagem SDXL, mas este TI funciona com todos os checkpoints SDXL que testei.
Devido ao funcionamento do prompting, se quiser ver efeitos com/sem este TI, mude apenas uma letra.
Exemplo:
COM: freira cibernética, xlmrblng15-1300
SEM: freira cibernética, xlmrblnh15-1300
Você pode mudar a palavra gatilho renomeando o arquivo safetensors que baixou. PROBLEMA: se mudar o gatilho para uma palavra que o SDXL “conhece”, como marbling, terá resultados inesperados. Mesmo que junte palavras como newmarbling, o SDXL identifica “new” e “marbling” e, hum, faz coisas com essas palavras ao invés do TI.
O nome que usei é para me dizer que é um TI SDXL, que é marbling (mrblng), e que é a iteração 1300 do passo da versão 15.
Normalmente uso um movimento artístico no começo dos meus prompts, por exemplo Art Nouveau, como está ou com peso entre 0.3 e 0.5. Referências para movimentos artísticos:
https://en.wikipedia.org/wiki/List_of_art_movements
https://en.wikipedia.org/wiki/Periods_in_Western_art_history
Se isso não agradar os puristas de prompt, tente algo como “award-winning illustrative” em vez disso. Para mim, adicionar um movimento artístico que gosto significa que não preciso mexer tanto no resto do prompt para obter efeito similar. A lista curta de movimentos artísticos que gosto está num arquivo txt colocado na pasta de curingas do Dynamic Prompts para que eu possa usar __Art_Movements__ nos prompts.
Como regra, não uso nomes de artistas, exceto ocasionalmente os póstumos para obter um efeito muito particular. Exemplo: René Lalique
https://en.wikipedia.org/wiki/Ren%C3%A9_Lalique
Comecei a usar o kohya_ss (v21.8.9) para treinamento TI, pois parece que o automatic1111 não vai adicionar treinamento SDXL ao webui.
https://github.com/bmaltais/kohya_ss
Existem muitas configurações no kohya_ss e ainda não sei o significado de metade delas :-( Contudo, vou dar algumas informações que podem ajudar interessados em treinar estilos de inversão textual SDXL com kohya_ss. Não tentei treinar objetos SDXL TI, e não consigo fazer treino LoRA funcionar no kohya_ss (ou não inicia ou para no meio).
Posso apenas descrever as configurações que funcionaram no meu PC, mas espero que seja relevante para PCs semelhantes. Então...
O PC que uso é:
Nvidia 3060/12GB (não a versão Ti), placa-mãe MSI X570, Ryzen 7-2700 (8c/16t), 64GB de RAM, múltiplos SSDs, Win10pro.
Criei a estrutura de pastas:
XLmrblng15
\--img
\--\--50_XLmrblng15 style
\--log
\--model
Imagens de treinamento:
Criei 45 imagens 1024x1024 e coloquei na pasta “50_XLmrblng15 style”. Depois criei um arquivo .caption para cada imagem. Exemplo:
cliff with waterfall.png
cliff with waterfall.caption
Arquivos de legenda são apenas arquivos de texto, usei editor simples. Conteúdo de cada .caption segue o mesmo padrão:
xlmrblng15, cliff with waterfall
Esse é o nome do TI que crio, uma vírgula, um espaço e a descrição do arquivo.
Não uso utilitários de legenda.
Para o que segue, se não mencionar um parâmetro, deixei ele na configuração padrão.
Na aba principal "Textual Inversion" no kohya_ss:
Aba Source model
Model Quick Pick = custom
Save trained model as = 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 = marcado
Aba 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
Aba 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 = marcado
Cache latents to disk = marcado
LR Scheduler = constant
Optimizer = AdamW8bit
Learning rate = 0.001
Max resolution = 1024,1024
No half VAE = marcado
Aba Parameters (advanced)
VAE = G:/KOHYA/sdxl_vae.safetensors
Save every N steps = 100
Gradient checkpointing = marcado
Memory efficient attention = marcado
Max num workers for DataLoader = 4
Aba Parameters (samples)
Sample every n steps = 100
Sample prompts =
uma fotografia analógica realista de um jarro magnífico sobre mesa com copos de vidro, muito detalhado, intrincado, xlmrblng15 --w 1024 --h 1024
xlmrblng15, uma fotografia analógica realista de uma magnífica senhora inglesa vestindo roupa de banho vitoriana, muito detalhado, intrincado, --w 1024 --h 1024
Com todas as configurações acima, o tempo de treinamento ficou em cerca de 6s/iteração. Variável porque ainda uso o PC para outras coisas (simples!) enquanto o kohya realiza o treinamento. O xlmrblng15-1300 foi produzido por volta de 2h10min no processo.
Durante a maior parte do treinamento, o uso de RAM da GPU ficou exatamente dentro dos 12GB da minha 3060. Entretanto, durante a geração de amostras e salvamento do TI a cada 100 passos, mais 7GB foram usados (ou seja, 19GB no total). Esses 7GB extras vêm da "Memória compartilhada da GPU", isto é, RAM principal do sistema. Após as gerações das amostras, o uso de memória voltou a ser apenas os 12GB da GPU.
A lentidão usando "Memória compartilhada da GPU" foi cerca de 10x. Que droga :-(
As imagens de amostra produzidas pelo kohya são muito ruins comparadas ao uso do modelo base SDXL na webui automatic1111. Mas deixei elas porque ao menos podia ver se o treinamento estava indo aproximadamente na direção certa.
Obviamente seu conjunto de dados é muito importante. Testei várias combinações de imagens geradas e reais até ter um conjunto que produziu o TI nesta página.
Para 45 imagens, usando batch size 1 (padrão), o nome especial da pasta “50_XLmrblng15 style” indica ao kohya que processe as imagens 45 vezes. 45 * 50 = 2250 passos no total. Após testar os TIs salvos em 100, 200, 300 passos e assim por diante, decidi que o de 1300 passos era o melhor.
Na aba Parameters-Basic há o campo “Init word”. Descobri que o treinamento é muito sensível à palavra inicial usada. Nesse caso particular usei “pattern” que é uma palavra de 1 token para o SDXL. Teoricamente eu deveria ter usado uma frase de 8 tokens (kohya dá alerta se vetores != tokens iniciais). Em alguns testes usei mais tokens e obtive TIs interessantes, mas não era o que buscava.
Usar “pattern” tem a desvantagem que, dependendo do prompt para o SDXL, podem ocorrer muitas repetições – como um padrão repetitivo em papel de parede ou papel de presente.
Usar “marblng” ou “paper marbling” não funcionou: comparado ao SDv1.x, o SDXL “sabe” muito mais sobre marbling. Teste em seus prompts! Peça mármore/marmorizado e o SDXL faz muito melhor que o SDv1.x. Sempre que fiz um TI onde a palavra inicial era marbling ou termo conceitualmente próximo, obtive um TI que usava o marbling embutido do SDXL em vez do treinamento do meu conjunto. :-(
Pesquisei a história do papel marmorizado e tentei termos como “ebru”, a versão turca do papel marmorizado. Também não funcionou muito bem. No fim, o termo muito amplo “pattern” me deu a maioria do que queria.
O kohya_ss tem a opção de um template “style” na aba Parameters-Basic. Tive alguns resultados decentes usando “style” para alguns meus TIs SDXL não publicados, mas para este de papel marmorizado os resultados não foram bons.
Inversão textual versus LoRA
Estou focando em TIs porque (a) não consigo treinar uma LoRA até o fim, e (b) quero aproveitar o conteúdo em SDXL em vez de adicionar mais dados sobre ele. Não sou contra LoRAs – muito pelo contrário! Estou me divertindo muito com LoRAs de konyconi e outros. Obtendo ótimos resultados impressionantes :-)
Mas sinto mais afinidade pelas TIs no momento. Penso que TIs permitem ajustar seus prompts para áreas do SDXL que palavras simples não alcançam, enquanto LoRAs adicionam coisas novas por cima do SDXL que você "mescla" com o conteúdo do SDXL por meio dos prompts.
Isso é muito simplista, mas não quero entrar numa discussão sobre todo o espaço de amostras do SDXL versus seu espaço de probabilidade, e o que acontece em um superconjunto. Isto é um hobby para mim, não um trabalho :-)
Por último, uso muito o sistema de curingas do Dynamic Prompts. Meus prompts típicos usando este TI xlmrblng15-1300 ficam assim:
(__Art_Movements__:0.5) xlmrblng15-1300, __Nationalities__ maduras (__Character_MF__) montando um __BW_Animals__ em uma __Landscapes__ com tonalidade branca, filigrana __Metal_Color__ incrustada
Prompts instanciados (ou seja, depois que o Dynamic Prompts faz seu processamento) tendem a ter entre 30 e 45 tokens.
Quando arrasto a imagem gerada para a aba “PNG Info” do automatic1111, um resultado típico do prompt dinâmico acima tem 34 tokens:
(Surrealismo:0.5) xlmrblng15-1300, vampiro sueco maduro (masculino) montando um dálmata em um banco de lama tonalizado de branco com guindastes escarlates, filigrana preta incrustada
Por que colocar nacionalidades quando o SDXL mal dá atenção a isso em prompts longos? Porque o SDXL é tendencioso e adiciona pequenos extras associados a nacionalidades. Pode ser cabelo ruivo se for mencionado escocês, pirâmides se for mencionado egípcio, ou Monte Fuji se for mencionado japonês. Funciona para outras coisas também; o vínculo/contexto parece ser muito mais forte no SDXL que no SDv1.x. Controlar isso é uma dor :-(
Resoluções que uso para SDXL são normalmente 1024x1024, 960x1344 e 1344x960. As resoluções sugeridas que vi por aí indicam usar o base 1mp (megapixel) 1024x1024 obviamente, e outras resoluções que estejam o mais próximas possível de 1mp. Então, para 1344 largura, eu deveria usar 768 altura. Testei isso e minha percepção de qualidade para imagem 1344x768 foi muito menor que para 1024x1024 e 1344x960. Além disso, 1344x960 escala exatamente para meu papel fotográfico 7" por 5". Então é isso :-)
Detalhes do Modelo
Tipo de modelo
Modelo base
Versão do modelo
Hash do modelo
Palavras treinadas
Criador
Discussão
Por favor, faça log in para deixar um comentário.






