diff --git a/AGENTS.md b/AGENTS.md index 2e47cf1..0735080 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,7 +32,7 @@ Win POIDH Arbitrum bounty 323 by shipping a privacy-first local MV3 Chrome exten - **Manifest V3.** `onnxruntime-web` in an offscreen document. WebGPU with WASM fallback (probe the adapter; do not latch a WebGPU error). - **Auto-scan ordinary webpages.** Confidence on every badge: AI / OK / uncertain. - **Hybrid is allowed:** neural + C2PA + EXIF/XMP + PNG/JPEG comments + weak URL hints. A URL hint alone must not cross 0.65. -- **Current fusion: CF-primary, three tiers.** CommunityForensics TTA takes the maximum raw sigmoid from inspected views. CF is authoritative at >= 0.65. Sub-floor tier: below CF 0.02, rescue only when CF >= 0.0005 (not flatlined) AND DINO >= 0.995; a CF hard zero is never overridden. Strong tier: CF in [0.02, 0.10) needs DINO >= 0.90. Normal tier: CF in [0.10, 0.65) needs DINO >= 0.70. The flat-graphic gate blocks every rescue tier on catalog art and UI-like images. Bands were re-derived for the hard-negative probe under a hard stress-set constraint (240 full-resolution stock/catalog/product reals; no DINO-attributable stress FP allowed), choosing a conservative near-optimum over the grid maximum. **Do not restore raw max(CF, DINO), remove the graphic gate, or loosen these bands without rerunning the bench plus the stress set and live-site checks.** +- **Current fusion: CF-primary, three tiers plus view agreement.** CommunityForensics TTA takes the maximum raw sigmoid from inspected views, with one rule: a lone view in [0.65, 0.85) does not carry an AI verdict and falls back to the runner-up (live CDN-processed real photos spike single crops); views >= 0.85 keep single-view authority and early-exit. The adaptive extras band is [0.15, 0.85). CF is authoritative at >= 0.65 after agreement. Sub-floor tier: below CF 0.02, rescue only when CF >= 0.0005 AND DINO >= 0.995. Strong tier: CF in [0.02, 0.20) needs DINO >= 0.96. Normal tier: CF in [0.20, 0.65) needs DINO >= 0.70. The flat-graphic gate blocks every rescue tier. Bands derived under three simultaneous guards: public bench, 240-image stress set, and a held-out live-CDN guard (camera-EXIF-verified Unsplash variants). **Do not restore plain max(CF, DINO), remove the graphic gate or the agreement rule, or loosen these bands without rerunning the bench, the stress set, AND the live guard.** - **Overlay:** badge store must be an iterable `Map`, not a `WeakMap`. Reposition on scroll / resize / `visualViewport` / mutations. Never wrap images. - **Load-unpacked users do not auto-update.** GitHub Releases zip + popup banner is the update path. Do not assume CWS. - **Cross-device:** macOS (owner), Windows, Linux. WASM must work when WebGPU has no adapter. @@ -65,7 +65,7 @@ Win POIDH Arbitrum bounty 323 by shipping a privacy-first local MV3 Chrome exten | File | Role | |---|---| -| `src/fuse.js` | `DEFAULT_THRESHOLD` 0.65, `DINO_CF_FLOOR` 0.02, `DINO_STRONG_RESCUE_FLOOR` 0.10, `DINO_STRONG_RESCUE_MIN` 0.90, `DINO_RESCUE_MIN` 0.70, `DINO_SUBFLOOR_CF_MIN` 0.0005, `DINO_SUBFLOOR_MIN` 0.995, CF-primary `fuseNeuralScores` | +| `src/fuse.js` | `DEFAULT_THRESHOLD` 0.65, `DINO_CF_FLOOR` 0.02, `DINO_STRONG_RESCUE_FLOOR` 0.20, `DINO_STRONG_RESCUE_MIN` 0.96, `DINO_RESCUE_MIN` 0.70, `DINO_SUBFLOOR_CF_MIN` 0.0005, `DINO_SUBFLOOR_MIN` 0.995, CF-primary `fuseNeuralScores` | | `src/graphic-gate.js` | Shared flat-graphic policy for browser and Node evaluation | | `src/pixel-resize.js` | Pillow-exact bicubic resize shared by the extension and the Node harness for the CF path (byte-exact vs Pillow 12.3.0 goldens) | | `src/offscreen.js` | ORT WebGPU/WASM, DINO 224 then CF TTA | @@ -76,7 +76,7 @@ Win POIDH Arbitrum bounty 323 by shipping a privacy-first local MV3 Chrome exten | `src/c2pa-reader.js` | C2PA reader | - Issue 23 (fixed in PR 24 / v1.0.7): overlay WeakMap drift + DINO max false positives. -- The public 893-image fixture with the hard-negative probe and re-derived bands: 90.5% BA, 81.2% TPR, 99.8% TNR (harness-verified, not simulated). Stress set (240 full-resolution stock/catalog/product reals): 4 FPs, all CF-driven at >= 0.65 where CF is authoritative by design; zero DINO-attributable stress FPs (shipped v1.1.0 measured 7 on identical bytes). The DINO probe is trained on features from the shared Pillow-exact path plus 1,915 hard-negative reals (stock, catalog, product, interiors; rows disjoint from the stress set). Full-resolution professional stock photos can spike CF itself; check exactly that during live smoke. Live-smoke checks still remain required before any claim. +- The public 893-image fixture with the live-guarded policy: 87.9% BA, 76.0% TPR, 99.8% TNR (harness-verified, adaptive mode, implemented view-agreement path). Stress set: 3 FPs in 240 images. Live-CDN guard (132 held-out camera-EXIF Unsplash variants, AVIF plus JPEG): 4 FPs, 3.0%, vs 9.2% for v1.2.0 on identical bytes. Probe trained with 118 verified-real live CDN images on top of the prior hard negatives. See docs/live-smoke-2026-08-16.md for the failure that drove this and the full isolation work. Live-smoke rerun still required before any claim. --- diff --git a/README.md b/README.md index 1fb38f8..880965b 100644 --- a/README.md +++ b/README.md @@ -57,8 +57,8 @@ Two independent neural heads cover complementary failure modes, plus determinist 1. **CommunityForensics head:** ViT-Small official FP32 ONNX (CLIP 384). `p(AI) = sigmoid(logit)`. Near-zero false positives on real photos, but under-scores several modern generators (Flux, GPT-4o-image, photoreal DALL-E 3). 2. **DINOv2 probe head:** frozen DINOv2-small backbone (224 center view) with a transparent logistic head over CLS+mean-pooled features (`models/probe/dino-probe.json`: plain standardize/weights/bias, no lookup tables). Trained on ~11.4k images from public datasets across Flux, SD3.5, SDXL-era, Midjourney, DALL-E 3, GPT-4o-image and diverse real photos, including ~1.9k hard-negative reals (stock photography, product catalogs, interiors, high-saturation nature) that teach the head not to fire on professional real photos, with web-realistic JPEG/resize augmentation. Features are extracted through the same Pillow-exact resize the extension ships, so training matches serving exactly. This head carries the modern generators. -3. **Neural fusion:** CF-primary with three rescue tiers. When CommunityForensics is confident AI (`>= 0.65`), its score wins. Between `0.02` and `0.10`, DINO can only rescue if it is highly confident (`p(AI) >= 0.90`); between `0.10` and `0.65`, DINO can lift at `p(AI) >= 0.70`. Below the `0.02` floor a rescue additionally requires CF to be at least faintly awake (`>= 0.0005`) and DINO to be saturated (`>= 0.995`): CF emits hard zeros on real photos it is certain about, while AI images in its blind spots still elicit a faint response, so a flatlined CF is itself evidence of a real photo and is never overridden. On flat graphics and catalog art (low palette / high flat-run pixels), a graphic gate suppresses every DINO rescue tier when CF stays below `0.65`, so icons and UI shots do not mass-label AI 100%. CF-confident AI illustrations (`>= 0.65`) are unchanged. Displayed confidence is this raw fused probability; the AI verdict stays at raw `>= 0.65` with no remapping and no logit bias. The rescue bands were re-derived for the current probe under a hard constraint measured on a separate 240-image full-resolution stock, catalog, and product photo stress set (no DINO-attributable false positives allowed), and a deliberately conservative near-optimum was chosen over the grid maximum. -4. **Adaptive TTA:** the DINO pass and the official 440 center crop always run. Extra CommunityForensics views (440 corners + 512 center) run only when a head is at least mildly suspicious (CF center or DINO in `[0.15, 0.65)`), so confident reals cost two passes total. `Math.max` of sigmoids, early exit at `>= 0.9`. Under heavy queue load (more than 12 pending) CF drops to center-only; the DINO pass still runs. +3. **Neural fusion:** CF-primary with three rescue tiers. When CommunityForensics is confident AI (`>= 0.65` after view agreement), its score wins. Between `0.02` and `0.20`, DINO can only rescue if it is highly confident (`p(AI) >= 0.96`); between `0.20` and `0.65`, DINO can lift at `p(AI) >= 0.70`. Below the `0.02` floor a rescue additionally requires CF to be at least faintly awake (`>= 0.0005`) and DINO to be saturated (`>= 0.995`): CF emits hard zeros on real photos it is certain about, while AI images in its blind spots still elicit a faint response, so a flatlined CF is itself evidence of a real photo and is never overridden. On flat graphics and catalog art (low palette / high flat-run pixels), a graphic gate suppresses every DINO rescue tier when CF stays below `0.65`. Displayed confidence is this raw fused probability; the AI verdict stays at raw `>= 0.65` with no remapping and no logit bias. The rescue bands were re-derived under three guards at once: the public bench, a 240-image full-resolution stock and catalog stress set, and a held-out live-CDN guard of camera-EXIF-verified editorial photos. +4. **Adaptive TTA with view agreement:** the DINO pass and the official 440 center crop always run. Extra CommunityForensics views (440 corners + 512 center) run when a head is at least mildly suspicious (CF center in `[0.15, 0.85)` or DINO `>= 0.15`), so confident reals cost two passes total. Aggregation is the max of sigmoids with one honesty rule: a lone view in `[0.65, 0.85)` does not carry an AI verdict by itself and falls back to the runner-up view, because live CDN-processed real photos can spike a single crop. Any view at `>= 0.85` keeps single-view authority and early-exits. Under heavy queue load (more than 12 pending) CF drops to center-only; the DINO pass still runs. 5. **Metadata:** C2PA, EXIF/XMP/IPTC, generator text in PNG/JPEG, weak URL hints. Strong metadata forces 0.95-0.99; a URL hint alone cannot cross 65%. ## Tests @@ -80,9 +80,10 @@ Eval harness: `npm run eval -- ./path/to/labeled-folder` after `npm run fetch-mo | Legacy raw max ensemble (not shipped) | 96.1% | 96.1% | 96.1% | | Prior policy, prior Node resize (historical) | 85.0% | 70.4% | 99.6% | | v1.1.0 policy and probe, Pillow-exact preprocess | 87.7% | 75.8% | 99.6% | -| Production: hard-negative probe, re-derived bands | 90.5% | 81.2% | 99.8% | +| v1.2.0: hard-negative probe, re-derived bands | 90.5% | 81.2% | 99.6% | +| Production: live-guarded policy with view agreement | 87.9% | 76.0% | 99.8% | -The legacy raw max result is included to make the tradeoff visible, not as a product claim. It caused unacceptable false positives on live stock and catalog images, so production keeps the CF guard. The historical 85.0% row was measured through a Node resize the extension never ran; later rows are computed by the same Pillow-exact resize the extension ships, byte for byte. On a 240-image full-resolution stock, catalog, and product photo stress set the production policy shows 4 false positives, all driven by CommunityForensics alone scoring `>= 0.65` (where it is authoritative by design), and zero attributable to a DINO rescue; the v1.1.0 configuration measured 7 on identical bytes. Public fixtures are directional only and are not a claim about Kenny's private held-out set. +The legacy raw max result is included to make the tradeoff visible, not as a product claim. It caused unacceptable false positives on live stock and catalog images, so production keeps the CF guard. The historical 85.0% row was measured through a Node resize the extension never ran; later rows are computed by the same Pillow-exact resize the extension ships, byte for byte. On a 240-image full-resolution stock, catalog, and product photo stress set the production policy shows 3 false positives, zero attributable to a DINO rescue. On a held-out live-CDN guard of 132 camera-EXIF-verified Unsplash editorial variants it shows 4 false positives (3.0 percent), where the v1.2.0 configuration measured 9.2 percent on identical bytes. Public fixtures are directional only and are not a claim about Kenny's private held-out set. **Live-web evaluation (published openly):** our 2026-08-16 live-site smoke test of v1.2.0 FAILED on CDN-processed professional photography (details, isolation experiments, and the fix plan in [docs/live-smoke-2026-08-16.md](docs/live-smoke-2026-08-16.md)). Benchmark numbers above remain reproducible as stated; the live gap is being closed with ground-truthed live corpora and a retrained probe, and no bounty claim will be made until a re-run smoke passes. Live counterexamples are welcome as issues. diff --git a/STORE.md b/STORE.md index 6d29824..a986d46 100644 --- a/STORE.md +++ b/STORE.md @@ -2,7 +2,7 @@ **Author:** Luis Felipe Abarca **Project license:** MIT (bundled assets have their own notices) -**Version:** 1.2.0 +**Version:** 1.3.0 Unpacked install from GitHub (`npm run fetch-model && npm run build`, then Load unpacked from `dist/`) remains the POIDH proof path. This file is listing copy for a future Chrome Web Store upload. The extension is **not** claimed to be on the Chrome Web Store. @@ -103,7 +103,7 @@ Do not screenshot private or copyrighted photos you do not have rights to. Use t 1. `npm ci && npm run package` 2. Open the Chrome Web Store Developer Dashboard (one-time developer registration is a Google process; this repo does not submit for you). -3. New item, upload `release/clueside-1.2.0.zip` +3. New item, upload `release/clueside-1.3.0.zip` 4. Paste the short and detailed descriptions above 5. Set privacy policy URL to the hosted `docs/privacy.html` 6. Attach screenshots and the 128px icon diff --git a/docs/live-smoke-2026-08-16.md b/docs/live-smoke-2026-08-16.md index 86ae3d2..2a20888 100644 --- a/docs/live-smoke-2026-08-16.md +++ b/docs/live-smoke-2026-08-16.md @@ -73,6 +73,16 @@ So the trigger is the live processing chain plus the current content distributio 5. Fix the offline update ping. 6. Re-run the full smoke. The bounty claim stays on hold until it passes. +## Update, 2026-08-16 (same day): the fix, measured + +The work-in-progress list above is done. Findings and results: + +- **Unsplash exposes no AI label anywhere.** We audited the full API surface, page HTML, frontend bundles, tags, and image bytes for 268 current editorial photos: no labeling mechanism exists as served. Ground truth via platform labels is impossible; we fell back to camera EXIF present in the API metadata (184 of 268 photos) as a probable-real prior, and imgix strips all embedded provenance metadata from served bytes, which also means metadata-based detection layers are inert on CDN images. +- **True FP rate of v1.2.0 on probable-real live bytes: 9.2 percent** (17 of 184 camera-EXIF photos, identical in AVIF and JPEG form). The no-EXIF segment flagged at a similar rate, so the smoke's headline 24.3 percent was inflated by page mix and feed rotation, not primarily by hidden AI content. +- **The fix** (three coordinated changes, shipped together): a view-agreement rule (a lone CommunityForensics view in [0.65, 0.85) cannot carry an AI verdict and falls back to the runner-up view; views at or above 0.85 keep single-view authority), the probe retrained with 118 verified-real live CDN images, and the strong rescue tier tightened to [0.02, 0.20) with DINO at or above 0.96. +- **Verified with the implemented pipeline:** public bench 87.9 percent BA, 76.0 TPR, 99.8 TNR; stress set 3 of 240; held-out live-CDN guard 4 of 132 (3.0 percent, versus 9.2 percent for v1.2.0 on identical bytes). The live guard is now a permanent part of the evaluation gate next to the bench and stress sets, and the trade (2.6 bench points for a threefold live FP reduction) is deliberate: false positives on real photos are the failure that matters. +- A full live smoke rerun of the fixed build is the next gate. No claim before it passes. + ## How to help - Reproduce any number here: `npm ci && npm run fetch-model`, then `npm run eval -- ` on any labeled folder of images. The harness matches the extension byte for byte. diff --git a/eval/benchmark-results.json b/eval/benchmark-results.json index 39f2967..4db61ef 100644 --- a/eval/benchmark-results.json +++ b/eval/benchmark-results.json @@ -1,26 +1,32 @@ { "_note": "Single source of truth for published benchmark numbers. The site imports this file, scripts/check-site.mjs validates the built site against it, and tests/benchmark-docs.test.mjs fails the suite if README.md, AGENTS.md, or the manifest version drift from it. Numbers may only come from a full harness run (bench plus stress). On a release that does not touch scoring code (src fusion, preprocessing, models, probe), bump extensionVersion here to re-affirm the numbers still describe the shipped build; any release that touches scoring code requires a fresh run first.", - "measuredAt": "2026-08-15", - "extensionVersion": "1.2.0", + "measuredAt": "2026-08-16", + "extensionVersion": "1.3.0", "decisionRule": "raw fused p(AI) >= 0.65, no remapping", "bench": { "n": 893, "ai": 409, "real": 484, - "ba": 90.5, - "tpr": 81.2, - "tnr": 99.8, + "ba": "87.9", + "tpr": "76.0", + "tnr": "99.8", "falsePositives": 1 }, "stress": { "n": 240, - "falsePositives": 4, + "falsePositives": 3, "dinoAttributableFalsePositives": 0, "description": "Full-resolution stock, catalog, product, interior, and high-saturation real photos; remaining FPs are CommunityForensics alone at >= 0.65 where it is authoritative" }, "legacyRawMax": { - "ba": 96.1, + "ba": "96.1", "shipped": false, "reason": "Unacceptable live false positives on stock and catalog images" + }, + "liveGuard": { + "n": 132, + "falsePositives": 4, + "ratePercent": 3.0, + "description": "Held-out camera-EXIF Unsplash editorial photos fetched as live CDN bytes (AVIF and JPEG grid variants, w=700 q=60); v1.2.0 measured 9.2 percent on this distribution" } -} +} \ No newline at end of file diff --git a/eval/extract-features.mjs b/eval/extract-features.mjs index a380643..a28a238 100644 --- a/eval/extract-features.mjs +++ b/eval/extract-features.mjs @@ -23,7 +23,7 @@ import { RawImage } from '@huggingface/transformers'; import sharp from 'sharp'; import ort from 'onnxruntime-node'; -const IMAGE_EXT = new Set(['.jpg', '.jpeg', '.png', '.webp', '.bmp']); +const IMAGE_EXT = new Set(['.jpg', '.jpeg', '.png', '.webp', '.bmp', '.avif']); const AI_DIR_NAMES = new Set(['ai', 'fake', 'generated', 'synthetic']); const REAL_DIR_NAMES = new Set(['real', 'authentic', 'photo', 'natural']); diff --git a/manifest.json b/manifest.json index e1e2852..39cd877 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Clueside: Local AI Image Detector", - "version": "1.2.0", + "version": "1.3.0", "description": "Clueside surfaces likely AI-generated images locally. Images never leave your device.", "author": "Luis Felipe Abarca", "icons": { diff --git a/models/Xenova/dinov2-small/onnx b/models/Xenova/dinov2-small/onnx new file mode 120000 index 0000000..1e6c528 --- /dev/null +++ b/models/Xenova/dinov2-small/onnx @@ -0,0 +1 @@ +/Users/felirami/hybridai/models/Xenova/dinov2-small/onnx \ No newline at end of file diff --git a/models/buildborderless/CommunityForensics-DeepfakeDet-ViT/onnx b/models/buildborderless/CommunityForensics-DeepfakeDet-ViT/onnx new file mode 120000 index 0000000..574e714 --- /dev/null +++ b/models/buildborderless/CommunityForensics-DeepfakeDet-ViT/onnx @@ -0,0 +1 @@ +/Users/felirami/hybridai/models/buildborderless/CommunityForensics-DeepfakeDet-ViT/onnx \ No newline at end of file diff --git a/models/probe/dino-probe.json b/models/probe/dino-probe.json index 0475f4c..3291b1c 100644 --- a/models/probe/dino-probe.json +++ b/models/probe/dino-probe.json @@ -1 +1 @@ -{"backbone":"dinov2-small","pooling":"cls+mean","dims":768,"featureMean":[-0.587975,-0.094064,0.388187,-0.183691,0.389014,-0.03528,-0.034767,-0.26375,0.313221,0.418463,-0.150547,0.241793,-0.441617,0.148957,0.852502,0.057653,-0.201931,-0.814269,0.303307,-0.769804,0.555188,-0.318358,-0.237053,-0.204962,-0.215752,0.205432,0.049399,-0.511024,0.793436,-0.121574,-0.30079,-0.626142,0.028857,0.134217,0.492368,0.534628,-0.53921,0.678229,0.23157,0.371823,-0.192139,0.889275,-0.262973,0.158686,-0.360628,-0.631063,-0.802162,-0.092029,0.962817,0.371611,0.225355,-0.120516,0.342901,-0.285793,-0.694951,0.176231,0.498634,0.417661,-0.397721,-0.789725,0.763898,0.55714,0.111621,-0.539031,-0.324011,0.390558,-0.269609,0.107317,0.870136,-0.075503,-0.5581,0.282389,-0.603112,0.02453,0.482026,-0.532884,-0.317824,0.080954,-0.445118,-0.020532,0.11349,-0.412927,0.080437,-0.192541,-0.991158,-0.222681,-0.430975,-0.1809,-0.423271,0.311884,0.337933,-0.279033,-0.321905,-0.39488,0.776455,-0.458481,0.933325,0.074337,0.048853,-0.465585,-0.465498,0.900798,-0.367444,-0.576422,0.036017,0.325469,-0.341783,-0.374923,0.429428,-0.250852,-0.002197,0.087273,0.471771,0.181571,0.013947,-0.366408,-0.123343,0.30949,-0.417957,-0.28191,0.241463,1.256193,-0.115599,0.425791,0.821136,-0.721735,0.341678,-0.454495,-0.246905,0.50968,0.194299,-0.225802,-0.095598,0.203785,0.072845,1.058425,-0.296343,0.18367,-0.547833,0.075871,-0.663155,0.142279,-0.097237,-0.566986,0.060041,-0.312514,0.122253,0.747029,0.140247,0.266245,0.197988,-0.777732,-0.176156,0.176283,-0.490247,-0.887124,0.891164,-0.520175,0.206008,-0.442203,-0.195839,-0.460117,-0.515188,-0.167662,0.252814,-0.268552,-0.092051,-0.229226,-0.432826,0.457736,0.152554,0.1797,0.184788,0.292237,0.442868,-0.428969,-0.144477,-0.249511,0.31072,0.69643,0.445749,0.34417,0.055399,-0.010668,-0.018404,-0.080901,0.514875,0.276385,0.368935,-0.335876,-0.082503,-0.170969,-0.235624,-0.203766,0.028701,-0.050326,0.70553,0.400489,-0.43496,-0.354247,0.225182,-1.024071,0.352065,-0.253172,0.11066,0.066061,0.511124,-0.363477,0.278419,0.095486,0.665825,-0.502027,0.36272,-0.230787,-0.122765,-0.195727,-0.334865,-0.131487,-0.041678,-0.261052,0.262479,-0.370835,-0.839509,-0.432078,-0.328707,-0.029437,-0.054144,0.3592,-0.629387,0.083973,0.062789,-0.643402,-0.465046,0.379701,0.144936,0.081448,0.029463,-0.469032,-0.33728,-0.141475,0.359924,-0.028534,-0.109033,-0.336319,0.478765,-0.212261,-0.036019,-0.433826,-0.33183,-0.069357,-0.160389,0.314752,0.252278,0.228326,-0.532176,0.003395,0.561955,0.318074,0.204979,-0.393821,0.06273,0.245302,-0.140247,-0.303843,0.0621,-0.447401,-0.33335,-0.38036,-0.014597,-0.13101,0.266009,-0.427313,-0.377637,0.431003,0.589889,0.192261,0.082655,0.932067,-0.078612,-0.241809,-0.38188,-0.315707,0.134304,-0.363783,0.419194,0.134956,-0.599328,-0.18083,0.00489,-0.35889,-0.420401,-0.646764,0.631955,0.546848,-0.008727,0.139225,0.464238,0.095301,0.910026,0.274171,-0.035885,-0.081271,-0.609026,0.290416,1.145015,0.076189,-0.050211,0.173622,-0.10273,0.081563,-0.26311,0.273861,0.640575,-0.529366,-0.064814,-0.126189,0.651274,0.050973,-0.588272,-0.08474,0.296692,0.746444,0.064172,-0.075513,-0.264548,0.343813,0.633145,-0.895489,0.48237,-0.961604,0.079797,-0.177856,0.783591,-0.232921,0.195083,-0.572718,0.128741,0.243497,0.384929,0.417505,0.389078,-0.078273,0.076579,-0.147265,0.055735,0.72316,0.149476,-0.785862,0.059903,0.491495,0.008462,0.26414,0.233666,-0.301515,-0.631521,-0.216402,0.000337,0.201215,0.686283,-0.44991,-0.468667,-0.148807,0.454872,-0.251726,-0.381843,0.740801,0.047709,0.261875,0.328339,0.449155,-0.746784,0.614152,-0.439847,0.393123,0.487923,-0.420936,0.316907,0.406955,-0.23812,0.127694,-0.508902,0.184567,0.367506,0.301398,-0.459783,0.269441,0.003876,-0.246342,0.40167,-0.005977,-0.022747,-0.311014,-0.145334,0.765235,0.359748,0.102194,-0.435697,0.243568,0.38334,0.282357,-0.857057,-0.367895,0.195357,-0.297623,-0.128924,-0.588836,0.091792,0.219812,-0.014878,0.582207,-0.041479,-0.328032,0.262317,-0.283182,-0.415969,-0.137839,-0.255672,-0.024226,0.92589,-0.200145,0.121445,0.609069,0.409984,0.266544,0.067213,0.760914,-0.132166,0.379301,0.274816,-0.498351,-1.182898,-0.437314,0.543169,-0.163434,0.157789,0.379634,0.366162,-0.528209,-0.404568,0.131411,-0.084018,0.458094,0.136039,-0.560245,1.104399,0.015471,-0.274156,-0.139152,-0.532252,1.000395,0.05223,-0.336412,2.858806,0.292073,-0.505123,-0.125639,-0.528936,-0.113324,0.559894,0.253012,-0.406573,-0.036457,-0.186097,-2.012433,0.350996,0.115555,-0.393161,-0.114788,-0.228742,-0.271938,-0.409634,-0.284322,-0.684934,0.248736,0.499936,-0.225719,-0.012959,-0.405655,0.587531,-0.12975,0.73205,-0.133194,0.027896,-0.752818,-0.204851,0.824072,0.260058,-0.041193,0.082104,0.360634,-0.183001,-0.149601,1.02941,-0.34026,0.485442,-0.347906,0.65163,0.081318,0.395741,-0.667851,-0.301977,0.023849,-0.546042,-0.189208,0.499515,-0.56946,-0.005725,0.58731,0.227737,-0.11464,0.836479,-0.11108,0.039808,0.212948,0.003946,0.311947,-0.104226,-0.152645,-0.07588,-0.443603,-0.690995,0.5637,0.362842,-0.008355,-0.619502,-0.519172,0.079569,-0.012055,-0.226433,-0.197385,0.076349,0.887509,-0.199224,0.189152,0.370053,-0.016252,0.04095,0.540584,0.022476,-0.89539,0.703288,-0.234887,-0.266262,-0.379109,0.166099,-0.125871,-0.966179,-0.204287,1.156931,-0.400043,0.190622,-0.316264,-0.287796,0.214263,0.289405,0.62934,0.448696,0.640105,0.229525,-0.227672,0.045887,0.345327,-0.060931,1.210493,0.222469,1.009345,0.076387,0.010478,-0.040406,0.296481,0.604571,-0.181672,-0.036949,0.129302,-0.116943,0.118876,0.215726,-0.496861,0.242137,-0.111106,0.225012,0.267288,-0.517544,-0.066322,-0.152625,-0.574932,0.486472,0.248472,0.160378,0.524943,0.695064,-0.309064,0.115739,0.602706,0.499806,0.116116,-0.229776,0.235418,0.169756,0.140619,-0.158813,-0.327554,0.471144,0.619871,-0.344533,-0.511594,-0.452695,-0.02769,0.069816,0.174441,0.314005,-0.023002,-0.722868,0.346391,0.284689,-0.245952,-0.298563,-0.393169,-0.642809,-0.042394,-0.45433,-0.13287,0.013168,-0.126427,0.267186,-0.331327,-0.280022,-0.576007,0.223661,0.045645,0.059177,-0.389933,-0.365972,-0.277524,-0.264547,-0.027986,0.546796,-0.086678,0.027024,-0.201344,0.85308,0.300601,0.206311,0.209232,0.407434,-0.279145,0.713712,0.100246,0.25919,-0.135071,0.102692,-0.432944,-0.178766,-0.563679,0.072287,-0.06057,-0.200482,0.316457,0.764198,0.453713,-0.376656,0.759194,-2.95688,-0.085011,-0.587951,-0.277082,0.570713,-0.323983,0.734727,0.445457,-0.438078,-0.509942,-0.149286,-0.135624,-0.317897,-0.116691,0.208374,0.593096,-0.130487,-0.035505,0.235881,0.177243,-0.02024,0.316018,0.13533,-0.038237,-0.334865,-0.261194,0.793838,0.31482,0.01806,0.076425,-0.584499,0.332502,0.391397,0.345847,0.951976,-0.378782,-0.07094,-0.092787,0.148784,-0.22873,-0.325966,0.00571,0.33515,0.464256,0.252271,1.121228,0.001736,0.218373,-0.078143,-0.500651,0.722513,-0.437303,0.264046,-0.013276,0.481954,-0.291381,0.182062,-0.336424,0.144196,0.294189,0.390059,0.203474,0.526969,0.196394,-0.006748,-0.371501,0.227491,1.15031,-0.127903,-0.120548,0.109119,0.279924,0.026226,0.280413,0.212739,-0.368002,-0.12312,-0.398959,-0.113201,-0.017459,0.687796,-0.332111,-0.084421,0.448106,0.868388,-0.07666,0.324594,-0.407628,-0.114554,0.329985,-0.074088,-0.279454,-0.342857,0.453994,0.776692,0.206599,0.499095,0.228425,0.299621,-0.115071,-0.349495,-0.568216,-0.696514,0.499988,0.479448,0.241467],"featureStd":[2.563339,1.423751,2.391731,2.456788,2.49136,1.400176,2.292005,2.056408,2.517597,2.521402,2.372317,2.559408,2.45855,2.427769,2.646003,2.431169,2.445219,2.565531,1.868967,2.321755,2.425466,2.340049,2.457585,1.771333,2.345232,2.428889,2.528439,2.373985,1.537687,2.612333,2.253525,2.297394,2.204188,2.561985,2.336477,2.420455,2.580578,2.46789,2.619453,2.796326,2.510579,2.602715,2.72787,2.353813,2.338165,2.356565,2.419166,2.427417,2.570777,2.364378,2.408781,2.458287,2.503559,2.226682,2.301121,2.605879,2.499298,2.316271,2.639385,2.400107,2.391448,2.495875,2.45487,2.638347,1.880394,2.506346,2.431533,2.508441,2.234693,2.330746,2.708151,2.218388,2.655668,2.427462,2.777788,2.465547,2.431291,2.468739,2.37641,1.478274,2.249462,2.473785,2.354831,2.457668,2.094002,2.46003,2.395645,2.392076,2.360279,2.303572,2.532654,2.423549,2.423603,2.638671,2.624535,2.138809,2.282007,2.484847,2.385271,2.566783,2.570779,2.502948,2.505383,2.631558,2.157913,2.546465,2.570621,2.436125,2.627695,2.559257,2.346806,2.628764,2.499247,2.21057,2.495273,2.389233,2.37116,2.536734,2.599883,2.537106,2.417322,2.255326,2.403314,2.570478,2.581508,1.873178,2.554678,2.586836,2.45965,2.797326,2.026586,2.436644,2.622622,2.402128,2.652706,2.795144,2.452358,2.44751,2.116027,2.573459,2.12307,2.109779,2.204842,2.367895,2.393208,2.535227,2.232362,2.345313,2.201099,2.283726,2.384232,2.233622,2.401564,2.523832,2.522131,2.548948,2.527035,2.461946,2.529115,2.117318,2.524763,2.483101,2.219972,2.302431,2.501387,2.487032,2.413064,2.277877,2.568198,2.394802,2.454288,2.473629,2.355906,2.596616,2.559672,2.453075,2.332952,2.402885,2.379027,2.406555,2.546166,1.821679,2.506817,2.187776,2.404567,2.475402,2.459834,2.533744,1.788142,2.165477,2.344194,2.567156,2.336603,2.284975,2.512372,2.063715,2.576186,2.409388,2.369309,1.99447,2.49246,1.984343,2.593194,2.806756,2.360273,2.491558,2.429415,2.390794,2.825627,2.139903,2.39918,1.94134,2.045114,2.538592,2.516611,2.487707,2.101606,2.6445,2.34486,2.906039,2.203376,2.479163,2.650604,2.487676,2.432678,2.266505,2.405849,1.927561,2.557759,2.378572,2.4282,2.785256,1.99228,2.510639,2.498752,2.511649,2.40036,2.519058,2.416581,2.38335,1.793607,2.460965,2.470414,2.278076,2.034328,1.855927,2.207901,2.387337,2.709988,2.456251,2.461658,2.589948,2.387838,2.056813,2.431863,2.47,2.278761,2.669976,2.184396,2.50537,2.497214,1.974584,1.817137,2.023247,2.003098,2.532809,2.258775,2.412525,2.615696,2.5519,1.873439,2.435615,2.401814,2.385866,2.525769,2.012105,2.435133,2.32145,0.887453,2.386744,2.237844,2.431284,2.587771,2.585727,2.48945,2.499703,2.090283,2.455885,1.996087,2.488211,2.747732,1.923782,2.593993,2.661347,2.645931,2.462117,2.211663,2.382341,2.744653,2.546234,2.705935,2.284904,2.726695,2.266985,2.79901,2.268376,2.282386,2.467811,2.228202,2.436372,2.486526,2.482785,2.427398,2.649818,2.184376,2.368342,2.676703,2.142772,1.839423,2.376691,2.400639,2.466783,2.326979,2.035177,2.282886,1.992425,2.795572,2.448023,2.499468,2.253212,2.567494,2.378672,2.410847,2.348834,2.572547,2.482672,2.468286,2.604575,1.825566,2.290337,2.460326,2.38687,2.611959,2.53012,2.397307,2.408846,2.497394,2.608252,2.529612,2.395428,2.277117,2.598885,2.582701,2.319226,2.42093,2.493205,2.36651,2.548446,2.709813,2.203807,1.960416,2.393026,2.563166,2.502107,1.979449,2.27817,2.535586,2.682707,2.023539,2.557767,2.106403,2.569568,1.918993,2.598817,2.63012,2.16562,2.372143,2.464213,2.507679,1.509507,2.459894,2.532621,2.611947,1.873226,1.451609,0.873068,1.507175,1.370198,1.337026,0.542871,1.168773,1.052381,1.361305,1.205763,1.316309,1.545503,1.373617,1.346212,1.378905,1.450366,1.372689,1.577827,1.472313,1.282475,1.226887,1.321852,1.38988,1.530707,1.278118,1.698951,1.457573,1.350219,0.734797,1.426415,1.116985,1.328873,1.425924,1.432487,1.15739,1.291616,1.533029,1.257384,1.439381,1.694039,1.472631,1.534007,1.703732,1.546579,1.081434,1.405172,1.447181,1.307805,1.37513,1.226256,1.32392,1.269335,1.378694,1.176068,1.189424,1.589318,1.472203,1.392489,1.54868,1.65596,1.398851,1.377896,1.456501,1.548904,0.863664,1.358282,1.377703,1.388008,3.07776,1.226226,1.648239,1.310923,1.235637,1.572233,1.535958,1.417871,1.339792,1.36561,1.372263,0.878759,1.27591,1.433725,1.43432,1.442349,0.728772,1.355112,1.495507,1.420357,1.271516,1.254941,1.499588,1.352564,1.184815,1.615235,1.523036,1.221451,1.340205,1.523329,1.326951,1.578474,1.429487,1.443677,1.585238,1.627051,1.288435,1.437949,1.587061,1.420339,1.542493,1.593181,1.287701,1.581101,1.384512,1.216999,1.350132,1.351405,1.410688,1.433633,1.492631,1.329771,1.356843,1.016007,1.424585,1.398494,1.395426,0.773151,1.570321,1.404215,1.362366,1.658203,1.163558,1.374075,1.557446,1.310952,1.602988,2.663496,1.358993,1.377992,1.6492,1.345186,0.918971,0.915915,1.045367,1.271844,1.3002,1.479599,1.175982,1.298311,1.200051,1.348142,1.146518,1.047058,1.23253,1.336482,1.552355,1.538983,1.456771,1.428194,1.493379,0.986838,1.444949,1.490811,1.378081,1.247501,1.462104,1.606163,1.309522,1.31344,1.546898,1.324669,1.347637,1.198871,1.283499,1.617502,1.514197,1.304956,1.103404,1.351248,1.244666,2.179316,1.539226,1.023734,1.483796,1.157546,1.278345,1.370669,1.415046,1.488564,0.707914,0.921098,1.218571,1.615242,1.301283,1.098433,1.422374,1.021985,1.54172,1.461086,1.194443,0.979504,1.346751,0.881797,1.710535,1.602752,1.296485,1.438342,1.240706,1.374595,3.686193,1.141107,1.361027,1.119765,1.137682,1.452947,1.294702,1.469604,0.963966,1.5049,1.188284,3.35446,1.063295,1.502364,1.475061,1.144183,1.36933,1.303373,1.399739,0.855995,1.400695,1.384467,1.284687,1.731605,1.044219,1.47373,1.386845,1.428565,1.420343,1.450092,1.594293,1.330814,0.733376,1.392799,1.513457,1.136232,1.060654,0.923388,1.140062,1.31058,1.471831,1.558134,1.498227,1.524653,1.247509,1.094212,1.474443,1.652402,1.043264,1.614091,1.154902,1.402944,1.701094,0.999415,1.541207,1.135141,1.48277,1.413376,1.173311,1.345356,1.500386,1.520166,0.828264,1.422589,1.302662,1.375878,1.472845,1.193459,1.307843,1.277927,0.568834,1.340484,1.163376,1.348385,1.494592,1.507615,1.492269,1.37488,2.265013,1.352972,0.908678,1.318431,1.572155,1.097068,1.396133,1.566597,1.588988,1.465789,1.039578,1.440679,1.518713,1.525624,1.71682,1.518885,1.563492,1.328193,1.627306,1.238113,1.335884,1.378961,0.926811,1.295457,1.496077,1.482566,1.416775,1.414534,1.110109,1.174102,1.434897,1.236167,1.50211,1.238025,1.343233,1.446214,1.283604,1.506051,1.294865,1.079944,2.804473,1.276789,1.491145,1.108357,1.50822,1.268057,1.277292,1.305346,1.551649,1.42735,1.434159,1.390352,0.944331,1.098727,1.325469,1.523672,1.560828,1.237817,1.348674,1.230404,1.359842,1.442747,1.311544,1.342781,1.081361,1.50474,1.457578,1.311738,1.380079,1.362,1.42215,1.404854,1.629569,1.616786,0.809509,1.231428,1.412988,1.59879,0.791528,1.143669,1.346903,1.593552,0.984954,1.561255,1.066744,1.434838,0.842069,1.504124,1.593388,1.207101,1.266067,1.488557,1.492854,0.744757,1.484142,1.426548,1.524166,0.975931],"weights":[-0.081457,0.243648,-0.225218,-0.169947,0.225016,0.170034,0.03206,0.054691,-0.018925,0.143766,-0.026322,0.055291,-0.047651,0.032654,0.205422,-0.070852,0.098549,-0.108047,-0.073795,-0.340322,-0.093948,-0.138501,0.007231,0.204754,0.026447,-0.016591,-0.056891,-0.196476,-0.014824,0.429538,0.247424,-0.06594,0.116814,0.157796,0.013285,0.157843,-0.024776,0.044651,-0.00997,0.202294,0.044879,0.137424,-0.123622,-0.067153,-0.138646,0.064572,0.078377,-0.053077,-0.038814,0.07101,-0.049879,-0.16953,-0.104095,0.022557,-0.001668,0.011751,0.028149,-0.102688,0.036642,-0.168124,-0.020827,0.01907,0.097448,-0.187312,-0.126548,0.082511,0.054171,0.089187,-0.095548,-0.133465,-0.039426,0.156973,0.021203,-0.125457,0.114095,0.081166,0.117216,-0.145833,-0.09563,-0.103718,-0.058805,0.014085,-0.148769,-0.097828,-0.027833,-0.067145,-0.009173,0.116523,0.055617,-0.06809,0.004511,0.169872,-0.109988,-0.161624,0.12829,-0.075347,0.136846,0.00019,0.073358,-0.064854,-0.099912,0.435489,-0.107479,-0.075336,0.003926,-0.002231,0.183309,0.314958,0.071703,-0.138815,0.122821,-0.120271,0.070813,0.132543,0.143431,-0.032286,0.055921,0.064292,-0.019539,0.000705,0.027086,0.674251,-0.044296,0.100988,-0.143357,-0.194966,0.08067,-0.180376,0.029048,-0.09401,0.062155,0.061872,0.159053,0.035346,0.038791,0.298283,0.158273,0.037271,0.067471,0.04207,0.082619,-0.0774,0.056161,0.008148,0.094685,-0.071021,-0.050006,0.008676,-0.098756,-0.07124,-0.004173,-0.092651,-0.095455,0.056193,0.046074,0.047616,-0.119663,-0.049501,0.023162,-0.394534,-0.135531,0.102286,-0.251315,-0.10251,0.037699,0.188043,-0.000192,0.065561,-0.233373,-0.027913,0.063757,-0.201134,0.146926,-0.124252,0.314485,0.088858,-0.1119,-0.126078,0.066581,-0.058273,-0.197029,0.124338,-0.214286,-0.051568,0.093482,-0.162371,0.099643,0.095765,-0.108806,0.07045,0.060139,0.080126,-0.102542,-0.147891,0.094386,0.16546,-0.055066,0.025554,0.099738,-0.365377,-0.156143,-0.283326,-0.071636,0.005434,-0.117091,0.06598,-0.099219,0.016595,-0.414636,0.026287,0.114357,-0.152953,0.273808,0.011443,-0.245307,-0.094156,-0.151094,-0.263426,0.074924,0.012132,-0.115646,0.019402,-0.035212,-0.146809,-0.074407,-0.129001,-0.092195,0.071077,-0.387747,-0.021007,0.089693,-0.086846,0.210338,0.077302,-0.132677,0.004301,-0.001034,-0.099452,-0.130119,-0.034428,-0.112476,-0.022546,-0.085149,0.137015,0.312603,-0.015583,-0.102079,0.177807,0.031654,0.037381,-0.030275,0.164051,-0.036915,0.124149,0.095516,0.024521,-0.089554,-0.058733,-0.143653,-0.095884,-0.137739,0.12333,0.235751,-0.17705,-0.039127,-0.054714,0.137955,-0.095921,0.133185,-0.38074,0.106537,-0.087855,-0.026327,0.075363,-0.089438,-0.062773,-0.064974,0.11573,0.097177,-0.001606,0.035532,0.08109,0.049199,-0.227145,-0.065545,-0.060277,0.022414,-0.006485,-0.031386,0.119625,0.102448,-0.188357,-0.063515,0.042441,0.016031,0.29159,0.069047,0.007328,0.031445,-0.176366,-0.08358,-0.037083,0.06106,-0.120694,0.187841,0.002445,-0.275092,0.141698,-0.015408,0.193978,-0.155578,0.155919,-0.035422,-0.114471,0.236957,0.167128,0.127266,-0.240741,0.083647,0.090334,0.052485,-0.252682,-0.128539,-0.398054,0.151615,-0.036786,0.352297,0.005128,0.191412,-0.025162,-0.008338,0.147737,-0.10208,-0.104898,0.313876,0.134905,-0.15745,0.182032,0.091668,0.119143,0.007621,0.004981,0.200833,-0.008415,0.383005,0.146449,-0.036689,-0.184246,0.209787,-0.040478,0.167321,0.09463,-0.24097,-0.18644,0.108458,-0.07613,0.076612,0.119228,-0.038336,-0.01566,-0.080516,-0.087887,0.17265,0.026148,-0.283115,-0.014933,0.219139,0.070329,0.012642,0.040184,0.144651,0.169792,-0.583839,-0.140227,-0.016112,-0.224718,-0.089589,0.114248,-0.110299,-0.28979,0.038565,-0.061427,-0.01873,0.04439,-0.056265,-0.035865,0.048661,0.117036,-0.012862,0.130876,0.117224,-0.171824,0.038375,-0.031332,-0.086314,-0.010104,0.050006,-0.139123,0.258927,-0.149445,-0.013002,-0.054082,-0.001516,-0.163914,0.066577,-0.329434,-0.056079,0.199027,0.218349,-0.143964,0.028616,-0.01767,0.255606,0.019351,-0.237984,-0.238015,-0.014418,-0.079807,0.038086,-0.090441,-0.170147,-0.197393,0.044074,0.156245,0.025269,0.105257,0.126224,0.067614,-0.116274,0.050055,-0.036691,-0.076149,0.254499,-0.024493,0.063384,-0.04706,0.029765,0.168353,0.005363,-0.100667,0.219408,0.094198,0.178848,-0.305266,0.018123,0.174171,-0.055421,-0.115201,-0.203174,0.015376,-0.073919,0.003862,-0.268183,0.041964,-0.040446,-0.302749,0.22499,0.26372,0.110751,0.101927,-0.423837,0.121622,0.060784,0.128127,0.0856,-0.013953,0.079741,0.350311,0.086559,0.00716,-0.274383,0.008423,-0.175252,-0.033616,0.063535,0.058031,0.186615,0.101766,0.097673,0.042975,0.014053,0.042877,-0.063415,-0.008634,0.088639,-0.124177,-0.15965,-0.232323,-0.092798,-0.076249,0.008717,0.040389,0.110181,-0.149078,0.064759,-0.069419,-0.189416,-0.016244,-0.266373,-0.118572,-0.377839,-0.123671,0.09747,-0.085846,0.095556,-0.525107,-0.090147,0.256864,-0.074322,0.016612,0.096516,0.04498,-0.080052,0.024206,0.106356,0.038869,-0.021533,-0.150991,-0.058703,0.233279,-0.182667,0.039223,-0.337572,-0.083162,0.190308,0.11053,-0.094335,0.148717,0.280603,-0.071604,0.013325,-0.093145,0.176479,-0.135395,0.224458,-0.011949,0.000563,0.099575,-0.145454,-0.161416,0.163031,-0.01824,0.10996,-0.075753,0.106943,0.010894,-0.130705,0.053814,0.129077,0.164393,0.010224,-0.075681,0.289722,0.103859,0.118684,0.116485,0.088848,-0.287096,0.237279,0.121324,-0.216554,-0.037481,0.103655,0.176615,-0.05177,-0.004725,0.044608,0.236358,-0.04354,0.092989,0.093324,-0.174783,0.079028,0.127601,0.146458,-0.19123,0.014011,-0.101307,-0.038114,-0.172168,0.071626,0.086095,-0.147336,-0.000212,0.131615,0.120906,-0.048134,0.102588,0.238975,0.313415,0.178945,-0.014734,-0.198558,-0.024199,-0.353183,-0.105753,-0.146657,-0.11517,0.185532,0.037829,-0.080533,-0.192221,-0.110014,-0.02279,0.073505,-0.206699,-0.318547,-0.034564,-0.046703,0.061234,0.189022,-0.021279,0.005977,-0.009736,-0.093911,0.031461,0.081592,0.146584,0.00192,0.032365,0.077123,-0.012098,-0.051313,0.204698,0.070688,-0.11474,0.253649,-0.002112,0.219313,0.042202,0.365921,-0.154353,-0.485518,0.091765,-0.030512,0.469405,0.085303,0.107868,0.032859,-0.070756,-0.081762,0.085716,-0.088679,0.116826,-0.041618,0.019496,0.288136,-0.076379,0.290843,0.059277,-0.221325,-0.060858,-0.128098,0.329421,0.006754,-0.216244,-0.010112,0.014993,-0.121952,-0.124906,0.014636,0.036092,-0.050246,0.035799,0.113942,-0.080357,0.000055,-0.28208,0.343512,-0.100207,0.060561,0.030195,0.106094,0.044598,0.138056,-0.111851,0.316635,0.144566,0.315448,-0.223404,-0.146216,0.144168,0.031196,-0.035985,-0.021097,-0.150297,-0.066331,-0.104001,0.118236,0.101161,-0.112572,-0.196233,0.166055,-0.04059,0.100159,-0.041086,0.082764,0.09781,-0.167007,-0.014734,0.108889,-0.017342,0.107201,-0.133385,0.019889,-0.053159,-0.081804,0.077919,-0.089554,-0.032317,0.184395,-0.108852,0.154564,-0.264223,0.081922,-0.065863,0.095774,-0.283429,0.004652,-0.118008,-0.003448,-0.046645,0.016908,-0.178154,-0.241081,-0.003112,0.103053,-0.03818,-0.016019,0.256059,0.093395,0.085516,-0.25439,-0.097247,-0.224456,-0.23207,0.143807,0.096084,0.016272,0.221791,-0.018835,0.142323,0.170375,-0.138686,0.243539,0.052488,0.077392,-0.06885,0.23759,-0.147734,-0.174491,-0.240178,-0.063987,-0.035578,-0.130591,0.045047,0.507429,0.015757,0.02958,-0.160653,0.036911,-0.224094,-0.151191,0.226922,-0.113722,0.232051,-0.037799,-0.251835],"bias":0.032176,"trainedOn":"11405 images (see eval/fetch-train.mjs sources)"} \ No newline at end of file +{"backbone":"dinov2-small","pooling":"cls+mean","dims":768,"featureMean":[-0.587983,-0.092719,0.394302,-0.189642,0.388641,-0.033666,-0.038264,-0.265355,0.310974,0.415185,-0.143288,0.239909,-0.445038,0.150081,0.845331,0.061388,-0.206875,-0.807566,0.312548,-0.765553,0.56252,-0.324162,-0.229339,-0.209884,-0.224867,0.204828,0.048328,-0.508795,0.79383,-0.11799,-0.299219,-0.613977,0.026339,0.134155,0.487839,0.530239,-0.530911,0.666636,0.232583,0.377994,-0.186337,0.891138,-0.263596,0.16109,-0.354329,-0.620778,-0.802754,-0.084241,0.956127,0.37435,0.21299,-0.116882,0.35083,-0.28728,-0.696914,0.170893,0.496903,0.423996,-0.399705,-0.787948,0.762486,0.549935,0.111997,-0.534622,-0.327134,0.391377,-0.274161,0.109633,0.871672,-0.069691,-0.55163,0.282727,-0.606418,0.022404,0.482814,-0.533688,-0.315956,0.082705,-0.447206,-0.025683,0.112756,-0.411515,0.075419,-0.183209,-0.99214,-0.222173,-0.423954,-0.18454,-0.431389,0.303616,0.341449,-0.276174,-0.319056,-0.393429,0.768625,-0.453341,0.935654,0.066718,0.044106,-0.4745,-0.465957,0.893373,-0.365904,-0.569144,0.040802,0.324404,-0.345081,-0.378371,0.434484,-0.247727,-0.004269,0.076666,0.478611,0.183816,0.02107,-0.362979,-0.123031,0.313791,-0.413011,-0.278079,0.243207,1.266304,-0.110148,0.415723,0.818931,-0.718013,0.341679,-0.452217,-0.247551,0.51039,0.197883,-0.21618,-0.095825,0.201299,0.067469,1.058022,-0.298279,0.184597,-0.54851,0.074582,-0.659026,0.137012,-0.096435,-0.568409,0.061243,-0.307524,0.113185,0.757938,0.132918,0.268549,0.196498,-0.77442,-0.178449,0.179457,-0.49611,-0.876852,0.89069,-0.518969,0.202261,-0.448148,-0.202792,-0.452136,-0.517045,-0.159473,0.252558,-0.273805,-0.087535,-0.232192,-0.435008,0.453142,0.157842,0.185039,0.18848,0.287879,0.436455,-0.424289,-0.146985,-0.255118,0.303675,0.701792,0.437149,0.350629,0.051682,-0.013165,-0.016641,-0.086415,0.520957,0.273907,0.366193,-0.331766,-0.084164,-0.169668,-0.232773,-0.197006,0.027404,-0.048352,0.703083,0.396182,-0.434081,-0.359488,0.227385,-1.020634,0.353591,-0.246075,0.105183,0.068182,0.504806,-0.359261,0.285575,0.095616,0.664494,-0.502636,0.351092,-0.235489,-0.124066,-0.194873,-0.334487,-0.130378,-0.045695,-0.249565,0.268702,-0.370594,-0.841824,-0.434062,-0.332517,-0.025374,-0.047472,0.354772,-0.625477,0.081205,0.063695,-0.649058,-0.466002,0.378199,0.144447,0.082728,0.039262,-0.475292,-0.345424,-0.138671,0.359658,-0.024443,-0.105829,-0.331599,0.475507,-0.20779,-0.038307,-0.429527,-0.328901,-0.06825,-0.160724,0.301166,0.254395,0.231182,-0.532069,0.001867,0.560268,0.319338,0.20195,-0.39359,0.069279,0.245682,-0.134002,-0.2986,0.059331,-0.445129,-0.333131,-0.378561,-0.013234,-0.138122,0.260671,-0.430844,-0.37807,0.432243,0.580424,0.201004,0.081668,0.935913,-0.078767,-0.240336,-0.378279,-0.310155,0.133401,-0.366796,0.411828,0.138138,-0.598312,-0.185938,0.012227,-0.353638,-0.421633,-0.648122,0.628799,0.542598,-0.012437,0.13264,0.457364,0.10003,0.905239,0.28324,-0.036371,-0.076305,-0.61871,0.289851,1.147799,0.079263,-0.045596,0.171377,-0.106715,0.085412,-0.26169,0.27537,0.637182,-0.536792,-0.060725,-0.134586,0.645557,0.057494,-0.5913,-0.089681,0.29659,0.736611,0.060277,-0.079664,-0.264166,0.344317,0.634431,-0.89363,0.475013,-0.954598,0.085713,-0.170527,0.788463,-0.233769,0.19427,-0.558048,0.126191,0.234602,0.381654,0.414405,0.38562,-0.085558,0.074661,-0.154093,0.052504,0.721357,0.147557,-0.78888,0.056354,0.49901,0.010862,0.271791,0.230593,-0.298663,-0.632756,-0.216586,0.002221,0.199643,0.684795,-0.449831,-0.472225,-0.1509,0.452259,-0.240623,-0.388407,0.733192,0.050799,0.260977,0.328442,0.45146,-0.745397,0.620809,-0.438192,0.39415,0.484327,-0.412363,0.316725,0.404319,-0.231097,0.122584,-0.510217,0.183483,0.367728,0.303388,-0.45853,0.269985,0.003459,-0.249836,0.400693,-0.004128,-0.026202,-0.311042,-0.1461,0.763555,0.361738,0.103526,-0.437528,0.244447,0.379695,0.285148,-0.859201,-0.362178,0.193768,-0.293401,-0.125626,-0.589981,0.094642,0.216282,-0.017544,0.584258,-0.041289,-0.327342,0.261626,-0.279016,-0.416211,-0.13385,-0.260638,-0.026482,0.923087,-0.203345,0.127115,0.604684,0.410305,0.267513,0.071988,0.764639,-0.133787,0.377714,0.27751,-0.490127,-1.184241,-0.434259,0.542424,-0.160576,0.150383,0.380716,0.368536,-0.52838,-0.407997,0.128649,-0.087364,0.459679,0.134656,-0.557326,1.100782,0.011832,-0.270707,-0.137308,-0.532059,1.001849,0.048087,-0.334515,2.874155,0.294517,-0.501903,-0.124941,-0.530232,-0.114361,0.562069,0.254174,-0.404896,-0.033712,-0.185425,-2.013644,0.350097,0.116782,-0.394004,-0.114487,-0.227272,-0.273108,-0.406168,-0.2849,-0.688496,0.246693,0.501182,-0.227534,-0.013154,-0.405316,0.58056,-0.127489,0.732364,-0.132917,0.024531,-0.758148,-0.206127,0.825895,0.262741,-0.032532,0.080884,0.360359,-0.182855,-0.15012,1.031795,-0.339127,0.485169,-0.350595,0.655106,0.081617,0.400448,-0.666405,-0.302527,0.026017,-0.544615,-0.189246,0.502186,-0.567466,-0.001927,0.583477,0.228605,-0.114318,0.838017,-0.110551,0.03652,0.216428,0.004402,0.315654,-0.106408,-0.15432,-0.081938,-0.439604,-0.689582,0.563589,0.36382,-0.007791,-0.620244,-0.52205,0.081226,-0.013781,-0.229107,-0.192453,0.07465,0.892625,-0.200126,0.192319,0.369381,-0.016799,0.038764,0.544828,0.021511,-0.890784,0.706359,-0.235727,-0.268535,-0.380212,0.159534,-0.119877,-0.965391,-0.201247,1.159864,-0.402514,0.194807,-0.320022,-0.292198,0.209871,0.289648,0.630593,0.450597,0.633153,0.229339,-0.22289,0.04341,0.338601,-0.066133,1.214031,0.220692,1.010021,0.075194,0.008285,-0.039099,0.292982,0.606392,-0.181186,-0.036813,0.128887,-0.116393,0.116725,0.216978,-0.492287,0.23961,-0.108479,0.22425,0.265429,-0.523265,-0.06604,-0.149386,-0.573741,0.489389,0.251118,0.157198,0.52256,0.692385,-0.305236,0.119704,0.600942,0.501258,0.115964,-0.231875,0.232839,0.167362,0.139544,-0.160362,-0.327954,0.470619,0.621312,-0.339612,-0.510728,-0.45267,-0.02433,0.068699,0.17591,0.315744,-0.021455,-0.724132,0.341431,0.285476,-0.25043,-0.296365,-0.395616,-0.64492,-0.039092,-0.447341,-0.140218,0.008939,-0.125355,0.267919,-0.328095,-0.278379,-0.572667,0.224845,0.048199,0.055832,-0.383565,-0.363225,-0.279283,-0.265221,-0.035583,0.549102,-0.084022,0.028418,-0.202815,0.85552,0.299286,0.20682,0.208395,0.411967,-0.278559,0.715035,0.100997,0.254952,-0.132297,0.103246,-0.436253,-0.177489,-0.568793,0.071066,-0.062729,-0.202314,0.31727,0.759344,0.458324,-0.377254,0.761267,-2.95807,-0.083418,-0.585931,-0.272971,0.568492,-0.327452,0.72879,0.447096,-0.435194,-0.512283,-0.148515,-0.135678,-0.317451,-0.115566,0.208454,0.59576,-0.134837,-0.039589,0.235358,0.182664,-0.023048,0.31801,0.134286,-0.04095,-0.340354,-0.260574,0.79711,0.316752,0.01845,0.077244,-0.585857,0.332858,0.394962,0.346833,0.948788,-0.385549,-0.069139,-0.096897,0.144744,-0.227362,-0.329301,0.001792,0.336698,0.461179,0.251013,1.126936,0.001607,0.217229,-0.077913,-0.500903,0.719325,-0.435754,0.26652,-0.007077,0.485767,-0.292279,0.180829,-0.327401,0.141892,0.288011,0.386972,0.207034,0.523559,0.190497,-0.008324,-0.372458,0.224187,1.152071,-0.128186,-0.122074,0.109735,0.281558,0.026409,0.281797,0.210634,-0.369507,-0.124973,-0.401443,-0.107823,-0.017566,0.686432,-0.333538,-0.084132,0.447486,0.864905,-0.068245,0.321534,-0.406834,-0.111897,0.331501,-0.073415,-0.278508,-0.341317,0.458413,0.775207,0.206287,0.494619,0.23297,0.294425,-0.113909,-0.34484,-0.568427,-0.696782,0.497278,0.479677,0.24137],"featureStd":[2.561834,1.422045,2.390683,2.455845,2.498868,1.400288,2.292605,2.054632,2.516192,2.519318,2.373461,2.55768,2.458847,2.42658,2.64219,2.428844,2.442929,2.565031,1.867846,2.320568,2.423752,2.342043,2.459407,1.771643,2.347715,2.430982,2.526659,2.37341,1.536217,2.611555,2.252322,2.299921,2.201355,2.559766,2.338896,2.417576,2.581753,2.471638,2.618584,2.795142,2.514376,2.600352,2.728068,2.358499,2.336237,2.360277,2.419198,2.429968,2.569709,2.365349,2.411666,2.455399,2.505372,2.225335,2.30211,2.606061,2.500696,2.317909,2.637736,2.401912,2.388994,2.498507,2.454034,2.635564,1.880752,2.502679,2.429706,2.507705,2.237563,2.328314,2.708976,2.217953,2.652778,2.429553,2.775541,2.460893,2.430673,2.468799,2.377319,1.480456,2.253471,2.469583,2.353218,2.460998,2.0923,2.465382,2.39566,2.391249,2.36447,2.305029,2.52972,2.423506,2.425297,2.636192,2.624408,2.134456,2.282276,2.485423,2.384751,2.566366,2.568755,2.502039,2.506125,2.633218,2.159076,2.543867,2.570671,2.440968,2.628476,2.558618,2.345322,2.632064,2.499577,2.21125,2.493998,2.388595,2.370417,2.53829,2.602286,2.537619,2.416484,2.251883,2.402673,2.568595,2.579779,1.871144,2.553236,2.586631,2.458588,2.796571,2.025113,2.442224,2.620515,2.399947,2.652277,2.79475,2.448821,2.448327,2.11483,2.571327,2.125812,2.107695,2.206241,2.368771,2.394829,2.536811,2.232338,2.345903,2.204068,2.285338,2.386088,2.231653,2.39983,2.525618,2.523068,2.54716,2.5257,2.459661,2.531917,2.116363,2.526736,2.484046,2.223297,2.302373,2.499289,2.486923,2.41404,2.27625,2.568128,2.393313,2.454863,2.475635,2.354954,2.598909,2.560354,2.454201,2.331899,2.404516,2.379647,2.408879,2.547073,1.820617,2.506772,2.187904,2.40309,2.472838,2.459793,2.536475,1.787128,2.164307,2.341191,2.566931,2.337805,2.283661,2.514598,2.063208,2.575574,2.40915,2.369615,1.994183,2.487713,1.982495,2.595576,2.807398,2.361652,2.48869,2.427996,2.39189,2.829984,2.139172,2.39805,1.938764,2.046086,2.541034,2.514396,2.489578,2.098175,2.643816,2.342405,2.90522,2.203553,2.479865,2.647996,2.483752,2.433466,2.270442,2.406506,1.930524,2.55746,2.379928,2.429583,2.780921,1.987773,2.508722,2.499204,2.510977,2.402488,2.519829,2.42129,2.385726,1.792068,2.459731,2.470335,2.278901,2.032785,1.857375,2.209386,2.386591,2.708057,2.453566,2.461822,2.590727,2.389142,2.054662,2.433644,2.472662,2.280749,2.667452,2.184248,2.504049,2.499529,1.97515,1.821566,2.024618,2.001916,2.533171,2.256213,2.410976,2.612612,2.550759,1.871886,2.43615,2.403797,2.385618,2.526036,2.011599,2.432103,2.317323,0.887533,2.385603,2.235537,2.428597,2.589343,2.587257,2.48827,2.496602,2.090718,2.453372,1.993319,2.488662,2.748531,1.925586,2.591217,2.662918,2.647429,2.462424,2.211194,2.389593,2.745955,2.548748,2.705386,2.284124,2.724547,2.266043,2.796422,2.266781,2.286051,2.463887,2.226559,2.436171,2.484635,2.486716,2.424893,2.648228,2.182348,2.364377,2.676337,2.142571,1.840977,2.376482,2.399639,2.468771,2.326523,2.037046,2.282034,1.992705,2.791123,2.448546,2.499649,2.260618,2.565664,2.377358,2.408921,2.347345,2.57172,2.483776,2.472178,2.608919,1.823648,2.287316,2.45982,2.386528,2.612407,2.529125,2.397994,2.408022,2.494489,2.606218,2.529131,2.40065,2.277203,2.598378,2.582299,2.316486,2.419257,2.492198,2.365018,2.551012,2.707788,2.203086,1.96184,2.39073,2.558062,2.505955,1.980763,2.277999,2.534128,2.684053,2.020137,2.560923,2.109969,2.568058,1.916963,2.594652,2.630302,2.162426,2.373088,2.462847,2.50928,1.506977,2.462292,2.531816,2.616051,1.871839,1.452161,0.872587,1.507225,1.370202,1.338823,0.543177,1.169996,1.054727,1.361056,1.204125,1.316505,1.547392,1.376016,1.347556,1.376801,1.45055,1.373449,1.578087,1.476559,1.283857,1.226669,1.323554,1.392004,1.536737,1.279309,1.701357,1.458121,1.349809,0.735542,1.426756,1.116089,1.329462,1.429293,1.43319,1.159629,1.293985,1.535102,1.259274,1.440889,1.693411,1.475074,1.534668,1.702153,1.549055,1.082541,1.408302,1.447772,1.3103,1.374902,1.228022,1.328762,1.267616,1.378721,1.176315,1.194149,1.587577,1.473816,1.39478,1.548567,1.659987,1.399,1.380322,1.457104,1.547929,0.864346,1.359031,1.378839,1.388618,3.085878,1.225834,1.649172,1.310522,1.234827,1.575804,1.535303,1.419898,1.339671,1.370799,1.37112,0.879984,1.276074,1.432355,1.434526,1.441988,0.729237,1.358104,1.496217,1.419572,1.27503,1.256214,1.497542,1.352463,1.18656,1.613328,1.523141,1.222087,1.342013,1.523242,1.326078,1.581114,1.430939,1.445721,1.584596,1.634538,1.289762,1.436828,1.587677,1.421988,1.544977,1.593701,1.289273,1.58146,1.385721,1.217832,1.352298,1.355457,1.410991,1.432303,1.493075,1.331738,1.358158,1.014766,1.425015,1.398869,1.395782,0.772259,1.567701,1.405189,1.362699,1.658771,1.165684,1.377166,1.556322,1.310834,1.604604,2.662218,1.358595,1.378,1.649346,1.344514,0.921926,0.917299,1.04533,1.271904,1.301415,1.482285,1.17711,1.300727,1.199857,1.349228,1.14877,1.047073,1.232427,1.338383,1.552197,1.538257,1.457324,1.428545,1.495957,0.989359,1.44854,1.490703,1.377742,1.247757,1.462968,1.605342,1.311527,1.313466,1.549439,1.326345,1.346502,1.200776,1.284496,1.620471,1.514786,1.307519,1.103011,1.355249,1.245972,2.177368,1.541674,1.024911,1.484167,1.157854,1.280689,1.369663,1.415599,1.492287,0.712055,0.921843,1.218416,1.614414,1.302645,1.098697,1.427693,1.023394,1.542137,1.461199,1.197848,0.983533,1.34464,0.882563,1.713257,1.603942,1.297711,1.439877,1.240872,1.374929,3.684683,1.145351,1.362156,1.119614,1.139362,1.452488,1.296581,1.470987,0.964279,1.503848,1.187412,3.355601,1.066396,1.504598,1.477297,1.143878,1.369842,1.305019,1.39983,0.856532,1.403241,1.384157,1.28627,1.730042,1.043177,1.473269,1.387802,1.429021,1.424489,1.451763,1.594934,1.332823,0.734704,1.392914,1.513649,1.137301,1.060532,0.925667,1.141459,1.311028,1.471312,1.557269,1.498929,1.525939,1.248663,1.094747,1.47478,1.65567,1.046566,1.613697,1.157278,1.403279,1.699626,1.000017,1.54127,1.133672,1.483768,1.414942,1.172206,1.347197,1.498342,1.519433,0.827474,1.426639,1.303584,1.378208,1.473475,1.196738,1.308836,1.277364,0.569424,1.341095,1.165688,1.347046,1.496085,1.507624,1.492857,1.375015,2.267656,1.353204,0.911314,1.318694,1.571646,1.099897,1.395109,1.56814,1.592256,1.467917,1.039621,1.445626,1.519522,1.526648,1.716861,1.519342,1.566406,1.327621,1.625508,1.23993,1.338159,1.377863,0.926316,1.294209,1.497871,1.48406,1.415054,1.413722,1.10918,1.176992,1.43445,1.237394,1.504274,1.237922,1.347388,1.448885,1.28429,1.515194,1.295917,1.080335,2.804311,1.277148,1.490494,1.110168,1.506405,1.269494,1.277083,1.305852,1.5509,1.430173,1.436294,1.396137,0.944583,1.098972,1.327319,1.525312,1.563667,1.240663,1.349896,1.230954,1.358437,1.442343,1.312561,1.344786,1.083179,1.504459,1.457613,1.311073,1.378777,1.36257,1.423291,1.406484,1.628916,1.614968,0.809788,1.232126,1.41235,1.600533,0.791828,1.14362,1.347152,1.593369,0.984898,1.563532,1.067413,1.434744,0.842035,1.503035,1.594966,1.208143,1.268239,1.48773,1.493078,0.745314,1.485793,1.428905,1.526861,0.976764],"weights":[-0.097072,0.19306,-0.184362,-0.15031,0.166514,0.107674,0.028361,0.039481,-0.01109,0.144403,-0.058683,-0.015751,-0.008708,-0.003857,0.175639,-0.081848,0.113358,-0.089987,-0.118692,-0.341865,-0.094175,-0.120852,0.003228,0.154982,0.049243,-0.056333,-0.047618,-0.166201,-0.009219,0.371226,0.188744,-0.067514,0.122455,0.141829,0.015207,0.156363,-0.015559,0.017052,-0.006298,0.224417,0.038428,0.158159,-0.091369,-0.069582,-0.126978,0.066375,0.080222,-0.032273,0.003752,0.042753,0.032654,-0.163039,-0.130017,0.072742,0.011452,0.011331,0.00449,-0.136285,0.083201,-0.134615,-0.005328,-0.031074,0.123033,-0.199169,-0.146991,0.081369,0.067946,0.073098,-0.071373,-0.145334,-0.047007,0.101923,-0.000701,-0.10651,0.109453,0.110266,0.130024,-0.119307,-0.088475,-0.097123,-0.075208,-0.003068,-0.146707,-0.056277,-0.060543,-0.099993,-0.058688,0.092086,0.067651,-0.020337,0.023547,0.157588,-0.048594,-0.138423,0.117645,-0.092365,0.10669,0.015901,0.069764,-0.017093,-0.146524,0.35092,-0.081452,-0.059533,0.007325,-0.00217,0.178472,0.271484,0.06654,-0.134717,0.126018,-0.085572,0.116689,0.164805,0.059648,-0.0419,0.019754,0.050642,-0.038826,0.012744,-0.007838,0.593793,-0.05339,0.138741,-0.133125,-0.149724,0.08673,-0.132043,0.024258,-0.075256,0.050882,0.052927,0.112779,0.02458,0.051558,0.262673,0.111203,0.029126,0.042704,0.003633,0.045733,-0.021294,0.048219,0.033469,0.054829,-0.085403,-0.027696,-0.00027,-0.05064,-0.077239,0.009905,-0.048363,-0.086847,0.082732,0.024406,-0.016127,-0.121162,-0.045634,0.035232,-0.353151,-0.100564,0.098956,-0.228044,-0.089278,0.027704,0.172635,-0.021446,0.042274,-0.239785,0.01433,0.046282,-0.199385,0.099648,-0.108084,0.309851,0.079432,-0.125204,-0.118178,0.044108,-0.032447,-0.150449,0.07807,-0.197083,-0.060639,0.090402,-0.097146,0.107024,0.082933,-0.078815,0.03962,0.098968,0.04183,-0.06488,-0.151078,0.094882,0.131082,-0.013658,0.039248,0.091381,-0.350069,-0.131769,-0.21428,-0.048565,-0.021199,-0.081736,0.061555,-0.016995,0.059957,-0.380159,0.019817,0.092848,-0.164034,0.273597,-0.011759,-0.226637,-0.125149,-0.156435,-0.24346,0.057148,0.057918,-0.074098,0.019751,-0.045504,-0.091951,-0.054846,-0.123998,-0.076798,0.071902,-0.329733,-0.060959,0.086774,-0.10116,0.157173,0.048471,-0.082709,0.034435,-0.006048,-0.098355,-0.098518,0.002027,-0.074735,-0.000845,-0.043395,0.143524,0.279959,-0.016264,-0.089616,0.114666,0.011521,0.038134,-0.030831,0.168181,-0.032792,0.099867,0.061432,0.027961,-0.056042,-0.055442,-0.143646,-0.109869,-0.111818,0.088607,0.179581,-0.168761,-0.057515,-0.009393,0.092078,-0.058322,0.114666,-0.276381,0.167617,-0.036802,-0.057023,0.097913,-0.055941,-0.097142,-0.026678,0.096616,0.104968,0.033502,0.012232,0.058505,0.018611,-0.179191,-0.053434,-0.031904,-0.014721,-0.028263,-0.060583,0.091302,0.094526,-0.128316,-0.011097,0.058216,0.010939,0.269197,0.093505,0.009446,-0.002175,-0.130976,-0.051779,-0.033583,0.055865,-0.138626,0.179282,-0.006925,-0.24442,0.105997,0.013539,0.227686,-0.096692,0.118987,-0.061758,-0.096694,0.189383,0.162335,0.108511,-0.218327,0.08413,0.089077,0.052316,-0.22305,-0.151743,-0.331709,0.130491,-0.073793,0.274218,-0.014877,0.1736,-0.031174,-0.045115,0.122128,-0.059259,-0.0899,0.288491,0.089213,-0.15232,0.165864,0.100645,0.052391,-0.013292,0.05702,0.174673,-0.024671,0.351073,0.108099,-0.002336,-0.156862,0.216984,-0.048774,0.157513,0.053763,-0.159928,-0.137767,0.091752,-0.103318,0.06551,0.088805,-0.007215,-0.027185,-0.050042,-0.084199,0.133141,0.016683,-0.213932,0.030944,0.152545,0.091579,0.020378,0.030205,0.134523,0.147177,-0.564414,-0.075942,0.016463,-0.206094,-0.067838,0.091146,-0.148197,-0.236049,0.039831,-0.046734,-0.049563,0.01655,-0.100895,-0.024408,0.069524,0.115105,-0.010565,0.114909,0.10546,-0.160489,0.004946,0.001579,-0.060728,0.015031,0.025442,-0.107012,0.25658,-0.126834,-0.037518,-0.090202,0.021356,-0.160755,0.061417,-0.273267,-0.015481,0.209179,0.215738,-0.119188,-0.017547,-0.004471,0.24982,-0.013806,-0.197659,-0.235679,-0.014675,-0.067084,0.018462,-0.079697,-0.157009,-0.158146,0.031753,0.186146,0.023052,0.087434,0.105034,0.045401,-0.120398,0.060664,-0.031498,-0.021086,0.221019,-0.02374,0.086524,-0.036572,0.028561,0.11351,0.014128,-0.078828,0.178417,0.045343,0.164575,-0.269871,0.04447,0.169554,-0.048118,-0.184102,-0.217066,-0.001673,-0.024993,0.023308,-0.245819,0.062844,0.006175,-0.223732,0.209285,0.239877,0.10002,0.068498,-0.415485,0.057018,0.023519,0.132025,0.052511,0.011979,0.039957,0.305784,0.093267,0.008262,-0.28511,-0.007338,-0.121181,-0.011539,0.037576,0.036466,0.130756,0.054752,0.131235,0.07039,0.028731,0.03192,-0.081282,-0.019275,0.109815,-0.073661,-0.166295,-0.1535,-0.074006,-0.063812,0.014029,-0.001704,0.105647,-0.131198,0.057354,-0.106315,-0.153896,0.017046,-0.209426,-0.118497,-0.292226,-0.120343,0.065298,-0.065827,0.09099,-0.435276,-0.148543,0.223211,-0.063796,0.040885,0.09951,0.015343,-0.045154,-0.003442,0.09483,0.068446,-0.013188,-0.088295,-0.005974,0.212712,-0.201499,0.02185,-0.236389,-0.061421,0.174908,0.09982,-0.085404,0.087171,0.24885,-0.087654,-0.009508,-0.092383,0.1601,-0.096902,0.213336,0.042337,-0.021423,0.092869,-0.160947,-0.1539,0.137255,-0.032333,0.068096,-0.041162,0.077948,-0.011218,-0.103943,0.05301,0.103069,0.207401,0.011857,-0.016642,0.264929,0.067087,0.124164,0.147467,0.112177,-0.211065,0.216177,0.078312,-0.201233,-0.0123,0.11549,0.116822,-0.087393,0.006413,0.027074,0.223749,-0.063869,0.084176,0.085794,-0.170207,0.018677,0.104038,0.115547,-0.114556,0.014703,-0.122632,-0.038288,-0.233934,0.041017,0.01608,-0.139768,-0.000358,0.106723,0.074999,-0.040946,0.087202,0.206089,0.315311,0.11381,-0.015243,-0.2016,-0.003693,-0.239009,-0.077789,-0.170741,-0.117497,0.160625,0.037348,-0.072565,-0.217444,-0.072613,-0.009702,0.025157,-0.184425,-0.30371,-0.093514,-0.054255,0.042583,0.16879,-0.021201,0.029317,-0.001628,-0.082779,0.015542,0.107311,0.17876,0.008504,0.020933,0.052096,-0.016146,-0.085782,0.146657,0.04121,-0.130947,0.189831,-0.012414,0.193885,0.027935,0.328168,-0.137845,-0.416721,0.07582,-0.037208,0.404271,0.063971,0.0759,0.005338,-0.043631,-0.098142,0.093078,-0.08207,0.061737,-0.046332,0.013591,0.245105,-0.070738,0.226921,0.008904,-0.186345,-0.028681,-0.115982,0.326401,-0.016149,-0.150897,-0.002422,0.000781,-0.109065,-0.120256,-0.02595,0.056549,-0.017605,0.013129,0.106252,-0.058571,-0.016772,-0.250358,0.308491,-0.075803,0.07546,0.048826,0.076553,0.037671,0.147329,-0.09446,0.291345,0.097149,0.247015,-0.182914,-0.140671,0.130109,0.02256,0.003127,-0.008633,-0.129907,-0.061685,-0.077,0.098917,0.105187,-0.124531,-0.153557,0.19598,0.025327,0.027423,-0.067025,0.095337,0.126569,-0.120382,-0.007234,0.117419,-0.017619,0.11292,-0.107342,0.01894,-0.069773,-0.079239,0.068668,-0.108133,-0.054368,0.198625,-0.086384,0.102184,-0.21599,0.044951,-0.076023,0.066743,-0.27043,0.020143,-0.107734,-0.02759,-0.018189,0.066254,-0.139527,-0.208589,0.027535,0.090826,-0.042871,0.00913,0.242569,0.096941,0.070112,-0.204243,-0.062927,-0.179665,-0.243826,0.139881,0.092612,0.002083,0.209421,-0.021632,0.137335,0.126312,-0.14058,0.232626,0.03852,0.128836,-0.057003,0.178104,-0.161439,-0.155967,-0.217022,-0.067985,-0.031242,-0.128714,0.032296,0.491517,-0.007907,0.04362,-0.169195,0.055956,-0.18016,-0.167402,0.16958,-0.108115,0.191359,-0.007226,-0.213178],"bias":0.018321,"trainedOn":"11523 images (see eval/fetch-train.mjs sources)"} \ No newline at end of file diff --git a/package.json b/package.json index c297e7b..150f096 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "clueside", - "version": "1.2.0", + "version": "1.3.0", "description": "Clueside: private, browser-local AI-image signals", "type": "module", "author": "Luis Felipe Abarca", diff --git a/src/background.js b/src/background.js index ff423e2..78ad41c 100644 --- a/src/background.js +++ b/src/background.js @@ -38,6 +38,9 @@ async function getUpdateState() { async function checkForUpdate() { try { + // No network attempts while offline: scoring is fully local and the + // update banner can wait for the next online check. + if (typeof navigator !== 'undefined' && navigator.onLine === false) return null; const response = await fetch(GITHUB_LATEST_RELEASE_URL, { headers: { Accept: 'application/vnd.github+json' }, }); diff --git a/src/community-forensics.js b/src/community-forensics.js index 6b90a2a..9dc350d 100644 --- a/src/community-forensics.js +++ b/src/community-forensics.js @@ -11,6 +11,7 @@ import { aggregateViewScores, shouldRunExtraCrops, TTA_EARLY_EXIT, + agreedMax, } from './scoring.js'; const REQUIRED_WASM_FILES = ['ort-wasm-simd-threaded.wasm', 'ort-wasm-simd-threaded.mjs']; @@ -182,7 +183,9 @@ export async function predictAdaptiveViews(session, views, options = {}) { } } - return { scores, named, neuralPAi: max, extraRan: true, earlyExit: false }; + // Mid-band agreement: a lone view in [threshold, earlyExit) does not + // carry the verdict on its own (see scoring.agreedMax). + return { scores, named, neuralPAi: agreedMax(max, scores), extraRan: true, earlyExit: false }; } /** diff --git a/src/fuse.js b/src/fuse.js index 6531f5f..80f29dd 100644 --- a/src/fuse.js +++ b/src/fuse.js @@ -8,9 +8,9 @@ export const UNCERTAIN_LOW = 0.45; /** CF scores below this need the saturated sub-floor tier to be rescued. */ export const DINO_CF_FLOOR = 0.02; /** CF below this requires near-saturated DINO before it can be rescued. */ -export const DINO_STRONG_RESCUE_FLOOR = 0.10; +export const DINO_STRONG_RESCUE_FLOOR = 0.20; /** DINO must be this confident to lift a low CF score into the rescue band. */ -export const DINO_STRONG_RESCUE_MIN = 0.90; +export const DINO_STRONG_RESCUE_MIN = 0.96; /** DINO must be this confident to lift CF in the normal uncertain band. */ export const DINO_RESCUE_MIN = 0.70; /** diff --git a/src/scoring.js b/src/scoring.js index 3d26531..6fe97a6 100644 --- a/src/scoring.js +++ b/src/scoring.js @@ -8,8 +8,17 @@ import { DEFAULT_THRESHOLD } from './fuse.js'; /** Extra CLIP crops run only when center p(AI) is in this band. */ export const TTA_ADAPTIVE_LOW = 0.15; -/** Stop remaining crops once any sigmoid is this high. */ -export const TTA_EARLY_EXIT = 0.9; +/** + * A single view at or above this score carries the verdict on its own and + * stops remaining crops. Below it, a mid-band AI verdict needs agreement + * (see CF_AGREEMENT_MIN_VIEWS): live CDN-processed real photos can spike + * one crop into the 0.65 to 0.85 band while every other crop stays low, + * and a lone spiked crop is weak evidence. + */ +export const TTA_EARLY_EXIT = 0.85; + +/** Views at or above the threshold required for a mid-band CF verdict. */ +export const CF_AGREEMENT_MIN_VIEWS = 2; export const TTA_MODES = ['adaptive', 'always', 'center']; @@ -48,13 +57,14 @@ export function aggregateViewScores(scores) { /** * Extra 440-corner / 512-center crops only help when the official center * crop is uncertain. A confident real (for example 0.04) will not become - * 0.65 by taking the max of six similar scores. + * 0.65 by taking the max of six similar scores. The band now extends + * through the mid-band verdict range so a center crop in [0.65, 0.85) + * gathers corroborating views before the agreement rule judges it. * @param {number} centerScore - * @param {number} [threshold] */ -export function shouldRunExtraCrops(centerScore, threshold = DEFAULT_THRESHOLD) { +export function shouldRunExtraCrops(centerScore) { const p = clamp01(centerScore); - return p >= TTA_ADAPTIVE_LOW && p < threshold; + return p >= TTA_ADAPTIVE_LOW && p < TTA_EARLY_EXIT; } /** @@ -85,7 +95,7 @@ export function foldTtaScores(scores, options = {}) { } const runExtra = - mode === 'always' || (mode === 'adaptive' && shouldRunExtraCrops(center, threshold)); + mode === 'always' || (mode === 'adaptive' && shouldRunExtraCrops(center)); if (!runExtra) { return { neuralPAi: center, extraRan: false, earlyExit: false, used }; @@ -101,7 +111,31 @@ export function foldTtaScores(scores, options = {}) { } } - return { neuralPAi: max, extraRan: true, earlyExit: false, used }; + return { neuralPAi: agreedMax(max, used, threshold), extraRan: true, earlyExit: false, used }; +} + +/** + * Mid-band agreement rule. A max in [threshold, TTA_EARLY_EXIT) stands only + * when at least CF_AGREEMENT_MIN_VIEWS inspected views reach the threshold; + * otherwise CF falls back to the second-highest view. Views at or above + * TTA_EARLY_EXIT never reach here (they exit above with full authority). + * Single-view images keep their score: there is nothing to disagree. + * Shared by foldTtaScores and the live predictAdaptiveViews path. + * @param {number} max + * @param {number[]} used + * @param {number} threshold + */ +export function agreedMax(max, used, threshold = DEFAULT_THRESHOLD) { + if (max < threshold || used.length < 2) return max; + const above = used.filter((v) => v >= threshold).length; + if (above >= CF_AGREEMENT_MIN_VIEWS) return max; + let second = 0; + for (const v of used) { + if (v < max && v > second) second = v; + } + // Duplicate maxima count as agreement and were caught above; here the + // max is unique, so second is the true runner-up. + return second; } function clamp01(v) { diff --git a/tests/dino.test.mjs b/tests/dino.test.mjs index 03ab7c9..a6f69b7 100644 --- a/tests/dino.test.mjs +++ b/tests/dino.test.mjs @@ -126,7 +126,7 @@ describe('fuseNeuralScores', () => { it('only rescues low CF scores with near-saturated DINO', () => { assert.equal(fuseNeuralScores(0.05, 0.99), 0.99); - assert.equal(fuseNeuralScores(0.05, 0.89), 0.05); + assert.equal(fuseNeuralScores(0.05, 0.95), 0.05); assert.equal(fuseNeuralScores(0.25, 0.75), 0.75); assert.equal(fuseNeuralScores(0.25, 0.65), 0.25); // Sub-floor tier: faintly awake CF plus saturated DINO rescues. diff --git a/tests/eval-policy.test.mjs b/tests/eval-policy.test.mjs index 0b65009..2c80a58 100644 --- a/tests/eval-policy.test.mjs +++ b/tests/eval-policy.test.mjs @@ -22,8 +22,16 @@ describe('offline product policy mirror', () => { }); it('does not let DINO replace a production CF score already at 0.65', () => { + // Two agreeing views keep CF authoritative at or above the threshold. + const rec = { views: { center: 0.65, tl: 0.66 } }; + assert.equal(productFloorScore(rec, 0.99, 0.4), 0.66); + }); + + it('a lone mid-band CF view falls back to the runner-up', () => { const rec = { views: { center: 0.65, tl: 0.2 } }; - assert.equal(productFloorScore(rec, 0.99, 0.4), 0.65); + // The agreement rule drops the lone 0.65 to the 0.2 runner-up, which + // sits below this helper's 0.4 rescue floor, so CF stands at 0.2. + assert.equal(productFloorScore(rec, 0.99, 0.4), 0.2); }); it('mirrors the flat-graphic suppression when sweep records include the gate', () => { diff --git a/tests/fuse.test.mjs b/tests/fuse.test.mjs index 8fc8e2f..adc67f1 100644 --- a/tests/fuse.test.mjs +++ b/tests/fuse.test.mjs @@ -88,10 +88,10 @@ describe('fuseNeuralScores policy', () => { }); it('low CF is only rescued by near-saturated DINO', () => { - assert.equal(DINO_STRONG_RESCUE_FLOOR, 0.10); - assert.equal(DINO_STRONG_RESCUE_MIN, 0.90); - assert.equal(fuseNeuralScores(0.05, 0.91), 0.91); - assert.equal(fuseNeuralScores(0.05, 0.89), 0.05); + assert.equal(DINO_STRONG_RESCUE_FLOOR, 0.20); + assert.equal(DINO_STRONG_RESCUE_MIN, 0.96); + assert.equal(fuseNeuralScores(0.05, 0.97), 0.97); + assert.equal(fuseNeuralScores(0.05, 0.95), 0.05); }); it('includes the DINO floor boundary in the lift band', () => { diff --git a/tests/scoring.test.mjs b/tests/scoring.test.mjs index bc7c2af..940482b 100644 --- a/tests/scoring.test.mjs +++ b/tests/scoring.test.mjs @@ -46,24 +46,43 @@ describe('adaptive TTA fusion', () => { it('runs extras in the uncertain band including crying-robot ~0.20', () => { assert.equal(shouldRunExtraCrops(0.2), true); - const folded = foldTtaScores([0.2, 0.41, 0.72], { mode: 'adaptive' }); - assert.equal(folded.neuralPAi, 0.72); - assert.equal(folded.extraRan, true); + // A lone 0.72 among low views falls back to the runner-up; a second + // agreeing view restores the max. + const lone = foldTtaScores([0.2, 0.41, 0.72], { mode: 'adaptive' }); + assert.equal(lone.neuralPAi, 0.41); + assert.equal(lone.extraRan, true); + const agreed = foldTtaScores([0.2, 0.66, 0.72], { mode: 'adaptive' }); + assert.equal(agreed.neuralPAi, 0.72); }); - it('includes the low band edge 0.15 and excludes 0.65', () => { + it('includes the low band edge 0.15 through the mid band, excludes 0.85', () => { assert.equal(shouldRunExtraCrops(TTA_ADAPTIVE_LOW), true); - assert.equal(shouldRunExtraCrops(DEFAULT_THRESHOLD), false); + assert.equal(shouldRunExtraCrops(DEFAULT_THRESHOLD), true); + assert.equal(shouldRunExtraCrops(0.84), true); + assert.equal(shouldRunExtraCrops(TTA_EARLY_EXIT), false); assert.equal(shouldRunExtraCrops(0.149), false); }); - it('always-max can lift a 0.04 center; adaptive must not', () => { + it('a lone mid-band view does not carry an AI verdict', () => { + // One view at 0.70 with every other view low falls back to the + // runner-up: live CDN-processed real photos spike single crops. const always = foldTtaScores([0.04, 0.7], { mode: 'always' }); const adaptive = foldTtaScores([0.04, 0.7], { mode: 'adaptive' }); - assert.equal(always.neuralPAi, 0.7); + assert.equal(always.neuralPAi, 0.04); assert.equal(adaptive.neuralPAi, 0.04); }); + it('two agreeing mid-band views keep the max', () => { + const folded = foldTtaScores([0.3, 0.7, 0.68], { mode: 'always' }); + assert.equal(folded.neuralPAi, 0.7); + }); + + it('a single view at or above 0.85 keeps full authority', () => { + const folded = foldTtaScores([0.3, 0.86], { mode: 'always' }); + assert.equal(folded.neuralPAi, 0.86); + assert.equal(folded.earlyExit, true); + }); + it('center mode ignores extras even in the adaptive band', () => { const folded = foldTtaScores([0.4, 0.9], { mode: 'center' }); assert.equal(folded.neuralPAi, 0.4);