docs(decision): record the catalog corrections and the size gate
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.
This commit is contained in:
parent
22db40eb93
commit
30bfe42bf6
1 changed files with 51 additions and 5 deletions
|
|
@ -722,12 +722,17 @@ The headline number is reproducible from the repo, not from a scratch script:
|
||||||
--labels eval/labels/image6.json \
|
--labels eval/labels/image6.json \
|
||||||
--image add/image6.jpg --lanes local --live
|
--image add/image6.jpg --lanes local --live
|
||||||
|
|
||||||
live resolution: catalog 69% · identity 86% · decision 86% ·
|
live resolution: catalog 83% · identity 85% · decision 60% ·
|
||||||
end-to-end 59% · precision 95% · 20.6 ms/crop
|
end-to-end 59% · precision 93% · 20.3 ms/crop
|
||||||
|
|
||||||
false accepts: 2 of 109 scored facings — 0 of the 48 unknowns, and 1
|
false accepts: 3 of 109 scored facings — 2 of the 45 unknowns and 1
|
||||||
unenrolled in-catalog facing plus 1 enrolled misidentification. The
|
enrolled misidentification; unenrolled_false_accepts 0.
|
||||||
evaluator's own columns: unknown_false_accepts 0, unenrolled_false_accepts 1.
|
|
||||||
|
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
|
### 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,
|
62-71% at 73-75% before. Still-image endpoint: 54 named detections in 2.2 s,
|
||||||
against 41 before.
|
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
|
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
|
remaining E-1/E-4..E-9 experiments, and the completion gate G1-G7, all of which
|
||||||
need a second independent shelf visit.
|
need a second independent shelf visit.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue