NFT-OR / README.md
Haocheng1's picture
Add scratch NFT ckpt-180 and NFT-OR ckpt-180/200 EMA LoRA
060c29c verified
|
Raw
History Blame Contribute Delete
2.26 kB
---
license: apache-2.0
base_model: stabilityai/stable-diffusion-3.5-medium
library_name: peft
pipeline_tag: text-to-image
tags:
- stable-diffusion
- stable-diffusion-3
- lora
- diffusionnft
- reinforcement-learning
---
# NFT-OR scratch LoRA (SD3.5-Medium)
From-scratch DiffusionNFT LoRA checkpoints for [HaC-RL](https://huggingface.co/HaC-RL) / NFT-OR.
Base model: [`stabilityai/stable-diffusion-3.5-medium`](https://huggingface.co/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
```python
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`.