--- title: PS IMAGE 1.3 tags: - text-to-image - stable-diffusion - stable-diffusion-diffusers - lora - photorealistic - people - cars - textures pipeline_tag: text-to-image library_name: diffusers base_model: stable-diffusion-v1-5/stable-diffusion-v1-5 --- # PS IMAGE v1.3 — pessoas + automóveis + texturas/materiais LoRA sobre `stable-diffusion-v1-5/stable-diffusion-v1-5` (o antigo `runwayml/stable-diffusion-v1-5`, que hoje redireciona para esse repo). Treinado **no Kaggle (Tesla T4, 16 GB)** via API, com o dataset montado a partir de três fontes públicas do Hugging Face. ## O que mudou em relação à v1.2 | | v1.2 | v1.3 | |---|---|---| | Base | `runwayml/stable-diffusion-v1-5` | `stable-diffusion-v1-5/stable-diffusion-v1-5` | | Conceitos | pets + Caltech101 (classes mistas) | pessoas, automóveis, texturas/materiais | | Dataset | 3395 imgs (muitas miniaturas, sem legenda real) | 1820 imgs com **legenda derivada do rótulo real** | | LoRA | rank 12, alpha 24, só atenção | rank 16, alpha 32, atenção **+ feed-forward** (5,98 M parâmetros) | | Treino | 3000 steps, lr 1e-4, fp16 | 800 steps, lr 2,2e-4 cosine + warmup, min-SNR γ=5, **EMA 0,995** | | Dados pessoas | Caltech "Faces" recortadas | FFHQ 512² com legenda descritiva real | | Dados carros | Caltech `car_side` | Stanford Cars (196 classes: ano + marca + modelo) | | Texturas | — | DTD (47 classes de superfície/material) | ## Comparação 1.2 × 1.3 (mesmo prompt, mesma seed, Euler 30 steps, CFG 7,5) ![comparativo](examples/grid_compare.png) ![multi-seed mesmo prompt](examples/multi_seed_historia.png) Lendo o grid acima (colunas: base SD1.5 → v1.2 → v1.3, mesma seed): - **Rostos**: a v1.2 **deforma** (linha 1 e 2: olho/boca trocados); a base é plástica; a **v1.3** mantém traços corretos com pele detalhada. É a maior vitória desta versão. - **Texturas/materiais**: madeira (linha 6) e aço escovado (linha 7) ganham grão e brilho anisotrópico reais; linho (linha 8) melhora pouco. - **Carros**: a v1.3 empata ou supera a v1.2 nas cenas urbanas (linhas 4 e 5 — a v1.2 deixa entulho verde no fundo) e continua mal em "pessoa apoiada no carro" (linha 9), que a base também erra. ## Como usar ```python import torch from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler from peft import PeftModel BASE = "stable-diffusion-v1-5/stable-diffusion-v1-5" pipe = StableDiffusionPipeline.from_pretrained(BASE, torch_dtype=torch.float16, safety_checker=None) pipe.scheduler = EulerDiscreteScheduler.from_pretrained(BASE, subfolder="scheduler") pipe.unet = PeftModel.from_pretrained(pipe.unet, "Pedro21613/PS-IMAGE-1.3") pipe.unet = pipe.unet.merge_and_unload() pipe.to("cuda") img = pipe("ultra realistic photo of a man's face, weathered skin, visible pores, " "detailed skin texture, natural light, portrait, high quality", num_inference_steps=30, guidance_scale=7.5, height=512, width=512).images[0] ``` O script [`usar_v13.py`](usar_v13.py) faz isso por linha de comando (`--ema` usa a média móvel). ## Fórmulas que funcionam - pessoas: `ultra realistic photo of , detailed skin texture, natural light, sharp focus, high quality` - carros: `ultra realistic photo of a , glossy paint, natural light, sharp focus` - materiais: `macro close-up photo of texture, detailed surface, even lighting` ## Limites honestos desta versão - **Só 800 steps** (~17 min de T4; 1,30 s/step, pico de 13,4 GB). É uma passada curta: suficiente para travar rostos e materiais, ainda fraca em composição complexa (pessoa + carro juntos, linha 9). - Data em 512×512 com legendas curtas: mãos, placas e logotipos continuam ruins. - Próximos passos: 2500–3500 steps, reforçar carros (~1200 imgs) e deixar o LR final em 0,05×. O script completo está em `psimage_train.py` (este repo) — roda direto no Kaggle com `--accelerator NvidiaTeslaT4` (a P100 da conta quebra: o torch `2.10+cu128` da imagem não tem kernel para sm_60). - A coluna **EMA** não é usada aqui: com 800 steps a média móvel (decay 0,995) ainda está sub-treinada e quase igual à base. ## Arquivos | arquivo | conteúdo | |---|---| | `adapter_model.safetensors` | LoRA final (r16, atenção + FF, 24 MB) | | `ema/adapter_model.safetensors` | versão EMA (mais estável, mais suave) | | `examples/` | grades comparativas e amostras | | `training_config.json`, `training_report.json` | hiperparâmetros, curva de loss, VRAM e tempo | | `usar_v13.py` | geração por linha de comando | ### Nota técnica (se for treinar de novo com este script) O arquivo do adapter precisa usar as chaves **`base_model.model.<...>.lora_A.weight`** e o metadata `{"format": "pt"}`. No primeiro upload as chaves estavam sem o prefixo `base_model.model.` e o peft carregava o adapter **vazio sem dar erro** — as imagens saíam idênticas à SD1.5 pura. Corrigido em `psimage_train.py` (`param_key`) e no arquivo deste repo. Treinado automaticamente via Kaggle API + Hugging Face Hub por agente no Arena.ai, 2026-09-11.