Ranking the unlabelled pool by uncertainty, against labelling at random
A pool of 1,380 unlabelled images, 180 of them defective. Two strategies buy labels 40 at a time from a starting set of 40: one picks whatever the current model is least sure about, the other picks at random. 5 seeds each, averaged, because a single run of this comparison is noise and would let either side win.
The two learning curves
Shaded by nothing — the individual seed runs are drawn faintly so the spread is visible rather than asserted. Uncertainty sampling is ahead early and the margin narrows; that shape is typical and is the honest version of the claim vendors make.
The queue itself
The twelve images the model is least certain about, after 40 labels. This is what an annotator would actually be handed.
What the learner is, and what this does not show
- Learner
- scikit-learn logistic regression (BSD-3-Clause), L-BFGS, class-balanced, on frozen torchvision ResNet-18 ImageNet embeddings (BSD-3-Clause)
- Task
- image-level: does this part carry a defect
- Metric
- average precision (area under precision-recall), on the held-out test split
- Protocol
- 12 rounds × 5 seeds per strategy, evaluated on 576 held-out images
One further honesty note. An earlier version of this experiment used a hand-rolled gradient-descent logistic regression and reported that random sampling won by 0.084. It had not converged. Swapping in a properly converged L-BFGS solver reversed the result. The lesson is not about active learning at all: an under-fitted learner produces confident, publishable, wrong conclusions about everything downstream of it, and the plateau that looked like a finding about sampling was an artefact of the optimiser.
precomputed Built by scripts/active_learning.py at 2026-08-09T19:36:36+00:00. Pool of 1,380 images, 12 rounds, 5 seeds per strategy. Re-run that script to regenerate it; nothing on this page is hardcoded.