How a 20-year-old learned AI by building an eye-screening model
TL;DR
- Teodor Velický, 20, built a model that flags signs of high blood pressure in photos of the back of the eye. He has no medical background and built it to learn machine learning.
- The AI doing most of the work never saw an eye. He froze a general image model from Meta and trained only a small decision model on top, for free.
- His view: AI builds what you ask for, but the ideas still have to come from people.
A model that looks at a photo of the back of your eye and flags signs of high blood pressure sounds like something a hospital research team would build. This one was built in October by Teodor Velický, and the AI doing most of the work had never seen an eye. It’s DINOv2, a model Meta trained on 142 million ordinary photos. Teodor didn’t retrain it. He froze it and put a small decision model of his own on top, and the whole run took about 40 minutes on a free GPU.
He’s 20, studies software engineering at ČVUT in Prague and works as an AI consultant. Two years ago he’d sworn he would never touch a computer again.
Before AI
Programming came first, about seven years ago, as a kid in Banská Bystrica who spent most of his time alone at a computer. The code itself never interested him much: “I always try to find something I can use the programming for, some concrete problem.” After watching Mr. Robot, the series about a hacker, he moved to cybersecurity and spent about two years on TryHackMe, a site where you practise hacking on fake systems, and on online CTFs (“capture the flag” contests), where teams form on Discord, often from strangers. His LinkedIn lists him as TryHackMe’s top-ranked user in Slovakia in January 2022. What he took from the contests was the people more than the hacking. “You can go there knowing absolutely nothing and completely flunk it,” and someone will still show you things you’d never figure out alone.
Then a cybersecurity high school opened in Banská Bystrica, he joined its very first class, and as soon as hacking was homework, the fun was gone. “When your creativity gets crushed by school, it sucks the joy out of you.” He switched to something completely different, trained as a fitness coach and planned to study physiotherapy, with biology as his final exam.
About a year ago he had a serious accident and broke his neck. He’s walking again, but he feels it every day. Coaching was over, because a fitness trainer has to look the part, and for about half a year, going to physio and sitting at home, he didn’t know what to do with his life. That was exactly when AI coding took off, and he missed all of it.
Back to computers, through AI
The way back came through TikTok. Getting anything real out of a feed that’s built to keep you scrolling is hard, and most people just get distracted, but he scrolled into videos of people building apps by describing them to an AI (what people call vibe coding) and tried it himself the same day. Not with an agent, either. He used plain ChatGPT in a browser tab, which is a funny place to start building software.
The first idea wasn’t small. Most people who try AI for the first time ask it to write an essay. He went for an app where you photograph your food and it tells you which micronutrients you’re missing. That’s close to Cal AI, the calorie-counting app two high school students built, which passed $30 million a year in revenue in under two years and was bought by MyFitnessPal. After that he tried an Instagram content pipeline for busy business owners with his best friend, and built websites for people. The pipeline never launched.
Two things stuck with him from that time. Building with someone beats building alone, because “when you’re alone, you lock yourself in an echo chamber and nobody can check your ideas.” And money can’t be the reason: “if you chase money, you’ll never catch it.”
Those projects, plus the national final of ZENIT (a competition for Slovak secondary schools) in programming, got him a job as an AI consultant after he moved to Prague.
The eye project
Why he built it
About two months into the job, using AI wasn’t enough for him anymore. He wanted to understand how machine learning actually works, the maths included. The idea came from TikTok again, from someone doing a similar project with brain scans, and from a Google paper that had already done it at scale. (He didn’t name it, but it’s most likely Poplin et al., 2018: Google and Verily trained a model on eye photos from 284,335 patients, and it estimated systolic blood pressure with an average error of about 11 mmHg.) “It’s not that I invented something,” he says. “The technology is there, and it’s been done.” The point was to learn by building it.
Medicine wasn’t a random pick either. He took biology as his final exam, was heading for physiotherapy, and says he’s still waiting for a chance to use it.
Before building anything, he spent about three days on the couch and on the metro reading up on the problem and watching 3Blue1Brown’s videos on neural networks one by one. He wanted to understand it before he started. Then he split the work with Claude. Claude did what he calls the plumbing, “the monotonous, boring stuff”: preparing the dataset, cropping the photos, the scripts. The parts he wanted to learn, he wrote himself.
The data is the labelled public part of ODIR-5K: 7,000 eye photos from 3,500 patients at Chinese hospitals, labelled from what the doctors wrote. Only 193 of them, about 2.7%, show signs of high blood pressure.

