From 2b7dd0c193969d488ad2103970ff4cef7cc89888 Mon Sep 17 00:00:00 2001 From: tngo Date: Mon, 28 Sep 2026 22:36:27 +0900 Subject: [PATCH] docs: match the false-accept record to the evaluator's own columns The record said '2 false accepts of 48 unknowns', which conflated two fields: the 2 are 0 unknown accepts plus 1 unenrolled in-catalog facing and 1 enrolled misidentification. Also restores the hybrid-verify line the lane vocabulary edit dropped, and reframes the l09 note: its hubness ratio is 1.76 full / 1.36 live against G7's limit of 2.0, so the gate passes and the 30% internal share heuristic is what raises the alarm. --- recognization/code/eval_identity.py | 1 + .../2026-09-28-recognition-architecture/DECISION.md | 6 +++++- recognization/stock-lopia-clean/README.md | 9 ++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/recognization/code/eval_identity.py b/recognization/code/eval_identity.py index 4a4ba5e..7ecf476 100644 --- a/recognization/code/eval_identity.py +++ b/recognization/code/eval_identity.py @@ -6,6 +6,7 @@ Every lane is scored the same way, on the same crops, at the same resolutions: local RootSIFT pyramid + OCR text lane (the shipped default) matcher full-catalog SIFT/ORB/BRISK + RANSAC (the original demo) gallery DINOv2 embedding, raw or with the trained head + hybrid-verify DINO shortlist, then the matcher re-ranks inside it Reported per lane, as four separate ceilings rather than one conflated number: diff --git a/recognization/docs/research/2026-09-28-recognition-architecture/DECISION.md b/recognization/docs/research/2026-09-28-recognition-architecture/DECISION.md index 4fc9d4f..edb28e9 100644 --- a/recognization/docs/research/2026-09-28-recognition-architecture/DECISION.md +++ b/recognization/docs/research/2026-09-28-recognition-architecture/DECISION.md @@ -595,7 +595,11 @@ The headline number is reproducible from the repo, not from a scratch script: --image add/image6.jpg --lanes local --live live resolution: catalog 69% · identity 86% · decision 86% · - end-to-end 59% · precision 95% · 2 false accepts of 48 unknowns · 20.6 ms/crop + end-to-end 59% · precision 95% · 20.6 ms/crop + + false accepts: 2 of 109 scored facings — 0 of the 48 unknowns, and 1 + unenrolled in-catalog facing plus 1 enrolled misidentification. The + evaluator's own columns: unknown_false_accepts 0, unenrolled_false_accepts 1. Still open, and not implementable from here: Tier 2 held-out labels (F-11), the E-1..E-9 experiments, and the completion gate G1-G7, all of which need a second diff --git a/recognization/stock-lopia-clean/README.md b/recognization/stock-lopia-clean/README.md index 368365b..f9b9f95 100644 --- a/recognization/stock-lopia-clean/README.md +++ b/recognization/stock-lopia-clean/README.md @@ -59,9 +59,12 @@ text lane the signatures that cover them. the enrollment protocol wants (§8 of the architecture decision). Its matcher scores dwarf the other references (85-129 inliers against 10-40), so it wins facings it should not; re-source it before trusting l09 precision. Measured on -the corrected image6 labels at full resolution, that is the one hub alarm the -local lane raises: 18 accepts, 12 correct, a 37.5% share against the 30% limit. -At live resolution the alarm clears (29%). +the corrected image6 labels, l09 is the largest single-SKU share of accepts at +both resolutions: 18 of 48 accepts (37.5%) at full, 11 of 38 (28.9%) at live, +against a true share of 13 of 61 facings (21.3%). That is a hubness ratio of +1.76 and 1.36 against the completion gate's limit of 2.0, so G7 passes; the +stricter internal 30% share heuristic is what raises the alarm at full +resolution. Re-sourcing the reference is the fix, not a threshold change. ## Rejected