How to use from the
Use from the
Diffusers library
pip install -U diffusers transformers accelerate
import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained("cpral/HomeIMG-1.2B-PL-EN-epoch43", dtype=torch.bfloat16, device_map="cuda")

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]

HomeIMG-1.2B-PL-EN-epoch43

English version

Etap pośredni curriculum: HomeIMG-1.2B-PL-EN-epoch40 (96 px) trenowany dalej przez 3 epoki w 128×128 px. Trzeci krok planu 64 → 96 → 128 → 256 px; następny etap to HomeIMG-1.2B-PL-EN-epoch46 (256 px), który polecamy do użytku.

Nowość: pozycje RoPE w stylu RPE-2D. W poprzednich etapach model w wyższej rozdzielczości rysował wiele kopii sceny albo obiektu. Od tego etapu w treningu każda próbka dostaje losowe pozycje RoPE, a model dostaje też mikro-warunki opisujące crop. Efekt: choć ten model nie trenował w 256 px od 21 epok, w 256 px generuje spójne obrazy z jednym głównym obiektem (zostają drobne powtórzenia, np. dwóch astronautów na koniu, troje dzieci zamiast dwojga, napis powtórzony w kilku wierszach).

„epoch43”: denoiser trenował łącznie 43 epoki: 15 po angielsku ze Slayer149 (256 px), 4 dwujęzyczne z Poziomką (6 bloków, 256 px), 3 dwujęzyczne po powiększeniu do 12 bloków (256 px), 12 w 64 px, 6 w 96 px i 3 w 128 px.

128×128 px (rozdzielczość treningu):

po polsku po angielsku
po polsku, 128 px po angielsku, 128 px

Inne rozdzielczości:

rozdzielczość po polsku po angielsku
256 px po polsku, 256 px po angielsku, 256 px
64 px po polsku, 64 px po angielsku, 64 px

Te same 8 promptów co w poprzednich wydaniach, seed 0 (para k ma ten sam szum), 50 kroków Eulera, CFG 3,0, wagi EMA.

Wyniki

  • EMA val/loss w 128 px: 0,6696 (velocity MSE na 4096 odłożonych obrazach, w 128 px), spadała do końca (0,6699 na kroku 4096). Nie jest porównywalna z val/loss w innych rozdzielczościach.
  • 256 px: dobre obrazy z drobnymi powtórzeniami (gridy wyżej). 64 px: rozmyte i słabe.
  • FD-DINOv2 nie był mierzony.

Trening

  • Start: wagi EMA HomeIMG-1.2B-PL-EN-epoch40 (12 bloków, 1235M), do których dodano mikro-warunkowanie (z wyzerowanym wyjściem, więc na starcie model liczył to samo co epoch40).
  • Pozycje w stylu RPE-2D: w treningu dla każdej próbki i każdej osi osobno 8 różnych liczb całkowitych z 0–63, posortowanych; siatka to ich iloczyn kartezjański. Przy generowaniu pozycje są równomierne na tym samym polu 64 (rope_ref 64, pole siatki 64×64 tokenów, czyli 1024 px).
  • Cropy i mikro-warunkowanie: połowa próbek to losowe okna 128×128 px wycięte z latentów 256 px (wycinek w pełnej skali), druga połowa to cały obraz zmniejszony do 128 px. Model dostaje rozmiar oryginału, ramkę cropa i rozdzielczość docelową (8 liczb w pikselach, sinusoidy jak w SDXL, małe MLP), dodane do embeddingu czasu. To wariant w przestrzeni latentów: publikacja wycina i skaluje obraz przed enkoderem VAE, a nie gotowy latent.
  • Dane: QLNI/FLUX-Reason-6M-flux2-latents, 5,88 mln obrazów (latenty 128 px przygotowane z 256 px: pełny dekoder FLUX.2, bicubic z antyaliasingiem, enkoder FLUX.2); captiony w 50% po polsku (cpral/FLUX-Reason-6M-captions-pl).
  • Długość: 3 epoki, 4307 kroków × 4096 = 17,6 mln próbek. Trening przerwał pełny dysk przy zapisie kroku 4096; wznowiono go od checkpointu z kroku 3584 ze stanem optymalizatora z kroku 4096.
  • Cel: rectified flow, z_t = (1−t)·x + t·ε, cel ε − x, MSE, t ~ logit-normal(0, 1), bez przesunięcia harmonogramu; 10% promptów zastąpionych pustym. Bez REPA.
  • Optymalizator: MuLoCo (8 replik uśrednianych co 64 kroki), Muon (CMuon, lr 3e-3, momentum w bf16, Newton-Schulz co 3. krok), AdamW na reszcie.
  • Sprzęt: 8× RTX 3090 Ti, bf16, każda karta trenuje i liczy swoją Poziomkę. Ok. 780 obrazów/s.

Kod: https://github.com/adamo1139/trenowanie_generatora_obrazkow (train_pp.py --res 128 --rope-ref 64 --rope-random --micro-cond 256 --crop-res 256)

Użycie

import torch
from diffusers import DiffusionPipeline

REPO = "cpral/HomeIMG-1.2B-PL-EN-epoch43"
pipe = DiffusionPipeline.from_pretrained(REPO, custom_pipeline=REPO, trust_remote_code=True).to("cuda")
image = pipe("rudy kot śpiący na parapecie, fotografia", num_inference_steps=50, guidance_scale=3.0,
             generator=torch.Generator("cuda").manual_seed(0)).images[0]  # 128x128
image.save("kot.png")

Domyślnie 128×128 px; resolution= przyjmuje inne kwadratowe rozmiary (wielokrotność 16), np. 256. Repozytorium zawiera Poziomkę (text_encoder/, bf16, eksperci w int8) i jej tokenizer; potrzebne są diffusers z AutoencoderKLFlux2.

Ograniczenia

  • Etap pośredni: do generowania lepszy jest epoch46.
  • W 128 px jest mało miejsca na detale: twarze, tekst i drobne obiekty są tylko zarysem; tekst w obrazach to bełkot.
  • Polskie captiony to tłumaczenia maszynowe modelu 2B; uprzedzenia danych treningowych.

Licencja

Refiner, denoiser i kod: Apache-2.0. text_encoder/ zawiera też wagi Poziomki-Bazy (zamrożone, eksperci w int8) na jej licencji, openmdw-1.1. vae/: FLUX.2 small decoder © Black Forest Labs, Apache-2.0, bez zmian. Dane mają własne warunki, zobacz karty zbiorów danych.

Downloads last month
19
Safetensors
Model size
1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for cpral/HomeIMG-1.2B-PL-EN-epoch43

Datasets used to train cpral/HomeIMG-1.2B-PL-EN-epoch43

Paper for cpral/HomeIMG-1.2B-PL-EN-epoch43