takaisin | LoRA-kuvatekstien korjaus

Identity-LoRA Z-Image Base

OneTrainerilla koulutetaan henkilön identity-LoRA Z-Image Base -malliin. Esimerkkihenkilönä on aikuinen näyttelijä, ikäluokka noin 36–42. Sama työnkulku toimii kenelle tahansa henkilölle, kunhan dataset ja maskit ovat laadukkaita ja asetukset pidetään samanlaisina. Menetelmällä voi kouluttaa muutakin kuin henkilöitä, kuten sijainteja, tavaroita tai tyylisuuntia.

valmiit LoRAt, generoituja esimerkkikuvia, materiaalit

Lyhyesti

  1. Kerää 40–70 terävää, erilaisista kulmista otettua kuvaa samasta henkilöstä.
  2. Rajaa kuvat oikeaan kuvasuhteeseen, mieluiten 1024 pikselin luokkaan.
  3. Kirjoita jokaiselle kuvalle kuvateksti .txt, joka sisältää saman triggerin.
  4. Luo jokaiselle kuvalle maski *-masklabel.png (henkilö valkoisena, tausta mustana).
  5. Asenna OneTrainer ja lataa Z-Image Base diffusers-kansiona, ei yhtenä .safetensors-tiedostona.
  6. Aseta LoRA rank/alpha 32, Prodigy_ADV, LR 1.0, masked training, resoluutio 1024.
  7. Treenaa noin 5000-5500 steppiä. Seuraa näytekuvia.
  8. Testaa valmis LoRA esim. RES multistep sampler, CFG 3.5, 40 step.

1. Kuva-aineisto

Lähdekuvien aineisto eli dataset tai concepts.

Kelpaa:

Älä käytä:

Rajaukseen toimi hyvin Dataset Preparation ja Crop Images to Any Aspect Ratio.

Esimerkkikuvia toimivasta aineistosta

half body A half body photograph of axad woman looking aside with a slight smile. She has shoulder-length wavy hair and is wearing a pale grey blouse, in indoor light.

sitting A full body photograph of axad woman sitting with her legs crossed. She is looking aside and smiling with teeth. She has long wavy hair and is wearing a white pinstripe shirt dress with black heeled sandals, in studio light.

standing A three-quarter photograph of axad woman standing and holding a folded newspaper. She is looking aside with a serious expression and her mouth slightly open. She has wavy hair and is wearing a knit beanie, a scarf, and a coat, in outdoor light.

walking A full body photograph of axad woman walking. She is looking aside with a serious expression. She has wavy hair and is wearing a beige trench coat over a grey skirt with heels, in outdoor light.

2. Kuvatekstit

Kohde: aikuinen nainen, trigger axad woman
Pohjamalli: Z-Image / SD3.5 / Flux (Qwen/T5 -enkooderit)
Työkalu: OneTrainer, masked training
Metodi: Hybrid Natural Language (Tarkat kategoriat upotettuna englanninkielisiin lauseisiin)

Yleiset säännöt

  1. Syntaksi (Hybrid Natural Language)
    Modernit enkooderit ymmärtävät kontekstin lauserakenteista.
    Älä käytä pelkkiä pilkuilla erotettuja tageja. Kirjoita lyhyitä, selkeitä englanninkielisiä lauseita.
    Trigger-sana axad woman on sijoitettava heti ensimmäiseen lauseeseen.

  2. Yhtenäisyys
    Käytä samoja vakiotermejä koko aineistossa.
    Älä käytä synonyymejä samoille asennoille tai ilmeille (esim. aina looking aside, ei koskaan gazing away).

  3. Fakta ja kohinan minimointi
    Kirjoita vain se mitä kuva näyttää. Älä arvaa tai täydennä puuttuvaa tietoa.
    Ei subjektiivisia sanoja tai laatutageja (beautiful, sexy, masterpiece, 8k, photorealistic).
    Älä nimeä henkilöä (Amy Adams, actress, celebrity).
    Kohde on aina: axad woman.

  4. Vakiopiirteiden kielto
    Älä koskaan kuvaile henkilön staattisia anatomisia ominaisuuksia. Nämä opitaan lähdekuvien pikseleistä.
    Kielletty: silmien väri, ihon sävy, pisamat, nenän muoto, ikä.
    Hiusten VÄRI mainitaan vain jos se poikkeaa normaalista. Hiusten RAKENNE (wavy, curly, bun) kirjoitetaan aina.

  5. Muuttuvien piirteiden erottelu
    Kuvan rajaus, asento, katse, ilme, hiustyyli, vaate, näkyvät asusteet, valaistus ja lokaatio on merkittävä tekstiin.
    Kaikki muuttuva on irrotettava identiteetistä.

