NFT-OR scratch LoRA (SD3.5-Medium)

From-scratch DiffusionNFT LoRA checkpoints for HaC-RL / NFT-OR.

Base model: stabilityai/stable-diffusion-3.5-medium.
LoRA: rank 32, alpha 64, attention projections only.

What is uploaded

Inference adapters only (adapter_config.json + adapter_model.safetensors). Optimizer / scaler states are not included.

Path Run Epochs Adapter
scratch-nft/checkpoint-180/ scratch DiffusionNFT, job 219145 200 (last save is 180) EMA stored in lora/ (legacy save)
scratch-nft-or/checkpoint-180/ scratch NFT-OR or_mix, job 219585 180 EMA (lora_ema/)
scratch-nft-or/checkpoint-200/ same run 200 EMA (lora_ema/)

The NFT 200-epoch job only checkpointed at epoch starts (save_freq=20), so its last file is checkpoint-180, not 200.

Training recipe (both): Pick-a-Pic, PickScore+CLIP+HPSv2, 512², 40 sample steps, β=0.1, 4×A800, seed 42.

DrawBench (1024², 40 steps, EMA)

Checkpoint ImageReward CLIP Aesthetic PickScore HPSv2 avg
scratch-nft ckpt-180 1.194 0.280 5.888 0.895 0.316 8.573
scratch-nft-or ckpt-180 1.292 0.285 5.938 0.897 0.321 8.733
scratch-nft-or ckpt-200 1.306 0.286 5.951 0.896 0.319 8.757

The NFT-OR run used collinear implicit_positive OR (α=0.05), which saturates after epoch 0. Do not treat the score gap as causal evidence that OR is active.

Load

from diffusers import StableDiffusion3Pipeline
import torch

pipe = StableDiffusion3Pipeline.from_pretrained(
    "stabilityai/stable-diffusion-3.5-medium",
    torch_dtype=torch.bfloat16,
)
pipe.load_lora_weights("HaC-RL/NFT-OR", subfolder="scratch-nft-or/checkpoint-200")

For the matched DrawBench row, use subfolder="scratch-nft/checkpoint-180" or scratch-nft-or/checkpoint-180.

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

Model tree for HaC-RL/NFT-OR

Adapter
(106)
this model