Can a phone photograph become a useful food-bank stock update? We built an image-only benchmark, asked vision-language models to count, expanded the reference corpus to 493 externally annotated food images, and searched 314 configurations. The experiments produced a working research pipeline and a much narrower product claim than the original idea.
On 24 held-out grocery proxy images, the validation-selected automatic method averaged 16.74 items of count error. FamNet, given three example boxes in each test image, averaged 10.19. On the original food-bank photographs, the larger language model got 17 of 30 package counts exactly right; always guessing one got 20.
These results support further work on reviewed photo suggestions. They do not establish reliable automatic inventory updates, and they do not show that modern counting research has reached its limit.
This is an AI-assisted lab notebook for the work completed on September 6, 2026. It documents the motivation, research context, source images, annotation choices, inference code, unsuccessful attempts, search space, frozen selection, held-out results, and proposed food-bank workflow. The appendices include every original count label, the full image/category evidence, all 24 held-out cases, and all 314 validation configurations. Reported results are measurements from saved predictions; proposed product behavior and future experiments are identified as proposals.
1. The question started with a trip, not a camera
The food-bank application came from a discovery interview with Zongze Wu about Seattle Digital Commons. The relevant need in our working notes was knowing whether useful food categories would be available before making a trip. Uncertainty about availability can make a visit difficult to fit around an existing schedule. A useful system would communicate what was recently verified, with little additional work for staff and a budget compatible with a small nonprofit.
That is a product hypothesis informed by a discovery conversation. It is not a finding from interviews with a representative group of food-bank staff. We had not validated the receiving, sorting, storage, or distribution workflow with operators. This article paraphrases the application context; it does not reproduce the private interview or turn personal background into benchmark evidence.
The initial technical idea was appealing: a volunteer photographs donations or a shelf, a model recognizes and counts the food, and a stock view updates. Each step hides a different question. Is the photo of a new delivery, an existing shelf, a recipient's haul, or food that has already left? Does a visible package represent one distributable unit or multiple contents? Is the food ready to distribute? How long will the observation remain useful? Does a second image show a new item or the same one from another angle?
| Need from the application | Candidate behavior | What this study measured |
|---|---|---|
| Know useful categories before travel | Show recently verified category availability | Image/category presence on a small proxy sample |
| Reduce staff data entry | Suggest categories and counts for review | Raw count and presence predictions |
| Use ordinary phones | Accept ordinary photographs | Internet photographs and captured image crops |
| Avoid misleading stock information | Keep uncertainty, provenance, and verification time | Annotation uncertainty and model output coverage |
| Keep operation affordable | Measure correction time and compute cost | A CPU implementation and a partial cloud usage estimate |
| Avoid duplicate donations | Associate observations with a receiving session | Source grouping in the benchmark; no operational ledger |
The value proposition is therefore broader than count accuracy. A model could count visible objects correctly and still create a false stock update by assigning the wrong event type. Conversely, a coarse but recently verified category status could help someone plan a visit without claiming an exact quantity. Both possibilities require field evidence that this experiment does not supply.
2. What the original paper actually contributes
The starting paper was Hoser and Żebrowska-Suchodolska's 2023 article, An algorithm for estimating the number of objects in a selected area of space based on ordinary photos. It addresses overlap in a two-dimensional projection of objects occupying three-dimensional space. Its statistical estimator supplements image analysis to estimate obscured objects. The illustrated application is bird counting, with assumptions including similar apparent object sizes and an estimate of average object area. Paper and DOI, author-uploaded text.
The connection to food banks is conceptual: occlusion can make visible detections an incomplete account of a scene. Applying that observation to mixed groceries requires new assumptions. Cartons, bags, cans, produce, and trays have different sizes; shelves have depth; closed packages hide contents; products can be stacked systematically. A correction based on one average object area cannot simply be transferred across those conditions. We did not implement or reproduce the paper's estimator in this study.
For an inventory application, estimating a hidden quantity is also a different output from reporting a visible count. The benchmark deliberately asks for visible units. If a later system estimates hidden stock, it should report the estimate separately, identify its assumptions, and be tested against physical inventory.
3. The research frontier, and why “SOTA” needs a protocol
The relevant field includes text-conditioned counting, counting with visual examples, instance localization, density estimation, segmentation, and multimodal language models. The strongest published result depends on the dataset, whether examples are supplied, whether counting-specific training is allowed, and whether the model must reject the wrong category. A single leaderboard number does not answer whether a mixed food-bank table can safely update a ledger.
The following is a dated reading map, checked on September 6, 2026. It separates papers considered from implementations executed here.
| Work | Relevant contribution | Status in this project |
|---|---|---|
| CountGD++, CVPR 2026 | More flexible prompts, including exclusions, automatically obtained pseudo-exemplars, external examples, and a counting expert used by an LLM | Research candidate; not run |
| Count Anything, May 2026 | Text-guided instance points with sparse and dense counters; introduces the cross-domain CLOC dataset | Research candidate; not run |
| AdaCount, July 2026 | Training-free adaptation of SAM3 using target similarity to guide spatial and feature adaptation | Research candidate; not run |
| MixCount, May 2026 | A synthetic mixed-object counting dataset and training approach targeting failures in mixed scenes | Added to the follow-up reading list while documenting; not used as evaluation data |
| FSC147 / FamNet, CVPR 2021 | Published point annotations and exemplar-assisted density counting | Data and assisted baseline used |
| OWL-v2 and Grounding DINO | General open-vocabulary object detection | Executed with the implementation settings below |
| Qwen3-VL 2B, SmolVLM 500M, and hosted Qwen 3.8 27B | Image-conditioned language generation | Executed, with different coverage and tasks |
Count Anything's May 2026 paper describes CLOC as approximately 220,000 images, 619 categories, and 15 million instances across six visual domains. Its discrete point output is relevant because it gives a reviewer spatial evidence to inspect alongside the count. These are the authors' dataset and method descriptions, not measurements reproduced here. Count Anything.
An instructive comparison is AdaCount's own reported performance: FSC-147 MAE 18.97, CARPK MAE 1.99, and OmniCount Fruits MAE 0.37. Those radically different errors come from different benchmarks. They must not be compared with our 24-image food subset as if every row measured the same task. AdaCount also depends on its initial SAM3 detections providing useful examples. AdaCount, Tables 1–2 and limitations.
There is also a naming trap: the “Count Anything” entry dated 2023 in AdaCount's comparison table refers to an older SAM study, not Lei and colleagues' May 2026 paper. A title match alone is insufficient to identify the method.
My practical reading is to test specialized point- or instance-producing methods next, while retaining language models for category interpretation and interaction. That is an inference about the application, not a claim that any untested method will win on food-bank photos. Our detector baselines are not the contemporary performance ceiling, and the 314-configuration search does not establish global optimality.
4. Turn the idea into falsifiable questions
We separated the broad idea into several questions, because a single “accuracy” score would conceal the most important failures.
| Question | Operational test | Evidence boundary |
|---|---|---|
| Can general detectors identify visible food categories? | Presence precision and recall on the original photos | Assistant-annotated image/category labels |
| Can they count visible packages? | Exact count, MAE, and error direction on supported positive counts | Thirty weakly labelled targets |
| Do VLM guesses improve on the detector implementations? | Same original photos, units, and reference labels | Repeated exploratory evaluation; not an untouched test |
| Can systematic configuration search improve dense counting? | Training calibration, validation selection, then frozen held-out evaluation | A small, class-disjoint grocery proxy study |
| Does supplying visual examples help? | Separate assisted track with published example boxes | Extra input changes the task |
| Is the result ready for automatic stock updates? | Would require a real receiving and distribution study | Not tested |
The initial detector run established an executable baseline. The LLM comparison tested the user's suggestion that a model might do better by looking and guessing. The expanded pipeline made the search reproducible and constrained selection to validation data. These were successive stages, not a single preregistered research program conceived before any observation.
The original-photo LLM prompt was frozen before those LLM calls, but its design benefited from the earlier detector experience. The proxy selection file was frozen before proxy held-out inference. A local protocol file is a useful audit artifact; it is not an external preregistration service, a cryptographic enforcement boundary, or proof that Internet pretraining excluded the photographs.
5. Two datasets, two counting units
The central distinction in the study is between real recipient haul photographs and externally annotated grocery counting proxies.
| Property | Original food-bank sample | Expanded FSC147 subset |
|---|---|---|
| Acquired images | 11 | 493 additional images |
| Sources | Three public Reddit posts | Pinned image mirror plus original authors' annotations |
| Scene independence | Nine images are overlapping views of one haul | Official splits retained; hash checks for cross-split duplicates |
| Target classes | Fixed 25-category inventory taxonomy | Fifteen selected food-related categories |
| Count reference | Thirty source-supported positive package counts | 25,895 published target points across the acquired subset |
| Presence reference | 273 scored pairs: 51 positive and 222 negative; two unknown | Other categories unlabelled, not negative |
| Primary unit | Visible package; selected loose produce counted individually | Published target instance, including individual eggs and berries |
| Executed evaluation | All 11 photos | 24 calibration + 24 validation + 24 held-out images |
| Independent physical inventory | None | None |
The acquired corpus contains 504 image files across both sources, but that is not 504 independently evaluated receiving sessions. The expanded search used 72 images. The original nine-view gallery remains a single source group. The two sets' count errors must not be pooled into an overall number.
An egg carton demonstrates why. In the original task, one closed carton is one unit. In FSC147, an egg target is an individual egg annotated with a point. A model could be correct under one definition and wrong under the other while describing the same physical objects. A count without a unit is an incomplete result.
6. Where the food-bank images came from
The original sources were public posts by people showing food received from a pantry or food bank. They resemble a sorting-table capture in some visual respects, but they do not show remaining food-bank stock.
| Source group | Public source | Images used | Reference limitations |
|---|---|---|---|
| University pantry | QuietlyBleeding's university pantry post | university.jpg |
Quantities and pictured items were reconciled; unpictured food excluded |
| February 2025 haul | lrc2188's food-bank haul | haul2025.jpg |
Busy table and overlap leave many counts unknown |
| April 2026 gallery | fineman1097's April pickup gallery | gallery01.jpg through gallery09.jpg |
Repeated views of one household haul; unpictured extras excluded |
Image acquisition encountered restrictions on direct downloads and on an initially considered annotated Roboflow dataset. The Roboflow route reached a bot challenge and was not bypassed. Browser captures of accessible public photographs were used for the first test, with surrounding gallery UI cropped away. A small position indicator remains in some gallery images. The resulting inputs are captured crops, not original-resolution camera files. The manifest records their exact hashes.
Only filenames registered in inputs.json were model inputs. Failed or unused captures in the working directory were not added opportunistically. Reacquiring the same post later could change the crop, compression, dimensions, or available image. Source URLs establish provenance; matching SHA-256 hashes establish the exact evaluated bytes.
The appendix shows all 11 input views so the repeated scene structure remains visible. It would be a serious error to add counts across the nine gallery views and call the sum new donations.
7. How the original labels were made
Count references were transcribed before inference from original-poster quantities or singular item descriptions, then normalized to distinguishable visible units. A carton described as a dozen eggs became one carton. A pack of ten tortillas became one package. Three separate noodle cups remained three. This is source-supported weak supervision, not an independently audited item-by-item physical stock count.
Presence labels were different: the assistant performed a visual audit using the photo and source context. They are image-level positives, negatives, and unknowns. They are not externally supplied detection boxes. Two uncertain presence labels were masked, and counts that could not be supported were left missing. Missing never meant zero.
| Reference count | Number of labelled targets | Share of the 30 targets |
|---|---|---|
| 1 | 20 | 66.7% |
| 2 | 6 | 20.0% |
| 3 | 3 | 10.0% |
| 6 | 1 | 3.3% |
There are 47 total labelled instance-query units across those targets. Because some packages recur across images, that is not 47 unique donations. The distribution also means that a constant-one predictor scores 66.7% exact accuracy without seeing any pixels.
The taxonomy intentionally separates macaroni-and-cheese meals from dry pasta and cheese; packaged fish fillets from meat; milk from yogurt, sour cream, and egg substitutes; and human food cans from drink or pet-food cans. Some photographs contain objects outside all 25 categories. Those objects are not forced into the nearest class. The complete taxonomy, prompt, and all evidence rows appear in the appendices and download.
No external instance boxes were available for this sample. Therefore a correct count can still be produced by detections on the wrong objects. We score numerical agreement and image-level presence, not localization mAP.
8. The first detector implementation
The first runnable baseline used Google OWL-v2 and Grounding DINO, with pinned model revisions. Each received the same image and fixed category prompts. Inference did not receive reference labels, source captions, or author quantities. Text physically printed on a package was naturally present in the image.
OWL-v2 used its supplied object-detection postprocessor. Grounding DINO ultimately used a conservative food-identity adapter. Both used class-specific greedy nonmaximum suppression with an intersection-over-union threshold of 0.5. The count was the number of remaining boxes. There were no manual count corrections, package-content multipliers, or fitted thresholds in the primary original-photo comparison.
The registered primary score thresholds were 0.10 for OWL-v2 and 0.25 for the corrected DINO adapter. Additional thresholds were retained as sensitivity analyses. A score threshold is an implementation control over accepted boxes, not a calibrated probability that a stock count is correct.
A detector adapter bug mattered more than its name
An initial DINO adapter allowed a strong generic token match, such as “jar,” to support a specific class such as peanut butter. That can return plausible boxes while failing the intended food-identity question. Inspection of the official postprocessor exposed the mapping problem.
The corrected adapter scored the food-identity subtokens conservatively using their minimum probability. Generic packaging words alone could not establish food identity. Prompts, labels, and the threshold grid were unchanged. The original output remains diagnostic data rather than being silently deleted.
This correction was informed by an image audit. It is therefore an exploratory adapter change, not a paper-standard Grounding DINO benchmark or an independently validated category-mapping method. The later FSC147 pipeline used a standard single-target phrase path instead; those two DINO implementations should not be conflated.
What the detector results meant
OWL-v2's original settings found most positive categories but produced many false positives and duplicate or inappropriate object boxes. It achieved 48 true positives, 105 false positives, and three false negatives on category presence. Its count MAE was 7.80, with only six of 30 counts exact.
The conservative DINO adapter traded away recall: ten true positives, 17 false positives, and 41 false negatives. Its count MAE was 1.53, with one of 30 counts exact. The lower count error did not imply a better inventory recognizer; predicting little or nothing is relatively close to a reference distribution dominated by one.
At OWL-v2 threshold 0.30, the saved sensitivity analysis gave approximately 55.9% presence precision, 64.7% recall, 30% exact counts, and 1.07 MAE. That is useful diagnostic evidence about the precision-recall tradeoff. It was not retrospectively promoted into the original primary result.
9. Asking the language models to guess
The next hypothesis was that image-conditioned language models might interpret packages and categories better than the detector pipelines. We evaluated local Qwen3-VL 2B, local SmolVLM 500M, and subsequently a larger Qwen 3.8 27B model through Cloudflare Workers AI.
For the original task, each model received one image in a fresh conversation and a fixed instruction asking for all 25 categories as nonnegative integer counts. The instruction explicitly defined visible units, partly visible identifiable packages, category exclusions, zero for visible absence, and the prohibition on inferring hidden stock or typical food-bank quantities. It also excluded pictures printed on packaging.
The local Qwen and SmolVLM runs used greedy decoding, four CPU threads, and a 640-token output cap. Qwen's processor had a minimum of 65,536 pixels and maximum of 589,824 pixels. The original local runs used bfloat16. These settings were selected for a repeatable CPU experiment; they are not identical to every model-card generation recommendation.
The hosted 27B run kept the same task prompt but added a strict JSON schema, disabled thinking, used temperature zero, and allowed 768 completion tokens. Consequently, this comparison changes both the model and the output-format enforcement. It cannot identify a causal effect of parameter count alone.
| Original-photo run | Input | Output contract | Outcome |
|---|---|---|---|
| Qwen3-VL 2B | One image + fixed taxonomy | Prompt-requested 25-key JSON | All 11 images completed with usable counts |
| SmolVLM 500M | Same task | Prompt-requested 25-key JSON | No usable complete structured answers |
| Hosted Qwen 3.8 27B | Same task | Strict 25-key JSON schema | All 11 images completed with usable counts |
SmolVLM's original responses included short fragments and an extended continuation that did not satisfy the inventory schema. That is an output-contract failure. It should not be described as if a valid integer prediction were obtained for every object and all of those predictions were wrong. In the later, simpler one-category proxy task, the same small model could return usable outputs.
Parsing was part of the experiment
The scorer allowed a surrounding JSON fence but rejected duplicate keys, non-integer counts, negative values, and missing category answers. It did not repair a model's guesses or replace malformed output with zero. Raw text was saved so parsing decisions could be audited.
Exact-count success used the full denominator of 30 labelled targets, so missing answers did not disappear from the headline. MAE and presence precision/recall were conditional on valid answers and reported alongside coverage. Otherwise a model could appear accurate merely by failing to answer difficult cases.
No image filenames, source captions, source quantities, reference labels, or earlier detector predictions were included in the model's task input. Public provenance information used to verify the cloud disclosure sat outside the model request body. Internet pretraining overlap remains unknown.
10. The original-photo results
| Method | Count coverage | Exact / all 30 | Count MAE | Count RMSE | Presence precision | Presence recall |
|---|---|---|---|---|---|---|
| Always one | 100.0% | 20/30 | 0.57 | 1.20 | 18.7% | 100.0% |
| Always absent | 100.0% | 0/30 | 1.57 | 1.89 | — | 0.0% |
| OWL-v2, score 0.10 | 100.0% | 6/30 | 7.80 | 12.66 | 31.4% | 94.1% |
| DINO + identity gate, score 0.25 | 100.0% | 1/30 | 1.53 | 1.88 | 37.0% | 19.6% |
| Qwen3-VL 2B | 100.0% | 15/30 | 0.73 | 1.21 | 74.5% | 74.5% |
| Qwen 3.8 27B + JSON schema | 100.0% | 17/30 | 0.57 | 0.95 | 82.6% | 74.5% |
| SmolVLM 500M | 0.0% | 0 usable targets | — | — | — | — |
Qwen 27B's presence precision was substantially more useful than either original detector configuration: 38 true positives and eight false positives, with 13 missed positives. Qwen 2B found the same number of positives but added 13 false positives. Both had 74.5% recall. This is evidence that the evaluated VLM implementations were better category suggesters on this convenience sample.
The count result is less encouraging. Qwen 2B got 15 of 30 counts exactly right, and none of the ten counts greater than one. Qwen 27B improved to 17 of 30, including three of the ten nonsingleton counts. Always guessing one still got 20 of 30. Qwen 27B's MAE of 0.57 matched the constant-one baseline, although their error distributions differed.
Presence accuracy has its own misleading baseline: saying every category is absent gives 222/273, or 81.3%, overall accuracy. It also misses all 51 positives. Neither that result nor the constant-one count result would make a useful stock system. Precision, recall, count error, and output coverage must be read together.
This sample is too small and too correlated for strong generalization claims. Nine views of one haul are not nine independent trials. We do not claim statistical significance from treating the 30 targets or 273 category pairs as independent draws from all food banks. The row-level appendix is more informative than a single percentage presented without its denominator.
11. Expanding the labelled corpus
The next step was to build a reusable corpus with external instance annotations. We selected fifteen food-related categories from FSC147, retained the authors' point labels and exemplar boxes, and acquired images from a pinned Hugging Face mirror. The original food-bank sample stayed separate.
All eligible images in those categories numbered 1,186. Before expanded inference, the first study adopted a cap of 48 images per category, selecting by a stable hash of the filename. Smaller categories contributed fewer than 48. The final curated subset contained 493 images and 25,895 points. Counts and model performance were not used to choose the retained images.
| Acquisition decision | Purpose | Remaining limitation |
|---|---|---|
| Fifteen explicit food-related categories | Keep the study relevant to produce and packaged stock | Category selection is a deliberate domain filter |
| Stable filename-hash selection | Make the cap reproducible without count-based selection | This is not a random sample of food-bank operations |
| Pinned author annotations | Preserve external reference labels | Published labels can still contain mistakes |
| Pinned image mirror | Stabilize acquisition | Underlying source photos may have separate rights |
| Image and manifest hashes | Detect changed evaluation inputs | Does not detect training-set memorization |
| Keep official partitions | Respect the benchmark's class-disjoint structure | Only two relevant validation categories remain |
Each corpus record includes the filename, category, official split, unit, actual image dimensions, SHA-256, perceptual hash, source image URL, annotation source, point locations, derived count, exemplar boxes, and annotation-bound checks. The derived count is exactly the number of published points. It is not an LLM-generated label.
| Category | Acquired | Train | Validation | Test | Points | Count range | Median count |
|---|---|---|---|---|---|---|---|
| apples | 48 | 0 | 0 | 48 | 2916 | 10–621 | 33.50 |
| bananas | 14 | 14 | 0 | 0 | 576 | 8–115 | 27.50 |
| bread rolls | 48 | 48 | 0 | 0 | 632 | 8–30 | 12.00 |
| cans | 48 | 48 | 0 | 0 | 4113 | 8–1672 | 37.00 |
| eggs | 48 | 0 | 0 | 48 | 1444 | 8–145 | 23.00 |
| grapes | 48 | 0 | 48 | 0 | 4044 | 11–306 | 59.00 |
| instant noodles | 3 | 3 | 0 | 0 | 54 | 12–28 | 14.00 |
| milk cartons | 14 | 0 | 14 | 0 | 1010 | 22–185 | 66.00 |
| oranges | 48 | 48 | 0 | 0 | 3236 | 14–250 | 49.50 |
| peppers | 13 | 13 | 0 | 0 | 243 | 10–47 | 13.00 |
| potatoes | 48 | 48 | 0 | 0 | 1617 | 8–159 | 25.50 |
| rice bags | 2 | 2 | 0 | 0 | 76 | 26–50 | 38.00 |
| sauce bottles | 15 | 0 | 0 | 15 | 520 | 14–68 | 34.00 |
| strawberries | 48 | 0 | 0 | 48 | 2597 | 10–250 | 39.00 |
| tomatoes | 48 | 48 | 0 | 0 | 2817 | 8–450 | 28.50 |
Label checks and their limits
All published point coordinates in the selected subset were checked against the actual downloaded image dimensions; none were outside the image. Exact hashes and a conservative difference-hash comparison, with Hamming distance at most four, found no cross-split duplicates under those checks. Those checks cannot prove that every correlated scene or near duplicate has been removed.
Twelve illustrative label overlays were visually inspected in the executed study. That establishes that the coordinate interpretation and some examples are sensible. It is not an independent reannotation of all 25,895 objects. The article's held-out overlays are additional visualizations of the saved labels; creating them does not upgrade the annotation provenance.

