This needs your camera. Nothing leaves the device.
Nothing is enrolled, so it has no idea what a good part looks like and cannot judge anything.
What this will be
Nazar showed that PatchCore works: 98.87 mean image AUROC across all 15 MVTec categories, 0.12 off the published figure. It answered "does the method work". It could not answer the question a line asks next: can the person standing at the machine set it up themselves, in a minute, with nobody from the ML team in the room.
Enrol
Hold any part in front of the camera and turn it. Every frame becomes 784 patches of what normal looks like. No labels, no defects, no training run.
Inspect
Show it a damaged one. Each patch is scored against the memory you just built, on your own GPU, and the worst patch lights up.
Find the limit
Enrol three parts and it flags everything, good ones included. Enrol twenty five and it works. Nazar measured that curve. Here you feel it.
Nothing is uploaded
The frames never leave the phone. Only the score and a timestamp are logged, which is the same thing a line would keep.
What is honest here, and what is not
- Every stage is checked against a PyTorch reference before it is trusted. The backbone matches to 3e-5, the tap merge and the kNN to 2e-7. The harness pages are on this site.
- There is no calibrated defect threshold. That needs defect examples this demo does not have, so the page flags what stands out from the good parts you enrolled, relative to the range it has seen, and says exactly that rather than pretending to a fixed cutoff.
- Below about 25 enrolled parts it flags almost everything. The memory has seen too few poses, so a good part at an odd angle looks stranger than a defect. Nazar measured this curve; here you feel it as you enrol.
- The phone backbone is not free. Measured on MVTec screw, swapping WideResNet50-2 for MobileNetV3 costs 1.23 points of image AUROC (96.68 to 95.45) and shrinks the memory bank about ten times, 15.4 MB to 1.5 MB. That trade is the reason this runs on a phone at all.
What a phone-sized backbone costs
The published PatchCore uses WideResNet50-2, which is far too big to run in a browser. Yaad uses MobileNetV3, which is small enough. Both columns come from the same pipeline on the same data at the same coreset, so the difference is the backbone and nothing else.
About
Yaad is the enrolment half of PatchCore, moved onto the phone. Nazar answered whether the method works. This answers whether the person at the machine can set it up themselves, from good parts only, with nobody from the ML team in the room.
The method
PatchCore, Roth et al., CVPR 2022. A memory of good-part patches, scored by nearest-neighbour distance. Enrolment and scoring both run in the browser.
The backbone
MobileNetV3-Large features up to the stride-16 tap, ImageNet weights from torchvision, batchnorm folded into the convolutions, run as hand-written WGSL. 1.5 MB of weights.
The compute
Nothing offline is required to use it: the whole model runs on your GPU. The one measured number, the AUROC cost of the small backbone, came from the Nazar pipeline on MVTec AD.
The privacy
Camera frames never leave the device. Only the score and a timestamp are logged, which is the same thing a production line keeps. On a factory floor that is a feature, not a limit.