Learning from Scraps: Semi-Supervised AI | The Uncertain Eye Ep. 3

Varun walks through how a glaucoma classifier trained on just 350 labeled scans reached 0.85 AUROC using semi-supervised learning and a pseudo-supervisor architecture.

2:12 video3 min readWatch on YouTube

Varun explains how his team built a glaucoma classifier from a dataset most people would consider too small to work with: 350 labeled OCT scans, plus a much larger pool of unlabeled ones. The video walks through why semi-supervised learning made that possible and how the team measured whether the result was actually useful.

The constraint: 350 labeled scans

Most AI results people hear about are trained on mountains of labeled data. This project did not have one. Out of the available patient scans, only 350 had confirmed answers, glaucoma or not. The rest were unlabeled, and glaucoma is a disease that can hide in the data, making the labeled set even more precious. The team's response was not to shrink the ambition of the model, but to build a system that could learn from the unlabeled scans as well as the labeled ones.

What semi-supervised learning does differently

A fully supervised model only learns from answered questions, the scans where a human has already confirmed a diagnosis. A semi-supervised model uses those few answers as anchors, then studies the shape of the entire unlabeled dataset: how scans cluster, which patterns repeat, and bootstraps understanding from that structure. Varun compares it to a student given ten worked problems and a thousand blank ones, who mines the blank problems for patterns instead of ignoring them because they lack answers.

The pseudo-supervisor architecture

The specific engine behind this is a pseudo-supervisor design. One network learns to detect glaucoma directly. A second network learns to generate training signals from the unlabeled scans, effectively teaching the first network what to pay attention to in data that has no ground-truth label. The two networks improve each other. Sitting on top of this pair is EfficientNet-V2S, a modern vision network, reading the OCT scan itself.

Why accuracy is the wrong metric

Raw accuracy is misleading in a dataset like this one. If most patients in the data are healthy, a model that predicts "healthy" every single time will score high on accuracy while catching no actual disease. Instead, the team used AUROC: take a random healthy eye and a random diseased eye, and ask how often the model correctly ranks the diseased one as riskier. A score of 0.5 is a coin flip; 1.0 is perfect. The classifier reached about 0.85 AUROC on patients it had never seen, a result Varun describes as specialist-adjacent, built from a fraction of the labeled data a fully supervised approach would need.

What the single number was hiding

The model outputs a single probability per eye, and in that number the team noticed something worth paying attention to: the model was not just stating its answer, it was implicitly signaling how much to trust that answer. That observation is set up as the thread the next episode in the series picks up.

Key takeaways

  • The team trained a glaucoma classifier using only 350 labeled OCT scans out of a much larger patient pool.
  • Semi-supervised learning uses the few labeled examples as anchors and learns additional structure from unlabeled data by studying how scans cluster.
  • The pseudo-supervisor architecture pairs a detection network with a second network that generates training signals from unlabeled scans, running on EfficientNet-V2S.
  • Raw accuracy is misleading on imbalanced medical data; AUROC measures whether the model correctly ranks a diseased case as riskier than a healthy one.
  • The classifier reached about 0.85 AUROC, a specialist-adjacent result built from a small fraction of the labeled data a fully supervised model would require.

Who this is for

Anyone working with a medical imaging dataset that has far more unlabeled examples than labeled ones, or anyone trying to understand why accuracy is a poor metric for imbalanced diagnostic data, will get a concrete worked example here.

Chapters

  1. 0:00The reality of scarce medical labels
  2. 0:15Semi-supervised learning: Teaching a model to teach itself
  3. 0:35The pseudo-supervisor architecture & EfficientNet-V2S
  4. 0:55Measuring performance: Why raw accuracy lies
  5. 1:15Reaching specialist-adjacent accuracy (0.85 AUROC)
Full transcript(auto-generated, with timestamps)

The reality of scarce medical labels

[0:00]Hi, I'm Varun and this video is about learning from scraps, a classifier built from almost no labels. Every stunning AI result you've heard about was trained on a mountain of labeled data. We didn't have a mountain. We had 350 answered examples and a disease that hides. So, we built a model that could learn from

Semi-supervised learning: Teaching a model to teach itself

[0:16]What little we had and teach itself the rest. With few labels, a model learns from patterns. Ours learned from the questions nobody answered, and it worked well enough to build a system on. Here's the constraint. Out of our patients, we let the model use only 350 labeled scans. The rest it had to learn from unlabeled. This is semi-supervised

The pseudo-supervisor architecture & EfficientNet-V2S

[0:35]Learning and the idea is elegant. A fully supervised model only learns from answered questions. A semi-supervised model uses the few answers it has as anchors then studies the shape of all the unanswered data. How scans cluster which patterns repeat and bootstraps its understanding across them. Picture a student given 10 work problems and a thousand blank ones who mines the blanks for patterns instead of ignoring them.

Measuring performance: Why raw accuracy lies

[0:56]Our specific engine was a design called a pseudo supervisor. One network learns to detect glaucoma while a second network learns to generate smart training signals from the unlabeled scans. The two improving each other on top sat a modern vision network efficient net v2s reading the OCT map. And how do we know it worked? Not with raw accuracy. Accuracy lies. If most

Reaching specialist-adjacent accuracy (0.85 AUROC)

[1:16]Patients are healthy, a model that says healthy every time scores high and helps no one. So we use a take a random healthy eye and a random diseased eye. Aur is the chance the model ranks the diseased one as riskier. 0.5 is a coin flip. 1.0 is perfect. Our classifier reached about 0.85 AuroC on patients it had never seen. Specialist adjacent built from scraps. A real result, but it output a single probability per eye. And in that one number, we noticed something everyone else was throwing away. Your turn. Paste this. If you could only afford to label a third of your data, how would you ring value from the rest? Ask for two concrete methods and for the specific way each one can go wrong because a model that teaches itself can just as easily teach itself a mistake. If the answer skips the failure mode, push back. Learning from scraps, what we noticed was this. The model wasn't just telling us its answer. It was quietly telling us how much to trust it. Next time.

More from HAI

Humanitarians AI Lyrical Literacy Project