narugo1992 commited on
Commit
9dca5a9
·
verified ·
1 Parent(s): a03b4ce

Update AnimeTimm organization card

Browse files

Add a DeepGHS-stewarded organization profile with dbv4-full dataset details, model tables, reproducible chart assets, and local maintenance guidance.

.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ assets/dbv4-full-model-snapshot.png filter=lfs diff=lfs merge=lfs -text
AGENTS.md ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AnimeTimm Organization Card Maintenance
2
+
3
+ This repository backs the Hugging Face organization card for `animetimm`.
4
+
5
+ ## Scope
6
+
7
+ - Keep this repository focused on the public organization profile shown at `https://huggingface.co/animetimm`.
8
+ - Maintain `README.md`, public visual assets under `assets/`, checked-in source data under `data/`, and reproducible helper scripts under `scripts/`.
9
+ - Do not add private credentials, local absolute paths, unpublished benchmark data, or private repository details.
10
+
11
+ ## Stewardship Language
12
+
13
+ - Describe AnimeTimm as a DeepGHS project.
14
+ - Link to `https://huggingface.co/deepghs`, `https://github.com/deepghs`, and `https://github.com/deepghs/animetimm` when discussing ownership or upstream engineering work.
15
+ - Keep the tone lightly academic and anime-hobbyist friendly: technically clear, but not corporate or overly formal.
16
+
17
+ ## Model Zoo Policy
18
+
19
+ - The organization card should currently feature only the main `dbv4-full` model line.
20
+ - Do not list `dbv4a`, `witha`, `e621`, `pexels`, private, or experimental branches on the homepage unless the project direction changes explicitly.
21
+ - Keep two model tables: top 5 by `Macro@Best F1`, and one best representative per backbone family.
22
+ - Store model metrics in `data/dbv4_full_models.csv`; generated JSON files and charts should be derived from that source.
23
+
24
+ ## Regeneration
25
+
26
+ Run the following command from the repository root after updating `data/dbv4_full_models.csv`:
27
+
28
+ ```bash
29
+ python scripts/build_org_card.py
30
+ ```
31
+
32
+ Review the generated files before committing:
33
+
34
+ - `assets/animetimm-banner.png`
35
+ - `assets/dbv4-full-model-snapshot.png`
36
+ - `data/dbv4_full_models.json`
37
+ - `data/featured_models.json`
38
+
39
+ ## Commit Policy
40
+
41
+ Use the repository owner's Hugging Face account/token when pushing updates. Commit messages should be concise English summaries, for example:
42
+
43
+ ```text
44
+ Update AnimeTimm organization card
45
+ ```
CLAUDE.md ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AnimeTimm Organization Card Maintenance
2
+
3
+ This repository backs the Hugging Face organization card for `animetimm`.
4
+
5
+ ## Scope
6
+
7
+ - Keep this repository focused on the public organization profile shown at `https://huggingface.co/animetimm`.
8
+ - Maintain `README.md`, public visual assets under `assets/`, checked-in source data under `data/`, and reproducible helper scripts under `scripts/`.
9
+ - Do not add private credentials, local absolute paths, unpublished benchmark data, or private repository details.
10
+
11
+ ## Stewardship Language
12
+
13
+ - Describe AnimeTimm as a DeepGHS project.
14
+ - Link to `https://huggingface.co/deepghs`, `https://github.com/deepghs`, and `https://github.com/deepghs/animetimm` when discussing ownership or upstream engineering work.
15
+ - Keep the tone lightly academic and anime-hobbyist friendly: technically clear, but not corporate or overly formal.
16
+
17
+ ## Model Zoo Policy
18
+
19
+ - The organization card should currently feature only the main `dbv4-full` model line.
20
+ - Do not list `dbv4a`, `witha`, `e621`, `pexels`, private, or experimental branches on the homepage unless the project direction changes explicitly.
21
+ - Keep two model tables: top 5 by `Macro@Best F1`, and one best representative per backbone family.
22
+ - Store model metrics in `data/dbv4_full_models.csv`; generated JSON files and charts should be derived from that source.
23
+
24
+ ## Regeneration
25
+
26
+ Run the following command from the repository root after updating `data/dbv4_full_models.csv`:
27
+
28
+ ```bash
29
+ python scripts/build_org_card.py
30
+ ```
31
+
32
+ Review the generated files before committing:
33
+
34
+ - `assets/animetimm-banner.png`
35
+ - `assets/dbv4-full-model-snapshot.png`
36
+ - `data/dbv4_full_models.json`
37
+ - `data/featured_models.json`
38
+
39
+ ## Commit Policy
40
+
41
+ Use the repository owner's Hugging Face account/token when pushing updates. Commit messages should be concise English summaries, for example:
42
+
43
+ ```text
44
+ Update AnimeTimm organization card
45
+ ```
README.md CHANGED
@@ -1,10 +1,94 @@
1
  ---
2
  title: README
3
- emoji: 👀
4
- colorFrom: gray
5
- colorTo: green
6
  sdk: static
7
  pinned: false
8
  ---
9
 
