Views
No views yet
blank or content. It is a cheap pre-filter: run it before expensive VLM
metadata extraction (NuExtract3 / Qwen-VL) so blank cards are skipped instead of burning GPU
and cluttering the output. Built to generalise across collections (Boston Public Library
shelf-list cards + National Library of Scotland Advocates Library cards).apple/mobilevit-xx-small
on small-models-for-glam/index-card-blank-content.1from transformers import pipeline
2
3clf = pipeline("image-classification",
4 model="small-models-for-glam/index-card-blank-detector", device=-1) # CPU
5print(clf("card.jpg"))
6# [{'label': 'content', 'score': 0.99}, {'label': 'blank', 'score': 0.01}]--skip-blank pre-filter over a folder or dataset, see infer.py in the
project repo: cards predicted blank are
skipped so the VLM only runs on content cards.pipeline)| split | accuracy | blank recall | content recall |
|---|---|---|---|
| BPL (60) | 1.00 | 1.00 | 1.00 |
| NLS content (15) | 1.00 | n/a | 1.00 |
| punch-hole / smudge blanks (28) | 1.00 | 1.00 | — |
pipeline() inference path (not just the in-training number — a
preprocessing mismatch can hide behind a self-consistent training metric).| backbone | params | gold acc | CPU latency (batch=1) |
|---|---|---|---|
| MobileViT-XX-Small (this model) | 0.95M | 100% | ~26 ms |
| MobileNetV2 | 2.23M | 100% | ~37 ms |
| ViT-Tiny | 5.52M | 100% | ~17 ms |
card_type, an ink-density heuristic
with punch-hole removal (100% blank recall / 96% content recall when calibrated; used to
harvest extra blanks), the NLS card-detector's box-count (validated as an oracle — reliable
on NLS, noisy on BPL crops), and the NLS has_card flag.BUILD-LOG.md; method derives from the
data-centric-model-dev workflow and is the
companion to the NLS card detector.divider cards are a planned third class (captured in the dataset, held out of this
binary model); for now a divider is classified content (sent to the VLM).source_collection).source_collection.