How freezing a model works
The model at the centre of it is DINOv2, an image model Meta released in 2023 and made free for anyone to download. It learned from 142 million ordinary photos without using any labels, mostly by comparing different crops of the same photo and guessing parts that were hidden. It doesn’t tell you what’s in a photo. It turns the photo into 768 numbers, a description in maths, and photos that look alike end up with numbers close to each other.

To get an actual answer out of that, you put a small extra part on top, called the head. The big part underneath is the backbone. Teodor froze the backbone, so none of its numbers could change, and trained only his own head. That head is tiny: one layer that takes the 768 numbers and returns a score between 0 and 1, where 0 is healthy and 1 is high blood pressure. “Imagine you have two neurons, one is healthy and the other is elevated.” So what he built is really his own decision model, sitting on top of someone else’s.

Training a head works like any supervised learning. You show it photos with the right answer attached, then test it on photos it has never seen and compare its answers with labels it never got. If test photos leak into training, the result means nothing, so both eyes of each patient always went to the same side. Otherwise the model could learn to recognise the person instead of the disease.

Why the eye at all? It’s one of the few places in the body where you can see blood vessels directly, without cutting anything. High blood pressure can narrow the small arteries, squeeze veins where arteries cross them, and sometimes cause small bleeds, and all of that can show up in the photo.
There are three ways to build a model like this, and the difference between them is what he wanted to learn:
- Freeze the backbone and train a head, which is what he did (with a one-layer head like his, the proper name is a linear probe). Cheap, fast, and hard to overfit with little data. He calls it “the low-budget version”.
- Fine-tune: unfreeze the big model and keep training all of it on your photos. It can end up better, but “you need a huge dataset”, and with 137 sick photos to train on, it would mostly memorise them.
- Train your own from scratch, on what he calls “unbelievably large” datasets. Not realistic with 7,000 photos.

What came out
On 1,050 photos it had never seen, the model scored an AUROC of 0.90: show it one eye with the signs and one without, and it ranks the first one higher 90% of the time. A model that only knows the patient’s age and sex gets 0.69. It catches 27 of the 28 sick eyes in the test set but also flags about 39% of the test photos, so it’s a first filter for a doctor, not a diagnosis. Only 15 sick patients ended up in the test set, which is the honest limit. He says he also tried it on eye photos from the internet and it worked pretty well. Doubling the photo resolution and making the vessels easier to see, both Claude’s suggestions, added a couple of points.
The surprise was RETFound, a model built only for eyes by Moorfields Eye Hospital and UCL, trained on about 1.6 million eye scans (the version for photos like his on about 900,000). Frozen the same way, it did worse than the general model. Teodor puts it down to how much more data DINOv2 has seen. His repo adds another reason: RETFound was built to be fine-tuned, so its numbers are harder to use frozen. And it’s not a rule. A 2025 study that fine-tuned both found DINOv2 generally better on eye diseases but RETFound better at predicting problems in the rest of the body, like heart failure. High blood pressure is a whole-body problem, which makes his result even more surprising.
The whole thing cost nothing. The data is public, DINOv2 is free to download, and Kaggle gives you a GPU for about 30 hours a week.
Freezing works for other models too
The same trick works far beyond eyes:
- Voice: a frozen speech model with a tiny head on top recognises who’s talking, out of 1,251 known people, about 90% of the time. Google’s HeAR listens to coughs this way, tuberculosis included. (How voice agents are put together is in Making voice agents sound human.)
- Image generation: ControlNet keeps Stable Diffusion locked and trains a copy of part of it on the side to follow a pose or a sketch.
- Video: in Meta’s tests, V-JEPA is trained once and kept frozen, and each new task gets only a small network on top.
- Language models: LoRA freezes the model and trains small add-ons, which on GPT-3 meant up to 10,000 times fewer numbers to train.
- Medicine: a small classifier on Google’s frozen chest X-ray model was as good as radiologists at spotting tuberculosis after training on just 45 X-rays.
Roughly: with little data, freeze. With lots of data similar to what the model already saw, fine-tune. From scratch, rarely. Teodor’s own example is house prices. Label 1,000 satellite photos with prices, train a head on them, and you can price a new house from its photo.

It’s also close to Jev, the model that picks an answer instead of writing one. His eye model is basically a Jev for images: it doesn’t write anything, it picks yes or no and gives a score. The difference is that with Jev you send the question and the possible answers each time, and it isn’t trained on your data, while his model learned one question from labelled photos. Since 14 October Jev can take images too, as an experiment, but Teodor thinks it would do worse at this. That doesn’t contradict the RETFound result. DINOv2 is general too, and it won because his head was trained on labelled examples of exactly this problem. Jev would be asked cold.
What he thinks
Most of Teodor’s views on AI come back to ideas. Building used to be the expensive part, because a good idea needed a team and a few weeks before it turned into anything. Now Claude Code can run overnight, and the idea is what’s left. In his view, that’s the one thing AI can’t supply: “LLMs only predict the probability of the next word. They’ve never experienced what it’s like to be human.” Good ideas come from what annoys you or what’s missing in your life, so they have to start with a person. The AI checks them and builds them.
Knowing how the models work also changed how far he trusts them. Once it clicked that an LLM is maths predicting the next word, using one as a therapist stopped making sense to him.
The same thinking shapes how he sees work. Leetcode interviews and memorised syntax belong to the last generation of software engineering, he thinks, and firms now want people who can ship fast with AI agents. He thinks his projects got him the job over candidates with degrees, and three months on the job taught him more than three months of university.
It also explains what he wants to build. Right now that’s local AI, models that run on your own computer: a free app that checks your hardware, picks a model that fits and sets you up with your own agent, so normal people can use one without sending their files to the cloud. Further out, he wants to use AI to help people who can’t walk, for example by reading signals from the brain, because the accident showed him how close he came to being one of them. The research is already moving. In 2023 a paralysed Dutch man, Gert-Jan Oskam, walked again with a brain-to-spine implant from a team led by EPFL and Lausanne University Hospital. The implanted version is still experimental.
His advice for people starting with AI
Start with the idea. His way of finding one is to sit somewhere quiet, alone, and wait: “After about 20 minutes of nothing coming to you, real ideas start coming.” Then look for a human problem, something that would make someone’s life easier, and build that.
Learn by building. Pick something a bit beyond you, the way he picked a medical model with no medical background, read up on it for a few days, then let AI do the boring parts and do the part you want to learn yourself.
Don’t do it alone. Find someone to build with, and spend time around people who want as much from life as you do, or more. He moved to Prague for that and calls it “a Czechoslovak New York”. Competitions and hackathons are the easy way in, since you can show up knowing nothing. And know a little about everything: “jack of all trades” is what he thinks pays off now.
Try running a model on your own computer. Open models are free to download, and a normal laptop can run the smaller versions:
- Llama (Meta)
- Qwen (Alibaba)
- Gemma (Google)
- Mistral (some of its models)
- DeepSeek
Ollama and LM Studio run them in a few clicks, and LM Studio tells you which ones fit your hardware.
If you don’t know what to do next, his project is a decent template: a public dataset, a free GPU, a model someone else already trained, and a few days of videos before you start.
Quotes are translated from Slovak and shortened.
Thanks for reading,



