This project started as a model experiment. The workflow, dataset boundary, and limitations are explicit so the story stays honest for readers of the case study and anyone reproducing from the repo. A live demo runs on a separate host so you can try uploads in the browser.
Demo is a bounded snake vs no-snake experiment and should not be treated as species identification or field-safe classification.
Open the live demo in a new tab. Upload a photo and get a bounded snake vs no-snake prediction from the current public build.
Note: the demo may take a few seconds to wake on first load while the host cold-starts.
Most of the value is in dataset hygiene, fixed evaluation splits, confusion-driven review, and refusing to let aggregate accuracy hide weak classes. That discipline transfers directly to larger vision projects where the failure mode is silent, not loud.
Data
Capture raw images and label sources. This is where class imbalance and label quality risks start.
| Artifact | Purpose |
|---|---|
| Stratified train/val split | Keep class ratios stable so metrics reflect generalization, not a lucky split. |
| Augmentation policy (logged) | Make image-level changes comparable across runs instead of silently drifting. |
| Confusion matrix + structured error review | Surface which classes get confused before touching model depth or width. |
| Run folder (config + metrics snapshot) | Reproduce any reported number without guessing which code version produced it. |
The repo holds the full training flow, split configuration, and evaluation scripts. The live demo is intentionally narrow so visitors can try the behavior without mistaking it for a general-purpose classifier.
No questions or comments yet. Sign in with GitHub to leave the first one.