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 multi-seed mesmo prompt

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

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 faz isso por linha de comando (--ema usa a média móvel).

Fórmulas que funcionam

  • pessoas: ultra realistic photo of <sujeito>, detailed skin texture, natural light, sharp focus, high quality
  • carros: ultra realistic photo of a <ano marca modelo>, glossy paint, natural light, sharp focus
  • materiais: macro close-up photo of <madeira / aço escovado / linho / mármore> 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.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Pedro21613/PS-IMAGE-1.3

Adapter
(666)
this model