File size: 25,688 Bytes
e88e8f1
e721528
 
e71505a
 
 
 
e721528
 
 
 
 
 
 
 
ec43207
e71505a
 
e721528
 
 
e71505a
e721528
 
 
9a39696
 
 
 
e71505a
 
e721528
e71505a
e721528
 
e71505a
9a39696
 
 
 
 
 
e71505a
 
9a39696
e71505a
9a39696
 
e71505a
9a39696
 
e88e8f1
 
ec43207
 
 
 
 
 
 
 
 
 
 
53ec084
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e88e8f1
 
 
 
 
 
 
28c4702
 
7610e89
 
 
 
 
 
 
 
 
 
 
 
e33a3f6
 
 
 
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
---
language: en
license: mit
base_model: google/efficientnet-b0        # <-- top-level so it shows in the sidebar
datasets:
  - synthetic-anime-scenes                # optional; helps sidebar/search

tags:
  - image-classification
  - anime
  - art-style
  - efficientnet-b0
  - pytorch
  - safetensors
  - multi-class
  - deprecated
  - "base_model:google/efficientnet-b0"   # optional searchable tag

framework: pytorch
library_name: torchvision
pipeline_tag: image-classification

model-index:
  - name: anime-style-classifier-efficientnet-b0
    results:
      - task:
          type: image-classification
        dataset:
          name: synthetic-anime-scenes
          type: synthetic                 # <-- REQUIRED
          split: validation
        metrics:
          - name: Accuracy
            type: accuracy
            value: 0.9818
          - name: Macro F1
            type: f1
            value: 0.9879
      - task:
          type: image-classification
        dataset:
          name: synthetic-anime-scenes
          type: synthetic                 # <-- REQUIRED
          split: holdout
        metrics:
          - name: Accuracy
            type: accuracy
            value: 1.0
          - name: Macro F1
            type: f1
            value: 1.0
---

<p align="center">
  <a href="https://huggingface.co/Mitchins/anime-style-classifier-efficientnet-b0-v2">
    <img src="https://img.shields.io/badge/STATUS-DEPRECATED-critical?style=for-the-badge">
  </a>
