| { |
| "schemaVersion": 1, |
| "kind": "quickdraw-classifier", |
| "classes": [ |
| "airplane", |
| "apple", |
| "banana", |
| "bicycle", |
| "bird", |
| "book", |
| "bus", |
| "cake", |
| "camera", |
| "car", |
| "cat", |
| "chair", |
| "clock", |
| "cloud", |
| "coffee cup", |
| "computer", |
| "dog", |
| "door", |
| "eye", |
| "face", |
| "fish", |
| "flower", |
| "hamburger", |
| "hand", |
| "house", |
| "ice cream", |
| "key", |
| "light bulb", |
| "moon", |
| "mountain", |
| "pencil", |
| "pizza", |
| "rain", |
| "rainbow", |
| "star", |
| "sun", |
| "telephone", |
| "tree", |
| "truck", |
| "umbrella" |
| ], |
| "sourceCacheFingerprint": "5d56d8dd9ccc445000f843298d921611e777f90010f75bdfd344988a67b2f4bb", |
| "trainingData": { |
| "cacheFingerprint": "5d56d8dd9ccc445000f843298d921611e777f90010f75bdfd344988a67b2f4bb", |
| "sourceManifestFingerprint": "91aa4345a785276c8ddd3afeb659f9418117121e4b03d12accdcb466351654e7", |
| "sourceManifestSha256": "98de0a2954e9111d8c1015a3b59afecd2b085a53078d53b13427c1a2e0e79544", |
| "sampling": { |
| "seed": 20260815, |
| "perClass": { |
| "train": 3000, |
| "valid": 500, |
| "test": 500 |
| } |
| }, |
| "splits": { |
| "train": { |
| "count": 120000, |
| "images": { |
| "filename": "train-images.npy", |
| "bytes": 491520128, |
| "sha256": "f0b13c42b667dc8b368ebbc24f7d154fdc7b2736128887c2b73cd3d848e4af2c", |
| "shape": [ |
| 120000, |
| 64, |
| 64 |
| ], |
| "dtype": "uint8" |
| }, |
| "labels": { |
| "filename": "train-labels.npy", |
| "bytes": 240128, |
| "sha256": "cad1bef39f1b1578c1908ece8273676b650747ae12f6ba2ef7fff07e0518df76", |
| "shape": [ |
| 120000 |
| ], |
| "dtype": "int16" |
| } |
| }, |
| "valid": { |
| "count": 20000, |
| "images": { |
| "filename": "valid-images.npy", |
| "bytes": 81920128, |
| "sha256": "e22c85d7741e7d661620c9db2b2acea9cbc01c025cd4371c45c2c12813e679e9", |
| "shape": [ |
| 20000, |
| 64, |
| 64 |
| ], |
| "dtype": "uint8" |
| }, |
| "labels": { |
| "filename": "valid-labels.npy", |
| "bytes": 40128, |
| "sha256": "1c8d3d1400e77e2acf7caea884285c7b9b192c63b9ef24e5c7169f12c0ed298c", |
| "shape": [ |
| 20000 |
| ], |
| "dtype": "int16" |
| } |
| }, |
| "test": { |
| "count": 20000, |
| "images": { |
| "filename": "test-images.npy", |
| "bytes": 81920128, |
| "sha256": "b08466e72d7494e664ac8f8b2f8b42857ac2e23ded846aa62e19430babad3a0d", |
| "shape": [ |
| 20000, |
| 64, |
| 64 |
| ], |
| "dtype": "uint8" |
| }, |
| "labels": { |
| "filename": "test-labels.npy", |
| "bytes": 40128, |
| "sha256": "1c8d3d1400e77e2acf7caea884285c7b9b192c63b9ef24e5c7169f12c0ed298c", |
| "shape": [ |
| 20000 |
| ], |
| "dtype": "int16" |
| } |
| } |
| }, |
| "rasterizerFiles": { |
| "worker": { |
| "path": "scripts/rasterize-stroke3-worker.mjs", |
| "sha256": "54bffd0ffc04c8d2958327a2206104676623d175f868c4e407774fd08db3431f" |
| }, |
| "implementation": { |
| "path": "src/sketch-rasterizer.mjs", |
| "sha256": "73f93553d1961265f8c0a63519b91da736f2bd4f081d6699ed60ba3b74eafa59" |
| } |
| }, |
| "builder": { |
| "path": "scripts/build-training-cache.py", |
| "sha256": "69bf16f53bf66bf850acd922e10c1ecafce68ee0fffb55cbce799da5aa181c93", |
| "dependencies": { |
| "model/integrity.py": "8b2aaa5ead6ec5739acaf279926deb553bc945eb8a3d5ccadb3fd20d3021c2a9" |
| }, |
| "runtime": { |
| "python": "3.9.6", |
| "numpy": "1.26.4" |
| } |
| }, |
| "node": { |
| "version": "v24.14.1", |
| "sha256": "91d3afb67a7dc211f642f2328f822505ff1c1ad381e98ffdd21b003970deeeda" |
| } |
| }, |
| "rasterizer": { |
| "worker": "scripts/rasterize-stroke3-worker.mjs", |
| "size": 64, |
| "padding": 4, |
| "strokeWidth": 2.5, |
| "supersample": 4 |
| }, |
| "architecture": { |
| "inputShape": [ |
| 1, |
| 64, |
| 64 |
| ], |
| "numClasses": 40, |
| "channels": [ |
| 32, |
| 64, |
| 128 |
| ], |
| "embeddingSize": 192, |
| "dropout": 0.2 |
| }, |
| "model": { |
| "filename": "quickdraw-mvp.onnx", |
| "format": "ONNX", |
| "opset": 17, |
| "bytes": 1980135, |
| "sha256": "ba83ba933fa4d93399036f80ec3848257154f1e1661e0f1270beac17d0947c46", |
| "parameterCount": 494760, |
| "input": { |
| "name": "bitmap", |
| "shape": [ |
| "batch", |
| 1, |
| 64, |
| 64 |
| ], |
| "dtype": "float32", |
| "normalization": "uint8 / 255" |
| }, |
| "output": { |
| "name": "logits", |
| "shape": [ |
| "batch", |
| 40 |
| ], |
| "dtype": "float32" |
| } |
| }, |
| "training": { |
| "seed": 20260815, |
| "epochs": 8, |
| "bestEpoch": 8, |
| "batchSize": 256, |
| "optimizer": { |
| "name": "AdamW", |
| "learningRate": 0.001, |
| "weightDecay": 0.0001 |
| }, |
| "numWorkers": 0, |
| "minimumTestAccuracy": 0.7, |
| "minimumPerClassAccuracy": 0.7, |
| "deterministicAlgorithms": true, |
| "device": "mps", |
| "history": [ |
| { |
| "epoch": 1, |
| "train": { |
| "loss": 1.056165291372935, |
| "accuracy": 0.7128833333333333, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.6744539570093155, |
| "accuracy": 0.8125, |
| "top5Accuracy": 0.9579, |
| "perClassAccuracy": [ |
| 0.764, |
| 0.946, |
| 0.696, |
| 0.88, |
| 0.69, |
| 0.74, |
| 0.588, |
| 0.848, |
| 0.908, |
| 0.872, |
| 0.638, |
| 0.892, |
| 0.888, |
| 0.924, |
| 0.766, |
| 0.828, |
| 0.572, |
| 0.946, |
| 0.858, |
| 0.862, |
| 0.842, |
| 0.62, |
| 0.924, |
| 0.924, |
| 0.97, |
| 0.932, |
| 0.572, |
| 0.836, |
| 0.71, |
| 0.952, |
| 0.85, |
| 0.594, |
| 0.932, |
| 0.94, |
| 0.9, |
| 0.948, |
| 0.43, |
| 0.85, |
| 0.778, |
| 0.89 |
| ] |
| } |
| }, |
| { |
| "epoch": 2, |
| "train": { |
| "loss": 0.5841791171073913, |
| "accuracy": 0.835875, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.45889934716224673, |
| "accuracy": 0.8725, |
| "top5Accuracy": 0.97585, |
| "perClassAccuracy": [ |
| 0.842, |
| 0.97, |
| 0.878, |
| 0.922, |
| 0.618, |
| 0.882, |
| 0.918, |
| 0.918, |
| 0.962, |
| 0.726, |
| 0.8, |
| 0.92, |
| 0.95, |
| 0.906, |
| 0.81, |
| 0.912, |
| 0.718, |
| 0.95, |
| 0.88, |
| 0.874, |
| 0.884, |
| 0.85, |
| 0.942, |
| 0.936, |
| 0.948, |
| 0.914, |
| 0.88, |
| 0.8, |
| 0.662, |
| 0.96, |
| 0.928, |
| 0.88, |
| 0.948, |
| 0.962, |
| 0.916, |
| 0.904, |
| 0.654, |
| 0.91, |
| 0.766, |
| 0.9 |
| ] |
| } |
| }, |
| { |
| "epoch": 3, |
| "train": { |
| "loss": 0.48913656921386717, |
| "accuracy": 0.8603083333333333, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.4167406298160553, |
| "accuracy": 0.8825, |
| "top5Accuracy": 0.9774, |
| "perClassAccuracy": [ |
| 0.878, |
| 0.942, |
| 0.846, |
| 0.9, |
| 0.632, |
| 0.944, |
| 0.912, |
| 0.926, |
| 0.958, |
| 0.79, |
| 0.812, |
| 0.928, |
| 0.904, |
| 0.892, |
| 0.83, |
| 0.896, |
| 0.74, |
| 0.942, |
| 0.906, |
| 0.914, |
| 0.908, |
| 0.91, |
| 0.924, |
| 0.95, |
| 0.954, |
| 0.892, |
| 0.814, |
| 0.878, |
| 0.742, |
| 0.98, |
| 0.954, |
| 0.918, |
| 0.91, |
| 0.96, |
| 0.938, |
| 0.884, |
| 0.724, |
| 0.858, |
| 0.796, |
| 0.914 |
| ] |
| } |
| }, |
| { |
| "epoch": 4, |
| "train": { |
| "loss": 0.43742944836616515, |
| "accuracy": 0.8745666666666667, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.3852368968963623, |
| "accuracy": 0.88965, |
| "top5Accuracy": 0.9801, |
| "perClassAccuracy": [ |
| 0.872, |
| 0.978, |
| 0.864, |
| 0.968, |
| 0.734, |
| 0.922, |
| 0.924, |
| 0.9, |
| 0.966, |
| 0.858, |
| 0.782, |
| 0.932, |
| 0.866, |
| 0.894, |
| 0.862, |
| 0.912, |
| 0.808, |
| 0.912, |
| 0.912, |
| 0.926, |
| 0.9, |
| 0.86, |
| 0.954, |
| 0.926, |
| 0.966, |
| 0.944, |
| 0.848, |
| 0.852, |
| 0.792, |
| 0.964, |
| 0.95, |
| 0.944, |
| 0.844, |
| 0.968, |
| 0.948, |
| 0.92, |
| 0.774, |
| 0.886, |
| 0.636, |
| 0.918 |
| ] |
| } |
| }, |
| { |
| "epoch": 5, |
| "train": { |
| "loss": 0.39647118004163107, |
| "accuracy": 0.885475, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.3675016505241394, |
| "accuracy": 0.8968, |
| "top5Accuracy": 0.97995, |
| "perClassAccuracy": [ |
| 0.832, |
| 0.974, |
| 0.84, |
| 0.956, |
| 0.802, |
| 0.936, |
| 0.788, |
| 0.862, |
| 0.96, |
| 0.866, |
| 0.81, |
| 0.936, |
| 0.956, |
| 0.926, |
| 0.916, |
| 0.934, |
| 0.784, |
| 0.946, |
| 0.932, |
| 0.926, |
| 0.916, |
| 0.846, |
| 0.954, |
| 0.932, |
| 0.966, |
| 0.93, |
| 0.796, |
| 0.878, |
| 0.752, |
| 0.962, |
| 0.93, |
| 0.844, |
| 0.946, |
| 0.964, |
| 0.968, |
| 0.964, |
| 0.726, |
| 0.914, |
| 0.858, |
| 0.944 |
| ] |
| } |
| }, |
| { |
| "epoch": 6, |
| "train": { |
| "loss": 0.36662511706352235, |
| "accuracy": 0.892825, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.36927314329147337, |
| "accuracy": 0.8964, |
| "top5Accuracy": 0.98105, |
| "perClassAccuracy": [ |
| 0.866, |
| 0.966, |
| 0.79, |
| 0.922, |
| 0.81, |
| 0.864, |
| 0.826, |
| 0.882, |
| 0.962, |
| 0.8, |
| 0.8, |
| 0.958, |
| 0.948, |
| 0.932, |
| 0.866, |
| 0.96, |
| 0.674, |
| 0.954, |
| 0.934, |
| 0.914, |
| 0.904, |
| 0.844, |
| 0.978, |
| 0.94, |
| 0.966, |
| 0.948, |
| 0.858, |
| 0.89, |
| 0.828, |
| 0.954, |
| 0.952, |
| 0.904, |
| 0.936, |
| 0.97, |
| 0.958, |
| 0.936, |
| 0.704, |
| 0.914, |
| 0.898, |
| 0.946 |
| ] |
| } |
| }, |
| { |
| "epoch": 7, |
| "train": { |
| "loss": 0.3465169951756795, |
| "accuracy": 0.897975, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.35224454931616783, |
| "accuracy": 0.9008, |
| "top5Accuracy": 0.9812, |
| "perClassAccuracy": [ |
| 0.882, |
| 0.974, |
| 0.89, |
| 0.946, |
| 0.75, |
| 0.906, |
| 0.9, |
| 0.91, |
| 0.972, |
| 0.828, |
| 0.762, |
| 0.95, |
| 0.948, |
| 0.926, |
| 0.892, |
| 0.95, |
| 0.722, |
| 0.952, |
| 0.946, |
| 0.932, |
| 0.902, |
| 0.836, |
| 0.958, |
| 0.95, |
| 0.966, |
| 0.946, |
| 0.866, |
| 0.894, |
| 0.782, |
| 0.968, |
| 0.944, |
| 0.852, |
| 0.928, |
| 0.968, |
| 0.954, |
| 0.94, |
| 0.802, |
| 0.892, |
| 0.796, |
| 0.95 |
| ] |
| } |
| }, |
| { |
| "epoch": 8, |
| "train": { |
| "loss": 0.321421586004893, |
| "accuracy": 0.9052166666666667, |
| "top5Accuracy": null, |
| "perClassAccuracy": null |
| }, |
| "valid": { |
| "loss": 0.34855738773345946, |
| "accuracy": 0.90335, |
| "top5Accuracy": 0.9813, |
| "perClassAccuracy": [ |
| 0.882, |
| 0.976, |
| 0.888, |
| 0.97, |
| 0.862, |
| 0.914, |
| 0.908, |
| 0.904, |
| 0.97, |
| 0.92, |
| 0.85, |
| 0.9, |
| 0.938, |
| 0.93, |
| 0.912, |
| 0.898, |
| 0.77, |
| 0.912, |
| 0.904, |
| 0.932, |
| 0.876, |
| 0.922, |
| 0.956, |
| 0.906, |
| 0.95, |
| 0.936, |
| 0.872, |
| 0.858, |
| 0.814, |
| 0.956, |
| 0.902, |
| 0.912, |
| 0.938, |
| 0.964, |
| 0.89, |
| 0.94, |
| 0.806, |
| 0.916, |
| 0.734, |
| 0.946 |
| ] |
| } |
| } |
| ] |
| }, |
| "metrics": { |
| "test": { |
| "loss": 0.3516912404060364, |
| "accuracy": 0.9005, |
| "top5Accuracy": 0.98195, |
| "perClassAccuracy": [ |
| 0.9, |
| 0.968, |
| 0.844, |
| 0.96, |
| 0.836, |
| 0.916, |
| 0.912, |
| 0.914, |
| 0.944, |
| 0.916, |
| 0.86, |
| 0.872, |
| 0.938, |
| 0.916, |
| 0.898, |
| 0.916, |
| 0.784, |
| 0.924, |
| 0.888, |
| 0.922, |
| 0.872, |
| 0.91, |
| 0.96, |
| 0.912, |
| 0.942, |
| 0.936, |
| 0.878, |
| 0.884, |
| 0.784, |
| 0.956, |
| 0.9, |
| 0.918, |
| 0.946, |
| 0.978, |
| 0.838, |
| 0.958, |
| 0.796, |
| 0.922, |
| 0.738, |
| 0.964 |
| ] |
| }, |
| "onnxTest": { |
| "loss": 0.35169129371643065, |
| "accuracy": 0.9005, |
| "top5Accuracy": 0.98195, |
| "perClassAccuracy": [ |
| 0.9, |
| 0.968, |
| 0.844, |
| 0.96, |
| 0.836, |
| 0.916, |
| 0.912, |
| 0.914, |
| 0.944, |
| 0.916, |
| 0.86, |
| 0.872, |
| 0.938, |
| 0.916, |
| 0.898, |
| 0.916, |
| 0.784, |
| 0.924, |
| 0.888, |
| 0.922, |
| 0.872, |
| 0.91, |
| 0.96, |
| 0.912, |
| 0.942, |
| 0.936, |
| 0.878, |
| 0.884, |
| 0.784, |
| 0.956, |
| 0.9, |
| 0.918, |
| 0.946, |
| 0.978, |
| 0.838, |
| 0.958, |
| 0.796, |
| 0.922, |
| 0.738, |
| 0.964 |
| ] |
| }, |
| "maxLogitDifference": 4.00543212890625e-05 |
| }, |
| "runtime": { |
| "python": "3.9.6", |
| "platform": "macOS-26.6-arm64-arm-64bit", |
| "machine": "arm64", |
| "numpy": "1.26.4", |
| "torch": "2.8.0", |
| "onnx": "1.19.1", |
| "onnxruntime": "1.19.2" |
| }, |
| "browserRuntime": { |
| "package": "onnxruntime-web", |
| "version": "1.22.0", |
| "lockfileSha256": "e50f2a9ff0a010abd2b3a25c0a54b8d5465602c4c47bcd037e716e9f1bd5ea5d" |
| }, |
| "source": { |
| "repositoryRevision": "d2786f128e3b1ec07cfee1b4ef14ab797f53c026", |
| "filesMatchRevision": true, |
| "files": { |
| "model/__init__.py": "925a4d0bae99898cc145c54eb034f79f5d662ba8f7ae7854f540134c171088b0", |
| "model/quickdraw_cnn.py": "cb1906705fdae3d6cb67e1b897558fb01a040bf3400051d5c03d2709e1f19c8f", |
| "model/integrity.py": "8b2aaa5ead6ec5739acaf279926deb553bc945eb8a3d5ccadb3fd20d3021c2a9", |
| "scripts/build-training-cache.py": "69bf16f53bf66bf850acd922e10c1ecafce68ee0fffb55cbce799da5aa181c93", |
| "scripts/rasterize-stroke3-worker.mjs": "54bffd0ffc04c8d2958327a2206104676623d175f868c4e407774fd08db3431f", |
| "scripts/train-quickdraw-model.py": "3d208847fab3f2fb870a8fbea678cb3d7c2f797007a183623fab306405283ee5", |
| "src/sketch-rasterizer.mjs": "73f93553d1961265f8c0a63519b91da736f2bd4f081d6699ed60ba3b74eafa59", |
| "package.json": "de13417c20a49a170d66856b17941731a64fad6913d1badeb4de1509dd396f82", |
| "package-lock.json": "e50f2a9ff0a010abd2b3a25c0a54b8d5465602c4c47bcd037e716e9f1bd5ea5d", |
| "requirements-data.txt": "e77e7045d01a9431264f9262c6b199d8e7988c139276a5266a3cf689588ad66e", |
| "requirements-model.txt": "58d3cbb9c136a64c66502affdf57da0b0cd2a911332059a5f51eda5a3e7770f6" |
| } |
| }, |
| "fingerprint": "e0c9f0e3edabeb2d9f80c00e95ac311b906eecac5aced2a89730c2d10ff15602" |
| } |
|
|