LoRA « vctrstyle »

Apprendre une direction visuelle à un modèle, et le prouver

Rôle
Données, entraînement, évaluation
Outils
  • PyTorch (MPS)
  • Diffusers
  • PEFT
  • ComfyUI
  • Qwen-Image
  • CLIP
Statut
Fonctionnel
Même prompt, même graine : modèle de base, puis LoRA v2 aux pas 500, 1 000 et 1 500.
Même prompt, même graine : modèle de base, puis LoRA v2 aux pas 500, 1 000 et 1 500.
gain de style, IC 95 % [+0,053 ; +0,095]
+0,074
la v1, mesurée : le point de départ de la v2
+0,003
images gardées par le contrôle qualité automatique
45/48
d’entraînement, 1 500 pas sur M1 Pro
88 min
Le problème
Apprendre une direction visuelle précise à Stable Diffusion, en local, et prouver la différence au lieu de l’affirmer.
Pour qui
La direction VECTEUR, projet personnel : roche basaltique sombre, lumière rasante froide, palette désaturée.
Le résultat
Un LoRA de rang 16 entraîné en 2 h 53 sur M1 Pro, trois points d’étape exportés et un harnais de 32 images base contre LoRA.

Contexte

La direction visée : roche basaltique sombre, lumière rasante froide, palette désaturée, cadre de cinéma, déclencheur « vctrstyle ». La mesure pilote le travail : sur la v1 (31 images, 300 pas), le gain de style restait dans le bruit (+0,003) ; la v2 reprend données, entraînement et évaluation, et atteint +0,074.

Ce que j’ai construit

  • Jeu de données planifié : 24 sujets × 2 compositions générés en local par Qwen-Image 2.1 via l’API ComfyUI, 8 références de style tenues à l’écart, manifeste avec hachages.
  • Contrôle qualité automatique : netteté, exposition, part sombre, doublons par hachage perceptuel ; 45 images gardées, 3 rejetées avec leur raison.
  • Entraînement LoRA rang 32 : min-SNR, décalage de bruit, banc de précision avant le run, garde-fou de durée, reprise exacte, export compatible ComfyUI.
  • Évaluation appariée : 12 sujets dont 6 hors domaine × 2 graines × 7 variantes, gain de style et adhérence au texte avec IC 95 % par bootstrap, diversité, indice de copie.

Architecture 7 briques

  1. 01 · EntréePrompts VECTEUR8 plans dérivés du brief de direction visuelle
  2. 02 · ModèleDatasetSD 1.5 via l’API ComfyUI, 8 plans × 5 graines
  3. 03 · HumainCuration31 images retenues à l’œil, 9 écartées et tracées
  4. 04 · DonnéesCacheLatents VAE et embeddings CLIP pré-calculés
  5. 05 · ModèleEntraînementLoRA rang 16, fp32 sur MPS, 300 pas
  6. 06 · OutilÉvaluation4 prompts hors dataset × 2 graines × 4 variantes
  7. 07 · SortieExport kohyaPoints d’étape 75, 150 et 300, compatibles ComfyUI

Fabrication 4 étapes

  1. Générer48 images Qwen-Image, 8 références à part.
  2. FiltrerQC automatique : 45 gardées.
  3. Entraîner1 500 pas, 88 min, fp32 sur MPS.
  4. Prouver168 images, comparaisons appariées.

Décisions le choix, la raison, l’alternative écartée

  1. D1
    Entraîner en fp32 sur le GPU Apple (MPS).

    L’essai en bf16 était deux fois plus lent sur cette machine (69 s par pas contre environ 30) : mesuré, puis rejeté.

    ÉcartéL’autocast bf16.

  2. D2
    Rang 16, alpha 16, sur toutes les projections d’attention du UNet.

    Un compromis entre taille de l’adaptateur et capacité, adapté à 31 images.

  3. D3
    Exporter au format kohya natif.

    Chargé directement par le LoraLoader de ComfyUI, sans convertisseur tiers ; le chargement est testé par le harnais.

    ÉcartéUn convertisseur tiers.

  4. D4
    Évaluer sur des prompts hors dataset, graines identiques, avec scores et contrôle à l’œil.

    Le score CLIP seul ne départage pas les points d’étape (+0,0015 à 150 pas) : les planches tranchent à l’œil.

    ÉcartéChoisir le point d’étape au seul score.

Résultats

Évaluation sur 24 paires (même sujet, même graine) — écart au modèle de base

VarianteGain de style [IC 95 %]Δ adhérence au texteDiversité
Base000,43
Style écrit dans le prompt+0,043 [+0,024 ; +0,063]+0,0040,37
LoRA v1 (pas 150)+0,003 [−0,010 ; +0,015]+0,0050,42
LoRA v2, pas 500+0,040 [+0,024 ; +0,056]+0,0110,40
LoRA v2, pas 1 000+0,062 [+0,042 ; +0,085]+0,0040,38
LoRA v2, pas 1 500+0,074 [+0,053 ; +0,095]+0,0070,36

Score CLIP ViT-B/32 face aux 8 références tenues à l’écart. Le style écrit dans le prompt gagne aussi en score, mais les planches montrent qu’il perd le sujet (hibou minuscule, violoncelle abstrait) ; le LoRA garde le sujet.

Livrables 4

  • Trois exports LoRA vérifiés (75, 150 et 300 pas, 128 modules chacun).
  • Dataset curé : 31 images retenues et liste datée des écartées.
  • Planches comparatives base contre LoRA pour 4 prompts.
  • Mesures par variante : CLIP, distance au dataset, luminance, part sombre.

Environnement

Matériel et conditions de mesure

  • Entraîné sur MacBook Pro M1 Pro, fp32 sur MPS : 1 500 pas en 88 min.
  • Jeu de données généré en local par Qwen-Image (licence Qwen Research, non commerciale).

Reproduire commandes du README

Code privé : accès en lecture sous accord de confidentialité, ou démo en direct de 30 minutes. Demander l’accès →

PY=~/Documents/ComfyUI/.venv/bin/python
$PY train/train_lora.py --dossier donnees --out train/sortie --steps 300
$PY eval/comparer.py                # via ComfyUI (serveur sur 8188)
$PY eval/metriques.py               # CLIP + traits + résumé
  • Graine 20261018.
  • Le choix final du point d’étape se fait à l’œil sur les planches.

Galerie 4

Sujets hors domaine : base, style par le prompt, v1, puis v2 aux pas 500, 1 000, 1 500 et à force 0,6.
Jeu de données v2 : 48 images Qwen-Image, cadre rouge = rejet automatique.
Sujets du domaine, mêmes variantes.
Historique — v1, le point de départ mesuré de la v2.

Ce que ce projet change pour vous

Le même savoir-faire, sur votre sujet.

01

Le style de votre marque, appris

Un LoRA entraîné sur votre direction visuelle : vos images gardent la même matière et la même lumière d’une campagne à l’autre.

02

La preuve avant/après

Même prompt, mêmes graines, base contre adaptateur : vous jugez la différence sur planches, pas sur une promesse.

03

Un entraînement local

Sur votre machine, sans API ni cloud : vos images de référence ne quittent pas vos locaux.