OppaiOracle experimental-X1

TEST MODEL โ€” experimental preview, not a full release. This is a from-scratch anime/illustration tagger released for testing and feedback while dataset issues are investigated. Further tuning is planned to refine those issues; predictions and tag behavior should be treated as provisional.

This FP32 ONNX release uses epoch 21, update 127,974, at 320ร—320. Training was cut short after tag-level regression appeared beyond epoch 21. Epoch 21 was selected as the experimental release checkpoint while unstable tags and their training data are reviewed. Aggregate AP had continued to improve after epoch 21; the stop was driven by concerns about individual tags, not a claim that every metric or every tag had worsened. Planned higher-resolution stages and cooldown were not completed for this checkpoint.

The author's initial expectation was that X1 would likely beat OppaiOracle V1 and might beat V1.1. That was a hypothesis, not an established benchmark result. The direct V1.1 comparison below now gives measured evidence; V1 has not been measured head-to-head here. This preview is not a blanket recommendation to replace either earlier model.

Setup and example

Use Python 3.11 in a fresh environment. Download the release and install CPU dependencies:

python -m pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('Grio43/OppaiOracle-experimental-X1', local_dir='OppaiOracle-experimental-X1')"
cd OppaiOracle-experimental-X1
python -m pip install -r requirements.txt
python infer.py path/to/image.jpg --device cpu --output predictions.json

For NVIDIA GPU use, install requirements-gpu.txt instead of the CPU requirements in a separate environment, with compatible CUDA/cuDNN dependencies. See ONNX Runtime's CUDA installation requirements. An existing compatible PyTorch installation can provide the CUDA DLLs.

python -m pip install -r requirements-gpu.txt
python infer.py image1.jpg image2.png --device cuda --batch-size 2 --output predictions.json

The same FP32 model.onnx works on CPU and CUDA. The script handles preprocessing, reads the embedded vocabulary, excludes PAD/UNK and returns tag names with scores. The default development-tuned threshold is 0.698492. Change it with --threshold; --top-k 30 returns up to 30 tags that also pass the threshold. To inspect the highest scores regardless of threshold:

python infer.py image.jpg --device cpu --threshold 0 --top-k 30

Scores already have sigmoid applied. Do not apply it again. Scores are not calibrated probabilities that a label is correct.

Comparison with OppaiOracle V1.1

Both downloaded ONNX models were evaluated on the same images and labels, with one-to-one matching of shared tag names. X1's category prefixes were mapped to V1.1's bare names; tag text after the category prefix was preserved, and ratings were matched by their full names. Each model used its native resolution: X1 at 320px, V1.1 at 448px. Both used FP32 inference, RGB, downscale-only centered LANCZOS letterboxing, normalization mean/std 0.5 and the required padding mask. Macro AP includes the same shared tags with positive support. Each model's best grid micro-F1 uses its own threshold selected on this same development set.

Matched vocabulary: 13,569 tags, of which 13,394 contribute to macro AP.

Measurement on shared tags experimental-X1 V1.1
Exact mAP 0.531655 0.592716
Binned mAP 0.529091 0.588611
Best grid micro-F1 0.651513 0.665864
Threshold for that micro-F1 0.703518 0.798995

V1.1 scored higher than X1 on shared-tag exact AP in this run. X1 minus V1.1 exact mAP: -0.061061. X1 had higher exact AP on 2,466 shared supported tags; V1.1 had higher AP on 9,572; 1,356 tied.

These are development-image results, not an independent generalization test. V1.1 may have seen some of these images during its earlier training; that overlap is unverified. The comparison therefore does not establish superiority on unseen images. Different resolutions and vocabularies also affect deployment choices. See comparison details and all shared-tag AP results.

Regression and high-suspect tags

The last checkpoint spot check compared E21 โ†’ E22 โ†’ partial E23, with E23 at 79.95% of its training epoch. The lists below concern the behavior of checkpoints after the released E21 checkpoint; they are priorities for further testing and dataset review. Partial recovery still counts as high suspect until the behavior is understood. A flag does not prove that a tag's annotations are wrong or that a small AP movement is statistically meaningful.

List Tags Definition
Continued declines 2,007 E21 AP > E22 AP > partial E23 AP
Partial recoveries โ€” high suspect 1,959 E22 AP < partial E23 AP < E21 AP
New declines since E22 4,543 Partial E23 fell from E22 after E22 had held or improved over E21