Vakiotermit

Kuvan rajaus (Pakollinen ensimmäiseen lauseeseen)
tight close-up, close-up, headshot, waist-up, half body, three-quarter, full body

Katse (Kriittinen: zoomaa iirikseen)
looking at the camera, looking aside (iiris sivuun kasvojen suunnasta riippumatta), looking past the camera (iiris ohi kamerasta), looking up, looking down, looking over her shoulder

Ilme (Pakollinen)
neutral expression, serious expression, slight smile, smiling with teeth (suu kiinni), wide smile showing teeth, laughing with her mouth open, mouth open, talking (suu auki ilman naurua), mouth slightly open

Hiukset (Malli, ei väriä)
wavy hair, straight hair, curly hair, long hair, shoulder-length, hair in a low bun, hair in a ponytail, hair in an updo, hair in rollers, hair tucked behind the ears, wet hair

Asennot ja kuvakulmat
rear view, side view, three-quarter view, standing, sitting in a chair, bending forward at the waist, arms crossed, one hand on her chest, walking

Vaatteet ja asusteet
Lyhyt tunnistettava kuvaus (esim. short grey dress, black top with a white v-neck).
Näkyvät hallitsevat korut on merkittävä (drop earrings, thin necklace, hoop earrings), jotta niitä ei leivota anatomiaan.
Näkyvä paljas iho (cleavage, bare shoulders, bare legs).

Esimerkkejä rakenteesta

Hyvä (Hybrid Natural Language):
A full body photograph of axad woman bending forward at the waist with one hand on her chest. She is looking aside with her mouth open, talking. She has curly hair and is wearing a short grey dress with heels and bare legs, in indoor light.

Hyvä (Hybrid Natural Language):
A close-up photograph of axad woman looking at the camera with a serious expression and her mouth slightly open. She has long wavy hair and is wearing a green jacket over a collared shirt, with a brown leather strap over her shoulder, in indoor light.

Hyvä (Hybrid Natural Language):
A waist-up photograph of axad woman standing with her arms crossed. She is looking past the camera with a neutral expression. She has her hair in rollers and is wearing a sheer black robe over dark lingerie, illuminated by window light.

Huono (Vanhentunut CLIP-tagilista, ei Z-Imagelle):
axad woman, full body, bending forward, looking aside, mouth open, talking, curly hair, short grey dress, heels, indoor light.

Huono (Vakiopiirteitä ja subjektiivisia laatutageja):
A masterpiece 8k portrait of axad woman. She has auburn hair, hazel eyes, and a detailed natural face. She is looking at the camera with a beautiful smile.

3. Maskit

Masked training pitää identiteetin henkilössä, ei sohvassa tai aidassa.

OneTrainer odottaa nimeä kuvanimi-masklabel.png. Valkoinen = treenataan enemmän, musta = jätetään vähemmälle.

Riittävä tapa tässä ajossa oli rembg ja u2net.

OneTrainerissa on valmis rembg/maskityökalu (caption_ui). Alla oleva make_masks.py on vaihtoehto sille, jos haluat luoda maskeja ilman OneTraineria.

pip install rembg pillow numpy
python3 make_masks.py /polku/datasettiin
make_masks.py
#!/usr/bin/env python3
"""
Create OneTrainer *-masklabel.png masks with rembg + u2net.

    pip install rembg pillow numpy
    python3 make_masks.py /path/to/concept-folder
    python3 make_masks.py /path/to/concept-folder --overwrite
"""

import argparse
import sys
from pathlib import Path

import numpy as np
from PIL import Image
from rembg import new_session, remove

IMAGE_EXTS = {".png", ".jpg", ".jpeg", ".webp"}