Most selected images have three exemplar boxes: 485 have three, seven have four, and one has five. The executed calibration and held-out subsets each have three boxes per image. Validation has 22 images with three, one with four, and one with five. The assisted runner passed all supplied boxes, so “three examples everywhere” would have been an inaccurate description.
12. The calibration, validation, and test boundary
The acquired subset retained 272 images in the official training partition, 62 in validation, and 159 in test. The initial executed study used 24 from each partition, chosen by category round robin followed by stable filename hash.
| Study stage | Source partition | Images used | Role |
|---|---|---|---|
| Calibration | Official training split | 24 | Fit multiplicative count corrections and a median baseline |
| Validation | Official validation split | 24 | Rank configurations and select one winner per input track |
| Held-out evaluation | Official test split | 24 | Evaluate frozen recipes and declared comparison baselines |
Validation contains twelve grape images and twelve milk-carton images. Test contains six each of apples, eggs, sauce bottles, and strawberries. Categories are disjoint between these official splits. That avoids simply selecting on the same categories later reported as unseen, but it makes the validation problem unusually narrow. A scalar correction selected around dense grapes and cartons need not transfer to eggs or mixed bags of donated food.
The selection file records both winners, their recipes, their validation scores, the data-manifest hash, all three input-manifest hashes, and the selector source hash. Held-out inference requires the selection file to exist. Selection refuses to overwrite an already frozen file. These safeguards prevent accidental tuning against the test in the normal workflow; a researcher still has to respect the experimental boundary.
Once these held-out results influence the next model, prompt, resolution, or routing rule, they are development evidence. The next confirmatory comparison needs a new untouched holdout. Repeatedly improving this same 24-image score would turn it into another validation set.
13. What ran on the VM
Acquisition, local inference, checkpointing, calibration, configuration search, and scoring ran in a Python 3.12 environment on a CPU VM. There was no GPU. The environment exposed roughly eight CPUs of quota and about 22 GB of memory. Local model jobs generally used four Torch threads, with two concurrent jobs as the orchestration default.
The exact package lock is included. Its principal versions include CPU PyTorch 2.14.0, torchvision 0.29.0, transformers 4.57.3, NumPy 2.3.5, and Pillow 12.3.0. These are the recorded run's installed versions, not a recommendation to replace current dependencies in another environment.
The larger Qwen model ran remotely through an already connected Cloudflare Workers AI account. The VM stored its input identity, prompt, raw response, parsed result, usage, and timing. The hosted alias is not an immutable weight revision. Local models and the image source have pinned revisions; a future hosted rerun could change even when the request text is identical.
Detector views and resolution
Each detector could operate on the full image, four overlapping crops, or the union of both. The crops cover the top-left, top-right, bottom-left, and bottom-right, using normalized bounds 0–0.55 and 0.45–1 on each axis. Crop boxes are mapped back to full-image coordinates before suppression so overlap can be deduplicated.
The executed CPU search used OWL-v2 at 384 × 384 with positional-embedding interpolation, and DINO with short edge 384 and long-edge cap 640. Initial native-processor-resolution work was too slow for the intended sweep and remains diagnostic. Lower resolution may miss small items. These settings are implementation compromises, not official paper benchmark settings.
Direct and spatial VLM prompts
The proxy task supplies the target category and asks for a single count. One prompt requests a direct estimate. The other asks the model to count by spatial groups before returning the total. Each style uses a fresh conversation. There is no shared history containing another model's answer or a reference count.
Local SmolVLM used float32, disabled image splitting, greedy decoding, and a 32-token output cap. Hosted Qwen used temperature zero, thinking disabled, a strict schema with one nonnegative integer count, and a 256-token cap. A “spatial” instruction is only a prompt condition; without localized outputs it is not proof that a model enumerated every region faithfully.
The stopped Qwen 2B proxy pilot
The local Qwen 2B proxy adapter used float32, a 262,144-pixel cap, and a 32-token output budget. Eight calibration-image outputs were completed before the pilot was stopped. Latency was high, and explanatory spatial responses could exhaust the token cap before producing a usable count.
Those eight outputs are retained as diagnostics. They are not ranked as a complete study, and unrun images are not assigned invented predictions. The separate 11-photo original Qwen 2B comparison did complete. This distinction matters when summarizing “which models ran.”
FamNet and supplied examples
FamNet produces a density map conditioned on supplied visual examples. The raw prediction is the sum of that map. A second configuration divides the raw count by the median predicted density mass inside the exemplar boxes, with a denominator floor of 0.1. The search also considers training-calibrated versions of both.
FamNet receives the published example boxes, which identify representative target instances. It does not receive the reference count or the target-point annotations during inference. Its extra input places it in a separate assisted track. Its pretrained weights used FSC147's training partition, so calibration-split performance is not new evidence of generalization.
The vendored source and checkpoint are pinned. The model uses a pretrained ResNet50 backbone and the supplied FamNet counting head. This run does not claim to reproduce every adaptation or evaluation setting available in the original research code.
14. The complete 314-configuration search
The request to “hillclimb” became a finite, auditable search. We cached expensive predictions, then evaluated a registered set of postprocessing, calibration, and ensemble choices. We did not train 314 independent neural networks.
| Search component | Calculation | Configurations |
|---|---|---|
| OWL-v2 postprocessing | 8 score thresholds × 3 NMS thresholds × 3 view modes | 72 |
| DINO postprocessing | Same grid | 72 |
| VLM prompts | 2 completed model families × 2 prompt styles | 4 |
| FamNet outputs | Raw density sum or exemplar normalization | 2 |
| Constant-one baseline | One fixed predictor | 1 |
| Base total | 72 + 72 + 4 + 2 + 1 | 151 |
| Training-calibrated versions | One scalar correction for each base configuration | 151 |
| Training-median constant | Median of calibration reference counts | 1 |
| Median ensembles | All size-2, size-3, and size-4 subsets of four automatic family leaders | 11 |
| Total searched | 151 + 151 + 1 + 11 | 314 |
Score thresholds were 0.03, 0.05, 0.10, 0.15, 0.20, 0.30, 0.40, and 0.50. NMS IoU thresholds were 0.30, 0.50, and 0.70. View modes were full image, crops only, and their union. Family leaders for the ensemble step came from OWL, DINO, Qwen 27B, and SmolVLM on validation. Assisted FamNet outputs were not smuggled into automatic ensembles.
The multiplicative calibration factor was the median of reference / prediction across calibration pairs with a positive prediction, clipped to [0.1, 10]. With no eligible pair, the factor was one. Predictions were scaled and clamped to nonnegative values. Zero predictions remain zero; calibration cannot recover a category that the detector entirely missed.
This correction adjusts numerical bias. It does not remove false boxes, supply missing locations, or make an incorrect category interpretation correct. A low MAE after calibration is not evidence that the underlying detections became trustworthy stock records.
Median ensembles required every member to return a valid value for that row. They did not quietly drop a failed member and change the ensemble definition on difficult images. The primary objective was lowest validation MAE with complete output coverage. Rounded exact accuracy broke ties. Results with incomplete coverage could not win by omitting difficult examples.
The 314 rows include some functionally redundant recipes, such as cases in which calibration leaves predictions unchanged. The number describes evaluated configuration records, not 314 distinct scientific ideas. More resolutions, specialized models, learned counting heads, task-specific training, and capture strategies remain outside this finite search.
15. Metrics and denominators
For a reference count g and prediction p, absolute error is abs(p - g). MAE averages that error over valid predictions. RMSE takes the square root of the mean squared error and gives large mistakes more influence. WAPE divides the sum of absolute errors by the sum of reference counts over valid pairs.
| Metric | Definition in this study | Interpretation |
|---|---|---|
| Coverage | Valid answers / all requested targets | Did the model satisfy the output contract? |
| MAE | Mean absolute numerical error over valid pairs | Average number of target units wrong |
| RMSE | Square root of mean squared error | Sensitivity to large misses or overcounts |
| Rounded exact | round(prediction) == reference |
Exact integer agreement; Python's rounding semantics |
| Within tolerance | abs(p - g) <= max(1, 0.1 × g) |
At most one item or 10% error, whichever is larger |
| WAPE | Total absolute error / total reference count | Aggregate error relative to the counted volume |
| Presence precision | True positives / predicted positives | How often a suggested category is present |
| Presence recall | True positives / labelled positives | How many present categories are found |
Rounded exact accuracy and tolerance success use the full target denominator, so invalid outputs remain unsuccessful. Fractional density and calibrated predictions remain fractional for MAE and RMSE. Rounding them before computing error would change the study.
The original package task additionally reports within-one accuracy and signed count error. A negative signed error indicates undercounting. These metrics apply to the supported positive count labels, not every absent category. FSC147 does not provide an exhaustive mixed-inventory negative label set, so the proxy test does not measure whether a model hallucinates categories that were never queried.
The held-out reference counts total 889 across 24 image queries, approximately 37.04 per image. That explains why a constant one is weak on the proxy test while it looks superficially strong on the original low-count package labels. The choice of benchmark changes what a trivial baseline can exploit.
16. Freeze the winners, then inspect the test
The automatic winner was full-image OWL-v2 at score threshold 0.03 and NMS IoU 0.30, multiplied by a training-derived factor of 0.5744814582023885. Validation MAE was 37.57. The assisted winner was raw FamNet density sum, with validation MAE 16.94.
| Track | Frozen recipe | Validation MAE | Validation rounded exact |
|---|---|---|---|
| Automatic, target category supplied | Calibrated OWL-v2, global, score 0.03, NMS 0.30 | 37.57 | 1/24 |
| Supplied visual examples | FamNet raw density sum | 16.94 | 2/24 |
The low detector threshold and correction factor are important to publish together. The reported automatic result is not simply “OWL-v2.” It is a particular resolution, prompt, postprocessor, suppression setting, and calibration recipe selected on a narrow validation subset.
| Method | MAE ↓ | RMSE ↓ | Rounded exact | Within tolerance | WAPE | Coverage |
|---|---|---|---|---|---|---|
| Selected automatic OWL-v2 | 16.74 | 19.62 | 0/24 | 8.3% | 45.2% | 100.0% |
| FamNet with supplied examples | 10.19 | 17.18 | 1/24 | 29.2% | 27.5% | 100.0% |
| Qwen 3.8 27B, direct | 23.33 | 45.47 | 3/24 | 33.3% | 63.0% | 100.0% |
| SmolVLM 500M, direct | 22.83 | 40.36 | 3/24 | 29.2% | 61.6% | 100.0% |
| Training median | 21.71 | 37.42 | 1/24 | 12.5% | 58.6% | 100.0% |
| Always one | 36.04 | 50.42 | 0/24 | 0.0% | 97.3% | 100.0% |
The automatic winner reduced held-out MAE relative to the training-median baseline, but got zero of 24 rounded counts exactly right. Its WAPE was 45.2%. FamNet reduced aggregate error further but got only one count exact. Those are meaningful improvements over crude baselines and still poor foundations for automatically writing exact stock quantities.
Qwen 27B got three counts exact and one third within the tolerance, while having worse MAE than the selected automatic method. The metric conflict is real: a model can be right on several easier examples and make a few very large errors. It should not be hidden by promoting whichever metric flatters a preferred model.
The assisted winner and the famnet_raw baseline are the same recipe. The raw JSON retains both names to preserve the evaluation schema; the displayed main table counts them once. DINO did not run on the held-out set in this study because its recipes were not selected and it was not a declared final comparison baseline. Its complete development results remain in the validation appendix.
17. Category results expose the average's limits
| Category | Images | Selected OWL MAE | FamNet MAE | Qwen 27B MAE | SmolVLM MAE |
|---|---|---|---|---|---|
| apples | 6 | 24.40 | 6.17 | 48.33 | 44.33 |
| eggs | 6 | 13.73 | 13.77 | 4.33 | 13.33 |
| sauce bottles | 6 | 18.27 | 14.59 | 23.33 | 24.67 |
| strawberries | 6 | 10.54 | 6.23 | 17.33 | 9.00 |
The selected OWL recipe had no exact counts in any held-out category. FamNet was much stronger on apples than the language-model baselines, but its egg MAE was similar to OWL's. Qwen's egg MAE was considerably lower than its apple MAE. These are descriptive patterns from six images per category, not a stable category-routing policy.
A tempting next step would be to route eggs to Qwen and apples to FamNet because this table looks favorable. Doing that and reporting the resulting score on the same 24 images would select on the test. A routed system must be designed and tuned using development data, then evaluated on new held-out scenes.
The four largest absolute errors for the direct hosted Qwen prompt were:
| Image | Category | Reference | Qwen prediction | Absolute error |
|---|---|---|---|---|
| 2259.jpg | apples | 174 | 0.00 | 174.00 |
| 4916.jpg | strawberries | 91 | 0.00 | 91.00 |
| 6282.jpg | apples | 66 | 0.00 | 66.00 |
| 7438.jpg | sauce bottles | 48 | 0.00 | 48.00 |
These cases are selected by an explicitly stated error rule for diagnosis, not used to choose another winner.
The complete held-out appendix includes the published target points, supplied examples, reference counts, and each scored method's prediction for every image. It includes easy and difficult cases in the fixed test order. The count overlays illustrate the reference labels; they are not model detections.
18. Failures and corrections belong in the record
| Event | What happened | Treatment in the final record |
|---|---|---|
| Original DINO generic-token mapping | Packaging words could imply an unsupported food identity | Corrected adapter; initial output preserved as diagnostic |
| SmolVLM inventory format | Could not satisfy the original 25-category output contract | Reported as zero structured coverage, not silently converted to zero counts |
| Native detector resolution | Five-view CPU inference was too slow for the sweep | Reduced-resolution study; native outputs excluded from rankings |
| Qwen 2B proxy pilot | High latency and truncated explanatory outputs | Eight completed calibration outputs retained; incomplete pilot excluded |
| Remote image URLs in hosted inference | Provider did not allow fetching those URLs | Used the provider's supported inline image-byte input |
| Public photo disclosure check | Automatic approval review initially treated original photos as potentially private | Verified public source provenance before the approved cloud calls |
| FamNet assistance description | Metadata said three examples even when validation supplied four or five | Corrected description and preserved old source; numerical outputs unchanged |
| Slow repeated NMS scoring | The same box suppression was repeatedly recomputed | Vectorized equivalent implementation and cached threshold work |
The DINO and resolution changes affect the method and therefore its scientific interpretation. The FamNet metadata correction affects the description of extra input, not numerical predictions. The NMS optimization was verified for equivalence. Treating all changes as mere “cleanup” would obscure which results are comparable.
The cloud disclosure check was resolved by verifying that the images came from the requested public Internet benchmark. No private interview transcript, food-bank operational data, or account credential was sent as a counting input. No cloud token was extracted or saved in the deliverable. This was a finite execution, not a new standing service or recurring automation.
19. Reproducibility is more than a requirements file
The pipeline separates five kinds of state: input-only manifests, reference labels, raw inference checkpoints, selected recipes, and scored results. The inference paths use the manifests and images; the scorer joins predictions with labels afterward. FamNet's supplied examples are an explicit input exception and belong to its assisted track.
| Artifact | Role |
|---|---|
inputs.json, labels.json, sources.json |
Original-photo inputs, frozen references, and provenance |
protocol.json, llm_protocol.json |
Original detector and LLM task definitions |
models.json, llm_models.json |
Pinned local model revisions |
pipeline/corpus/manifest.json |
Acquired subset, source versions, hashes, and split identities |
pipeline/corpus/*_inputs.json |
Separate calibration, validation, and held-out inputs |
pipeline/corpus/labels.json |
Published point labels, examples, units, and image hashes |
pipeline/predictions/ |
Local per-image raw outputs |
pipeline/cloud-results/ |
Hosted prompts, responses, parsed outputs, and provenance |
pipeline/study/selection.json |
Frozen winners and validation scores |
pipeline/study/validation_leaderboard.json |
All 314 searched configurations and recipes |
pipeline/study/holdout_results.json |
Held-out aggregate, per-category, and row-level results |
pipeline/versions/ |
Archived selector and pre-correction runner source |
pipeline/study/verification.json |
Verification evidence for the completed benchmark |
Per-image checkpoints are keyed by source-code, input-manifest, and image hashes. Changed inputs or incompatible source cause a loud failure rather than silent reuse of stale predictions. The reduced-resolution scorer also checks the processor settings, so early native-resolution diagnostic outputs cannot accidentally enter the main sweep.
There is one explicitly documented compatibility migration for the metadata-only assistance correction. The original runner hash and source are preserved, and only the documented old/new source pair is accepted. That is a narrow exception, not a switch to ignore arbitrary cache mismatches. The selector source used at selection is retained at its recorded hash as well.
The original scoring code can replay saved guesses without loading neural weights. The proxy scorer imports more of the inference module and therefore uses the pinned environment. Replaying scores and rerunning models are different reproduction levels: the former checks arithmetic and selection logic; the latter also exercises dependency, model, and hosted-service behavior.
20. Exact model and source identities
| Local model repository | Pinned revision |
|---|---|
| google/owlv2-base-patch16-ensemble | cfd3195ba4ea9592eec887ded089f4c08eff231d |
| IDEA-Research/grounding-dino-tiny | a2bb814dd30d776dcf7e30523b00659f4f141c71 |
| Qwen/Qwen3-VL-2B-Instruct | 89644892e4d85e24eaac8bacfd4f463576704203 |
| HuggingFaceTB/SmolVLM-500M-Instruct | a7da5b986cb59b408707209984f360a5f4ad7e47 |
The FamNet counting-head checkpoint SHA-256 is 9fd1b35d7f9f4c1af736e4562389dd16ec2ce70a4b9c68dc61454aa631cc17c1. The official FSC147 source commit is 00ea1888c3a7c495ae06db0bddc3b90b7db8d52f. The image-mirror revision is 3e420cb6537e803dd6d4516623ce82a79c0317b8.
The hosted model identifier was @cf/qwen/qwen3.8-27b, verified through the connected account's model API. It is a dated provider alias rather than a repository revision that fixes exact weight bytes. Raw request and response records preserve what was requested and returned, but they cannot force a provider to serve identical weights in the future. GPT, Claude, Gemini, and the optional Mistral adapter were not evaluated.
| Artifact | SHA-256 |
|---|---|
| Selected labels | 7dddddd7606572abce4dfcda73db1032951270dee8be1804d0c95578a3643915 |
| Corpus manifest | 180f728269a74e355cccb9d0b60148f97c69b43be5d2ef3b2fb990052487d16a |
| Frozen selection | c8ddf52a7c5e5258944ae0d4e02397bf6c6f77fdb77d3bf454bb65629d18a4d7 |
| Selector at selection | 1868dfedd52967a09340a8eda8e7441a90d0d22a421fba02b08a428ff76cb452 |
| calibrate inputs | 8972ff3d7bb4eb6421eef568e7d2655501d2d0c32c1c6b37a9374f8e1d81e612 |
| validate inputs | 93b5c2cda7d819a795330dc06b5358177656c651d185f194dd37ba4cc1af9ddb |
| holdout inputs | 6ac14eb66ad856ad1cb73543888e68fe127af85c95c2e94e8deb9584c08f5a9f |
The full downloaded upstream annotation file, class map, and split map are identified in the source acquisition code and manifests. The selected 493-image labels preserve the points needed for this study. Public image display copies may be compressed for the website; the manifest hashes refer to evaluation inputs, not to those display derivatives.
21. Replaying the study and starting a new one
Download and extract the reproduction kit first. It contains source, results, and the exact 11 original input captures required by the scorers' image-hash checks. The main archive is sufficient for the original-photo and held-out scoring commands and all 15 tests. Extract the detector development supplement into the same parent directory to add the 48 DINO calibration and validation records and obtain the complete development evidence. Both archives have the same root folder. Weights and the 493-image proxy corpus are acquired separately. The acquisition script downloads the pinned FSC147 inputs from their recorded source. The original capture files let the public kit replay the saved original-photo predictions without relying on a later recapture of a changing source page.
python3 -m venv .venv
.venv/bin/python -m pip install \
--extra-index-url https://download.pytorch.org/whl/cpu \
-r pipeline/requirements-lock.txt
# Inspect and score the saved original-photo outputs.
.venv/bin/python benchmark.py score
.venv/bin/python llm_benchmark.py score
.venv/bin/python score_cloud_original.py
# Replay the frozen proxy evaluation from saved predictions.
.venv/bin/python pipeline/study.py final
The archive's public manual explains the distinction between cached replay and fresh inference. The published selection.json remains frozen. Do not delete it, tune against the exposed held-out images, and call the resulting result a new independent test.
# Acquire the selected proxy photographs and pinned local weights.
.venv/bin/python pipeline/acquire.py
.venv/bin/python pipeline/bootstrap.py
# Run or resume the documented experiment.
.venv/bin/python pipeline/orchestrate.py --workers 2
For uncached hosted requests, the standalone runner expects CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN in the environment. Cached hosted outputs require no token. Use an appropriately scoped credential through your own environment; no credential is included here. Image bytes are passed inline because remote image URLs were unavailable in the executed provider configuration.
The default bootstrap, acquisition, and orchestrator commands reconstruct the selected proxy setup. The retained local Qwen proxy adapter can also be invoked individually, but its expensive eight-image pilot is not a required stage of the completed five-family study. The README distinguishes that diagnostic adapter from the hosted Qwen family used for selection.
To expand beyond the cap, create a separate experiment version and run acquisition with --max-per-class 0. That changes the corpus and therefore requires new manifests, appropriate model execution, and a new evaluation design. Never change a corpus underneath an already scored study and continue using its old result labels.
22. Verification and compute cost
Fifteen benchmark tests passed: five for the original evaluator, four for the LLM evaluator, and six for the expanded pipeline. Their role is to check concrete risks such as unknown-label handling, invalid model output, metric arithmetic, suppression behavior, and recipe handling. Passing them does not validate the model's understanding of a food bank.
The faster vectorized NMS scorer was compared with the original reference implementation on the selected detector outputs for all 24 held-out images and matched. The frozen selection remained unchanged. The archive was checked for ZIP integrity and inclusion of the intended evidence. These checks support the fidelity of the reported experiment, not its external validity.
The saved hosted experiment contains 155 completed requests: 48 for calibration, 48 for validation, 48 for held-out proxy prompts, and 11 original-photo inventory requests. The usage record totals 51,034 input tokens, 4,033 output tokens, and approximately 3,261 Neurons. At the documented rate used in the record, the nominal cost is about $0.036 before free allocation. This is a usage estimate, not an invoice; small diagnostic probes and failed requests are excluded. Cloudflare Workers AI pricing.
That low marginal hosted inference estimate is not the cost of running the proposed product. Image acquisition, annotation review, staff correction, failed captures, infrastructure, and maintenance were not priced. CPU timings were observed under shared execution conditions rather than a controlled performance benchmark. A model that saves fractions of a cent but adds a minute of volunteer correction may be the worse operational choice.
23. What this supports for a food-bank product
The useful near-term role is a reviewed observation, with an explicit unit and timestamp. The system can suggest that a category appears in a photograph and propose a quantity. A staff member can correct the category, unit, event type, and count before anything becomes a verified inventory event.
| Layer | Example record | Meaning |
|---|---|---|
| Photo observation | Image, capture time, station, source session | What was observed at one place and time |
| Model suggestion | Category, visible-unit estimate, model version | An unverified interpretation of that observation |
| Reviewed observation | Corrected category and count, reviewer, verified time | A human-checked statement about the photo or station |
| Inventory event | Receipt, distribution, waste, transfer, correction, or reconciliation | A defined change or reconciliation in the stock ledger |
| Recipient-facing availability | Category status with verification time | A limited claim intended to help a person plan |
An observation is not automatically a delta. A second photograph of the same shelf should not increment inventory. A recipient haul should not be imported as remaining stock. A receipt may add stock only after its relationship to previous observations and its distribution readiness are established.
An illustrative event model could retain observation_id, source_session_id, station_id, captured_at, category, unit, suggested_count, reviewed_count, event_type, verified_at, and supersedes_observation_id. Those fields are a proposal for implementation discussion, not a schema deployed by this experiment. A stable event identity would support idempotent submission; a reconciliation event would distinguish a stock snapshot from an incoming donation.
Recipient-facing output should follow the strength of the evidence. “Produce last verified at 10:20” makes a narrower claim than “37 apples available now.” Whether to show available, limited, unavailable, or unknown—and when to expire a status—needs staff and recipient research. This benchmark did not calibrate a confidence threshold or a freshness window for those decisions.
Package identity and distributable stock
A package's contents should not be multiplied from an uncertain guess. A carton may have a known printed capacity, but that does not prove it is full. A sealed case might have a documented receiving quantity, but that fact comes from packaging or a manifest and needs its own provenance. Weight-based produce should retain a weight unit rather than be converted to pieces without measurement.
The photograph also does not establish expiry, storage history, distribution eligibility, dietary suitability, or an organization's decision that an item is ready to distribute. A useful workflow must retain those operational distinctions. They are not additional labels the model can safely invent from the scene.
24. A next experiment that could change the decision
The next domain study should collect images from separate real receiving sessions and stations, with operator involvement in defining the task. The split unit should be a session or scene group, not an image filename. Multiple views of one delivery belong together. Future holdouts should be selected before inspecting candidate performance.
| Proposed measurement | Why it matters | Reference or comparison |
|---|---|---|
| Category precision and recall | Avoid sending people toward categories that are not present | Independently reviewed category labels, including absent classes |
| Count error by unit | Expose package-versus-content mistakes | Visible package centers, quantity records, and adjudicated uncertainty |
| Correction time per observation | Determine whether assistance saves staff effort | Manual entry versus model-assisted entry |
| Duplicate event rate | Prevent repeated photos inflating inventory | Session identities and reconciled event history |
| Availability freshness | Understand how quickly a verified status becomes stale | Repeated station checks and distribution events |
| Abstention and review burden | Evaluate whether uncertainty helps or merely shifts work | Coverage-error curves and operator decisions |
| Recipient usefulness | Test the original travel-planning hypothesis | Appropriate field evaluation of availability information |
At least two reviewers should establish the count unit and resolve ambiguous labels, with an adjudication trail. Labels should distinguish visible counts, known contents from another source, occluded or uncountable objects, and unknown stock. Model predictions may accelerate annotation, but unreviewed guesses must not become evaluation truth.
Specialized counting adapters should return localized evidence where possible. CountGD++, the 2026 Count Anything model, and AdaCount are candidates from the research review. A learned detector or segmentation model trained on real receiving-session data is another candidate. Barcode or OCR-assisted identity, controlled capture regions, a second viewpoint, and weighing are different techniques with different human and hardware costs. None has been tested in the current result table.
Training or fine-tuning should happen on development data, with evaluation by source/session groups. A nested validation design can reduce the optimism created by selecting among many recipes on a tiny validation set. If category routing or ensembles are added, the routing itself is a trained or selected component and belongs inside that development boundary.
Acceptance thresholds should be agreed with operators based on the cost of a false availability claim and the time available for review. We should not invent a universal “95% accurate” gate after seeing a convenient metric. The measurable decision is whether the entire workflow improves useful, recent stock information at an acceptable correction burden.
25. Threats to validity, explicitly
| Limitation | Consequence |
|---|---|
| Original photos are recipient hauls | They do not measure remaining food-bank inventory |
| Three original source posts, nine overlapping gallery views | Strong dependence and convenience-sampling bias |
| Weak original count labels | Caption interpretation and package normalization can be wrong |
| Assistant-made presence labels | No independent expert audit of category truth |
| Twenty of thirty counts equal one | Exact accuracy is easy to inflate with a trivial predictor |
| No original localization ground truth | Correct counts can come from wrong objects |
| FSC147 is a grocery proxy | Improvement need not transfer to donated mixed packages |
| Only 72 proxy images evaluated | The 493-image acquisition should not be mistaken for evaluation coverage |
| Only two validation and four test categories | Configuration selection and transfer evidence are narrow |
| Public Internet inputs | Pretraining overlap and memorization cannot be ruled out |
| FamNet receives example boxes and was pretrained on FSC147 train | It has additional task information and different training exposure |
| Reduced detector resolution | Accuracy may be limited by a CPU execution compromise |
| Larger Qwen also gets schema enforcement | Model size and format effects are confounded |
| Hosted model alias | Exact weight-level reproducibility is unavailable |
| Repeated exploratory stages | Original-photo results are not an untouched confirmation test |
| No staff or recipient field test | No measured improvement in correction time or avoided trips |
| Finite search and untested specialized methods | No claim of exhaustive algorithm coverage or global SOTA |
The exhaustive part of this article is the account of the executed study: its data, decisions, outputs, and limits. It is not a claim to have exhausted the research field. The result that matters today is that the pipeline is reusable, the evidence can be inspected, and the operational hypothesis is still open.
26. Evidence appendices
The remaining sections are generated from the saved machine-readable artifacts. They retain the original taxonomy, missing values, fixed image order, and frozen configuration names. A dash means unknown or unavailable; an explicit zero is a prediction or label of zero. Tables do not substitute a missing value with zero.
Image captions link to the original post or pinned dataset source. Published reference points and supplied example boxes are visually distinct. The photographs remain owned by their original creators; neither this article nor the code license grants blanket rights to the underlying image collection.
Appendix A. Every original positive count target
| Image | Category | Reference | Qwen 2B | Qwen 27B | Reference basis |
|---|---|---|---|---|---|
| university.jpg | egg_carton | 1 | 1 | 1 | Author: a dozen eggs; one closed carton; package-unit normalization, not twelve visible eggs. |
| university.jpg | instant_noodles | 3 | 2 | 3 | Author: 3 cup ramen; three separate cartons visible. |
| university.jpg | mac_cheese | 2 | 1 | 1 | Author: 2 kraft macaroni boxes; both boxes visible. |
| university.jpg | dry_pasta | 1 | 1 | 2 | Author: 1 box of pasta; excludes the separate macaroni-and-cheese class. |
| university.jpg | peanut_butter | 1 | 1 | 1 | Author: a container of peanut butter; singular package. |
| university.jpg | meat | 1 | 1 | 1 | Author: turkey pepperoni; singular visible package; vegan crumbles explicitly not pictured. |
| university.jpg | tortillas | 1 | 1 | 1 | Author: a pack of 10 corn tortillas; count one package, not contents. |
| haul2025.jpg | milk | 1 | 1 | 1 | Author lists vanilla almond milk; one visible jug. Includes dairy alternatives. |
| haul2025.jpg | tortillas | 1 | 0 | 0 | Author lists whole wheat tortillas; one visible package. |
| gallery01.jpg | egg_carton | 1 | 1 | 1 | Author: 1 dozen eggs; one carton, contents not inferred. |
| gallery01.jpg | cheese | 1 | 0 | 1 | Author: 1 pack of cheese slices; visible blue packet. |
| gallery01.jpg | meat | 3 | 2 | 3 | Author: 1 ribs + 1 sausages + 1 turkey burgers; three visible packages, fish excluded. |
| gallery01.jpg | fish | 1 | 2 | 1 | Author: 1 pack fish fillets; visible clear package. |
| gallery02.jpg | meat | 1 | 1 | 1 | Author: 1 large pack ribs; same ribs as gallery01, not an additional receipt. |
| gallery02.jpg | strawberries | 2 | 1 | 2 | Author: 2 large packs strawberry; two stacked containers visible. Additional unpictured pack excluded. |
| gallery02.jpg | grapes | 2 | 1 | 3 | Author: 1 large red grape pack + 1 small green grape bag; both visible. |
| gallery02.jpg | mushrooms | 1 | 1 | 1 | Author: 1 large pack mushrooms; additional unpictured pack excluded. |
| gallery02.jpg | dip | 6 | 2 | 3 | Author: 6 veggie dips; three pairs of green-lidded tubs, right pair partly clipped. |
| gallery03.jpg | strawberries | 2 | 1 | 1 | Author: 2 large packs strawberry; same two stacked containers as gallery02. |
| gallery04.jpg | cauliflower | 1 | 1 | 0 | Author: 1 head cauliflower; one wrapped head visible. |
| gallery06.jpg | mac_cheese | 2 | 0 | 0 | Author: 2 boxes mac and cheese; Goodles and Annie boxes visible. |
| gallery06.jpg | dry_pasta | 1 | 1 | 1 | Author: 1 pack linguine; elbow macaroni pack outside this view. |
| gallery06.jpg | rice | 1 | 1 | 1 | Author: 1 bag basmati rice; same bag repeated in gallery07. |
| gallery07.jpg | dry_pasta | 1 | 1 | 0 | Author: 1 large elbow macaroni pack; edge of the package visible at left. |
| gallery07.jpg | rice | 1 | 1 | 1 | Author: 1 bag basmati rice; same bag as gallery06. |
| gallery07.jpg | broth | 3 | 0 | 4 | Author: 1 Tom yum + 1 chicken + 1 ramen broth; three cartons. Egg-white substitute cartons excluded. |
| gallery07.jpg | juice | 2 | 0 | 0 | Author: 2 boxes apple juice; two Allen cartons, one behind the other. |
| gallery08.jpg | cereal | 1 | 0 | 0 | Author: 1 box cereal; Cheerios visible at back. |
| gallery09.jpg | tortillas | 1 | 1 | 1 | Author: 1 large pack mini wraps; visible bag on top. |
| gallery09.jpg | cereal | 1 | 0 | 0 | Author: 1 box cereal; same box as gallery08. |
Appendix B. All original photos, labels, and LLM guesses
Presence labels are 1 (present), 0 (absent), or unknown. Count labels are only supplied where source evidence supports the unit and quantity. SmolVLM had no usable structured answers in this task. Each panel retains its raw model text.
university.jpg · source group university

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 1 | 1 | 1 | — | 1 | Author: a dozen eggs; one closed carton; package-unit normalization, not twelve visible eggs. |
| instant_noodles | 1 | 3 | 2 | — | 3 | Author: 3 cup ramen; three separate cartons visible. |
| mac_cheese | 1 | 2 | 1 | — | 1 | Author: 2 kraft macaroni boxes; both boxes visible. |
| dry_pasta | 1 | 1 | 1 | — | 2 | Author: 1 box of pasta; excludes the separate macaroni-and-cheese class. |
| peanut_butter | 1 | 1 | 1 | — | 1 | Author: a container of peanut butter; singular package. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 1 | 1 | 1 | — | 1 | Author: turkey pepperoni; singular visible package; vegan crumbles explicitly not pictured. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 1 | 1 | 1 | — | 1 | Author: a pack of 10 corn tortillas; count one package, not contents. |
| rice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 1 | — | 5 | — | 4 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
{
"egg_carton": 1,
"instant_noodles": 2,
"mac_cheese": 1,
"dry_pasta": 1,
"peanut_butter": 1,
"milk": 0,
"cheese": 1,
"meat": 1,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 1,
"apple": 0,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 1,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 5
}smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 4,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 2,
"egg_carton": 1,
"fish": 0,
"grapes": 0,
"instant_noodles": 3,
"juice": 0,
"mac_cheese": 1,
"meat": 1,
"milk": 0,
"mushrooms": 0,
"orange": 0,
"peanut_butter": 1,
"rice": 0,
"strawberries": 0,
"tortillas": 1,
"zucchini": 0
}haul2025.jpg · source group haul2025

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | — | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 1 | 1 | 1 | — | 1 | Author lists vanilla almond milk; one visible jug. Includes dairy alternatives. |
| cheese | 1 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 1 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 1 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 1 | — | 4 | — | 4 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 1 | — | 3 | — | 3 | Presence: assistant visual audit; count unscored. |
| zucchini | 1 | — | 1 | — | 1 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 1 | 1 | 0 | — | 0 | Author lists whole wheat tortillas; one visible package. |
| rice | — | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 1 | — | 1 | — | 3 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
{
"egg_carton": 1,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 1,
"cheese": 0,
"meat": 1,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 4,
"bell_pepper": 3,
"zucchini": 1,
"cauliflower": 1,
"bagels": 1,
"tortillas": 0,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 1
}smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 3,
"broth": 0,
"canned_food": 3,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 1,
"mushrooms": 0,
"orange": 4,
"peanut_butter": 0,
"rice": 0,
"strawberries": 0,
"tortillas": 0,
"zucchini": 1
}gallery01.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 1 | 1 | 1 | — | 1 | Author: 1 dozen eggs; one carton, contents not inferred. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 1 | 1 | 0 | — | 1 | Author: 1 pack of cheese slices; visible blue packet. |
| meat | 1 | 3 | 2 | — | 3 | Author: 1 ribs + 1 sausages + 1 turkey burgers; three visible packages, fish excluded. |
| fish | 1 | 1 | 2 | — | 1 | Author: 1 pack fish fillets; visible clear package. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 0 | — | 1 | — | 1 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 1,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 2,
"fish": 2,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 1,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 0
}
```smolvlm_500m raw response
12qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 0,
"cauliflower": 0,
"cereal": 0,
"cheese": 1,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 1,
"fish": 1,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 3,
"milk": 0,
"mushrooms": 0,
"orange": 0,
"peanut_butter": 0,
"rice": 1,
"strawberries": 0,
"tortillas": 0,
"zucchini": 0
}gallery02.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 1 | 1 | 1 | — | 1 | Author: 1 large pack ribs; same ribs as gallery01, not an additional receipt. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 1 | 2 | 1 | — | 2 | Author: 2 large packs strawberry; two stacked containers visible. Additional unpictured pack excluded. |
| grapes | 1 | 2 | 1 | — | 3 | Author: 1 large red grape pack + 1 small green grape bag; both visible. |
| mushrooms | 1 | 1 | 1 | — | 1 | Author: 1 large pack mushrooms; additional unpictured pack excluded. |
| dip | 1 | 6 | 2 | — | 3 | Author: 6 veggie dips; three pairs of green-lidded tubs, right pair partly clipped. |
| apple | 1 | — | 2 | — | 4 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 1,
"fish": 0,
"strawberries": 1,
"grapes": 1,
"mushrooms": 1,
"dip": 2,
"apple": 2,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 1,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 0
}
```smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 4,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 0,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 3,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 3,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 1,
"milk": 0,
"mushrooms": 1,
"orange": 0,
"peanut_butter": 0,
"rice": 0,
"strawberries": 2,
"tortillas": 0,
"zucchini": 0
}gallery03.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 1 | 2 | 1 | — | 1 | Author: 2 large packs strawberry; same two stacked containers as gallery02. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 1 | — | 1 | — | 1 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 2 | Presence: assistant visual audit; count unscored. |
| apple | 1 | — | 5 | — | 10 | Presence: assistant visual audit; count unscored. |
| orange | 1 | — | 8 | — | 10 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 1 | — | 1 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 1 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 1 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 0,
"fish": 0,
"strawberries": 1,
"grapes": 0,
"mushrooms": 1,
"dip": 0,
"apple": 5,
"orange": 8,
"bell_pepper": 1,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 1
}smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 10,
"bagels": 1,
"bell_pepper": 1,
"broth": 1,
"canned_food": 0,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 2,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 1,
"orange": 10,
"peanut_butter": 0,
"rice": 0,
"strawberries": 1,
"tortillas": 0,
"zucchini": 0
}gallery04.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 1 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 1 | — | 10 | — | 12 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 1 | 1 | 1 | — | 0 | Author: 1 head cauliflower; one wrapped head visible. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 0 | — | 3 | — | 0 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 0,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 10,
"bell_pepper": 1,
"zucchini": 1,
"cauliflower": 1,
"bagels": 0,
"tortillas": 0,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 3
}
```smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 0,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 1,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 0,
"orange": 12,
"peanut_butter": 0,
"rice": 0,
"strawberries": 0,
"tortillas": 0,
"zucchini": 0
}gallery05.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 1 | — | 8 | — | 8 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 1 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 0,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 8,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 0
}
```smolvlm_500m raw response
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 0,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 0,
"orange": 8,
"peanut_butter": 0,
"rice": 0,
"strawberries": 0,
"tortillas": 0,
"zucchini": 0
}gallery06.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 1 | 2 | 0 | — | 0 | Author: 2 boxes mac and cheese; Goodles and Annie boxes visible. |
| dry_pasta | 1 | 1 | 1 | — | 1 | Author: 1 pack linguine; elbow macaroni pack outside this view. |
| peanut_butter | 0 | — | 0 | — | 1 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 1 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 1 | 1 | 1 | — | 1 | Author: 1 bag basmati rice; same bag repeated in gallery07. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 1 | — | 1 | — | 2 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 1,
"peanut_butter": 0,
"milk": 0,
"cheese": 1,
"meat": 0,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 1,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 1
}
```smolvlm_500m raw response
10.0.qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 2,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 1,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 0,
"orange": 0,
"peanut_butter": 1,
"rice": 1,
"strawberries": 0,
"tortillas": 0,
"zucchini": 0
}gallery07.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 1 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 1 | 1 | 1 | — | 0 | Author: 1 large elbow macaroni pack; edge of the package visible at left. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| rice | 1 | 1 | 1 | — | 1 | Author: 1 bag basmati rice; same bag as gallery06. |
| broth | 1 | 3 | 0 | — | 4 | Author: 1 Tom yum + 1 chicken + 1 ramen broth; three cartons. Egg-white substitute cartons excluded. |
| juice | 1 | 2 | 0 | — | 0 | Author: 2 boxes apple juice; two Allen cartons, one behind the other. |
| cereal | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| canned_food | 1 | — | 10 | — | 18 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 1,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 0,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 1,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 10
}
```smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 4,
"canned_food": 18,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 0,
"orange": 0,
"peanut_butter": 0,
"rice": 1,
"strawberries": 0,
"tortillas": 0,
"zucchini": 0
}gallery08.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 1 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| tortillas | 0 | — | 0 | — | 1 | Presence: assistant visual audit; count unscored. |
| rice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 1 | 1 | 0 | — | 0 | Author: 1 box cereal; Cheerios visible at back. |
| canned_food | 1 | — | 0 | — | 10 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
```json
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 0,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 0,
"tortillas": 0,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 0
}
```smolvlm_500m raw response
95.qwen38 raw response
{
"apple": 0,
"bagels": 0,
"bell_pepper": 0,
"broth": 0,
"canned_food": 10,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 0,
"orange": 0,
"peanut_butter": 0,
"rice": 0,
"strawberries": 0,
"tortillas": 1,
"zucchini": 0
}gallery09.jpg · source group april2026

| Category | Presence reference | Count reference | Qwen 2B | SmolVLM | Qwen 27B | Evidence |
|---|---|---|---|---|---|---|
| egg_carton | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| instant_noodles | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mac_cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dry_pasta | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| peanut_butter | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| milk | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cheese | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| meat | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| fish | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| strawberries | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| grapes | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| mushrooms | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| dip | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| apple | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| orange | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bell_pepper | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| zucchini | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cauliflower | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| bagels | 1 | — | 1 | — | 1 | Presence: assistant visual audit; count unscored. |
| tortillas | 1 | 1 | 1 | — | 1 | Author: 1 large pack mini wraps; visible bag on top. |
| rice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| broth | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| juice | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
| cereal | 1 | 1 | 0 | — | 0 | Author: 1 box cereal; same box as gallery08. |
| canned_food | 0 | — | 0 | — | 0 | Presence: assistant visual audit; count unscored. |
qwen3_vl_2b raw response
{
"egg_carton": 0,
"instant_noodles": 0,
"mac_cheese": 0,
"dry_pasta": 0,
"peanut_butter": 0,
"milk": 0,
"cheese": 0,
"meat": 0,
"fish": 0,
"strawberries": 0,
"grapes": 0,
"mushrooms": 0,
"dip": 0,
"apple": 0,
"orange": 0,
"bell_pepper": 0,
"zucchini": 0,
"cauliflower": 0,
"bagels": 1,
"tortillas": 1,
"rice": 0,
"broth": 0,
"juice": 0,
"cereal": 0,
"canned_food": 0
}smolvlm_500m raw response
1.0.qwen38 raw response
{
"apple": 0,
"bagels": 1,
"bell_pepper": 0,
"broth": 0,
"canned_food": 0,
"cauliflower": 0,
"cereal": 0,
"cheese": 0,
"dip": 0,
"dry_pasta": 0,
"egg_carton": 0,
"fish": 0,
"grapes": 0,
"instant_noodles": 0,
"juice": 0,
"mac_cheese": 0,
"meat": 0,
"milk": 0,
"mushrooms": 0,
"orange": 0,
"peanut_butter": 0,
"rice": 0,
"strawberries": 0,
"tortillas": 1,
"zucchini": 0
}Appendix C. All 24 held-out proxy images
Red circles mark the published target points. Green rectangles mark the three supplied example boxes used by FamNet. These are reference annotations, not model predictions. The unannotated photo remains beneath the overlay; every model ran before this visualization was made.
2181.jpg · apples · reference 12

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 31.60 | 19.60 | No |
| FamNet with supplied examples | 14.61 | 2.61 | No |
| Qwen 3.8 27B, direct | 13.00 | 1.00 | No |
| SmolVLM 500M, direct | 5.00 | 7.00 | No |
| Training median | 24.50 | 12.50 | No |
| Always one | 1.00 | 11.00 | No |
7580.jpg · eggs · reference 15

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 25.85 | 10.85 | No |
| FamNet with supplied examples | 17.21 | 2.21 | No |
| Qwen 3.8 27B, direct | 15.00 | 0.00 | Yes |
| SmolVLM 500M, direct | 15.00 | 0.00 | Yes |
| Training median | 24.50 | 9.50 | No |
| Always one | 1.00 | 14.00 | No |
7567.jpg · sauce bottles · reference 68

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 70.66 | 2.66 | No |
| FamNet with supplied examples | 77.54 | 9.54 | No |
| Qwen 3.8 27B, direct | 60.00 | 8.00 | No |
| SmolVLM 500M, direct | 15.00 | 53.00 | No |
| Training median | 24.50 | 43.50 | No |
| Always one | 1.00 | 67.00 | No |
5837.jpg · strawberries · reference 18

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 28.72 | 10.72 | No |
| FamNet with supplied examples | 6.10 | 11.90 | No |
| Qwen 3.8 27B, direct | 17.00 | 1.00 | No |
| SmolVLM 500M, direct | 17.00 | 1.00 | No |
| Training median | 24.50 | 6.50 | No |
| Always one | 1.00 | 17.00 | No |
6282.jpg · apples · reference 66

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 46.53 | 19.47 | No |
| FamNet with supplied examples | 72.69 | 6.69 | No |
| Qwen 3.8 27B, direct | 0.00 | 66.00 | No |
| SmolVLM 500M, direct | 2.00 | 64.00 | No |
| Training median | 24.50 | 41.50 | No |
| Always one | 1.00 | 65.00 | No |
7145.jpg · eggs · reference 24

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 30.45 | 6.45 | No |
| FamNet with supplied examples | 20.93 | 3.07 | No |
| Qwen 3.8 27B, direct | 20.00 | 4.00 | No |
| SmolVLM 500M, direct | 25.00 | 1.00 | No |
| Training median | 24.50 | 0.50 | Yes |
| Always one | 1.00 | 23.00 | No |
6823.jpg · sauce bottles · reference 23

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 54.58 | 31.58 | No |
| FamNet with supplied examples | 24.12 | 1.12 | No |
| Qwen 3.8 27B, direct | 0.00 | 23.00 | No |
| SmolVLM 500M, direct | 20.00 | 3.00 | No |
| Training median | 24.50 | 1.50 | No |
| Always one | 1.00 | 22.00 | No |
4916.jpg · strawberries · reference 91

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 83.30 | 7.70 | No |
| FamNet with supplied examples | 79.57 | 11.43 | No |
| Qwen 3.8 27B, direct | 0.00 | 91.00 | No |
| SmolVLM 500M, direct | 42.00 | 49.00 | No |
| Training median | 24.50 | 66.50 | No |
| Always one | 1.00 | 90.00 | No |
2184.jpg · apples · reference 33

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 57.45 | 24.45 | No |
| FamNet with supplied examples | 33.64 | 0.64 | No |
| Qwen 3.8 27B, direct | 0.00 | 33.00 | No |
| SmolVLM 500M, direct | 4.00 | 29.00 | No |
| Training median | 24.50 | 8.50 | No |
| Always one | 1.00 | 32.00 | No |
5915.jpg · eggs · reference 12

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 22.98 | 10.98 | No |
| FamNet with supplied examples | 22.60 | 10.60 | No |
| Qwen 3.8 27B, direct | 10.00 | 2.00 | No |
| SmolVLM 500M, direct | 19.00 | 7.00 | No |
| Training median | 24.50 | 12.50 | No |
| Always one | 1.00 | 11.00 | No |
7071.jpg · sauce bottles · reference 44

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 52.28 | 8.28 | No |
| FamNet with supplied examples | 100.94 | 56.94 | No |
| Qwen 3.8 27B, direct | 0.00 | 44.00 | No |
| SmolVLM 500M, direct | 20.00 | 24.00 | No |
| Training median | 24.50 | 19.50 | No |
| Always one | 1.00 | 43.00 | No |
4900.jpg · strawberries · reference 14

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 18.38 | 4.38 | No |
| FamNet with supplied examples | 7.17 | 6.83 | No |
| Qwen 3.8 27B, direct | 15.00 | 1.00 | No |
| SmolVLM 500M, direct | 11.00 | 3.00 | No |
| Training median | 24.50 | 10.50 | No |
| Always one | 1.00 | 13.00 | No |
2259.jpg · apples · reference 174

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 127.53 | 46.47 | No |
| FamNet with supplied examples | 180.01 | 6.01 | No |
| Qwen 3.8 27B, direct | 0.00 | 174.00 | No |
| SmolVLM 500M, direct | 20.00 | 154.00 | No |
| Training median | 24.50 | 149.50 | No |
| Always one | 1.00 | 173.00 | No |
7128.jpg · eggs · reference 49

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 23.55 | 25.45 | No |
| FamNet with supplied examples | 45.77 | 3.23 | No |
| Qwen 3.8 27B, direct | 48.00 | 1.00 | No |
| SmolVLM 500M, direct | 0.00 | 49.00 | No |
| Training median | 24.50 | 24.50 | No |
| Always one | 1.00 | 48.00 | No |
7438.jpg · sauce bottles · reference 48

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 63.19 | 15.19 | No |
| FamNet with supplied examples | 51.07 | 3.07 | No |
| Qwen 3.8 27B, direct | 0.00 | 48.00 | No |
| SmolVLM 500M, direct | 20.00 | 28.00 | No |
| Training median | 24.50 | 23.50 | No |
| Always one | 1.00 | 47.00 | No |
4903.jpg · strawberries · reference 18

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 28.72 | 10.72 | No |
| FamNet with supplied examples | 22.09 | 4.09 | No |
| Qwen 3.8 27B, direct | 19.00 | 1.00 | No |
| SmolVLM 500M, direct | 17.00 | 1.00 | No |
| Training median | 24.50 | 6.50 | No |
| Always one | 1.00 | 17.00 | No |
2178.jpg · apples · reference 10

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 35.04 | 25.04 | No |
| FamNet with supplied examples | 14.05 | 4.05 | No |
| Qwen 3.8 27B, direct | 10.00 | 0.00 | Yes |
| SmolVLM 500M, direct | 12.00 | 2.00 | No |
| Training median | 24.50 | 14.50 | No |
| Always one | 1.00 | 9.00 | No |
5916.jpg · eggs · reference 38

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 60.90 | 22.90 | No |
| FamNet with supplied examples | 87.60 | 49.60 | No |
| Qwen 3.8 27B, direct | 54.00 | 16.00 | No |
| SmolVLM 500M, direct | 17.00 | 21.00 | No |
| Training median | 24.50 | 13.50 | No |
| Always one | 1.00 | 37.00 | No |
7076.jpg · sauce bottles · reference 31

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 60.90 | 29.90 | No |
| FamNet with supplied examples | 33.76 | 2.76 | No |
| Qwen 3.8 27B, direct | 40.00 | 9.00 | No |
| SmolVLM 500M, direct | 12.00 | 19.00 | No |
| Training median | 24.50 | 6.50 | No |
| Always one | 1.00 | 30.00 | No |
5828.jpg · strawberries · reference 12

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 31.60 | 19.60 | No |
| FamNet with supplied examples | 11.86 | 0.14 | Yes |
| Qwen 3.8 27B, direct | 12.00 | 0.00 | Yes |
| SmolVLM 500M, direct | 12.00 | 0.00 | Yes |
| Training median | 24.50 | 12.50 | No |
| Always one | 1.00 | 11.00 | No |
6264.jpg · apples · reference 16

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 4.60 | 11.40 | No |
| FamNet with supplied examples | 33.03 | 17.03 | No |
| Qwen 3.8 27B, direct | 0.00 | 16.00 | No |
| SmolVLM 500M, direct | 6.00 | 10.00 | No |
| Training median | 24.50 | 8.50 | No |
| Always one | 1.00 | 15.00 | No |
5940.jpg · eggs · reference 27

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 32.75 | 5.75 | No |
| FamNet with supplied examples | 13.09 | 13.91 | No |
| Qwen 3.8 27B, direct | 30.00 | 3.00 | No |
| SmolVLM 500M, direct | 25.00 | 2.00 | No |
| Training median | 24.50 | 2.50 | No |
| Always one | 1.00 | 26.00 | No |
7586.jpg · sauce bottles · reference 36

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 58.02 | 22.02 | No |
| FamNet with supplied examples | 50.12 | 14.12 | No |
| Qwen 3.8 27B, direct | 44.00 | 8.00 | No |
| SmolVLM 500M, direct | 15.00 | 21.00 | No |
| Training median | 24.50 | 11.50 | No |
| Always one | 1.00 | 35.00 | No |
286.jpg · strawberries · reference 10

| Method | Prediction | Absolute error | Rounded exact |
|---|---|---|---|
| Selected automatic OWL-v2 | 20.11 | 10.11 | No |
| FamNet with supplied examples | 7.01 | 2.99 | No |
| Qwen 3.8 27B, direct | 0.00 | 10.00 | No |
| SmolVLM 500M, direct | 10.00 | 0.00 | Yes |
| Training median | 24.50 | 14.50 | No |
| Always one | 1.00 | 9.00 | No |
Appendix D. Exact prompts and output settings
Original 25-category inventory prompt, verbatim
Inspect this photograph and estimate how many visible units belong to each food category below. Give your best visual guess. Count only what is visible in this one photograph; do not infer hidden stock or use typical food-bank quantities.Count packages, not their contents: one egg carton, noodle cup, pasta package, cheese package, meat tray, fish package, fruit container, dip tub, bag of bagels, or tortilla package is one unit. Count distinct partly visible packages if identifiable. For loose apples, oranges, bell peppers, zucchini and cauliflower, count individual visible pieces. Do not count pictures printed on packaging.
Keep categories separate: mac_cheese means a packaged macaroni-and-cheese meal and is excluded from dry_pasta and cheese. meat includes poultry and cured meat but excludes fish. fish means packages of fish fillets, not canned fish. milk includes plant-based milk but excludes yogurt, sour cream and egg substitutes. dip excludes yogurt and sour cream. canned_food means human food cans (including canned fish), excluding drinks and pet food. The photograph can also contain foods or non-food objects outside these categories; ignore them.
Return only one JSON object with every category key listed below and a nonnegative integer count as its value. Use 0 when the category is not visibly present. Do not include explanations or Markdown.
egg_carton: a carton of eggs
instant_noodles: a cup of instant noodles
mac_cheese: a box of macaroni and cheese
dry_pasta: a package of dry pasta
peanut_butter: a jar of peanut butter
milk: a container of milk
cheese: a package of cheese
meat: a package of meat
fish: a package of fish fillets
strawberries: a container of strawberries
grapes: a bag or container of grapes
mushrooms: a container of mushrooms
dip: a tub of dip
apple: an apple
orange: an orange
bell_pepper: a bell pepper
zucchini: a zucchini
cauliflower: a head of cauliflower
bagels: a bag of bagels
tortillas: a package of tortillas
rice: a bag of rice
broth: a carton of broth
juice: a carton of juice
cereal: a box of breakfast cereal
canned_food: a can of food
Hosted proxy direct prompt: one calibration example
Count the visible bread rolls in this photograph. The counting unit is one individual visible item, including identifiable partially occluded units. Do not infer hidden stock or count pictures on packaging. Return only JSON with one nonnegative integer field named count.Hosted proxy spatial prompt: one calibration example
Count the visible rice bags in this photograph. The counting unit is one package, including identifiable partially occluded units. Do not infer hidden stock or count pictures on packaging. Work through the spatial groups and avoid double-counting the same item. Return only JSON with one nonnegative integer field named count.Appendix E. Every validation configuration
The order is the saved ranking: complete coverage first, then MAE, then rounded exact accuracy. Automatic and assisted tracks remain labelled. These are validation scores, not held-out scores. Full recipes are in the downloadable JSON.
Expand all 314 configurations
| Rank | Configuration | Track | MAE | RMSE | Exact / 24 | Coverage |
|---|---|---|---|---|---|---|
| 1 | famnet:raw | exemplar_assisted | 16.94 | 22.47 | 2/24 | 100.0% |
| 2 | famnet:exemplar_normalized:calibrated | exemplar_assisted | 17.10 | 21.05 | 0/24 | 100.0% |
| 3 | famnet:raw:calibrated | exemplar_assisted | 17.21 | 22.85 | 2/24 | 100.0% |
| 4 | famnet:exemplar_normalized | exemplar_assisted | 18.81 | 22.64 | 0/24 | 100.0% |
| 5 | owl:global:threshold=0.03:nms=0.3:calibrated | automatic | 37.57 | 59.66 | 1/24 | 100.0% |
| 6 | median(owl:global:threshold=0.03:nms=0.3:calibrated,qwen38:spatial) | automatic | 37.75 | 61.19 | 0/24 | 100.0% |
| 7 | median(owl:global:threshold=0.03:nms=0.3:calibrated,dino:global:threshold=0.03:nms=0.3,qwen38:spatial) | automatic | 40.35 | 61.04 | 0/24 | 100.0% |
| 8 | qwen38:spatial | automatic | 41.04 | 71.06 | 1/24 | 100.0% |
| 9 | qwen38:spatial:calibrated | automatic | 41.04 | 71.06 | 1/24 | 100.0% |
| 10 | owl:global:threshold=0.03:nms=0.5:calibrated | automatic | 41.05 | 63.75 | 0/24 | 100.0% |
| 11 | owl:global:threshold=0.05:nms=0.3:calibrated | automatic | 41.52 | 61.05 | 0/24 | 100.0% |
| 12 | owl:hybrid:threshold=0.05:nms=0.3:calibrated | automatic | 41.86 | 59.70 | 0/24 | 100.0% |
| 13 | owl:hybrid:threshold=0.03:nms=0.3:calibrated | automatic | 41.97 | 58.96 | 0/24 | 100.0% |
| 14 | owl:hybrid:threshold=0.03:nms=0.5:calibrated | automatic | 42.66 | 61.65 | 0/24 | 100.0% |
| 15 | owl:tiled:threshold=0.05:nms=0.3:calibrated | automatic | 43.03 | 61.45 | 0/24 | 100.0% |
| 16 | owl:tiled:threshold=0.03:nms=0.3:calibrated | automatic | 43.40 | 59.73 | 0/24 | 100.0% |
| 17 | owl:global:threshold=0.05:nms=0.5:calibrated | automatic | 43.50 | 65.38 | 0/24 | 100.0% |
| 18 | median(owl:global:threshold=0.03:nms=0.3:calibrated,dino:global:threshold=0.03:nms=0.3) | automatic | 43.63 | 62.42 | 1/24 | 100.0% |
| 19 | owl:hybrid:threshold=0.05:nms=0.5:calibrated | automatic | 43.63 | 62.92 | 1/24 | 100.0% |
| 20 | owl:global:threshold=0.03:nms=0.7:calibrated | automatic | 44.59 | 67.32 | 1/24 | 100.0% |
| 21 | owl:tiled:threshold=0.1:nms=0.3:calibrated | automatic | 45.26 | 69.65 | 0/24 | 100.0% |
| 22 | owl:tiled:threshold=0.03:nms=0.5:calibrated | automatic | 45.33 | 61.52 | 0/24 | 100.0% |
| 23 | owl:tiled:threshold=0.05:nms=0.5:calibrated | automatic | 45.48 | 64.14 | 0/24 | 100.0% |
| 24 | owl:hybrid:threshold=0.1:nms=0.3:calibrated | automatic | 45.53 | 67.20 | 0/24 | 100.0% |
| 25 | median(dino:global:threshold=0.03:nms=0.3,qwen38:spatial) | automatic | 45.67 | 66.21 | 0/24 | 100.0% |
| 26 | owl:hybrid:threshold=0.03:nms=0.7:calibrated | automatic | 46.00 | 62.99 | 1/24 | 100.0% |
| 27 | median(owl:global:threshold=0.03:nms=0.3:calibrated,qwen38:spatial,smol:spatial:calibrated) | automatic | 46.16 | 73.85 | 1/24 | 100.0% |
| 28 | median(owl:global:threshold=0.03:nms=0.3:calibrated,dino:global:threshold=0.03:nms=0.3,qwen38:spatial,smol:spatial:calibrated) | automatic | 46.26 | 70.26 | 0/24 | 100.0% |
| 29 | median(owl:global:threshold=0.03:nms=0.3:calibrated,smol:spatial:calibrated) | automatic | 47.07 | 70.11 | 0/24 | 100.0% |
| 30 | owl:tiled:threshold=0.03:nms=0.7:calibrated | automatic | 47.16 | 63.13 | 0/24 | 100.0% |
| 31 | owl:hybrid:threshold=0.05:nms=0.7:calibrated | automatic | 47.20 | 65.80 | 1/24 | 100.0% |
| 32 | owl:tiled:threshold=0.05:nms=0.7:calibrated | automatic | 47.39 | 65.77 | 0/24 | 100.0% |
| 33 | owl:tiled:threshold=0.1:nms=0.5:calibrated | automatic | 47.47 | 71.97 | 0/24 | 100.0% |
| 34 | owl:global:threshold=0.05:nms=0.7:calibrated | automatic | 47.49 | 69.16 | 0/24 | 100.0% |
| 35 | owl:tiled:threshold=0.1:nms=0.3 | automatic | 48.33 | 68.21 | 1/24 | 100.0% |
| 36 | median(owl:global:threshold=0.03:nms=0.3:calibrated,dino:global:threshold=0.03:nms=0.3,smol:spatial:calibrated) | automatic | 48.58 | 71.71 | 0/24 | 100.0% |
| 37 | owl:hybrid:threshold=0.1:nms=0.5:calibrated | automatic | 48.69 | 70.04 | 0/24 | 100.0% |
| 38 | owl:tiled:threshold=0.1:nms=0.7:calibrated | automatic | 48.93 | 72.96 | 0/24 | 100.0% |
| 39 | median(qwen38:spatial,smol:spatial:calibrated) | automatic | 49.83 | 75.52 | 0/24 | 100.0% |
| 40 | owl:tiled:threshold=0.15:nms=0.3 | automatic | 49.83 | 75.35 | 0/24 | 100.0% |
| 41 | median(dino:global:threshold=0.03:nms=0.3,smol:spatial:calibrated) | automatic | 50.73 | 74.17 | 0/24 | 100.0% |
| 42 | owl:hybrid:threshold=0.15:nms=0.3:calibrated | automatic | 50.97 | 74.93 | 0/24 | 100.0% |
| 43 | owl:tiled:threshold=0.15:nms=0.3:calibrated | automatic | 51.52 | 76.38 | 1/24 | 100.0% |
| 44 | owl:global:threshold=0.1:nms=0.3:calibrated | automatic | 51.57 | 69.76 | 0/24 | 100.0% |
| 45 | dino:global:threshold=0.03:nms=0.3 | automatic | 52.21 | 70.74 | 0/24 | 100.0% |
| 46 | owl:hybrid:threshold=0.1:nms=0.7:calibrated | automatic | 52.36 | 72.42 | 0/24 | 100.0% |
| 47 | median(dino:global:threshold=0.03:nms=0.3,qwen38:spatial,smol:spatial:calibrated) | automatic | 52.78 | 79.81 | 1/24 | 100.0% |
| 48 | owl:hybrid:threshold=0.15:nms=0.3 | automatic | 53.33 | 75.72 | 0/24 | 100.0% |
| 49 | dino:hybrid:threshold=0.03:nms=0.7:calibrated | automatic | 53.67 | 74.49 | 0/24 | 100.0% |
| 50 | owl:tiled:threshold=0.15:nms=0.5 | automatic | 53.79 | 77.98 | 1/24 | 100.0% |
| 51 | owl:global:threshold=0.05:nms=0.3 | automatic | 54.46 | 66.47 | 0/24 | 100.0% |
| 52 | owl:global:threshold=0.1:nms=0.5:calibrated | automatic | 54.53 | 72.55 | 0/24 | 100.0% |
| 53 | owl:global:threshold=0.03:nms=0.3 | automatic | 54.96 | 65.22 | 0/24 | 100.0% |
| 54 | dino:global:threshold=0.03:nms=0.5 | automatic | 54.96 | 67.39 | 0/24 | 100.0% |
| 55 | owl:hybrid:threshold=0.15:nms=0.7:calibrated | automatic | 55.18 | 78.98 | 0/24 | 100.0% |
| 56 | owl:global:threshold=0.1:nms=0.3 | automatic | 55.21 | 71.44 | 0/24 | 100.0% |
| 57 | owl:hybrid:threshold=0.15:nms=0.5:calibrated | automatic | 55.35 | 78.90 | 1/24 | 100.0% |
| 58 | dino:global:threshold=0.03:nms=0.3:calibrated | automatic | 55.79 | 79.22 | 0/24 | 100.0% |
| 59 | dino:tiled:threshold=0.03:nms=0.7:calibrated | automatic | 55.91 | 76.70 | 0/24 | 100.0% |
| 60 | owl:global:threshold=0.15:nms=0.3 | automatic | 56.71 | 79.08 | 1/24 | 100.0% |
| 61 | dino:global:threshold=0.03:nms=0.7 | automatic | 56.71 | 67.19 | 0/24 | 100.0% |
| 62 | owl:tiled:threshold=0.15:nms=0.5:calibrated | automatic | 56.98 | 79.15 | 0/24 | 100.0% |
| 63 | owl:global:threshold=0.15:nms=0.3:calibrated | automatic | 57.45 | 79.36 | 1/24 | 100.0% |
| 64 | owl:global:threshold=0.1:nms=0.7:calibrated | automatic | 57.59 | 74.45 | 0/24 | 100.0% |
| 65 | dino:tiled:threshold=0.05:nms=0.3:calibrated | automatic | 57.84 | 80.60 | 0/24 | 100.0% |
| 66 | dino:hybrid:threshold=0.05:nms=0.3:calibrated | automatic | 57.86 | 80.45 | 0/24 | 100.0% |
| 67 | dino:tiled:threshold=0.05:nms=0.3 | automatic | 57.88 | 70.38 | 0/24 | 100.0% |
| 68 | dino:hybrid:threshold=0.05:nms=0.3 | automatic | 58.25 | 70.15 | 0/24 | 100.0% |
| 69 | owl:tiled:threshold=0.15:nms=0.7 | automatic | 58.92 | 82.38 | 0/24 | 100.0% |
| 70 | dino:global:threshold=0.03:nms=0.5:calibrated | automatic | 59.24 | 81.07 | 0/24 | 100.0% |
| 71 | dino:global:threshold=0.05:nms=0.3:calibrated | automatic | 59.60 | 85.34 | 1/24 | 100.0% |
| 72 | dino:global:threshold=0.05:nms=0.3 | automatic | 59.88 | 82.75 | 0/24 | 100.0% |
| 73 | owl:tiled:threshold=0.15:nms=0.7:calibrated | automatic | 59.93 | 80.74 | 0/24 | 100.0% |
| 74 | dino:global:threshold=0.03:nms=0.7:calibrated | automatic | 59.93 | 80.67 | 0/24 | 100.0% |
| 75 | dino:global:threshold=0.05:nms=0.5 | automatic | 60.29 | 80.58 | 0/24 | 100.0% |
| 76 | dino:global:threshold=0.05:nms=0.7 | automatic | 60.46 | 77.12 | 0/24 | 100.0% |
| 77 | dino:tiled:threshold=0.1:nms=0.3:calibrated | automatic | 60.98 | 86.85 | 1/24 | 100.0% |
| 78 | dino:global:threshold=0.05:nms=0.5:calibrated | automatic | 61.05 | 86.10 | 0/24 | 100.0% |
| 79 | dino:hybrid:threshold=0.1:nms=0.3:calibrated | automatic | 61.06 | 86.86 | 1/24 | 100.0% |
| 80 | dino:tiled:threshold=0.1:nms=0.3 | automatic | 61.12 | 81.47 | 0/24 | 100.0% |
| 81 | owl:global:threshold=0.15:nms=0.5:calibrated | automatic | 61.27 | 84.24 | 0/24 | 100.0% |
| 82 | dino:hybrid:threshold=0.1:nms=0.3 | automatic | 61.42 | 81.53 | 0/24 | 100.0% |
| 83 | owl:tiled:threshold=0.2:nms=0.3:calibrated | automatic | 61.61 | 83.08 | 0/24 | 100.0% |
| 84 | owl:hybrid:threshold=0.2:nms=0.3:calibrated | automatic | 61.70 | 82.69 | 0/24 | 100.0% |
| 85 | owl:hybrid:threshold=0.2:nms=0.3 | automatic | 61.71 | 82.78 | 0/24 | 100.0% |
| 86 | dino:tiled:threshold=0.03:nms=0.3:calibrated | automatic | 61.90 | 80.80 | 0/24 | 100.0% |
| 87 | dino:tiled:threshold=0.15:nms=0.3 | automatic | 62.12 | 86.67 | 0/24 | 100.0% |
| 88 | dino:hybrid:threshold=0.15:nms=0.5 | automatic | 62.12 | 84.42 | 0/24 | 100.0% |
| 89 | dino:hybrid:threshold=0.03:nms=0.3:calibrated | automatic | 62.14 | 80.82 | 0/24 | 100.0% |
| 90 | dino:hybrid:threshold=0.15:nms=0.3 | automatic | 62.21 | 86.73 | 0/24 | 100.0% |
| 91 | dino:tiled:threshold=0.15:nms=0.5 | automatic | 62.21 | 85.33 | 0/24 | 100.0% |
| 92 | dino:global:threshold=0.05:nms=0.7:calibrated | automatic | 62.48 | 86.14 | 1/24 | 100.0% |
| 93 | dino:tiled:threshold=0.05:nms=0.5:calibrated | automatic | 62.55 | 83.92 | 0/24 | 100.0% |
| 94 | dino:hybrid:threshold=0.15:nms=0.7 | automatic | 62.62 | 82.11 | 0/24 | 100.0% |
| 95 | dino:tiled:threshold=0.15:nms=0.7 | automatic | 62.71 | 83.77 | 0/24 | 100.0% |
| 96 | dino:tiled:threshold=0.1:nms=0.5:calibrated | automatic | 62.75 | 88.09 | 0/24 | 100.0% |
| 97 | training_median | automatic | 62.75 | 83.90 | 0/24 | 100.0% |
| 98 | dino:hybrid:threshold=0.5:nms=0.3:calibrated | automatic | 63.12 | 80.73 | 0/24 | 100.0% |
| 99 | dino:hybrid:threshold=0.1:nms=0.5:calibrated | automatic | 63.13 | 88.08 | 0/24 | 100.0% |
| 100 | dino:hybrid:threshold=0.05:nms=0.5:calibrated | automatic | 63.13 | 84.18 | 0/24 | 100.0% |
| 101 | owl:tiled:threshold=0.2:nms=0.5 | automatic | 63.21 | 83.46 | 0/24 | 100.0% |
| 102 | owl:global:threshold=0.15:nms=0.7:calibrated | automatic | 63.29 | 86.24 | 1/24 | 100.0% |
| 103 | owl:tiled:threshold=0.2:nms=0.3 | automatic | 63.46 | 85.01 | 0/24 | 100.0% |
| 104 | dino:hybrid:threshold=0.5:nms=0.7:calibrated | automatic | 63.58 | 81.18 | 0/24 | 100.0% |
| 105 | dino:tiled:threshold=0.03:nms=0.3 | automatic | 64.12 | 76.38 | 0/24 | 100.0% |
| 106 | owl:hybrid:threshold=0.1:nms=0.3 | automatic | 64.17 | 79.72 | 0/24 | 100.0% |
| 107 | owl:tiled:threshold=0.2:nms=0.5:calibrated | automatic | 64.23 | 84.92 | 0/24 | 100.0% |
| 108 | owl:tiled:threshold=0.2:nms=0.7 | automatic | 64.33 | 83.53 | 0/24 | 100.0% |
| 109 | dino:hybrid:threshold=0.5:nms=0.5:calibrated | automatic | 64.41 | 82.20 | 0/24 | 100.0% |
| 110 | dino:tiled:threshold=0.1:nms=0.7:calibrated | automatic | 64.51 | 88.50 | 0/24 | 100.0% |
| 111 | dino:hybrid:threshold=0.4:nms=0.3:calibrated | automatic | 64.77 | 84.90 | 0/24 | 100.0% |
| 112 | dino:hybrid:threshold=0.03:nms=0.5:calibrated | automatic | 64.85 | 83.53 | 0/24 | 100.0% |
| 113 | dino:tiled:threshold=0.03:nms=0.5:calibrated | automatic | 64.93 | 83.77 | 0/24 | 100.0% |
| 114 | dino:tiled:threshold=0.05:nms=0.7:calibrated | automatic | 65.03 | 85.95 | 0/24 | 100.0% |
| 115 | smol:spatial:calibrated | automatic | 65.22 | 86.55 | 0/24 | 100.0% |
| 116 | owl:global:threshold=0.15:nms=0.5 | automatic | 65.25 | 89.85 | 0/24 | 100.0% |
| 117 | dino:tiled:threshold=0.5:nms=0.5:calibrated | automatic | 65.35 | 81.84 | 0/24 | 100.0% |
| 118 | dino:hybrid:threshold=0.2:nms=0.7 | automatic | 65.50 | 88.56 | 0/24 | 100.0% |
| 119 | owl:tiled:threshold=0.2:nms=0.7:calibrated | automatic | 65.67 | 85.78 | 0/24 | 100.0% |
| 120 | dino:tiled:threshold=0.5:nms=0.7:calibrated | automatic | 65.68 | 81.95 | 0/24 | 100.0% |
| 121 | dino:hybrid:threshold=0.1:nms=0.7:calibrated | automatic | 65.83 | 89.01 | 0/24 | 100.0% |
| 122 | dino:hybrid:threshold=0.03:nms=0.3 | automatic | 65.88 | 78.37 | 0/24 | 100.0% |
| 123 | dino:tiled:threshold=0.15:nms=0.3:calibrated | automatic | 65.92 | 90.44 | 0/24 | 100.0% |
| 124 | dino:hybrid:threshold=0.05:nms=0.7:calibrated | automatic | 66.15 | 86.57 | 0/24 | 100.0% |
| 125 | dino:tiled:threshold=0.15:nms=0.5:calibrated | automatic | 66.27 | 90.73 | 1/24 | 100.0% |
| 126 | dino:tiled:threshold=0.5:nms=0.3:calibrated | automatic | 66.32 | 83.34 | 0/24 | 100.0% |
| 127 | dino:hybrid:threshold=0.15:nms=0.3:calibrated | automatic | 66.43 | 90.84 | 2/24 | 100.0% |
| 128 | dino:hybrid:threshold=0.15:nms=0.5:calibrated | automatic | 66.56 | 90.70 | 0/24 | 100.0% |
| 129 | dino:hybrid:threshold=0.2:nms=0.5 | automatic | 66.62 | 90.32 | 0/24 | 100.0% |
| 130 | owl:hybrid:threshold=0.2:nms=0.5:calibrated | automatic | 66.73 | 86.16 | 0/24 | 100.0% |
| 131 | dino:global:threshold=0.1:nms=0.7 | automatic | 66.83 | 91.37 | 0/24 | 100.0% |
| 132 | dino:tiled:threshold=0.2:nms=0.7 | automatic | 67.00 | 90.04 | 0/24 | 100.0% |
| 133 | smol:direct:calibrated | automatic | 67.22 | 88.13 | 0/24 | 100.0% |
| 134 | dino:hybrid:threshold=0.15:nms=0.7:calibrated | automatic | 67.27 | 90.53 | 1/24 | 100.0% |
| 135 | dino:tiled:threshold=0.1:nms=0.5 | automatic | 67.33 | 82.74 | 0/24 | 100.0% |
| 136 | dino:hybrid:threshold=0.1:nms=0.5 | automatic | 67.46 | 82.15 | 0/24 | 100.0% |
| 137 | dino:tiled:threshold=0.2:nms=0.5 | automatic | 67.46 | 91.05 | 0/24 | 100.0% |
| 138 | dino:tiled:threshold=0.15:nms=0.7:calibrated | automatic | 67.76 | 91.14 | 0/24 | 100.0% |
| 139 | owl:hybrid:threshold=0.2:nms=0.7:calibrated | automatic | 67.86 | 86.96 | 0/24 | 100.0% |
| 140 | dino:global:threshold=0.1:nms=0.5 | automatic | 67.88 | 92.59 | 0/24 | 100.0% |
| 141 | dino:global:threshold=0.1:nms=0.3 | automatic | 68.46 | 93.56 | 0/24 | 100.0% |
| 142 | owl:global:threshold=0.2:nms=0.3 | automatic | 68.50 | 89.93 | 0/24 | 100.0% |
| 143 | dino:global:threshold=0.1:nms=0.7:calibrated | automatic | 68.83 | 92.66 | 0/24 | 100.0% |
| 144 | dino:tiled:threshold=0.4:nms=0.5:calibrated | automatic | 68.85 | 88.38 | 1/24 | 100.0% |
| 145 | owl:hybrid:threshold=0.2:nms=0.5 | automatic | 68.96 | 93.60 | 0/24 | 100.0% |
| 146 | owl:global:threshold=0.2:nms=0.3:calibrated | automatic | 68.97 | 88.89 | 0/24 | 100.0% |
| 147 | dino:tiled:threshold=0.4:nms=0.3:calibrated | automatic | 69.15 | 89.21 | 0/24 | 100.0% |
| 148 | dino:hybrid:threshold=0.4:nms=0.5:calibrated | automatic | 69.20 | 89.10 | 0/24 | 100.0% |
| 149 | dino:global:threshold=0.1:nms=0.5:calibrated | automatic | 69.37 | 93.48 | 1/24 | 100.0% |
| 150 | dino:tiled:threshold=0.2:nms=0.3 | automatic | 69.38 | 92.60 | 0/24 | 100.0% |
| 151 | dino:hybrid:threshold=0.2:nms=0.3 | automatic | 69.38 | 92.61 | 0/24 | 100.0% |
| 152 | dino:global:threshold=0.1:nms=0.3:calibrated | automatic | 69.42 | 94.04 | 1/24 | 100.0% |
| 153 | dino:tiled:threshold=0.1:nms=0.7 | automatic | 69.62 | 82.30 | 0/24 | 100.0% |
| 154 | dino:tiled:threshold=0.4:nms=0.7:calibrated | automatic | 70.17 | 89.55 | 0/24 | 100.0% |
| 155 | dino:hybrid:threshold=0.4:nms=0.7:calibrated | automatic | 70.31 | 89.89 | 0/24 | 100.0% |
| 156 | dino:hybrid:threshold=0.1:nms=0.7 | automatic | 70.79 | 82.50 | 0/24 | 100.0% |
| 157 | dino:tiled:threshold=0.2:nms=0.5:calibrated | automatic | 71.35 | 94.14 | 0/24 | 100.0% |
| 158 | dino:hybrid:threshold=0.2:nms=0.5:calibrated | automatic | 71.38 | 94.07 | 1/24 | 100.0% |
| 159 | dino:hybrid:threshold=0.2:nms=0.7:calibrated | automatic | 71.46 | 93.69 | 0/24 | 100.0% |
| 160 | dino:hybrid:threshold=0.2:nms=0.3:calibrated | automatic | 71.57 | 94.46 | 0/24 | 100.0% |
| 161 | dino:tiled:threshold=0.2:nms=0.3:calibrated | automatic | 71.61 | 94.49 | 0/24 | 100.0% |
| 162 | smol:direct | automatic | 71.79 | 91.46 | 0/24 | 100.0% |
| 163 | dino:tiled:threshold=0.2:nms=0.7:calibrated | automatic | 72.09 | 94.36 | 0/24 | 100.0% |
| 164 | owl:global:threshold=0.2:nms=0.5:calibrated | automatic | 72.21 | 90.85 | 0/24 | 100.0% |
| 165 | owl:global:threshold=0.2:nms=0.5 | automatic | 72.38 | 91.04 | 0/24 | 100.0% |
| 166 | qwen38:direct | automatic | 72.46 | 98.36 | 0/24 | 100.0% |
| 167 | qwen38:direct:calibrated | automatic | 72.46 | 98.36 | 0/24 | 100.0% |
| 168 | owl:hybrid:threshold=0.3:nms=0.5 | automatic | 72.75 | 92.59 | 0/24 | 100.0% |
| 169 | owl:hybrid:threshold=0.3:nms=0.5:calibrated | automatic | 72.85 | 92.79 | 0/24 | 100.0% |
| 170 | owl:global:threshold=0.2:nms=0.7:calibrated | automatic | 72.88 | 91.77 | 0/24 | 100.0% |
| 171 | owl:hybrid:threshold=0.3:nms=0.3:calibrated | automatic | 73.35 | 93.03 | 0/24 | 100.0% |
| 172 | dino:tiled:threshold=0.05:nms=0.5 | automatic | 73.38 | 87.86 | 0/24 | 100.0% |
| 173 | dino:hybrid:threshold=0.3:nms=0.7:calibrated | automatic | 73.40 | 93.64 | 0/24 | 100.0% |
| 174 | owl:tiled:threshold=0.05:nms=0.3 | automatic | 73.50 | 88.53 | 1/24 | 100.0% |
| 175 | owl:global:threshold=0.2:nms=0.7 | automatic | 73.54 | 93.24 | 0/24 | 100.0% |
| 176 | owl:tiled:threshold=0.3:nms=0.5:calibrated | automatic | 73.69 | 92.87 | 0/24 | 100.0% |
| 177 | owl:tiled:threshold=0.3:nms=0.3:calibrated | automatic | 73.78 | 92.60 | 0/24 | 100.0% |
| 178 | owl:hybrid:threshold=0.3:nms=0.7 | automatic | 73.79 | 92.25 | 0/24 | 100.0% |
| 179 | dino:hybrid:threshold=0.3:nms=0.5:calibrated | automatic | 73.94 | 94.07 | 0/24 | 100.0% |
| 180 | owl:tiled:threshold=0.3:nms=0.7 | automatic | 73.96 | 93.12 | 0/24 | 100.0% |
| 181 | dino:global:threshold=0.4:nms=0.5:calibrated | automatic | 74.21 | 91.12 | 0/24 | 100.0% |
| 182 | dino:global:threshold=0.4:nms=0.7:calibrated | automatic | 74.21 | 91.12 | 0/24 | 100.0% |
| 183 | owl:tiled:threshold=0.3:nms=0.5 | automatic | 74.25 | 93.36 | 0/24 | 100.0% |
| 184 | owl:hybrid:threshold=0.3:nms=0.7:calibrated | automatic | 74.48 | 93.90 | 0/24 | 100.0% |
| 185 | dino:global:threshold=0.3:nms=0.7:calibrated | automatic | 74.48 | 92.44 | 0/24 | 100.0% |
| 186 | dino:tiled:threshold=0.3:nms=0.5:calibrated | automatic | 74.57 | 94.66 | 0/24 | 100.0% |
| 187 | dino:tiled:threshold=0.3:nms=0.7:calibrated | automatic | 74.59 | 94.68 | 0/24 | 100.0% |
| 188 | dino:hybrid:threshold=0.05:nms=0.5 | automatic | 74.79 | 89.67 | 0/24 | 100.0% |
| 189 | dino:global:threshold=0.3:nms=0.5:calibrated | automatic | 74.94 | 93.01 | 0/24 | 100.0% |
| 190 | dino:global:threshold=0.4:nms=0.3:calibrated | automatic | 74.96 | 91.24 | 0/24 | 100.0% |
| 191 | owl:hybrid:threshold=0.3:nms=0.3 | automatic | 75.00 | 94.38 | 0/24 | 100.0% |
| 192 | owl:tiled:threshold=0.3:nms=0.7:calibrated | automatic | 75.05 | 94.08 | 0/24 | 100.0% |
| 193 | dino:hybrid:threshold=0.3:nms=0.7 | automatic | 75.08 | 94.92 | 0/24 | 100.0% |
| 194 | dino:hybrid:threshold=0.3:nms=0.3:calibrated | automatic | 75.22 | 95.29 | 0/24 | 100.0% |
| 195 | dino:tiled:threshold=0.3:nms=0.3:calibrated | automatic | 75.24 | 95.22 | 0/24 | 100.0% |
| 196 | smol:spatial | automatic | 75.88 | 94.52 | 0/24 | 100.0% |
| 197 | owl:tiled:threshold=0.3:nms=0.3 | automatic | 76.21 | 94.85 | 0/24 | 100.0% |
| 198 | owl:hybrid:threshold=0.2:nms=0.7 | automatic | 76.33 | 108.73 | 0/24 | 100.0% |
| 199 | dino:tiled:threshold=0.3:nms=0.7 | automatic | 76.54 | 96.16 | 0/24 | 100.0% |
| 200 | dino:global:threshold=0.3:nms=0.3:calibrated | automatic | 76.54 | 94.12 | 0/24 | 100.0% |
| 201 | dino:hybrid:threshold=0.3:nms=0.5 | automatic | 76.62 | 96.13 | 0/24 | 100.0% |
| 202 | dino:global:threshold=0.5:nms=0.3:calibrated | automatic | 76.62 | 93.90 | 0/24 | 100.0% |
| 203 | dino:global:threshold=0.5:nms=0.5:calibrated | automatic | 76.62 | 93.90 | 0/24 | 100.0% |
| 204 | dino:global:threshold=0.5:nms=0.7:calibrated | automatic | 76.62 | 93.90 | 0/24 | 100.0% |
| 205 | owl:tiled:threshold=0.1:nms=0.5 | automatic | 76.71 | 98.19 | 0/24 | 100.0% |
| 206 | always_one:calibrated | automatic | 77.04 | 95.20 | 0/24 | 100.0% |
| 207 | dino:global:threshold=0.15:nms=0.7 | automatic | 77.50 | 96.84 | 0/24 | 100.0% |
| 208 | dino:tiled:threshold=0.3:nms=0.5 | automatic | 77.54 | 96.92 | 0/24 | 100.0% |
| 209 | owl:global:threshold=0.15:nms=0.7 | automatic | 77.71 | 101.02 | 0/24 | 100.0% |
| 210 | dino:global:threshold=0.15:nms=0.5 | automatic | 78.00 | 97.45 | 0/24 | 100.0% |
| 211 | dino:global:threshold=0.15:nms=0.7:calibrated | automatic | 78.03 | 97.18 | 0/24 | 100.0% |
| 212 | owl:hybrid:threshold=0.5:nms=0.5:calibrated | automatic | 78.04 | 96.50 | 0/24 | 100.0% |
| 213 | dino:global:threshold=0.15:nms=0.5:calibrated | automatic | 78.41 | 97.70 | 0/24 | 100.0% |
| 214 | dino:tiled:threshold=0.3:nms=0.3 | automatic | 78.71 | 97.88 | 0/24 | 100.0% |
| 215 | dino:global:threshold=0.15:nms=0.3 | automatic | 78.75 | 98.18 | 0/24 | 100.0% |
| 216 | dino:hybrid:threshold=0.3:nms=0.3 | automatic | 78.83 | 98.03 | 1/24 | 100.0% |
| 217 | dino:global:threshold=0.15:nms=0.3:calibrated | automatic | 78.99 | 98.31 | 0/24 | 100.0% |
| 218 | owl:tiled:threshold=0.4:nms=0.3:calibrated | automatic | 79.02 | 96.84 | 0/24 | 100.0% |
| 219 | owl:hybrid:threshold=0.5:nms=0.3:calibrated | automatic | 79.24 | 96.92 | 0/24 | 100.0% |
| 220 | owl:tiled:threshold=0.4:nms=0.7:calibrated | automatic | 79.37 | 97.06 | 0/24 | 100.0% |
| 221 | owl:tiled:threshold=0.4:nms=0.5:calibrated | automatic | 79.43 | 97.08 | 0/24 | 100.0% |
| 222 | owl:tiled:threshold=0.5:nms=0.5:calibrated | automatic | 79.45 | 96.91 | 0/24 | 100.0% |
| 223 | owl:tiled:threshold=0.5:nms=0.3:calibrated | automatic | 79.54 | 96.87 | 0/24 | 100.0% |
| 224 | owl:hybrid:threshold=0.4:nms=0.5:calibrated | automatic | 79.71 | 97.20 | 0/24 | 100.0% |
| 225 | owl:hybrid:threshold=0.5:nms=0.7:calibrated | automatic | 79.75 | 97.73 | 0/24 | 100.0% |
| 226 | owl:hybrid:threshold=0.4:nms=0.7:calibrated | automatic | 79.78 | 97.39 | 0/24 | 100.0% |
| 227 | dino:global:threshold=0.2:nms=0.7:calibrated | automatic | 79.92 | 97.83 | 0/24 | 100.0% |
| 228 | dino:global:threshold=0.2:nms=0.5:calibrated | automatic | 80.02 | 98.19 | 0/24 | 100.0% |
| 229 | owl:hybrid:threshold=0.4:nms=0.3:calibrated | automatic | 80.08 | 97.50 | 0/24 | 100.0% |
| 230 | dino:global:threshold=0.2:nms=0.3:calibrated | automatic | 80.15 | 98.25 | 0/24 | 100.0% |
| 231 | owl:global:threshold=0.3:nms=0.3:calibrated | automatic | 80.49 | 98.95 | 0/24 | 100.0% |
| 232 | dino:hybrid:threshold=0.4:nms=0.7 | automatic | 80.83 | 98.23 | 0/24 | 100.0% |
| 233 | owl:tiled:threshold=0.5:nms=0.7:calibrated | automatic | 81.08 | 98.21 | 0/24 | 100.0% |
| 234 | owl:hybrid:threshold=0.4:nms=0.7 | automatic | 81.12 | 98.38 | 0/24 | 100.0% |
| 235 | owl:global:threshold=0.3:nms=0.5:calibrated | automatic | 81.23 | 99.62 | 0/24 | 100.0% |
| 236 | dino:hybrid:threshold=0.4:nms=0.5 | automatic | 81.33 | 98.66 | 0/24 | 100.0% |
| 237 | owl:hybrid:threshold=0.4:nms=0.5 | automatic | 81.54 | 98.58 | 0/24 | 100.0% |
| 238 | owl:global:threshold=0.3:nms=0.7:calibrated | automatic | 81.62 | 99.64 | 0/24 | 100.0% |
| 239 | owl:global:threshold=0.3:nms=0.7 | automatic | 81.79 | 100.28 | 0/24 | 100.0% |
| 240 | owl:tiled:threshold=0.4:nms=0.7 | automatic | 81.83 | 98.86 | 0/24 | 100.0% |
| 241 | owl:tiled:threshold=0.4:nms=0.5 | automatic | 81.88 | 98.88 | 0/24 | 100.0% |
| 242 | dino:tiled:threshold=0.4:nms=0.7 | automatic | 82.04 | 99.15 | 0/24 | 100.0% |
| 243 | dino:tiled:threshold=0.4:nms=0.5 | automatic | 82.17 | 99.22 | 0/24 | 100.0% |
| 244 | owl:global:threshold=0.3:nms=0.5 | automatic | 82.25 | 100.43 | 0/24 | 100.0% |
| 245 | dino:global:threshold=0.2:nms=0.7 | automatic | 82.38 | 99.72 | 0/24 | 100.0% |
| 246 | owl:hybrid:threshold=0.4:nms=0.3 | automatic | 82.50 | 99.35 | 0/24 | 100.0% |
| 247 | dino:tiled:threshold=0.4:nms=0.3 | automatic | 82.54 | 99.70 | 0/24 | 100.0% |
| 248 | owl:tiled:threshold=0.4:nms=0.3 | automatic | 82.58 | 99.46 | 0/24 | 100.0% |
| 249 | dino:global:threshold=0.2:nms=0.5 | automatic | 82.62 | 100.09 | 0/24 | 100.0% |
| 250 | dino:hybrid:threshold=0.4:nms=0.3 | automatic | 82.83 | 99.96 | 0/24 | 100.0% |
| 251 | owl:global:threshold=0.3:nms=0.3 | automatic | 82.96 | 100.69 | 0/24 | 100.0% |
| 252 | dino:hybrid:threshold=0.5:nms=0.7 | automatic | 83.12 | 99.80 | 0/24 | 100.0% |
| 253 | dino:global:threshold=0.2:nms=0.3 | automatic | 83.17 | 100.47 | 0/24 | 100.0% |
| 254 | dino:hybrid:threshold=0.5:nms=0.5 | automatic | 83.33 | 100.01 | 0/24 | 100.0% |
| 255 | owl:global:threshold=0.4:nms=0.3:calibrated | automatic | 83.62 | 100.62 | 0/24 | 100.0% |
| 256 | dino:tiled:threshold=0.5:nms=0.7 | automatic | 83.83 | 100.38 | 0/24 | 100.0% |
| 257 | dino:tiled:threshold=0.5:nms=0.5 | automatic | 83.88 | 100.40 | 0/24 | 100.0% |
| 258 | dino:tiled:threshold=0.5:nms=0.3 | automatic | 84.08 | 100.64 | 0/24 | 100.0% |
| 259 | owl:global:threshold=0.4:nms=0.7:calibrated | automatic | 84.20 | 101.09 | 0/24 | 100.0% |
| 260 | owl:global:threshold=0.5:nms=0.3:calibrated | automatic | 84.23 | 101.87 | 0/24 | 100.0% |
| 261 | owl:global:threshold=0.5:nms=0.5:calibrated | automatic | 84.23 | 101.87 | 0/24 | 100.0% |
| 262 | owl:global:threshold=0.5:nms=0.7:calibrated | automatic | 84.23 | 101.87 | 0/24 | 100.0% |
| 263 | dino:hybrid:threshold=0.5:nms=0.3 | automatic | 84.25 | 100.89 | 0/24 | 100.0% |
| 264 | owl:global:threshold=0.4:nms=0.5:calibrated | automatic | 84.31 | 101.15 | 0/24 | 100.0% |
| 265 | dino:global:threshold=0.3:nms=0.7 | automatic | 84.58 | 101.26 | 0/24 | 100.0% |
| 266 | dino:global:threshold=0.3:nms=0.5 | automatic | 84.67 | 101.37 | 0/24 | 100.0% |
| 267 | dino:global:threshold=0.3:nms=0.3 | automatic | 84.96 | 101.59 | 0/24 | 100.0% |
| 268 | dino:global:threshold=0.4:nms=0.5 | automatic | 85.12 | 101.85 | 0/24 | 100.0% |
| 269 | dino:global:threshold=0.4:nms=0.7 | automatic | 85.12 | 101.85 | 0/24 | 100.0% |
| 270 | dino:global:threshold=0.4:nms=0.3 | automatic | 85.25 | 101.89 | 0/24 | 100.0% |
| 271 | owl:hybrid:threshold=0.5:nms=0.7 | automatic | 85.58 | 102.20 | 0/24 | 100.0% |
| 272 | owl:hybrid:threshold=0.5:nms=0.5 | automatic | 85.71 | 102.30 | 0/24 | 100.0% |
| 273 | dino:global:threshold=0.5:nms=0.3 | automatic | 85.75 | 102.33 | 0/24 | 100.0% |
| 274 | dino:global:threshold=0.5:nms=0.5 | automatic | 85.75 | 102.33 | 0/24 | 100.0% |
| 275 | dino:global:threshold=0.5:nms=0.7 | automatic | 85.75 | 102.33 | 0/24 | 100.0% |
| 276 | owl:tiled:threshold=0.5:nms=0.5 | automatic | 85.92 | 102.41 | 0/24 | 100.0% |
| 277 | owl:tiled:threshold=0.5:nms=0.7 | automatic | 85.92 | 102.41 | 0/24 | 100.0% |
| 278 | owl:global:threshold=0.4:nms=0.7 | automatic | 85.96 | 102.51 | 0/24 | 100.0% |
| 279 | owl:hybrid:threshold=0.5:nms=0.3 | automatic | 85.96 | 102.44 | 0/24 | 100.0% |
| 280 | owl:global:threshold=0.4:nms=0.3 | automatic | 86.00 | 102.54 | 0/24 | 100.0% |
| 281 | owl:global:threshold=0.4:nms=0.5 | automatic | 86.00 | 102.54 | 0/24 | 100.0% |
| 282 | owl:tiled:threshold=0.5:nms=0.3 | automatic | 86.00 | 102.47 | 0/24 | 100.0% |
| 283 | always_one | automatic | 86.04 | 102.62 | 0/24 | 100.0% |
| 284 | owl:global:threshold=0.5:nms=0.3 | automatic | 86.67 | 103.22 | 0/24 | 100.0% |
| 285 | owl:global:threshold=0.5:nms=0.5 | automatic | 86.67 | 103.22 | 0/24 | 100.0% |
| 286 | owl:global:threshold=0.5:nms=0.7 | automatic | 86.67 | 103.22 | 0/24 | 100.0% |
| 287 | owl:hybrid:threshold=0.15:nms=0.5 | automatic | 88.08 | 116.46 | 0/24 | 100.0% |
| 288 | owl:global:threshold=0.1:nms=0.5 | automatic | 90.92 | 105.03 | 0/24 | 100.0% |
| 289 | owl:hybrid:threshold=0.05:nms=0.3 | automatic | 95.83 | 108.83 | 0/24 | 100.0% |
| 290 | dino:tiled:threshold=0.05:nms=0.7 | automatic | 96.21 | 118.94 | 0/24 | 100.0% |
| 291 | owl:tiled:threshold=0.03:nms=0.3 | automatic | 96.54 | 113.36 | 0/24 | 100.0% |
| 292 | owl:tiled:threshold=0.1:nms=0.7 | automatic | 99.88 | 133.83 | 1/24 | 100.0% |
| 293 | dino:hybrid:threshold=0.05:nms=0.7 | automatic | 104.62 | 128.61 | 0/24 | 100.0% |
| 294 | owl:global:threshold=0.05:nms=0.5 | automatic | 109.96 | 123.00 | 0/24 | 100.0% |
| 295 | owl:hybrid:threshold=0.15:nms=0.7 | automatic | 118.58 | 160.78 | 0/24 | 100.0% |
| 296 | owl:global:threshold=0.03:nms=0.5 | automatic | 119.62 | 130.32 | 0/24 | 100.0% |
| 297 | owl:hybrid:threshold=0.03:nms=0.3 | automatic | 120.04 | 137.19 | 0/24 | 100.0% |
| 298 | owl:global:threshold=0.1:nms=0.7 | automatic | 122.88 | 142.28 | 0/24 | 100.0% |
| 299 | dino:tiled:threshold=0.03:nms=0.5 | automatic | 128.92 | 152.35 | 0/24 | 100.0% |
| 300 | dino:hybrid:threshold=0.03:nms=0.5 | automatic | 138.83 | 161.87 | 0/24 | 100.0% |
| 301 | owl:hybrid:threshold=0.1:nms=0.5 | automatic | 140.42 | 175.41 | 0/24 | 100.0% |
| 302 | owl:tiled:threshold=0.05:nms=0.5 | automatic | 163.67 | 194.73 | 0/24 | 100.0% |
| 303 | owl:global:threshold=0.05:nms=0.7 | automatic | 169.17 | 191.06 | 0/24 | 100.0% |
| 304 | owl:global:threshold=0.03:nms=0.7 | automatic | 188.12 | 207.86 | 0/24 | 100.0% |
| 305 | owl:tiled:threshold=0.03:nms=0.5 | automatic | 224.29 | 262.59 | 0/24 | 100.0% |
| 306 | dino:tiled:threshold=0.03:nms=0.7 | automatic | 227.67 | 260.40 | 0/24 | 100.0% |
| 307 | owl:hybrid:threshold=0.1:nms=0.7 | automatic | 228.71 | 291.81 | 0/24 | 100.0% |
| 308 | owl:hybrid:threshold=0.05:nms=0.5 | automatic | 246.04 | 285.86 | 0/24 | 100.0% |
| 309 | dino:hybrid:threshold=0.03:nms=0.7 | automatic | 251.96 | 287.41 | 0/24 | 100.0% |
| 310 | owl:tiled:threshold=0.05:nms=0.7 | automatic | 258.50 | 314.65 | 0/24 | 100.0% |
| 311 | owl:hybrid:threshold=0.03:nms=0.5 | automatic | 317.54 | 357.04 | 0/24 | 100.0% |
| 312 | owl:tiled:threshold=0.03:nms=0.7 | automatic | 371.83 | 437.07 | 0/24 | 100.0% |
| 313 | owl:hybrid:threshold=0.05:nms=0.7 | automatic | 448.00 | 525.70 | 0/24 | 100.0% |
| 314 | owl:hybrid:threshold=0.03:nms=0.7 | automatic | 583.33 | 662.69 | 0/24 | 100.0% |
Appendix F. Exact study split membership
calibrate · 24 images
| Image | Category | Published count | Examples | Image SHA-256 |
|---|---|---|---|---|
| 4523.jpg | bananas | 115 | 3 | 03844e7594c13c2712bbe6e5b812f17be7ad09de52b669529d91b5a4af0c8fce |
| 5723.jpg | bread rolls | 9 | 3 | 3ce6771982a2937f300757510f0a449f91737f1d97c554cdc26850345f870b51 |
| 2784.jpg | cans | 23 | 3 | 4e89dabaebdab501bf0430027243ee0e1b823222e1433670f17924bd5e691751 |
| 3445.jpg | instant noodles | 12 | 3 | 30dbf074e11a743ec28534bbedb74b6ea4318f259d6a078bf3567911280b2c72 |
| 2749.jpg | oranges | 108 | 3 | 24b1f63ff5ca14f889547448f4fdc2a9e5f6db78250e81ab5f26de8169350124 |
| 4430.jpg | peppers | 10 | 3 | 4628513b3734d3d219f224329b306daf7125bc91f235cf1b7781b1fb3bed572c |
| 3905.jpg | potatoes | 72 | 3 | ed99968892de6aa7731216375b87de92b9ce90c3f5d745ebfe7f926b6df5f02a |
| 4100.jpg | rice bags | 50 | 3 | 17621575670a934cc9bf59ed51131fbb0f08c35d0a6982e42a949c88d7837d28 |
| 4447.jpg | tomatoes | 11 | 3 | 55389da51a39affb6a9c8c32af2ec8dac39685459add7af805b13e7c22f9bb1f |
| 4526.jpg | bananas | 53 | 3 | 9bc399d9719330ef1a27ad9d974c3d5e5e76eec661a8ab04fd5256ff430ddd79 |
| 5728.jpg | bread rolls | 10 | 3 | bd497c8173c101f362e3ab496a6682c943f426dd361e5f40471db7d522bef634 |
| 7559.jpg | cans | 34 | 3 | 56f9e488ee900f50fc37a317cf44d8823f2f3a1e4c86dd0efbc6242d04f39cda |
| 3446.jpg | instant noodles | 14 | 3 | 2f8306a1d4a373da5a1e51a895f595ed58fbb22bcb3c915cc3a127819594cf7a |
| 2764.jpg | oranges | 49 | 3 | 6fc88c3c99597e25d5a85c0aea0d07c5b55abd5a8c1cf30ff299b62d7caa0aca |
| 4428.jpg | peppers | 22 | 3 | f6ffdb03263357c8d4bed7468335ab9add44567890a9f0daa91af39c741b99b8 |
| 5698.jpg | potatoes | 21 | 3 | 60840e44c089bdc78552f9cee6bf3e47a16480a227d4cc7842a5486349d50b24 |
| 4099.jpg | rice bags | 26 | 3 | 325425f8f5c793a8fd92749e820d7cd55fcfc8640fe2a1246fd13ed76b2926dd |
| 6170.jpg | tomatoes | 42 | 3 | 66d2b84462531b352d016071cf2d89974aca99fafd67e5d8274ac4b6ebc1a457 |
| 4525.jpg | bananas | 15 | 3 | 017095e36b347fe0ddda4bc97fc623ea2ae377276aeb8de86545498b269a7343 |
| 3353.jpg | bread rolls | 15 | 3 | e8eeb2ffa15e897c91755e97294807c66eb51747e92a6c7395f138e4f3de9b8f |
| 7320.jpg | cans | 34 | 3 | 0c4d307422f745b3d59dd245dc5b10043191251041b7d8b59169eea2ec401a17 |
| 3444.jpg | instant noodles | 28 | 3 | 7b980b7bd165ac30aeb67817c1c989d401120356186d9d086e31e0bfcdfcd8af |
| 6966.jpg | oranges | 35 | 3 | 92e28d7e00516405a3d4f9bb6d3429e2d3b4b4c34abe36cf75d403b1cd9c7003 |
| 7.jpg | peppers | 13 | 3 | 36813c98a94c202fcde75d73896e1a3f47c9d6e0390d6cc3acd3152264e1542d |
validate · 24 images
| Image | Category | Published count | Examples | Image SHA-256 |
|---|---|---|---|---|
| 4831.jpg | grapes | 122 | 3 | ecc02e3d7175519599c01459fe0fbc80dbb3a33f4564b2f596377f0db34d7485 |
| 6897.jpg | milk cartons | 59 | 3 | bb87288fec64ee4e730f409c14f3439ca88424363158056bd71777d82e57e2c0 |
| 5872.jpg | grapes | 116 | 3 | b53dab471b50fc3742d7485ee58a6de93f8990d310a373308d2c0742f4d1faa5 |
| 6872.jpg | milk cartons | 49 | 3 | 100cc21e3d46f008c6760902804bb9f7b8ab6f94e5dad0cdb175f0e2ffc3c434 |
| 4811.jpg | grapes | 213 | 3 | 7b624a2cf5368ac05a6c5211e6ecef3af8faa730824f2f32276de20630fb14d8 |
| 7315.jpg | milk cartons | 71 | 4 | 00ebbffa91d38a73884af9e42b6d2e3bc71b5081d798295ff66881e8c00fc49a |
| 4794.jpg | grapes | 55 | 3 | 1a825146d77b889dfa283e08af3874f05f594bf5c927c458b84d296fe2a76aba |
| 7143.jpg | milk cartons | 121 | 3 | 914c6dfb9442a36fec05bf7882ef3791decf470e1a7878853916d4cbb38be46b |
| 4854.jpg | grapes | 36 | 3 | 682582476dc233036d8c0fa52352e15dd15406e740b70c5737a3aae3d836fee9 |
| 7326.jpg | milk cartons | 185 | 5 | 65ab8da0aa0c7992daf5f3ff6ab4fd6d8c170bd520cd2b3a80e823608878ae65 |
| 217.jpg | grapes | 60 | 3 | b0763a1eacad8bfabf5b383395545e1026628fc3cde3706e8fa2faf4751cac89 |
| 7541.jpg | milk cartons | 69 | 3 | 909ebb35ce65695c4acdb2c36f3d0c229d56a8f8629e460399f8f5dc103d582b |
| 219.jpg | grapes | 47 | 3 | 8b183cc3b4079d263f0506400e946e68733c15ec40bfa9ba6d7de5cc46a72824 |
| 7461.jpg | milk cartons | 22 | 3 | da699d26cc76da4c08cb98a75fe5a2c7106d7f01d71c16f4ca5f320d1d06ac54 |
| 253.jpg | grapes | 192 | 3 | 7e22fb30cb112c2cdf69877ae9a70e84468941b6eff2cdb6295e7db6b41c9711 |
| 7100.jpg | milk cartons | 27 | 3 | 06e1025213e0bec410727ab40db187b1bd00323ec9b75a2509b07976e63fadba |
| 5864.jpg | grapes | 81 | 3 | 40f2486d6bf823fef4b7ecf55e2c0d717d36d855bfe92dcb1af253fee499b786 |
| 7537.jpg | milk cartons | 39 | 3 | 9fdba65d02ff3cc1d61cfa2b358af74c08be2b4c58e30763b8c718b22ce6ba95 |
| 4850.jpg | grapes | 101 | 3 | 7355f9471202fe9bda61e7125852a10cf4759e55b16c802ec68442043ddff0c0 |
| 7169.jpg | milk cartons | 34 | 3 | a5f0bd41f1e6da2bbeaf9675224ba804dbcb5487c203ad79e618f3fa682052c4 |
| 4801.jpg | grapes | 60 | 3 | e8a1e81eec5a388d3f0f8a8df931fd052d9b10a68f8e82b6ad0bfb69d5a9cdc9 |
| 6772.jpg | milk cartons | 68 | 3 | 90ae6890f2bc4cf56e4c1a2a8daa2e9d267ad174638dfad7866cdc670d4a9cf2 |
| 4796.jpg | grapes | 196 | 3 | c85a9c937ede54c007b1a96d659f841785f2d67c1dc8b17579c4f1909330dde6 |
| 7012.jpg | milk cartons | 66 | 3 | 02f426223048c3e59bab3e92cff5df968612eae34de5f0cdf23625edbba3a54b |
holdout · 24 images
| Image | Category | Published count | Examples | Image SHA-256 |
|---|---|---|---|---|
| 2181.jpg | apples | 12 | 3 | 6fab040ef72919903bec4067c59489789e464ac4d75f4e9d1b19ca39fefe81d4 |
| 7580.jpg | eggs | 15 | 3 | c871089ec0c8e42f311d04a9ceb402830ec25b4788f575a767a390110a275c0a |
| 7567.jpg | sauce bottles | 68 | 3 | a674606e409a5af4b9255c17a9717db63bc5c80b611248beb27eef3cdd251476 |
| 5837.jpg | strawberries | 18 | 3 | 95b085ffb6b40615b312c08c86e16c300b01fc92cf0f60dbdbc53013bb0eaf9d |
| 6282.jpg | apples | 66 | 3 | e93faf377406fbf16a1bc2f34efe7671f42362dd6d1a992a86a834a94894e95d |
| 7145.jpg | eggs | 24 | 3 | cb0c2855443376df2ae249029ad77bda50169ea009dc2a53f119769607ca1fca |
| 6823.jpg | sauce bottles | 23 | 3 | 5e0f35c3aab5b620e0f653d11a8434fc6166baf93128c5e27deefb53be47cf22 |
| 4916.jpg | strawberries | 91 | 3 | cae1642ce46629c7f96b8b10b79abf003f26540b835ded3e7b76f054de5b6951 |
| 2184.jpg | apples | 33 | 3 | 0d494cb1cde6713f4ce8f58315c811ad8da0d4c469dbe97363f05589794f2795 |
| 5915.jpg | eggs | 12 | 3 | 31822032b7e6038c50ff6a0acfd081ae051dcb08463457dc66f24fd0ef072b0b |
| 7071.jpg | sauce bottles | 44 | 3 | 8729254f15441299a7cf46232ff88fea8b8aa37d72babdb678ae0042ccaa8b9f |
| 4900.jpg | strawberries | 14 | 3 | 9ceb7e20fd833cb12dfbf952a977af0807810af5cb3092ae9f5e8238caff27e8 |
| 2259.jpg | apples | 174 | 3 | f3f99f84d0073b44797925abf4ba127d65c54b282fae8229b74fe62f09db7da4 |
| 7128.jpg | eggs | 49 | 3 | e8c8a39f6f9ec8738a97401977d85d4f11e96f05a80fec36cdd0a0a089faf7b7 |
| 7438.jpg | sauce bottles | 48 | 3 | dccca38e45c2c99bdc7ddffa4f268a3823f6b48367eac8c883763cbd4400788c |
| 4903.jpg | strawberries | 18 | 3 | 695b7ccade071b4ac818f2e925ce0137a502c3a09de02fdb64ed3af1ffcbc378 |
| 2178.jpg | apples | 10 | 3 | c2a992dd1c1d2f1e866555b12ded8d225d61e74611e74f2d11d2911e7a27c8dd |
| 5916.jpg | eggs | 38 | 3 | b2cc40ca39ea84d636141e85508e8f816050bedc2210d92059f1c7ddfc35e4c7 |
| 7076.jpg | sauce bottles | 31 | 3 | 253bb1b29fade924f8bba51520bd8f35dfd7997f4ebe8e7c3a723817d482378f |
| 5828.jpg | strawberries | 12 | 3 | 78bc31e72ea61bf7c5a5b4d433b326c923dd7ff617ac3b7eb1aba6c51ca430f9 |
| 6264.jpg | apples | 16 | 3 | 43b0402b2cb0e62733b2337060f09474a15e34e7e815ca6c37000b87bda0487b |
| 5940.jpg | eggs | 27 | 3 | 83e58a091ff7f43a313f3c7bae85279b6c94c13edab8cb5e0c9ae9397a973edb |
| 7586.jpg | sauce bottles | 36 | 3 | 32a6d684c0b9601c9a8794bd4d6ba64c17ccac68351fe9a875af36554ac99055 |
| 286.jpg | strawberries | 10 | 3 | 9bd2cd7e01804ff1684310a538ebc0ccad23c0c6512ae6a7f3c458db3b43885a |
Appendix G. Executed, diagnostic, and proposed work
| Item | Status |
|---|---|
| Original detector comparison | Executed; exploratory adapter correction documented |
| Original Qwen 2B and Qwen 27B | Executed and scored |
| Original SmolVLM | Executed; structured output failure |
| 493-image acquisition | Executed; 25,895 external reference points |
| 72-image proxy study | Executed calibration, validation, and held-out stages |
| 314 configuration search | Executed on validation |
| Native-resolution detector trials | Diagnostics only |
| Qwen 2B proxy run | Eight-image calibration pilot; stopped |
| CountGD++, Count Anything, AdaCount | Reviewed, not executed |
| MixCount | Reading follow-up, not used |
| Fine-tuning on food-bank operations | Not executed |
| Inventory ledger and recipient availability system | Proposed, not deployed |
| Staff correction-time or recipient outcome study | Not executed |
27. Sources and attribution
The research descriptions above link to primary papers or author repositories. The measurements come from the linked code-and-results distribution and its frozen manifests, not from paper leaderboards. Bibliographic status is recorded as checked on September 6, 2026.
- Hoser and Żebrowska-Suchodolska. An algorithm for estimating the number of objects in a selected area of space based on ordinary photos. Procedia Computer Science 225, 1504–1513, 2023.
- Amini-Naieni and Zisserman. CountGD++: Generalized Prompting for Open-World Counting. CVPR 2026. Author code.
- Lei and colleagues. Count Anything. May 2026 preprint. Author code.
- Siddiqui and Khan. AdaCount. July 2026 preprint.
- Dumery and colleagues. The MixCount Dataset. May 2026 preprint.
- Ranjan, Sharma, Nguyen, and Hoai. Learning To Count Everything: FSC147 and FamNet. CVPR 2021. Pinned image mirror.
- Google. OWL-v2 model card.
- IDEA Research. Grounding DINO model card.
- Qwen. Qwen3-VL 2B model card.
- Hugging Face. SmolVLM 500M model card.
- Cloudflare. Workers AI model catalog and pricing. The hosted Qwen alias was verified through the connected account model API during execution.
- Original food-bank photographs: QuietlyBleeding, lrc2188, and fineman1097. Images are used as attributed examples for evaluation and discussion; copyright remains with their owners.
The new benchmark code and assistant-created annotations have the reuse terms recorded in the reproduction kit. Upstream code, pretrained weights, source text, and photographs retain their own terms. The FSC147 mirror's declared license should not be interpreted as independent clearance of every underlying Internet photograph.