Each CSV contains the complete tag list, AP at each checkpoint and the signed changes. These counts include any numerical decrease, including tiny ones. Definitions are also saved in regression_summary.json.

The previously highlighted tags that remain below E21 are:

Tag E21 AP E22 AP Partial E23 AP Review status
gen:aiming 0.466795 0.416097 0.392755 Continued decline
gen:cannon 0.389553 0.336859 0.336645 Continued decline
gen:mismatched_legwear 0.457621 0.405985 0.394570 Continued decline
gen:yellow_neckerchief 0.675055 0.623700 0.600971 Continued decline
copyright:goddess_of_victory:_nikke 0.857901 0.790998 0.803409 Partial recovery; high suspect
gen:black_sweater 0.388958 0.327761 0.340505 Partial recovery; high suspect
gen:blanket 0.362744 0.300508 0.310602 Partial recovery; high suspect
gen:grey_dress 0.259744 0.195336 0.238347 Partial recovery; high suspect
gen:holding_polearm 0.441218 0.386997 0.397173 Partial recovery; high suspect
gen:miko 0.757999 0.706227 0.732054 Partial recovery; high suspect
gen:missionary 0.579921 0.507168 0.526651 Partial recovery; high suspect
gen:pool 0.619430 0.554731 0.602463 Partial recovery; high suspect
gen:rock 0.284336 0.220410 0.256568 Partial recovery; high suspect
gen:sailor_shirt 0.357904 0.290515 0.328652 Partial recovery; high suspect
gen:toenail_polish 0.469647 0.402728 0.447554 Partial recovery; high suspect
gen:vision_(genshin_impact) 0.592079 0.515976 0.531040 Partial recovery; high suspect

Of the original 20 highlighted declines, gen:carrot, gen:blunt_ends, gen:hug_from_behind and gen:vampire recovered above their E21 scores in the partial E23 check. They are not included in the partial-recovery list.

Model, preprocessing and files

  • 147,362,868 parameters: ViT patch16, width 896, 18 layers, 14 attention heads, MLP width 2320, QK normalization and LayerScale.
  • 14,996 output positions: 14,994 tags plus PAD/UNK at indices 0 and 1. Categories include general, artist, copyright, character, metadata and four ratings.
  • model.onnx: FP32, about 590 MB, single file, ONNX opset 20 / IR 10; vocabulary and preprocessing metadata embedded. CPU and CUDA checks passed.
  • infer.py, requirements.txt, requirements-gpu.txt: standalone setup and inference.
  • vocabulary.json, selected_tags.csv: exact output ordering and category mapping.
  • preprocessing.json, model_config.json: inference and architecture specifications.
  • thresholds.json, validation.json, inference_checks.json: development tuning and export verification. The original export AP uses all supported X1 tags; it is a different denominator from the shared-vocabulary V1.1 comparison above.
  • Regression/comparison CSVs, release_manifest.json and SHA256SUMS: review evidence and file integrity information.
Input/output Type Shape
pixel_values float32 [batch, 3, 320, 320]
padding_mask bool [batch, 320, 320]
probabilities float32 [batch, 14996]

Batch is dynamic; image dimensions are fixed. Apply EXIF orientation, convert to RGB, composite transparency onto [114,114,114], downscale with LANCZOS without upscaling, and center on a 320ร—320 canvas. Mark padding True. Divide pixel values by 255, normalize with mean/std [0.5,0.5,0.5], and transpose to NCHW. The supplied script implements this. The four ratings are independent sigmoid outputs.

This two-input NCHW model requires a frontend that supports its preprocessing and padding mask; it is not interchangeable with a single-input raw-NHWC tagger graph.

Scope and next work

This remains a test model, not a full release. It is intended for experimental tagging, comparison and feedback. Further tuning will be used to investigate and refine dataset issues, especially unstable tag families. Training data contains noisy and incomplete labels, and visually similar or rare concepts can be unreliable. Review predictions before using them to modify a dataset or make moderation decisions. The vocabulary includes sexual-content labels; this is not a validated safety classifier. No source images, optimizer state or training checkpoints are included.

Provenance and license

Released checkpoint: Phase 1, epoch 21, update 127,974. Source checkpoint SHA256: 019d665185348b40679911dec3528abd61d1c9f9310036ae3c07d3c4f33d8777. The exported ONNX weights are unchanged from the validated FP32 E21 artifact.

The release retains the repository's Educational Use Only License. See the license text for permitted uses, attribution and restrictions.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support