From 30bfe42bf6081b497f9f042abcb197768563d857 Mon Sep 17 00:00:00 2001 From: kiyo9w Date: Tue, 29 Sep 2026 03:09:55 +0900 Subject: [PATCH] docs(decision): record the catalog corrections and the size gate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reproduction block still printed the pre-enrollment numbers (catalog 69%, decision 86%); it now prints what the command actually outputs today, with the catalog figure's fall from 87% to 83% explained rather than left to look like a regression. Adds the three row corrections with their evidence, the near-unknown fix and its measured effect, and the state of the four unenrolled SKUs - including that l08's row name and size are themselves unverified, since no retailer listing for a 30g スパイシーストーム ペリペリミックス exists. --- .../DECISION.md | 56 +++++++++++++++++-- 1 file changed, 51 insertions(+), 5 deletions(-) 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 8a97444..79f4ab8 100644 --- a/recognization/docs/research/2026-09-28-recognition-architecture/DECISION.md +++ b/recognization/docs/research/2026-09-28-recognition-architecture/DECISION.md @@ -722,12 +722,17 @@ The headline number is reproducible from the repo, not from a scratch script: --labels eval/labels/image6.json \ --image add/image6.jpg --lanes local --live - live resolution: catalog 69% · identity 86% · decision 86% · - end-to-end 59% · precision 95% · 20.6 ms/crop + live resolution: catalog 83% · identity 85% · decision 60% · + end-to-end 59% · precision 93% · 20.3 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. + false accepts: 3 of 109 scored facings — 2 of the 45 unknowns and 1 + enrolled misidentification; unenrolled_false_accepts 0. + +The catalog figure fell from 87% to 83% because three facings were relabelled +from unknown to `sku_l12` once the tare was identified (§ Re-measured +2026-09-29), and `sku_l12` has no enrolled view. That is a catalog gap +reported honestly, not a recognition regression: the same three facings were +unanswerable before and after. ### Re-measured 2026-09-29 @@ -767,6 +772,47 @@ Stream, 20 s pan, four runs: 71-79% coverage at 76-84% precision, against 62-71% at 73-75% before. Still-image endpoint: 54 named detections in 2.2 s, against 41 before. +### Catalog corrections 2026-09-29 + +Three rows named products the shelf does not hold, all found by reading the +shelf tags and the enrolled packshots rather than by trusting the CSV: + +| SKU | Was | Is | Evidence | +|---|---|---|---| +| `sku_l10` | ピュアセレクト マヨネーズ 450g | 400g | Shelf tag reads 400g; Ajinomoto's lineup is 250/400/600/1000g, no 450g. Packshot enrolled (JAN 4901001114030). | +| `sku_l11` | キューピー ハーフマヨネーズ 450g | 400g | Shelf tag reads 〈400g〉; the enrolled packshot's own OCR reads 400g. | +| `sku_l12` | 焼肉のたれ 中辛 | ユーラス 野菜をおいしく食べる旨たれ 380g | Tag under facings #46-48 reads that title at ¥299, the price the row carried; the package reads お子さまOK 甘めテイスト, the opposite of 中辛. | + +The l12 row was the dangerous one: the text lane scores a crop against the +row's printed name, so a correct read of the real bottle would have been +vetoed by a row describing a different product. Facings #46-48 were relabelled +from unknown to `sku_l12` to match. + +Enrolling l10 took the catalog ceiling from 69% to 87% of in-catalog facings +answerable by image; relabelling the tare facings moved it back to 83%, +because `sku_l12` has no enrolled view. `sku_l04`, `sku_l07` and `sku_l08` +remain unenrolled. l04 and l07 have exact packshots whose name/OCR check is a +false negative, recorded in `data/packshots/research/` with the retailer, JAN +and the reason the check fails. l08 could not be sourced at all: no retailer +listing for a スパイシーストーム ペリペリミックス 30g exists, and the only +corroborated ペリペリミックス is a different brand at 50g, so the row's name +and size are themselves unverified. + +### The near-unknown case is now rejected + +The documented failure - Kewpie 450g bags the catalog does not hold, labelled +as catalog rows - had no fix in the text ranking. Every mayonnaise row +explains "マヨネーズ" equally, so the ranking ties at 1.0 and the +strict-greater veto never fires; the veto compares two catalog rows and the +crop's product is not one of them. + +`DecisionPolicy` now also checks the package size the read prints. Only a mass +in `PACKAGE_MASS_RANGE` counts, because below it are fragments of a longer +number ("20" out of "200g") and above it are two numbers run together ("5210" +out of "210g"), and percentages are excluded because "カロリー 50% カット" is a +claim about the contents. Measured on the corrected labels, full resolution: +precision 86% -> 91%, false accepts 8 -> 5, coverage unchanged at 79%. + Still open, and not implementable from here: Tier 2 held-out labels (F-11), the remaining E-1/E-4..E-9 experiments, and the completion gate G1-G7, all of which need a second independent shelf visit.