10
- Edit this `README.md` markdown file to author your organization card.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  title: README
3
+ emoji: 🎨
4
+ colorFrom: pink
5
+ colorTo: indigo
6
  sdk: static
7
  pinned: false
8
  ---
9
 
10
+ <img src="./assets/animetimm-banner.png" alt="AnimeTimm banner" width="100%">
11
+
12
+ # AnimeTimm
13
+
14
+ **AnimeTimm is a DeepGHS project for training, testing, and sharing `timm`-based vision models for anime-style and illustration-focused image tagging.**
15
+
16
+ It is part research playground, part anime-fan workshop: we care about reproducible datasets, model cards, ONNX exports, and practical demos, but the models are also built for people who actually work with 2D art, tags, characters, and visual search.
17
+
18
+ ## Project Stewardship
19
+
20
+ AnimeTimm is produced and maintained by the [DeepGHS](https://huggingface.co/deepghs) team and contributors.
21
+
22
+ This Hugging Face organization is the focused publishing home for AnimeTimm releases: model checkpoints, selected training datasets, and interactive Spaces. The upstream engineering work is connected to the [DeepGHS GitHub organization](https://github.com/deepghs), including the [`deepghs/animetimm`](https://github.com/deepghs/animetimm) repository.
23
+
24
+ ## What We Build
25
+
26
+ - `timm`-based image tagging and classification models for anime-style images.
27
+ - Training datasets prepared for large-scale tagger experiments.
28
+ - PyTorch, Safetensors, and ONNX artifacts where available.
29
+ - Playgrounds and ranklists for trying models and comparing outputs.
30
+
31
+ ## Featured Dataset
32
+
33
+ ### [`danbooru-wdtagger-v4-w640-ws-full`](https://huggingface.co/datasets/animetimm/danbooru-wdtagger-v4-w640-ws-full)
34
+
35
+ The main public dataset release used by the `dbv4-full` model family. It is a Danbooru-derived WebDataset build for large-scale anime-style multi-label tagging, with images resized so `min(width, height) <= 640`.
36
+
37
+ | Split | Images | Total Size |
38
+ | --- | ---: | ---: |
39
+ | train | 5,321,713 | 318 GB |
40
+ | test | 295,926 | 17.7 GB |
41
+ | val | 296,957 | 17.8 GB |
42
+ | **total** | **5,914,596** | **353.5 GB** |
43
+
44
+ Each sample contains the image as `webp` plus JSON metadata: `id`, `width`, `height`, `rating`, `general_tags`, and `character_tags`. The selected label space has **12,476 tags**: 9,225 general tags, 3,247 character tags, and 4 rating tags.
45
+
46
+ ## Model Zoo: `dbv4-full`
47
+
48
+ The tables below focus only on the main `dbv4-full` model line. Metrics are copied from the corresponding model cards and use the test split reported there.
49
+
50
+ <img src="./assets/dbv4-full-model-snapshot.png" alt="dbv4-full model performance and parameter snapshot" width="100%">
51
+
52
+ ### Top 5 By Macro F1
53
+
54
+ | Rank | Model | Family | Params | Macro@Best F1 | Macro@0.40 F1 | Micro@0.40 F1 |
55
+ | --- | --- | --- | --- | --- | --- | --- |
56
+ | 1 | [convnextv2_huge.dbv4-full](https://huggingface.co/animetimm/convnextv2_huge.dbv4-full) | ConvNeXt | 692.6M | 0.611 | 0.580 | 0.697 |
57
+ | 2 | [eva02_large_patch14_448.dbv4-full](https://huggingface.co/animetimm/eva02_large_patch14_448.dbv4-full) | EVA | 316.8M | 0.599 | 0.569 | 0.693 |
58
+ | 3 | [caformer_b36.dbv4-full](https://huggingface.co/animetimm/caformer_b36.dbv4-full) | CAFormer | 134.0M | 0.581 | 0.546 | 0.689 |
59
+ | 4 | [swinv2_base_window8_256.dbv4-full](https://huggingface.co/animetimm/swinv2_base_window8_256.dbv4-full) | SwinV2 | 99.7M | 0.575 | 0.541 | 0.683 |
60
+ | 5 | [caformer_m36.dbv4-full](https://huggingface.co/animetimm/caformer_m36.dbv4-full) | CAFormer | 82.7M | 0.559 | 0.515 | 0.676 |
61
+
62
+ ### Representative Models By Backbone Family
63
+
64
+ Each row is the best `dbv4-full` model currently published for that backbone family.
65
+
66
+ | Family | Model | Params | Macro@Best F1 | Macro@0.40 F1 | Micro@0.40 F1 |
67
+ | --- | --- | --- | --- | --- | --- |
68
+ | ConvNeXt | [convnextv2_huge.dbv4-full](https://huggingface.co/animetimm/convnextv2_huge.dbv4-full) | 692.6M | 0.611 | 0.580 | 0.697 |
69
+ | EVA | [eva02_large_patch14_448.dbv4-full](https://huggingface.co/animetimm/eva02_large_patch14_448.dbv4-full) | 316.8M | 0.599 | 0.569 | 0.693 |
70
+ | CAFormer | [caformer_b36.dbv4-full](https://huggingface.co/animetimm/caformer_b36.dbv4-full) | 134.0M | 0.581 | 0.546 | 0.689 |
71
+ | SwinV2 | [swinv2_base_window8_256.dbv4-full](https://huggingface.co/animetimm/swinv2_base_window8_256.dbv4-full) | 99.7M | 0.575 | 0.541 | 0.683 |
72
+ | ViT | [vit_base_patch16_224.dbv4-full](https://huggingface.co/animetimm/vit_base_patch16_224.dbv4-full) | 95.8M | 0.540 | 0.500 | 0.664 |
73
+ | MobileNetV4 | [mobilenetv4_conv_aa_large.dbv4-full](https://huggingface.co/animetimm/mobilenetv4_conv_aa_large.dbv4-full) | 47.3M | 0.511 | 0.458 | 0.641 |
74
+ | MobileNetV3 | [mobilenetv3_large_150d.dbv4-full](https://huggingface.co/animetimm/mobilenetv3_large_150d.dbv4-full) | 29.3M | 0.462 | 0.400 | 0.605 |
75
+ | MobileViT | [mobilevitv2_200.dbv4-full](https://huggingface.co/animetimm/mobilevitv2_200.dbv4-full) | 30.2M | 0.454 | 0.401 | 0.608 |
76
+ | ResNet | [resnet152.dbv4-full](https://huggingface.co/animetimm/resnet152.dbv4-full) | 83.7M | 0.486 | 0.448 | 0.624 |
77
+
78
+ ## Try It
79
+
80
+ - [`dbv4-full-playground`](https://huggingface.co/spaces/animetimm/dbv4-full-playground) - tag images with pretrained `dbv4-full` models.
81
+ - [`dbv4-full-ranklist`](https://huggingface.co/spaces/animetimm/dbv4-full-ranklist) - compare the public `dbv4-full` model lineup.
82
+
83
+ ## Maintenance
84
+
85
+ The source data and chart builder are stored in this Space repository so the organization card can be regenerated without guessing:
86
+
87
+ - [`data/dbv4_full_models.csv`](./data/dbv4_full_models.csv) - checked-in metric table.
88
+ - [`data/dbv4_full_dataset_summary.json`](./data/dbv4_full_dataset_summary.json) - checked-in featured dataset summary.
89
+ - [`data/featured_models.json`](./data/featured_models.json) - top-5 and best-by-family selections.
90
+ - [`scripts/build_org_card.py`](./scripts/build_org_card.py) - regenerates the banner and model snapshot chart from the checked-in data.
91
+
92
+ ## Notes
93
+
94
+ These releases are research and hobbyist infrastructure for visual tagging. Please check each model or dataset card for license, source data notes, intended use, and audience restrictions before reuse.
assets/animetimm-banner.png ADDED
assets/dbv4-full-model-snapshot.png ADDED

Git LFS Details

  • SHA256: 5442a61fa6ac1ce94d08115ee3abfac739effda2f5c4a6274d8e721348fee6cd
  • Pointer size: 131 Bytes
  • Size of remote file: 125 kB
data/dbv4_full_dataset_summary.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "repo_id": "animetimm/danbooru-wdtagger-v4-w640-ws-full",
3
+ "pretrained_tag": "dbv4-full",
4
+ "source": "Danbooru-derived metadata cleaned by SmilingWolf, as described in the dataset card.",
5
+ "format": "WebDataset",
6
+ "image_rule": "Images are resized so min(width, height) <= 640.",
7
+ "splits": [
8
+ {
9
+ "name": "train",
10
+ "images": 5321713,
11
+ "total_size": "318 GB"
12
+ },
13
+ {
14
+ "name": "test",
15
+ "images": 295926,
16
+ "total_size": "17.7 GB"
17
+ },
18
+ {
19
+ "name": "val",
20
+ "images": 296957,
21
+ "total_size": "17.8 GB"
22
+ }
23
+ ],
24
+ "total_images": 5914596,
25
+ "total_size": "353.5 GB",
26
+ "sample_fields": [
27
+ "webp",
28
+ "json.id",
29
+ "json.width",
30
+ "json.height",
31
+ "json.rating",
32
+ "json.general_tags",
33
+ "json.character_tags"
34
+ ],
35
+ "selected_tags": {
36
+ "total": 12476,
37
+ "general": 9225,
38
+ "character": 3247,
39
+ "rating": 4
40
+ }
41
+ }
data/dbv4_full_models.csv ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ rank_by_macro_best,family,model,repo_id,params_m,macro_best,macro_040,micro_040
2
+ 1,ConvNeXt,convnextv2_huge.dbv4-full,animetimm/convnextv2_huge.dbv4-full,692.6,0.611,0.58,0.697
3
+ 2,EVA,eva02_large_patch14_448.dbv4-full,animetimm/eva02_large_patch14_448.dbv4-full,316.8,0.599,0.569,0.693
4
+ 3,CAFormer,caformer_b36.dbv4-full,animetimm/caformer_b36.dbv4-full,134.0,0.581,0.546,0.689
5
+ 4,SwinV2,swinv2_base_window8_256.dbv4-full,animetimm/swinv2_base_window8_256.dbv4-full,99.7,0.575,0.541,0.683
6
+ 5,CAFormer,caformer_m36.dbv4-full,animetimm/caformer_m36.dbv4-full,82.7,0.559,0.515,0.676
7
+ 6,ConvNeXt,convnext_base.dbv4-full,animetimm/convnext_base.dbv4-full,100.4,0.553,0.521,0.669
8
+ 7,CAFormer,caformer_s36.dbv4-full,animetimm/caformer_s36.dbv4-full,62.8,0.549,0.504,0.67
9
+ 8,ViT,vit_base_patch16_224.dbv4-full,animetimm/vit_base_patch16_224.dbv4-full,95.8,0.54,0.5,0.664
10
+ 9,CAFormer,caformer_s18.dbv4-full,animetimm/caformer_s18.dbv4-full,49.9,0.516,0.464,0.647
11
+ 10,MobileNetV4,mobilenetv4_conv_aa_large.dbv4-full,animetimm/mobilenetv4_conv_aa_large.dbv4-full,47.3,0.511,0.458,0.641
12
+ 11,ResNet,resnet152.dbv4-full,animetimm/resnet152.dbv4-full,83.7,0.486,0.448,0.624
13
+ 12,ResNet,resnet101.dbv4-full,animetimm/resnet101.dbv4-full,68.1,0.481,0.437,0.622
14
+ 13,MobileNetV3,mobilenetv3_large_150d.dbv4-full,animetimm/mobilenetv3_large_150d.dbv4-full,29.3,0.462,0.4,0.605
15
+ 14,MobileViT,mobilevitv2_200.dbv4-full,animetimm/mobilevitv2_200.dbv4-full,30.2,0.454,0.401,0.608
16
+ 15,ResNet,resnet50.dbv4-full,animetimm/resnet50.dbv4-full,49.1,0.421,0.382,0.572
17
+ 16,MobileNetV3,mobilenetv3_large_100.dbv4-full,animetimm/mobilenetv3_large_100.dbv4-full,20.2,0.383,0.311,0.533
18
+ 17,MobileNetV4,mobilenetv4_conv_small.dbv4-full,animetimm/mobilenetv4_conv_small.dbv4-full,18.5,0.379,0.312,0.529
19
+ 18,ResNet,resnet34.dbv4-full,animetimm/resnet34.dbv4-full,27.7,0.342,0.29,0.53
20
+ 19,ResNet,resnet18.dbv4-full,animetimm/resnet18.dbv4-full,17.6,0.314,0.259,0.499
21
+ 20,MobileNetV4,mobilenetv4_conv_small_050.dbv4-full,animetimm/mobilenetv4_conv_small_050.dbv4-full,16.9,0.3,0.194,0.429
data/dbv4_full_models.json ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "rank_by_macro_best": 1,
4
+ "family": "ConvNeXt",
5
+ "model": "convnextv2_huge.dbv4-full",
6
+ "repo_id": "animetimm/convnextv2_huge.dbv4-full",
7
+ "params_m": 692.6,
8
+ "macro_best": 0.611,
9
+ "macro_040": 0.58,
10
+ "micro_040": 0.697
11
+ },
12
+ {
13
+ "rank_by_macro_best": 2,
14
+ "family": "EVA",
15
+ "model": "eva02_large_patch14_448.dbv4-full",
16
+ "repo_id": "animetimm/eva02_large_patch14_448.dbv4-full",
17
+ "params_m": 316.8,
18
+ "macro_best": 0.599,
19
+ "macro_040": 0.569,
20
+ "micro_040": 0.693
21
+ },
22
+ {
23
+ "rank_by_macro_best": 3,
24
+ "family": "CAFormer",
25
+ "model": "caformer_b36.dbv4-full",
26
+ "repo_id": "animetimm/caformer_b36.dbv4-full",
27
+ "params_m": 134.0,
28
+ "macro_best": 0.581,
29
+ "macro_040": 0.546,
30
+ "micro_040": 0.689
31
+ },
32
+ {
33
+ "rank_by_macro_best": 4,
34
+ "family": "SwinV2",
35
+ "model": "swinv2_base_window8_256.dbv4-full",
36
+ "repo_id": "animetimm/swinv2_base_window8_256.dbv4-full",
37
+ "params_m": 99.7,
38
+ "macro_best": 0.575,
39
+ "macro_040": 0.541,
40
+ "micro_040": 0.683
41
+ },
42
+ {
43
+ "rank_by_macro_best": 5,
44
+ "family": "CAFormer",
45
+ "model": "caformer_m36.dbv4-full",
46
+ "repo_id": "animetimm/caformer_m36.dbv4-full",
47
+ "params_m": 82.7,
48
+ "macro_best": 0.559,
49
+ "macro_040": 0.515,
50
+ "micro_040": 0.676
51
+ },
52
+ {
53
+ "rank_by_macro_best": 6,
54
+ "family": "ConvNeXt",
55
+ "model": "convnext_base.dbv4-full",
56
+ "repo_id": "animetimm/convnext_base.dbv4-full",
57
+ "params_m": 100.4,
58
+ "macro_best": 0.553,
59
+ "macro_040": 0.521,
60
+ "micro_040": 0.669
61
+ },
62
+ {
63
+ "rank_by_macro_best": 7,
64
+ "family": "CAFormer",
65
+ "model": "caformer_s36.dbv4-full",
66
+ "repo_id": "animetimm/caformer_s36.dbv4-full",
67
+ "params_m": 62.8,
68
+ "macro_best": 0.549,
69
+ "macro_040": 0.504,
70
+ "micro_040": 0.67
71
+ },
72
+ {
73
+ "rank_by_macro_best": 8,
74
+ "family": "ViT",
75
+ "model": "vit_base_patch16_224.dbv4-full",
76
+ "repo_id": "animetimm/vit_base_patch16_224.dbv4-full",
77
+ "params_m": 95.8,
78
+ "macro_best": 0.54,
79
+ "macro_040": 0.5,
80
+ "micro_040": 0.664
81
+ },
82
+ {
83
+ "rank_by_macro_best": 9,
84
+ "family": "CAFormer",
85
+ "model": "caformer_s18.dbv4-full",
86
+ "repo_id": "animetimm/caformer_s18.dbv4-full",
87
+ "params_m": 49.9,
88
+ "macro_best": 0.516,
89
+ "macro_040": 0.464,
90
+ "micro_040": 0.647
91
+ },
92
+ {
93
+ "rank_by_macro_best": 10,
94
+ "family": "MobileNetV4",
95
+ "model": "mobilenetv4_conv_aa_large.dbv4-full",
96
+ "repo_id": "animetimm/mobilenetv4_conv_aa_large.dbv4-full",
97
+ "params_m": 47.3,
98
+ "macro_best": 0.511,
99
+ "macro_040": 0.458,
100
+ "micro_040": 0.641
101
+ },
102
+ {
103
+ "rank_by_macro_best": 11,
104
+ "family": "ResNet",
105
+ "model": "resnet152.dbv4-full",
106
+ "repo_id": "animetimm/resnet152.dbv4-full",
107
+ "params_m": 83.7,
108
+ "macro_best": 0.486,
109
+ "macro_040": 0.448,
110
+ "micro_040": 0.624
111
+ },
112
+ {
113
+ "rank_by_macro_best": 12,
114
+ "family": "ResNet",
115
+ "model": "resnet101.dbv4-full",
116
+ "repo_id": "animetimm/resnet101.dbv4-full",
117
+ "params_m": 68.1,
118
+ "macro_best": 0.481,
119
+ "macro_040": 0.437,
120
+ "micro_040": 0.622
121
+ },
122
+ {
123
+ "rank_by_macro_best": 13,
124
+ "family": "MobileNetV3",
125
+ "model": "mobilenetv3_large_150d.dbv4-full",
126
+ "repo_id": "animetimm/mobilenetv3_large_150d.dbv4-full",
127
+ "params_m": 29.3,
128
+ "macro_best": 0.462,
129
+ "macro_040": 0.4,
130
+ "micro_040": 0.605
131
+ },
132
+ {
133
+ "rank_by_macro_best": 14,
134
+ "family": "MobileViT",
135
+ "model": "mobilevitv2_200.dbv4-full",
136
+ "repo_id": "animetimm/mobilevitv2_200.dbv4-full",
137
+ "params_m": 30.2,
138
+ "macro_best": 0.454,
139
+ "macro_040": 0.401,
140
+ "micro_040": 0.608
141
+ },
142
+ {
143
+ "rank_by_macro_best": 15,
144
+ "family": "ResNet",
145
+ "model": "resnet50.dbv4-full",
146
+ "repo_id": "animetimm/resnet50.dbv4-full",
147
+ "params_m": 49.1,
148
+ "macro_best": 0.421,
149
+ "macro_040": 0.382,
150
+ "micro_040": 0.572
151
+ },
152
+ {
153
+ "rank_by_macro_best": 16,
154
+ "family": "MobileNetV3",
155
+ "model": "mobilenetv3_large_100.dbv4-full",
156
+ "repo_id": "animetimm/mobilenetv3_large_100.dbv4-full",
157
+ "params_m": 20.2,
158
+ "macro_best": 0.383,
159
+ "macro_040": 0.311,
160
+ "micro_040": 0.533
161
+ },
162
+ {
163
+ "rank_by_macro_best": 17,
164
+ "family": "MobileNetV4",
165
+ "model": "mobilenetv4_conv_small.dbv4-full",
166
+ "repo_id": "animetimm/mobilenetv4_conv_small.dbv4-full",
167
+ "params_m": 18.5,
168
+ "macro_best": 0.379,
169
+ "macro_040": 0.312,
170
+ "micro_040": 0.529
171
+ },
172
+ {
173
+ "rank_by_macro_best": 18,
174
+ "family": "ResNet",
175
+ "model": "resnet34.dbv4-full",
176
+ "repo_id": "animetimm/resnet34.dbv4-full",
177
+ "params_m": 27.7,
178
+ "macro_best": 0.342,
179
+ "macro_040": 0.29,
180
+ "micro_040": 0.53
181
+ },
182
+ {
183
+ "rank_by_macro_best": 19,
184
+ "family": "ResNet",
185
+ "model": "resnet18.dbv4-full",
186
+ "repo_id": "animetimm/resnet18.dbv4-full",
187
+ "params_m": 17.6,
188
+ "macro_best": 0.314,
189
+ "macro_040": 0.259,
190
+ "micro_040": 0.499
191
+ },
192
+ {
193
+ "rank_by_macro_best": 20,
194
+ "family": "MobileNetV4",
195
+ "model": "mobilenetv4_conv_small_050.dbv4-full",
196
+ "repo_id": "animetimm/mobilenetv4_conv_small_050.dbv4-full",
197
+ "params_m": 16.9,
198
+ "macro_best": 0.3,
199
+ "macro_040": 0.194,
200
+ "micro_040": 0.429
201
+ }
202
+ ]
data/featured_models.json ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "top5_macro_f1": [
3
+ {
4
+ "rank_by_macro_best": 1,
5
+ "family": "ConvNeXt",
6
+ "model": "convnextv2_huge.dbv4-full",
7
+ "repo_id": "animetimm/convnextv2_huge.dbv4-full",
8
+ "params_m": 692.6,
9
+ "macro_best": 0.611,
10
+ "macro_040": 0.58,
11
+ "micro_040": 0.697
12
+ },
13
+ {
14
+ "rank_by_macro_best": 2,
15
+ "family": "EVA",
16
+ "model": "eva02_large_patch14_448.dbv4-full",
17
+ "repo_id": "animetimm/eva02_large_patch14_448.dbv4-full",
18
+ "params_m": 316.8,
19
+ "macro_best": 0.599,
20
+ "macro_040": 0.569,
21
+ "micro_040": 0.693
22
+ },
23
+ {
24
+ "rank_by_macro_best": 3,
25
+ "family": "CAFormer",
26
+ "model": "caformer_b36.dbv4-full",
27
+ "repo_id": "animetimm/caformer_b36.dbv4-full",
28
+ "params_m": 134.0,
29
+ "macro_best": 0.581,
30
+ "macro_040": 0.546,
31
+ "micro_040": 0.689
32
+ },
33
+ {
34
+ "rank_by_macro_best": 4,
35
+ "family": "SwinV2",
36
+ "model": "swinv2_base_window8_256.dbv4-full",
37
+ "repo_id": "animetimm/swinv2_base_window8_256.dbv4-full",
38
+ "params_m": 99.7,
39
+ "macro_best": 0.575,
40
+ "macro_040": 0.541,
41
+ "micro_040": 0.683
42
+ },
43
+ {
44
+ "rank_by_macro_best": 5,
45
+ "family": "CAFormer",
46
+ "model": "caformer_m36.dbv4-full",
47
+ "repo_id": "animetimm/caformer_m36.dbv4-full",
48
+ "params_m": 82.7,
49
+ "macro_best": 0.559,
50
+ "macro_040": 0.515,
51
+ "micro_040": 0.676
52
+ }
53
+ ],
54
+ "best_by_family": [
55
+ {
56
+ "rank_by_macro_best": 1,
57
+ "family": "ConvNeXt",
58
+ "model": "convnextv2_huge.dbv4-full",
59
+ "repo_id": "animetimm/convnextv2_huge.dbv4-full",
60
+ "params_m": 692.6,
61
+ "macro_best": 0.611,
62
+ "macro_040": 0.58,
63
+ "micro_040": 0.697
64
+ },
65
+ {
66
+ "rank_by_macro_best": 2,
67
+ "family": "EVA",
68
+ "model": "eva02_large_patch14_448.dbv4-full",
69
+ "repo_id": "animetimm/eva02_large_patch14_448.dbv4-full",
70
+ "params_m": 316.8,
71
+ "macro_best": 0.599,
72
+ "macro_040": 0.569,
73
+ "micro_040": 0.693
74
+ },
75
+ {
76
+ "rank_by_macro_best": 3,
77
+ "family": "CAFormer",
78
+ "model": "caformer_b36.dbv4-full",
79
+ "repo_id": "animetimm/caformer_b36.dbv4-full",
80
+ "params_m": 134.0,
81
+ "macro_best": 0.581,
82
+ "macro_040": 0.546,
83
+ "micro_040": 0.689
84
+ },
85
+ {
86
+ "rank_by_macro_best": 4,
87
+ "family": "SwinV2",
88
+ "model": "swinv2_base_window8_256.dbv4-full",
89
+ "repo_id": "animetimm/swinv2_base_window8_256.dbv4-full",
90
+ "params_m": 99.7,
91
+ "macro_best": 0.575,
92
+ "macro_040": 0.541,
93
+ "micro_040": 0.683
94
+ },
95
+ {
96
+ "rank_by_macro_best": 8,
97
+ "family": "ViT",
98
+ "model": "vit_base_patch16_224.dbv4-full",
99
+ "repo_id": "animetimm/vit_base_patch16_224.dbv4-full",
100
+ "params_m": 95.8,
101
+ "macro_best": 0.54,
102
+ "macro_040": 0.5,
103
+ "micro_040": 0.664
104
+ },
105
+ {
106
+ "rank_by_macro_best": 10,
107
+ "family": "MobileNetV4",
108
+ "model": "mobilenetv4_conv_aa_large.dbv4-full",
109
+ "repo_id": "animetimm/mobilenetv4_conv_aa_large.dbv4-full",
110
+ "params_m": 47.3,
111
+ "macro_best": 0.511,
112
+ "macro_040": 0.458,
113
+ "micro_040": 0.641
114
+ },
115
+ {
116
+ "rank_by_macro_best": 13,
117
+ "family": "MobileNetV3",
118
+ "model": "mobilenetv3_large_150d.dbv4-full",
119
+ "repo_id": "animetimm/mobilenetv3_large_150d.dbv4-full",
120
+ "params_m": 29.3,
121
+ "macro_best": 0.462,
122
+ "macro_040": 0.4,
123
+ "micro_040": 0.605
124
+ },
125
+ {
126
+ "rank_by_macro_best": 14,
127
+ "family": "MobileViT",
128
+ "model": "mobilevitv2_200.dbv4-full",
129
+ "repo_id": "animetimm/mobilevitv2_200.dbv4-full",
130
+ "params_m": 30.2,
131
+ "macro_best": 0.454,
132
+ "macro_040": 0.401,
133
+ "micro_040": 0.608
134
+ },
135
+ {
136
+ "rank_by_macro_best": 11,
137
+ "family": "ResNet",
138
+ "model": "resnet152.dbv4-full",
139
+ "repo_id": "animetimm/resnet152.dbv4-full",
140
+ "params_m": 83.7,
141
+ "macro_best": 0.486,
142
+ "macro_040": 0.448,
143
+ "micro_040": 0.624
144
+ }
145
+ ]
146
+ }
scripts/build_org_card.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Build the AnimeTimm organization card assets from checked-in model data."""
3
+
4
+ import csv
5
+ import json
6
+ from collections import OrderedDict
7
+ from pathlib import Path
8
+
9
+ import matplotlib
10
+ matplotlib.use("Agg")
11
+ import matplotlib.pyplot as plt
12
+ from matplotlib.patches import Rectangle
13
+
14
+ ROOT = Path(__file__).resolve().parents[1]
15
+ ASSETS = ROOT / "assets"
16
+ DATA = ROOT / "data"
17
+ ASSETS.mkdir(exist_ok=True)
18
+
19
+ FAMILY_ORDER = [
20
+ "ConvNeXt",
21
+ "EVA",
22
+ "CAFormer",
23
+ "SwinV2",
24
+ "ViT",
25
+ "MobileNetV4",
26
+ "MobileNetV3",
27
+ "MobileViT",
28
+ "ResNet",
29
+ ]
30
+
31
+
32
+ def load_rows():
33
+ with (DATA / "dbv4_full_models.csv").open(newline="", encoding="utf-8") as f:
34
+ rows = list(csv.DictReader(f))
35
+ for row in rows:
36
+ row["rank_by_macro_best"] = int(row["rank_by_macro_best"])
37
+ for key in ["params_m", "macro_best", "macro_040", "micro_040"]:
38
+ row[key] = float(row[key])
39
+ return sorted(rows, key=lambda item: item["macro_best"], reverse=True)
40
+
41
+
42
+ def write_data_views(rows):
43
+ with (DATA / "dbv4_full_models.json").open("w", encoding="utf-8") as f:
44
+ json.dump(rows, f, indent=2)
45
+ best = OrderedDict()
46
+ for row in rows:
47
+ best.setdefault(row["family"], row)
48
+ family_rows = [best[family] for family in FAMILY_ORDER if family in best]
49
+ with (DATA / "featured_models.json").open("w", encoding="utf-8") as f:
50
+ json.dump({"top5_macro_f1": rows[:5], "best_by_family": family_rows}, f, indent=2)
51
+ return rows[:5], family_rows
52
+
53
+
54
+ def draw_banner():
55
+ fig, ax = plt.subplots(figsize=(12, 3.6), dpi=160)
56
+ fig.patch.set_facecolor("#12131c")
57
+ ax.set_facecolor("#12131c")
58
+ ax.set_xlim(0, 1200)
59
+ ax.set_ylim(0, 360)
60
+ ax.axis("off")
61
+ colors = ["#ff7ab6", "#8f7cff", "#55d6be", "#ffd166", "#7bdff2"]
62
+ for i, color in enumerate(colors):
63
+ ax.add_patch(Rectangle((i * 240, 0), 240, 360, color=color, alpha=0.10 + 0.02 * i, lw=0))
64
+ for x in range(0, 1201, 60):
65
+ ax.plot([x, x], [0, 360], color="white", alpha=0.045, lw=0.7)
66
+ for y in range(0, 361, 60):
67
+ ax.plot([0, 1200], [y, y], color="white", alpha=0.045, lw=0.7)
68
+ for x, y, size, color in [(930, 240, 52, "#ff7ab6"), (1010, 165, 38, "#55d6be"), (1080, 260, 28, "#ffd166"), (845, 120, 32, "#8f7cff")]:
69
+ ax.scatter([x], [y], s=size * size / 4, marker="*", color=color, alpha=0.85, edgecolors="white", linewidths=0.8)
70
+ labels = ["tags", "timm", "anime", "F1", "ONNX", "safetensors"]
71
+ positions = [(720, 78), (812, 285), (935, 65), (1045, 104), (705, 210), (1085, 205)]
72
+ for (x, y), label, color in zip(positions, labels, colors + ["#ffffff"]):
73
+ ax.text(x, y, label, color="#f7f7fb", fontsize=13, fontweight="bold", ha="center", va="center", bbox=dict(boxstyle="round,pad=0.35,rounding_size=0.18", fc=color, ec="white", alpha=0.35, lw=0.8))
74
+ ax.text(70, 218, "AnimeTimm", color="white", fontsize=54, fontweight="bold", ha="left", va="center")
75
+ ax.text(75, 157, "timm-based vision models for anime-style image tagging", color="#e6e7f3", fontsize=20, ha="left", va="center")
76
+ ax.text(76, 108, "A DeepGHS research-and-hobbyist project", color="#ffcfdf", fontsize=15, ha="left", va="center")
77
+ xs = [720, 800, 890, 980, 1080]
78
+ ys = [135, 175, 205, 225, 252]
79
+ ax.plot(xs, ys, color="#ffffff", lw=2.2, alpha=0.78)
80
+ ax.scatter(xs, ys, s=75, color="#55d6be", edgecolor="white", linewidth=1.2, zorder=3)
81
+ fig.savefig(ASSETS / "animetimm-banner.png", bbox_inches="tight", pad_inches=0)
82
+ plt.close(fig)
83
+
84
+
85
+ def draw_snapshot(top5, family_rows):
86
+ plot_rows = top5 + [row for row in family_rows if row not in top5]
87
+ plot_rows = sorted(plot_rows, key=lambda row: row["macro_best"])
88
+ fig, ax1 = plt.subplots(figsize=(11.5, 7.2), dpi=160)
89
+ fig.patch.set_facecolor("#ffffff")
90
+ ax1.set_facecolor("#fbfbff")
91
+ y = list(range(len(plot_rows)))
92
+ labels = [row["model"].replace(".dbv4-full", "") for row in plot_rows]
93
+ bar_colors = ["#8f7cff" if row in top5 else "#55b9d6" for row in plot_rows]
94
+ ax1.barh(y, [row["macro_best"] for row in plot_rows], color=bar_colors, alpha=0.88)
95
+ ax1.set_yticks(y)
96
+ ax1.set_yticklabels(labels, fontsize=9)
97
+ ax1.set_xlim(0.28, 0.63)
98
+ ax1.set_xlabel("Macro@Best F1", fontsize=11)
99
+ ax1.grid(axis="x", alpha=0.22)
100
+ for idx, row in enumerate(plot_rows):
101
+ ax1.text(row["macro_best"] + 0.004, idx, f"{row['macro_best']:.3f}", va="center", fontsize=8, color="#222222")
102
+ ax2 = ax1.twiny()
103
+ ax2.scatter([row["params_m"] for row in plot_rows], y, color="#ff7ab6", s=46, edgecolor="white", linewidth=0.8, zorder=5)
104
+ ax2.set_xscale("log")
105
+ ax2.set_xlabel("Parameters (M, log scale)", fontsize=11)
106
+ ax2.set_xlim(12, 900)
107
+ for idx, row in enumerate(plot_rows):
108
+ ax2.text(row["params_m"] * 1.04, idx + 0.14, f"{row['params_m']:.1f}M", va="center", fontsize=7, color="#8a1f55")
109
+ ax1.set_title("AnimeTimm dbv4-full Model Snapshot", fontsize=16, fontweight="bold", pad=14)
110
+ fig.text(0.125, 0.028, "Purple bars mark the top-5 Macro@Best F1 models. Blue bars are best-per-family representatives not already in top-5.", fontsize=8.5, color="#555555")
111
+ fig.tight_layout(rect=[0, 0.045, 1, 1])
112
+ fig.savefig(ASSETS / "dbv4-full-model-snapshot.png", bbox_inches="tight")
113
+ plt.close(fig)
114
+
115
+
116
+ def main():
117
+ rows = load_rows()
118
+ top5, family_rows = write_data_views(rows)
119
+ draw_banner()
120
+ draw_snapshot(top5, family_rows)
121
+
122
+
123
+ if __name__ == "__main__":
124
+ main()