← all posts
// vision · vision-models

Vision models for camera-event understanding: choosing the right vision model

Grab whatever model tops the leaderboard and you're buying a number that never ran at your resolution, your crop, or your token budget. Every vision-language model gets a transformed version of the image: resized, tiled, cropped, squeezed through some encoder's idea of what matters. A fluent answer can be grounded, half-grounded, or built around a detail thrown away before inference started, and the score won't tell you which.

The doorbell camera doesn't need your best model

Camera-event work narrows the problem: doorway, workshop, warehouse, garden, and safety-camera frames, and a job that's classifying a bounded event from motion-gated frames without leaking privacy or repeating an alert. That's a smaller ask than "understand this image," on purpose: a narrow event vocabulary plus timestamps plus zone metadata is something you can evaluate.

Don't start with a vision-language model: start with motion detection and a plain object detector, and let a VLM in only when that baseline hits layout, ambiguity, object relationships, or language fixed rules can't handle. Model choice comes down to text density, spatial reasoning, image count, language, latency, and deployment constraints, not a leaderboard rank.

Before picking anything, build a small blind eval set of easy, ambiguous, and impossible cases, run at the exact settings you'll ship. Preserve the original asset and log the model ID, prompt revision, crop and resize, image order, token accounting, latency, and whether the answer was grounded, unsupported, an abstention, or a repair. For local models, log the vision projector and quantization, the same for Ollama: mismatched weights and projector fail subtly while the server keeps answering fluently.

From red light to 'restart the gateway'

Confidence is not evidence, and the model has no way to flag the difference.

One uncertain visual clue turns into a confident identity, hazard, or security conclusion, and it survives review because it sounds plausible. Split every response into observation, association, inference, and action, and don't let one collapse into the next without its own evidence. "Red indicator upper right" is observation. "Belongs to the network panel" is association. "Connection has failed" is inference. "Restart the gateway" is action, and it needs its own authority, not a free ride from an earlier observation. Require a visible feature behind every conclusion, shown to the reviewer, not buried in a log.

Multiple images multiply that risk: label them, state whether they show the same object or a time sequence, drop duplicates that burn tokens, and when order matters, test a shuffled version. A model telling the same story after you scramble the sequence was never using it. Gemini's multimodal CLI makes that shuffle test trivial to script from a terminal.

Crop first, log everything, stop early

Deploy the smallest vision path that clears your hardest case and abstains past that, and put the rule into code rather than prompt wording. Crop out rooms, faces, and screens before inference, and set retention separately for originals, thumbnails, OCR text, and embeddings, since a local model doesn't protect an unencrypted disk. Log upload time and regional routing for hosted paths, cold load and heat for local ones, and compare the whole path at p50 and p95, not tokens per second alone. Score unsupported claims apart from missing ones: an invented serial number does more damage than a shrug, so reward the shrug.

Stop once the gate passes at a latency and cost you can live with. A bigger model with more pixels isn't automatically safer, it can expose more private detail and nudge the system toward answering past its evidence. I'll admit the eval harness above takes real discipline, and on my projects I've skipped half of it the first time a demo looked convincing.

#vision-models#multimodal#evaluation