- 22 labeled slices
The Group 9 project segments pores in X-ray micro-tomography (22 nm resolution) with only 22 annotated slices against 172 unlabeled ones. Supervised training starves at that scale: the stand-alone U-Net managed Dice 0.49. The fix was semi-supervision: let the unlabeled 88% of the data contribute through pseudo-labels.
- Cross-teaching in two sentences
A U-Net (ResNet-34 encoder, 512x512, local convolutional bias) and a ViT (ViT-B/16, 224x224, global attention) both predict each unlabeled image; each model's confident prediction becomes the other's training target, resampled across the resolution gap (224 up to 512, 512 down to 224). In the report-era run, pixels above 0.9 max-softmax counted as confident and the consistency loss carried weight 0.5; on micro-CT this took the U-Net from Dice 0.49 to 0.97 and the ViT from 0.89 to 0.99.
- The public redesign
The micro-CT dataset can't be redistributed at scale, so David rebuilt the pipeline on Oxford-IIIT Pet (3-class trimap via TensorFlow Datasets) with stricter bookkeeping: both baselines and cross-teaching see the same labeled 20% of the train split, the confidence gate became image-level (mean max-softmax >= 0.75), the consistency weight dropped to 0.05 after a scaling fix, warmup holds the exchange off for 2 epochs, and one epoch means one pass over the labeled loader for every method. The trained checkpoints and per-epoch metrics are committed to the GitHub repo; this page runs those exact checkpoints.
- The honest second verdict
With 590 labeled pets and ImageNet-pretrained encoders, the supervised U-Net already reaches Dice 0.852 - and cross-teaching's ensemble lands at 0.852 too. David's own README says it plainly: with the baseline this high, cross-teaching can't be called better here; its value is that it trains on images no human ever labeled. Two datasets, two verdicts: transformative at 22 labels, a wash at 590.
- Local filters vs global attention
Why pair these two architectures? The U-Net's convolutions see textures through a growing receptive field; the ViT chops the image into 196 patches and lets every patch attend to every other from layer one. The explainer below shows both on real data: encoder activations from the shipped U-Net checkpoint, and attention rollout maps from the shipped ViT; hover a patch to see where it looks.
- The detector that never ran
The repo also holds CrossDetection.py: cross-teaching rebuilt for object detection: a Faster R-CNN (ResNet-50 FPN backbone) exchanging pseudo-boxes with a ViT detection head over the 37 pet breeds. It was written while the segmentation models were training and, in the README's words, never tested, trained, or even proofread. It's in the Source drawer as a read: a deeper pair of networks the project pointed at but never got to run, mentioned here for exactly that reason.
- The ladder that led here
02456 climbs to cross-teaching through weekly notebooks: autodiff by hand, a feed-forward net on the half-moon set, MNIST, CNNs on CIFAR-10, transfer learning, RNNs, then autoencoders, VAEs and GANs. The strip below replays that progression: the autodiff graph and the half-moon net run live in TypeScript; the deeper models are explained and visualized rather than re-trained, with David's solution notebooks in the Source drawer.
- Rebuilt for this page (2026-09-01)
Every prediction, confidence map, activation and attention map here was generated at build time by running the repo's four real checkpoints (Git LFS) on 12 held-out test images with the repo's own eval code path; nothing was retrained. Training curves are the metrics JSONs committed next to the checkpoints; micro-CT slices come from the public Group 9 repo. The TS widgets and metric ports were written with AI coding tools and are fixture-tested against the Python pipeline's numbers.