CoolFace
Datasetpublic

resoajoe/clinical-attire-labels

clinical-attire-labels 4,000 Places365 images labelled for clinical attire and role. Every label is machine-generated. scrubs · surgical_gown · patient_gown · lab_coat · street · mask · none plus derived roles: role_staff · role_patient · role_visitor · ppe_mask Why this exists There is no public labelled dataset for medical scrubs, hospital gowns or lab coats. Fashionpedia has none of them among its 46 garment categories; dataset searches return face-mask corpora… See the full description on the dataset page: https://huggingface.co/datasets/resoajoe/clinical-attire-labels.

sourceHugging Facemitupdated 24d agoView on Hugging Face
0likes59downloads
Dataset Card

clinical-attire-labels

4,000 Places365 images labelled for clinical attire and role. Every label is machine-generated.

scrubs · surgical_gown · patient_gown · lab_coat · street · mask · none plus derived roles: role_staff · role_patient · role_visitor · ppe_mask

Why this exists

There is no public labelled dataset for medical scrubs, hospital gowns or lab coats. Fashionpedia has none of them among its 46 garment categories; dataset searches return face-mask corpora and construction-site PPE. Anyone trying to build a hospital attire or role classifier hits that wall immediately. This is an attempt to lower it — not by solving the problem, but by publishing labels with their provenance and error rates measured, so they can be used with the right amount of trust.

How the labels were made

`qwen2.5vl:7b`, run locally, on Places365-Standard images from four clinical scenes (hospital_room, operating_room, nursing_home, hospital) and four domestic ones (bedroom, hotel_room, dorm_room, office).

  1. 1.Every image asked twice with different wording. Only agreeing answers become a consensus label — 2,966 of 4,000 (74%). Both prompts' parsed answers and their raw text are retained for all 4,000 rows, including disagreements, so you can re-parse or re-adjudicate.
  2. 2.Cross-checked with an independent person detector (yolov8n-pose), which shares no failure mode with the VL model. persons_detected is included per row.

Measured error rates — please read before using

checkresult
hand audit (16 consensus images, inspected by eye)~78% correct
VL claims attire but detector finds no person3.9% (patient_gown 7.1%, lab_coat 0%)
VL says nobody but detector finds a person12.3%
prompt-rewording agreement74%

These are weak labels. Any model trained on them is bounded by a ~78%-accurate teacher, and results measured against them describe agreement with qwen2.5vl:7b, not ground truth.

Known failure modes

  • —Oxygen masks are labelled `mask`. The audit found a child on a nebuliser scored mask-positive. For PPE-compliance work this is backwards — infection control and respiratory support are opposite situations. Consider persons_detected and scene context before using ppe_mask.
  • —Bedding is sometimes read as `patient_gown` — the 7.1% hallucination rate for that class.
  • —Places365 contains illustrations. At least one audited image is a cartoon of nurses. Drawings are present; filter if that matters to you.
  • —Consensus rate varies by difficulty: 96% on empty bedrooms, 53% on nursing homes full of people in ambiguous clothing. The dataset is easiest exactly where it is least interesting.

The taxonomy came from an audit

The first class list said "hospital gown". Inspection showed its only failures were staff in blue surgical gowns labelled as such — correct English, operationally backwards, because a clinician's sterile gown and a patient's gown mean opposite things. Splitting them is what makes role derivable:

role_staff    = scrubs OR surgical_gown OR lab_coat
role_patient  = patient_gown
role_visitor  = street
ppe_mask      = mask          # orthogonal to role, a compliance signal

Schema

fieldtypenotes
filestrPlaces365 path, e.g. h/hospital_room/00002796.jpg
scenestrsource scene class
attire_prompt_a / _blist[str]parsed answers from each prompt
agreeboolwhether the two agreed
consensuslist[str] or nullthe trusted label; null when the prompts disagreed
raw_prompt_a / _bstrthe model's raw text, for re-parsing
persons_detectedint or nullyolov8n-pose count (consensus rows only)
role_*, ppe_maskboolderived, present on consensus rows

Images are not included

Only labels. Download Places365-Standard from the official source and join on file. Places365 has its own licence and terms; this release adds no pixel data and makes no claim over it. The labels in this repository are MIT.

Scope

Operations, never diagnosis. Who is present and whether PPE is worn are staffing, workflow and compliance questions. Nothing here describes any person's health, and none of it is validated for clinical use.

Trained model

`resoajoe/clinical-attire-nano` — 47K parameters, 189 KB, 0.36 ms/frame, trained on the detector-cleaned subset of these labels.


Additional label sets (added 2026-08-31)

Two further sets from the same pipeline, same two-prompt consensus protocol, same Places365 filename keys. 3,980 additional rows.

ward_state.jsonl — 2,500 rows, room-level occupancy primitives

fieldconsensuspositive rate
bed_visible2,4040.511
bed_occupied2,4270.137
multiple_people2,4370.403
rails_up2,4850.002 — DEGENERATE, do not use

`rails_up` is included deliberately as a negative result. It has the highest consensus of the four (99%) and 3 positives in 1,568 samples — the model answers "no" to everything and agrees with itself perfectly. Consensus measures agreement, not information. A labeller that always says the same thing passes a consensus filter trivially. This is why every label set here now reports a positive rate alongside its consensus, and why a 2% floor is applied before anything is trained.

Raw per-prompt answers are retained in the raw field for all four questions.

bed_state.jsonl — 1,480 rows, four-way bed condition

no_bed · empty_made · empty_messy · occupied

classcountshare
empty_made48640.2%
no_bed35529.3%
occupied31325.9%
empty_messy564.6%

Why this set exists. A rumpled empty bed has the lumpy silhouette a naive detector reads as a covered person — the classic false positive for bed occupancy. Separating empty_messy from occupied is the whole point.

A model trained on these labels scored BELOW CHANCE on exactly that pair (0.336–0.402 across 64/128/256 px input). The cause is measurable and is not the labels: these are whole-room images where a 2000 mm bed fills ~0.44 of the frame, so blanket folds land on 2.3 px at 256 px input, far below the ~8 px recognition threshold. On a bed crop at 256 px the same folds land on 12.8 px.

So: crop to the bed before using this set. Whole-room framing cannot answer the question the labels encode, and 56 messy examples is thin regardless — dorm rooms were the only productive source at 11%.

answer_a / answer_b hold both prompts' parsed answers, including the 270 rows where they disagreed and state is therefore null.

Not included

424 labelled frames of generated hospital-room video are held back: the frames themselves are not redistributable, so labels keyed to them would be unusable.