File size: 3,752 Bytes
e505e1f
 
 
887defb
e505e1f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
887defb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
license: mit
library_name: diffusers
pipeline_tag: unconditional-image-generation
tags:
- diffusers
- afm
- adversarial-flow-models
- class-conditional
- imagenet
inference: true
widget:
- output:
    url: AFM-XL-2-56layer-1NFE-guided/demo.png
language:
- en
---

# BiliSakura/AFM-diffusers

Self-contained [Adversarial Flow Models](https://arxiv.org/abs/2511.22475) checkpoints for Hugging Face diffusers.

Converted from `ByteDance-Seed/Adversarial-Flow-Models` using `libs/AFM-diffusers/scripts/convert_afm_to_diffusers.py`.

All models use LDM (Rombach et al., 2022) latent space with `sd-vae-ft-mse`. Guidance abbreviations: **CG** = classifier guidance (Dhariwal & Nichol, 2021), **DA** = data augmentation (Karras et al., 2020a).

## Demo

`AFM-XL-2-2NFE-noguide` — class **207** (*golden retriever*), seed **0**, 2 NFE:

<p align="center">
  <img src="AFM-XL-2-2NFE-noguide/demo.png" alt="AFM-XL-2-2NFE-noguide demo (class 207, seed 0)" width="256"/>
</p>

Each variant folder includes `demo.png` generated with the same prompt settings.

## Benchmark results (ImageNet 256×256)

| Model | Params | Guidance | NFE | FID | sFID | IS | Prec. | Recall | Checkpoint |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| AFM-B/2 | 130M | None | 1 | 6.07 | 5.31 | 169.51 | 0.72 | 0.49 | `AFM-B-2-1NFE-noguide/` |
| AFM-M/2 | 306M | None | 1 | 5.21 | 5.60 | 178.48 | 0.75 | 0.54 | `AFM-M-2-1NFE-noguide/` |
| AFM-L/2 | 457M | None | 1 | 4.36 | 5.39 | 186.21 | 0.77 | 0.53 | `AFM-L-2-1NFE-noguide/` |
| AFM-XL/2 | 673M | None | 1 | 3.98 | 5.40 | 201.85 | 0.78 | 0.52 | `AFM-XL-2-1NFE-noguide/` |
| AFM-XL/2 | 673M | None | 2 | 2.36 | 4.35 | 235.77 | 0.81 | 0.52 | `AFM-XL-2-2NFE-noguide/` |
| AFM-B/2 | 130M | CG+DA | 1 | 3.05 | 5.32 | 269.18 | 0.81 | 0.51 | `AFM-B-2-1NFE-guided/` |
| AFM-M/2 | 306M | CG+DA | 1 | 2.82 | 5.20 | 279.12 | 0.81 | 0.50 | `AFM-M-2-1NFE-guided/` |
| AFM-L/2 | 457M | CG+DA | 1 | 2.63 | 5.10 | 277.96 | 0.81 | 0.52 | `AFM-L-2-1NFE-guided/` |
| AFM-XL/2 | 673M | CG+DA | 1 | 2.38 | 4.87 | 284.18 | 0.81 | 0.52 | `AFM-XL-2-1NFE-guided/` |
| AFM-XL/2 | 675M | CG+DA | 2 | 2.11 | 4.33 | 273.84 | 0.82 | 0.55 | `AFM-XL-2-2NFE-guided/` |
| AFM-XL/2 (2× deep, 56-layer) | 675M | CG+DA | 1 | 2.08 | 4.79 | 298.33 | 0.79 | 0.56 | `AFM-XL-2-56layer-1NFE-guided/` |
| AFM-XL/2 | 675M | CG+DA | 4 | 2.03 | 4.59 | 259.66 | 0.78 | 0.59 | `AFM-XL-2-4NFE-guided/` |
| AFM-XL/2 (4× deep, 112-layer) | 675M | CG+DA | 1 | 1.94 | 4.54 | 292.20 | 0.79 | 0.56 | `AFM-XL-2-112layer-1NFE-guided/` |

## Available checkpoints

| Variant | Model | Steps | Guidance |
| --- | --- | ---: | --- |
| `AFM-B-2-1NFE-guided/` | AFM-B/2 | 1 | guided |
| `AFM-B-2-1NFE-noguide/` | AFM-B/2 | 1 | noguide |
| `AFM-M-2-1NFE-guided/` | AFM-M/2 | 1 | guided |
| `AFM-M-2-1NFE-noguide/` | AFM-M/2 | 1 | noguide |
| `AFM-L-2-1NFE-guided/` | AFM-L/2 | 1 | guided |
| `AFM-L-2-1NFE-noguide/` | AFM-L/2 | 1 | noguide |
| `AFM-XL-2-1NFE-guided/` | AFM-XL/2 | 1 | guided |
| `AFM-XL-2-1NFE-noguide/` | AFM-XL/2 | 1 | noguide |
| `AFM-XL-2-2NFE-guided/` | AFM-XL/2 | 2 | guided |
| `AFM-XL-2-2NFE-noguide/` | AFM-XL/2 | 2 | noguide |
| `AFM-XL-2-4NFE-guided/` | AFM-XL/2 | 4 | guided |
| `AFM-XL-2-56layer-1NFE-guided/` | AFM-XL/2 | 1 | guided |
| `AFM-XL-2-112layer-1NFE-guided/` | AFM-XL/2 | 1 | guided |

## Inference

```python
from pathlib import Path
import torch
from diffusers import DiffusionPipeline

model_dir = Path("./AFM-XL-2-1NFE-guided")
pipe = DiffusionPipeline.from_pretrained(
    str(model_dir),
    local_files_only=True,
    custom_pipeline=str(model_dir / "pipeline.py"),
    trust_remote_code=True,
    torch_dtype=torch.bfloat16,
).to("cuda")

image = pipe(class_labels="golden retriever", num_inference_steps=1).images[0]
```