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-epoch40", 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-epoch40

English version

Etap pośredni curriculum: HomeIMG-1.2B-PL-epoch34 (64 px) trenowany dalej przez 6 epok w 96×96 px. To drugi krok planu 64 → 96 → 128 → 256 px.

Ten model jest przeznaczony do 96×96 px. Do 256 px używaj HomeIMG-1.2B-PL-epoch22; 256 px wróci w kolejnych etapach.

Nowość: interpolacja pozycji RoPE (rope_ref 64). Pozycje tokenów obrazu są skalowane tak, że w każdej rozdzielczości obraz pokrywa to samo pole 64 pozycji na bok, czyli pole siatki 64×64 tokenów z 1024 px (token i na boku z n tokenów ma pozycję (i + 0,5)·64/n − 0,5; w 96 px odstęp między tokenami to ok. 10,7, w 256 px 4, w 1024 px 1). W poprzednich etapach pozycje były całkowite, więc w wyższej rozdzielczości model widział pozycje, których nie znał z treningu w niskiej, i powtarzał scenę kilka razy na obrazku. Przy tym samym polu kolejne etapy (128, 256 px, a później nawet 1024–2048 px) tylko zagęszczają siatkę.

„epoch40”: denoiser trenował łącznie 40 epok: 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 dwujęzycznych w 64 px i 6 dwujęzycznych w 96 px.

96×96 px (rozdzielczość treningu):

po polsku po angielsku
po polsku, 96 px po angielsku, 96 px

Inne rozdzielczości (dla porównania):

rozdzielczość po polsku po angielsku
64 px po polsku, 64 px po angielsku, 64 px
128 px po polsku, 128 px po angielsku, 128 px
256 px po polsku, 256 px po angielsku, 256 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 96 px: 0,7021 (velocity MSE na 4096 odłożonych obrazach, w 96 px). Spadała jeszcze na końcu (0,7025 na kroku 8192). Nie jest porównywalna z val/loss w innych rozdzielczościach (0,7568 w 64 px dla epoch34, 0,6170 w 256 px dla epoch22).
  • Inne rozdzielczości (gridy wyżej):
    • 64 px: poprawne, choć mniej szczegółów niż w 96 px.
    • 128 px: kompozycja zwykle trzyma się promptu, ale obiekty są mniejsze, a sceny bardziej „oddalone” niż w 96 px; czasem pojawia się kilka kopii obiektu (np. robot, latawce).
    • 256 px: nie do użytku. Scena wciąż się powtarza, jak w epoch34: obiekty rozpadają się na wiele małych kopii (kilkanaście robotów, latawców, lisów), a fotografie mają smugi. Interpolacja pozycji RoPE tego nie usunęła; 256 px wymaga treningu w 128 i 256 px.
  • FD-DINOv2 nie był mierzony.

Trening

  • Start: wagi EMA HomeIMG-1.2B-PL-epoch34 (12 bloków, 1235M).
  • Dane: QLNI/FLUX-Reason-6M-flux2-latents, 5,88 mln obrazów, przeskalowanych do 96×96 px (latent 256 px → pełny dekoder FLUX.2 → bicubic z antyaliasingiem → enkoder FLUX.2, latent 6×6×128). Captiony w 50% po polsku (cpral/FLUX-Reason-6M-captions-pl).
  • Długość: 6 epok, 8613 kroków × 4096 = 35,3 mln próbek. Kroki 0–2559 z całkowitymi pozycjami RoPE, od kroku 2560 trening wznowiony z checkpointu z rope_ref 64 (strata wróciła do poprzedniego poziomu w kilkaset kroków).
  • 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: jak w epoch34: 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ę (captiony pakowane bez paddingu). Ok. 900–1000 obrazów/s, ok. 10 h.

Kod: https://github.com/adamo1139/trenowanie_generatora_obrazkow (train_pp.py --res 96 --rope-ref 64, prepare_lowres.py)

Użycie

import torch
from diffusers import DiffusionPipeline

REPO = "cpral/HomeIMG-1.2B-PL-epoch40"
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]  # 96x96 px
image.save("kot.png")

Domyślnie pipeline generuje 96×96 px (rozdzielczość treningu) z rope_ref 64 zapisanym w configu. Parametr resolution= przyjmuje inne kwadratowe rozmiary (wielokrotność 16). Repozytorium zawiera Poziomkę (text_encoder/, bf16, eksperci w int8) i jej tokenizer; potrzebne są diffusers z AutoencoderKLFlux2.

Ograniczenia

  • Etap pośredni, 96×96 px. To checkpoint curriculum, a nie model do generowania w zwykłej rozdzielczości.
  • W 96 px jest mało miejsca na detale: twarze, tekst i drobne obiekty są tylko zarysem.
  • 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
28
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-epoch40

Datasets used to train cpral/HomeIMG-1.2B-PL-epoch40