Skip to content

Caveats

The vote cache is keyed on the track id, so it is only as good as the tracker. If the tracker swaps ids between two nearby objects, the refined class follows the id and ends up on the wrong object. Raising hist makes a single bad frame matter less, but it does not fix an id swap.

Untracked boxes all carry id = -1. The cache cannot hold them without pooling every untracked object into one entry, so they are answered and written on the frame they appear on instead. That means they cost a call every frame they are visible, and if your primary does not track at all, every frame pays full price. Under workers they are skipped, because the frame is gone by the time the answer arrives. Collage mode skips them too, since gathering crops over time needs an id to gather them against.

Collage mode answers late by design. A track carries the primary's label until its collage is full, which is (samples - 1) * every frames after it first appears, and a track that leaves before then is never answered at all. Short tracks and busy scenes are where that bites. Lower every to answer sooner, at the cost of crops that look more alike.

Florence-2 reports no confidence, so every box it returns comes back at 1.0. In full mode that overwrites the primary's confidence with a number that means nothing. Set best=False if you would rather every matching box vote instead of only the highest-IoU one, but the confidence problem stays either way.

Crop mode batches, but only as far as one frame goes. VLM puts up to chunk crops in a single request, and everything else falls back to one call per crop. On the traffic clip that turns 569 crops into 528 requests at votes=1, a saving of about 7 percent, because the vote cache has already removed most of the work. The batches only get big when a lot of new objects appear at once. Raising votes helps more, 2077 crops in 1632 requests at votes=5. Nothing batches across frames, and HF does not batch at all yet.

The conf threshold is a single number applied to every class. A detector that is badly calibrated on one class and well calibrated on another needs either a per-class threshold or a lower global one that wastes calls elsewhere. Per-class thresholds are not implemented.