def make_mask(img_pil, session):
    result = remove(img_pil, session=session)
    alpha = np.array(result.split()[-1])
    mask = (alpha > 30).astype(np.uint8) * 255
    return Image.fromarray(mask, mode="L")


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("folder")
    parser.add_argument("--overwrite", action="store_true")
    args = parser.parse_args()

    src_dir = Path(args.folder).expanduser().resolve()
    if not src_dir.is_dir():
        sys.exit(f"Folder not found: {src_dir}")

    session = new_session("u2net")
    images = [
        p for p in sorted(src_dir.iterdir())
        if p.suffix.lower() in IMAGE_EXTS and not p.name.endswith("-masklabel.png")
    ]

    for path in images:
        out_path = src_dir / f"{path.stem}-masklabel.png"
        if out_path.exists() and not args.overwrite:
            print(f"SKIP  {path.stem}")
            continue
        img = Image.open(path).convert("RGB")
        mask = make_mask(img, session)
        mask.save(out_path)
        arr = np.array(mask)
        cov = (arr > 127).sum() / arr.size * 100
        print(f"{path.stem}  coverage {cov:.1f}%")


if __name__ == "__main__":
    main()

Tarkista maskit silmämääräisesti. Aita, toinen henkilö tai iso rekvisiitta maskissa pilaa koulutuksen. Korjaa tarvittaessa kuvanmuokkausohjelmassa. Maski on vain joko täysin mustaa (#000000) tai valkoista (#ffffff). Älä käytä valkoisen eri sävyjä jos et ole varma, että työkalu tukee. Pelkkä musta ja valkoinen on turvallisin vaihtoehto. Jos muokkaat, poimi oikea väri naapuripikselistä.

Bash-tarkistus, että joka kuvalla on tasan kolme tiedostoa:

find . -maxdepth 1 -type f \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.webp' -o -iname '*.txt' \) \
  | sed -E 's|^\./||; s/(-masklabel)?\.(png|jpg|jpeg|webp|txt)$//' \
  | sort | uniq -c | awk '$1!=3{print}'

4. OneTrainer

Virallinen projekti: Nerogar/OneTrainer
Dokumentit: Training, Concepts, Captioning and masking

training_concepts/amyadams-axad.json
training_configs/zb_amyadams_axad.json
training_samples/zb_amyadams_axad.json
workspace/zb_amyadams_axad
workspace-cache/zb_amyadams_axad

Tämä ajo tehtiin Intel Arc Pro B70:llä (32 GB VRAM, XPU). Kesti noin kuusi tuntia.

OneTrainer ei avaa Z-Image Basea yhtenä .safetensors-tiedostona. Käytä Hugging Face -repon diffusers-kansiota.

mkdir -p ~/ai/models/diffusers/Z-Image
HF_XET_HIGH_PERFORMANCE=1 hf download Tongyi-MAI/Z-Image \
  --local-dir ~/ai/models/diffusers/Z-Image

Base Model -kenttään:

/oma/koti/ai/models/diffusers/Z-Image

Vaihtoehtoisesti voit kirjoittaa pelkästään Tongyi-MAI/Z-Image, jolloin OneTrainer noutaa tiedostot itse. Aseta Hugging Face Token.

General-, Model- ja Data-välilehdet tästä ajosta

general

model

data

5. Konseptit

Repeats 2 tarkoittaa, että jokainen kuva nähdään kahdesti epochissa. Yhdellä konseptilla se vahvistaa identiteettiä. Liian iso arvo ylisovittaa (overfit), jolloin kuvissa oleva sisältö vahvistuu liikaa ja lopputulos on heikkolaatuinen tai täysin rikkinäinen LoRA.

Concepts-välilehden kuvat tästä ajosta

concepts

concept general

image aug

text aug

tilastot

tilastot 2

6. Treenausasetukset

Asetus Arvo
Optimizer PRODIGY_ADV
Stochastic rounding päällä
Learning rate 1.0 (Prodigy, ei 1e-4)
Scheduler CONSTANT
Warmup 0
Epochs 50 (batch 1, repeats 2 ≈ noin 5000-5500 steppiä)
Local batch size 1
Gradient checkpointing päällä, jos VRAM loppuu
Resolution 1024
Train dtype bfloat16
Masked training päällä
Unmasked probability 0.1
Layer filter attn-mlp
EMA pois
SVDQuant / fp8 pois

LoRA-välilehti:

Asetus Arvo
Rank 32
Alpha 32
Dropout 0.05
Weight dtype bfloat16
DoRA pois

Intel B70:llä batch 2 1024:lla antoi UR_RESULT_ERROR_OUT_OF_RESOURCES, eli oli liikaa ja VRAM täyttyi. Batch 1 + checkpointing käytti noin 18 GB.

Training- ja LoRA-välilehdet tästä ajosta

training

optimizer

timestep

lora

7. Näytekuvat treenin aikana

Kaksi eri näytettä riittää: kasvot ja vartalo.

axad woman, close-up portrait, looking at camera, soft light, detailed eyes
axad woman, standing, three-quarter view, natural pose, detailed face

Base-samplessa CFG 3.5 ja 28 step. Turbo-samplen CFG 1.0 / 8 step on liian kevyt Baseen.

Paras checkpoint ei ole aina viimeinen. Tässä ajossa ajettiin noin 5000 steppiin.

OneTrainerin näytekuvien asetuksia voi muuttaa kesken treenin, ilman että sitä tarvitsee ensin pysäyttää. Kun olet tehnyt muutokset Sampling-välilehteen, ne tulevat voimaan seuraavassa sample-välissä.

Treenin sampleja (1000 → 5000 step)

1000

2250

3250

3500

5000

Sampling-välilehti tästä ajosta

sampling

sample 1

sample 2

8. Generointi valmiilla LoRAlla

Z-Image Base ei ole Turbo. Väärät näytteistäjät (sampler) tekevät sumean kuvan vaikka LoRA olisi hyvä.

Krita AI Diffusionissa toimi:

Testikehote näytteenottojen vertailuun:

axad woman, one woman only, solo, half body portrait, standing, facing camera, looking at camera, arms relaxed at her sides, natural pose, indoor soft light, photorealistic, sharp focus, detailed face, natural skin

Negative (Base tukee negatiivia, Turbo ei käytännössä):

two people, extra limbs, extra fingers, extra arms, deformed hands, blurry, lowres, cropped head, ugly, cartoon, text, watermark

Älä käytä Turbo/Lightning/LCM/Hyper-preset-asetuksia Base-laatuun.

Vertailu ilman LoRAa samalla kehotteella tuottaa eri henkilön. Jos identiteetti näkyy vain LoRA päällä, koulutus on onnistunut.

vertailukuva ilman LoRAa

Flux - Euler simple reference without LoRA Flux - Euler simple

generoidut kuvat LoRA:lla

Alternative - Euler A Alternative - Euler A

Creative - DPM++ 2M SDE Creative - DPM++ 2M SDE

ER-SDE - Beta ER-SDE - Beta

ER-SDE - Flux 2 ER-SDE - Flux 2

ER-SDE - Simple ER-SDE - Simple

Euler beta Euler beta

Flux - Euler simple.png Flux - Euler simple

RES multistep simple RES multistep simple

Z-Image Turbo -treenaus

Z-Image Turbo LoRAn koulutus on sama dataset + samat maskit. Erot OneTrainerissa:

Base Turbo
Pohjamalli Tongyi-MAI/Z-Image
diffusers-kansio
Turbo + de-distill / training adapter
.safetensors-tiedosto
(esim. ostris)
Sample CFG / step 3.5 / 28 1.0 / 8
Generointi RES / Euler, 36–48 step er_sde, 8 step
Tavoite laatu, CFG, negative nopeus

Älä treenaa suoraan tislattuun Turbo-checkpointiin ilman adapteria. Se hajottaa distillaation.

Turbo- ja Base-LoRAt kannattaa pitää erillisinä tiedostoina.

training_concepts/amyadams-axad.json
training_configs/zt_amyadams_axad.json
training_samples/zt_amyadams_axad.json
workspace/zt_amyadams_axad
workspace-cache/zt_amyadams_axad

Turbo-ajon erot

turbo model

turbo sample

SDXL-treenaus

training_concepts/amyadams-axad.json
training_configs/xl_amyadams_axad.json
training_samples/xl_amyadams_axad.json
workspace/xl_amyadams_axad
workspace-cache/xl_amyadams_axad

Uusien kuvien lisäys

Muutama uusi kuva: jatka olemassa olevaa LoRAa lyhyesti, pidä vanha data mukana.

Isompi korjaus tai uusi piirre: lisää kuvat koko settiin ja kouluta uudestaan v2:ksi. Älä ylikirjoita toimivaa v1:tä.

Linkit

päivitetty 5.9.2026 | lähdekoodi