</p>

 ⚠️ **Deprecated — use [v2](https://huggingface.co/Mitchins/anime-style-classifier-efficientnet-b0-v2)** 
v2 improves training, splits, and real-world performance. **Migration:** same preprocessing & class order.

---

# Anime Style Classifier - EfficientNet-B0

A fine-tuned EfficientNet-B0 model for classifying anime/visual novel images into 6 distinct art styles.

## Model Description

- **Model Architecture**: EfficientNet-B0 (~5.3M parameters)
- **Base Model**: ImageNet pretrained weights
- **Task**: Multi-class image classification (6 styles)
- **Input Resolution**: 224x224 RGB
- **Framework**: PyTorch
- **License**: MIT

## Performance

### Test Set Results (Holdout)

- **Accuracy**: 100.0%
- **Macro F1-Score**: 1.000
- **Validation Accuracy**: 98.18%

Perfect classification across all 120 holdout images (20 per class). Note: with n=120 the 95% Wilson confidence interval for this result is approximately 96.90%—100.00%, so the perfect score should be interpreted cautiously alongside validation metrics. Taking both validation and holdout into account, a realistic estimate of the model's true accuracy is likely in the mid-to-high 90s (≈96–98%) — still very strong and, for most applications, likely fit for purpose.

### Per-Class Performance

| Style | Precision | Recall | F1-Score | Support |
|-------|-----------|--------|----------|---------|
| **dark** | 1.000 | 1.000 | 1.000 | 20 |
| **flat** | 1.000 | 1.000 | 1.000 | 20 |
| **modern** | 1.000 | 1.000 | 1.000 | 20 |
| **moe** | 1.000 | 1.000 | 1.000 | 20 |
| **painterly** | 1.000 | 1.000 | 1.000 | 20 |
| **retro** | 1.000 | 1.000 | 1.000 | 20 |

## Style Definitions

1. **dark**: Low-key lighting, chiaroscuro, desaturated palette, high contrast shadows, moody atmosphere
2. **flat**: Minimalist flat colors, vector illustration, solid color blocks, no gradients or shading
3. **modern**: Clean digital rendering, smooth gradients, glossy finish, contemporary anime aesthetic
4. **moe**: Soft pastel colors, rounded features, cute/adorable character focus, gentle shading
5. **painterly**: Watercolor or gouache appearance, visible brush strokes, paper texture, artistic feel
6. **retro**: 80s/90s anime aesthetic, vintage color palette, classic cel animation style

## Training Details

### Dataset

- **Training Images**: 933 (scene-level split)
- **Validation Images**: 165
- **Holdout Images**: 120
- **Total Scenes**: 203 perfectly balanced scenes
- **Images per Style**: 183 training + 20 holdout = 203 each
- **Source Resolution**: 1920x1088
- **Training Resolution**: 224x224

**Data Split Strategy**: Scene-level 90/10 split to prevent data leakage. All 6 style variants of each scene are kept together in either training or holdout set.

**Data Generation**: Synthetic images generated via ComfyUI with Flux diffusion model, validated by Gemma-12B vision-language model. Only scenes with 6/6 style agreement (all variants correctly classified) were included.

### Training Regime

```yaml
Architecture: EfficientNet-B0
Pretrained: ImageNet weights
Optimizer: AdamW
Learning Rate: 0.001
Weight Decay: 1e-05
Batch Size: 16
Epochs: 30 (early stopping at ~12-15 epochs typical)
Scheduler: CosineAnnealingLR
Loss: CrossEntropyLoss
Early Stopping: 10 epochs patience (val accuracy)
```

### Data Augmentation (Training Only)

- Resize to 256x256
- Random crop to 224x224
- Random horizontal flip (p=0.5)
- Color jitter (brightness=0.1, saturation=0.1, hue=0.05)
- ImageNet normalization (mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

### Hardware

- GPU: NVIDIA GPU (CUDA)
- Training Time: ~15 minutes (with early stopping)

## Usage

### Installation

```bash
pip install torch torchvision pillow
```

### Inference

This repository includes a small CLI inference script, `inference.py`, which auto-detects `.safetensors` (preferred) or a PyTorch `.pth` checkpoint and provides a convenient command-line interface for classification. Because `inference.py` already contains the full, tested loading and preprocessing logic, the README keeps only the minimal usage notes below and a short programmatic example that delegates to the script's functions.

Install (optional: include safetensors for safer loading):

```bash
pip install torch torchvision pillow safetensors
```

CLI usage (example):

```bash
python inference.py --model model.safetensors --config config.json examples/retro_1.png
```

This will print a ranked list of predictions and a top prediction summary (see the script output example above).

Programmatic usage (calls the same functions used by the CLI):

```python
# Minimal programmatic example using functions from inference.py
from inference import load_model, classify_image

model, config = load_model('model.safetensors', 'config.json')
results = classify_image(model, config, 'examples/retro_1.png')
print(results[:3])  # top-3 predictions as (style, confidence)
```

For the full implementation and additional options (e.g., --top-k), see `inference.py` in the repository.



## Limitations

- **Input Resolution**: Model processes images at 224x224, which may lose fine texture details from high-resolution sources (1920x1088+)
- **Domain**: Trained on synthetically generated anime/visual novel images. May not generalize perfectly to all anime art styles, manga, or hand-drawn artwork
- **Style Ambiguity**: Some real-world images may blend multiple styles (e.g., painterly with modern digital techniques)
-- **Validation Bias**: Ground truth labels come from Gemma-12B vision model, so classifier may inherit some of its biases

Small-sample caution: The internal validation set achieved 98.18% (162/165). The 95% Wilson confidence interval for this is approximately 94.79%—99.38%. Because the holdout set is relatively small (20 images per class, 120 total), perfect classification on that set is possible by chance and should be reported with its confidence interval (see above).

Decision rule note: The model uses the standard softmax + argmax decision rule by default (choose the class with highest predicted probability). No abstain threshold is applied in the shipped `inference.py`; if you later want an abstain/human-review mode, adding a `--min-conf` option is straightforward.

## Model Selection

This model was selected from a hyperparameter sweep of 144+ configurations across 6 architectures:
- ResNet-18
- MobileNetV3-Large
- MobileNetV3-Small
- EfficientNet-B0 ⭐ (winner)
- EfficientNetV2-S
- ViT-B/16

EfficientNet-B0 achieved perfect 100% holdout accuracy with:
- Excellent efficiency (~5.3M parameters)
- Fast inference
- Strong generalization (98.18% val → 100% holdout)

## Citation

```bibtex
@software{anime_style_classifier_2025,
  author = {Your Name},
  title = {Anime Style Classifier},
  year = {2025},
  url = {https://huggingface.co/Mitchins/anime-style-classifier-efficientnet-b0}
}
```



## Acknowledgments

- **Base Model**: EfficientNet-B0 from torchvision (ImageNet pretrained)
- **Synthetic Data Generation**: ComfyUI + Flux diffusion model
- **Data Validation**: Gemma-12B vision-language model
- **Framework**: PyTorch, torchvision

## Contact

For questions or feedback, please open an issue on the GitHub repository.

## Published validation preview

Below is a compact thumbnail-based preview of a subset of the published validation images. Thumbnails link to the full-size images under `validation/images/`.

<!-- BEGIN VALIDATION GRID (generated) -->

| Modern | Painterly | Retro | Moe | Flat | Dark |
|---|---|---|---|---|---|
| <a href="validation/images/modern/modern_bookstore_chance_meeting.png"><img src="validation/images/modern/modern_bookstore_chance_meeting.png" alt="modern_bookstore_chance_meeting.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_bookstore_chance_meeting.png"><img src="validation/images/painterly/painterly_bookstore_chance_meeting.png" alt="painterly_bookstore_chance_meeting.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_bookstore_chance_meeting.png"><img src="validation/images/retro/retro_bookstore_chance_meeting.png" alt="retro_bookstore_chance_meeting.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_bookstore_chance_meeting.png"><img src="validation/images/moe/moe_bookstore_chance_meeting.png" alt="moe_bookstore_chance_meeting.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_bookstore_chance_meeting.png"><img src="validation/images/flat/flat_bookstore_chance_meeting.png" alt="flat_bookstore_chance_meeting.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_bookstore_chance_meeting.png"><img src="validation/images/dark/dark_bookstore_chance_meeting.png" alt="dark_bookstore_chance_meeting.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_campus_courtyard_rain.png"><img src="validation/images/modern/modern_campus_courtyard_rain.png" alt="modern_campus_courtyard_rain.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_campus_courtyard_rain.png"><img src="validation/images/painterly/painterly_campus_courtyard_rain.png" alt="painterly_campus_courtyard_rain.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_campus_courtyard_rain.png"><img src="validation/images/retro/retro_campus_courtyard_rain.png" alt="retro_campus_courtyard_rain.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_campus_courtyard_rain.png"><img src="validation/images/moe/moe_campus_courtyard_rain.png" alt="moe_campus_courtyard_rain.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_campus_courtyard_rain.png"><img src="validation/images/flat/flat_campus_courtyard_rain.png" alt="flat_campus_courtyard_rain.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_campus_courtyard_rain.png"><img src="validation/images/dark/dark_campus_courtyard_rain.png" alt="dark_campus_courtyard_rain.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_cloud_port_landing_pads.png"><img src="validation/images/modern/modern_cloud_port_landing_pads.png" alt="modern_cloud_port_landing_pads.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_cloud_port_landing_pads.png"><img src="validation/images/painterly/painterly_cloud_port_landing_pads.png" alt="painterly_cloud_port_landing_pads.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_cloud_port_landing_pads.png"><img src="validation/images/retro/retro_cloud_port_landing_pads.png" alt="retro_cloud_port_landing_pads.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_cloud_port_landing_pads.png"><img src="validation/images/moe/moe_cloud_port_landing_pads.png" alt="moe_cloud_port_landing_pads.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_cloud_port_landing_pads.png"><img src="validation/images/flat/flat_cloud_port_landing_pads.png" alt="flat_cloud_port_landing_pads.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_cloud_port_landing_pads.png"><img src="validation/images/dark/dark_cloud_port_landing_pads.png" alt="dark_cloud_port_landing_pads.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_coral_archway_shore.png"><img src="validation/images/modern/modern_coral_archway_shore.png" alt="modern_coral_archway_shore.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_coral_archway_shore.png"><img src="validation/images/painterly/painterly_coral_archway_shore.png" alt="painterly_coral_archway_shore.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_coral_archway_shore.png"><img src="validation/images/retro/retro_coral_archway_shore.png" alt="retro_coral_archway_shore.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_coral_archway_shore.png"><img src="validation/images/moe/moe_coral_archway_shore.png" alt="moe_coral_archway_shore.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_coral_archway_shore.png"><img src="validation/images/flat/flat_coral_archway_shore.png" alt="flat_coral_archway_shore.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_coral_archway_shore.png"><img src="validation/images/dark/dark_coral_archway_shore.png" alt="dark_coral_archway_shore.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_fairy_ring_meadow.png"><img src="validation/images/modern/modern_fairy_ring_meadow.png" alt="modern_fairy_ring_meadow.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_fairy_ring_meadow.png"><img src="validation/images/painterly/painterly_fairy_ring_meadow.png" alt="painterly_fairy_ring_meadow.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_fairy_ring_meadow.png"><img src="validation/images/retro/retro_fairy_ring_meadow.png" alt="retro_fairy_ring_meadow.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_fairy_ring_meadow.png"><img src="validation/images/moe/moe_fairy_ring_meadow.png" alt="moe_fairy_ring_meadow.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_fairy_ring_meadow.png"><img src="validation/images/flat/flat_fairy_ring_meadow.png" alt="flat_fairy_ring_meadow.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_fairy_ring_meadow.png"><img src="validation/images/dark/dark_fairy_ring_meadow.png" alt="dark_fairy_ring_meadow.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_fey_crossing_footbridge.png"><img src="validation/images/modern/modern_fey_crossing_footbridge.png" alt="modern_fey_crossing_footbridge.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_fey_crossing_footbridge.png"><img src="validation/images/painterly/painterly_fey_crossing_footbridge.png" alt="painterly_fey_crossing_footbridge.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_fey_crossing_footbridge.png"><img src="validation/images/retro/retro_fey_crossing_footbridge.png" alt="retro_fey_crossing_footbridge.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_fey_crossing_footbridge.png"><img src="validation/images/moe/moe_fey_crossing_footbridge.png" alt="moe_fey_crossing_footbridge.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_fey_crossing_footbridge.png"><img src="validation/images/flat/flat_fey_crossing_footbridge.png" alt="flat_fey_crossing_footbridge.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_fey_crossing_footbridge.png"><img src="validation/images/dark/dark_fey_crossing_footbridge.png" alt="dark_fey_crossing_footbridge.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_holo_library_steps.png"><img src="validation/images/modern/modern_holo_library_steps.png" alt="modern_holo_library_steps.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_holo_library_steps.png"><img src="validation/images/painterly/painterly_holo_library_steps.png" alt="painterly_holo_library_steps.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_holo_library_steps.png"><img src="validation/images/retro/retro_holo_library_steps.png" alt="retro_holo_library_steps.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_holo_library_steps.png"><img src="validation/images/moe/moe_holo_library_steps.png" alt="moe_holo_library_steps.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_holo_library_steps.png"><img src="validation/images/flat/flat_holo_library_steps.png" alt="flat_holo_library_steps.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_holo_library_steps.png"><img src="validation/images/dark/dark_holo_library_steps.png" alt="dark_holo_library_steps.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_lantern_catacombs.png"><img src="validation/images/modern/modern_lantern_catacombs.png" alt="modern_lantern_catacombs.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_lantern_catacombs.png"><img src="validation/images/painterly/painterly_lantern_catacombs.png" alt="painterly_lantern_catacombs.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_lantern_catacombs.png"><img src="validation/images/retro/retro_lantern_catacombs.png" alt="retro_lantern_catacombs.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_lantern_catacombs.png"><img src="validation/images/moe/moe_lantern_catacombs.png" alt="moe_lantern_catacombs.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_lantern_catacombs.png"><img src="validation/images/flat/flat_lantern_catacombs.png" alt="flat_lantern_catacombs.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_lantern_catacombs.png"><img src="validation/images/dark/dark_lantern_catacombs.png" alt="dark_lantern_catacombs.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_meteor_defense_bunker.png"><img src="validation/images/modern/modern_meteor_defense_bunker.png" alt="modern_meteor_defense_bunker.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_meteor_defense_bunker.png"><img src="validation/images/painterly/painterly_meteor_defense_bunker.png" alt="painterly_meteor_defense_bunker.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_meteor_defense_bunker.png"><img src="validation/images/retro/retro_meteor_defense_bunker.png" alt="retro_meteor_defense_bunker.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_meteor_defense_bunker.png"><img src="validation/images/moe/moe_meteor_defense_bunker.png" alt="moe_meteor_defense_bunker.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_meteor_defense_bunker.png"><img src="validation/images/flat/flat_meteor_defense_bunker.png" alt="flat_meteor_defense_bunker.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_meteor_defense_bunker.png"><img src="validation/images/dark/dark_meteor_defense_bunker.png" alt="dark_meteor_defense_bunker.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_night_market_skewers.png"><img src="validation/images/modern/modern_night_market_skewers.png" alt="modern_night_market_skewers.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_night_market_skewers.png"><img src="validation/images/painterly/painterly_night_market_skewers.png" alt="painterly_night_market_skewers.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_night_market_skewers.png"><img src="validation/images/retro/retro_night_market_skewers.png" alt="retro_night_market_skewers.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_night_market_skewers.png"><img src="validation/images/moe/moe_night_market_skewers.png" alt="moe_night_market_skewers.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_night_market_skewers.png"><img src="validation/images/flat/flat_night_market_skewers.png" alt="flat_night_market_skewers.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_night_market_skewers.png"><img src="validation/images/dark/dark_night_market_skewers.png" alt="dark_night_market_skewers.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_park_bench_shared_earbuds.png"><img src="validation/images/modern/modern_park_bench_shared_earbuds.png" alt="modern_park_bench_shared_earbuds.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_park_bench_shared_earbuds.png"><img src="validation/images/painterly/painterly_park_bench_shared_earbuds.png" alt="painterly_park_bench_shared_earbuds.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_park_bench_shared_earbuds.png"><img src="validation/images/retro/retro_park_bench_shared_earbuds.png" alt="retro_park_bench_shared_earbuds.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_park_bench_shared_earbuds.png"><img src="validation/images/moe/moe_park_bench_shared_earbuds.png" alt="moe_park_bench_shared_earbuds.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_park_bench_shared_earbuds.png"><img src="validation/images/flat/flat_park_bench_shared_earbuds.png" alt="flat_park_bench_shared_earbuds.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_park_bench_shared_earbuds.png"><img src="validation/images/dark/dark_park_bench_shared_earbuds.png" alt="dark_park_bench_shared_earbuds.png" style="width:150px;height:auto;margin:2px;"/></a> |
| <a href="validation/images/modern/modern_rain_on_train_crossing.png"><img src="validation/images/modern/modern_rain_on_train_crossing.png" alt="modern_rain_on_train_crossing.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/painterly/painterly_rain_on_train_crossing.png"><img src="validation/images/painterly/painterly_rain_on_train_crossing.png" alt="painterly_rain_on_train_crossing.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/retro/retro_rain_on_train_crossing.png"><img src="validation/images/retro/retro_rain_on_train_crossing.png" alt="retro_rain_on_train_crossing.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/moe/moe_rain_on_train_crossing.png"><img src="validation/images/moe/moe_rain_on_train_crossing.png" alt="moe_rain_on_train_crossing.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/flat/flat_rain_on_train_crossing.png"><img src="validation/images/flat/flat_rain_on_train_crossing.png" alt="flat_rain_on_train_crossing.png" style="width:150px;height:auto;margin:2px;"/></a> | <a href="validation/images/dark/dark_rain_on_train_crossing.png"><img src="validation/images/dark/dark_rain_on_train_crossing.png" alt="dark_rain_on_train_crossing.png" style="width:150px;height:auto;margin:2px;"/></a> |

### Note about thumbnails and deployment

Thumbnails are provided only for the convenience of the model README/gallery and are optional. When you publish the model to Hugging Face you may omit `validation/thumbs/` (it's listed in `.gitignore`) — the important artifacts for deployment are `model.safetensors` and `config.json` (and `inference.py` if you want a runnable CLI). Typical deployments will only fetch the model weights and config; README/gallery images are not required for inference and can be excluded from the model archive to keep downloads small.