research(051): catalog product retrieval from one photo + confidence gate - #137
Merged
dompm merged 4 commits intoJul 16, 2026
Merged
Conversation
…ate harness, relief-name audit Infrastructure for wild->clean catalog product retrieval (report 051): - embed.py / embed_cache.py: DINOv2-small (384-d) MPS embedder, verified runnable (report 028 lesson); path-keyed cache with per-representation keys. - build_clean_index.py + clean_index_meta.json: 1,281-image clean-corpus index (the shipped registry / realistic distractor pool). Embeddings gitignored. - retrieve.py: cosine + product-level max-pool scoring, leave-product-out. - rp_data.py / realpairs_bench.py: wild->clean benchmark on the 033 realpairs (query=window/shop, target=closeup/lightbox) + calibrated in-catalog vs out-of-catalog confidence gate (AUC + precision/recall). - transforms.py: raw / delighted-T (extract.py) / 019 luma-quotient reprs. - vlm_verify051.py: claude-CLI top-k 'same product?' verification (sonnet). - make_board.py: qualitative board (query | top-3 | correct). - relief_name_audit.py + json: scope-6 per-SKU relief-cache metadata audit. Realpairs raw images restored via idempotent harvest_033.py (033 posture); LOCAL-ONLY, gitignored. Metrics/report to follow. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- retrieve.py: per-query row exclusion (leave-one-image-out). - realpairs_bench.py: any-capture diagnostic isolating the clean-reference penalty from raw same-product matching; board data with resolved paths. - run_all.py: one-pass suite (raw/delight/quotient x distractors, holdout scope, diagnostic) -> results/051/summary_all.json. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… ablations Headline (674 wild queries, 176 Delphi products, 1,771-entry index w/ clean- corpus distractors, DINOv2-small): - raw top1=12.6% top5=26.3%; gate AUC 0.523 (no usable separation) - delighted-T HURTS (9.8%); 019 luma-quotient no effect (12.2%) - center-crop50 DOUBLES accuracy: 26.6%/44.4% (33.2%/54.7% w/o distractors) -> composition/scene, not illumination, is half the gap - any-capture diagnostic == clean-target (12.8%) -> no clean-reference penalty - ultra-confident tier: cosine>=0.913 covers 2.7% of queries at 100% top-1 - failure decomposition: among crop50 misses top-1 shares brand 37%, relief family 23% -> finds the look, not the SKU (colorway/line confusion) Boards: board_raw.jpg / board_crop50.jpg (downscaled thumbnails only). Heavy per-query/curve/board JSONs + embedding caches gitignored (regenerable via catalog051/run_all.py + run_crop_ablation.py). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… gate Verdict: exact-SKU recognition is a suggestions feature (crop50 26.6% top-1 / 44.4% top-5 at realistic scale; naive full-frame 12.6%); the cosine confidence gate does NOT separate in- vs out-of-catalog (AUC 0.52-0.57) — only a ~3% ultra-confident tier (>=0.913, measured 100% top-1) survives calibration. Center-crop doubles accuracy (composition, not illumination, is the gap); delighting the query hurts. VLM top-5 verification: 16/16 rerank promotion, 70% none-of-these specificity -> estimated end-to-end ~38.7% top-1. Relief cache keys off texture family, which survives the dominant same-family-wrong- colorway miss mode; 20% of registry SKUs are texture-named (pure metadata lookup), realpairs 56%. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Deploying vitrai with
|
| Latest commit: |
e0f5216
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://93eca913.vitrai.pages.dev |
| Branch Preview URL: | https://research-delighting-051-cata.vitrai.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Can we RECOGNIZE which catalog glass product a user's uploaded photo shows (CTO product idea: identify the sheet → look up cached per-SKU relief presets + metadata), and can we CALIBRATE a "confidently in-catalog" gate for out-of-catalog uploads (fallback = study 050's photo-only detection)?
Benchmark: the report-033 real cross-capture pairs, wild→clean direction — 674 window/shop queries over 176 Delphi products, index = 490 clean captures (226 products) + the 1,281-image clean corpus as realistic distractors. DINOv2-small on MPS (verified runnable first, per the 028 lesson). All 033 contamination screens applied. The 033 raw-image cache was restored via the idempotent
harvest_033.pyunder the original approved posture — zero attrition: 254/254 products, 1,491/1,491 images, 100% capture-label agreement with the frozen manifest.Findings
Evidence
reports/051-catalog-retrieval.md— full write-upresults/051/— summary_all.json, summary_crop.json, per-run metrics, failure_decomposition.json, relief_name_audit.json, vlm_verify.json, qualitative boards (downscaled thumbnails only:board_raw.jpg,board_crop50.jpg)catalog051/— index build + query + benchmark + gate + VLM scripts; embeddings/caches gitignored, regenerate withrun_all.py→run_crop_ablation.py(~40 min MPS)Raw corpus/realpairs photography stays local-only per the 033 posture. DO NOT MERGE without lab-lead review.
🤖 Generated with Claude Code