Model Card for CNN

Dental Pathology CNN Baseline Floor benchmark for the project's YOLO11 detector. A small CNN trained from scratch (no pretrained weights) to classify the dominant pathology in a dental X-ray. This is intentionally simple , its job is to set a minimum bar the final YOLO11 detector must beat, not to be a strong standalone model. For teammates : read this before using the model.

This is a classifier, not a detector. It outputs one label per image, not bounding boxes. Not a drop-in replacement for the YOLO11 model. No "healthy" class. Every training image contains at least one pathology β€” data/prepare_dataset.py drops images with zero target-class boxes. This model cannot say "no finding" ; it always picks one of the 4 pathology classes, even on a healthy X-ray. Don't use it for screening healthy-vs-not. Single-label, but source data is multi-label. Images with more than one pathology were reduced to one label via priority: Cavity > Crown > Impacted Tooth > Filling. Real-world images with multiple findings will only get the highest-priority one back. Class imbalance partially, not fully, corrected. Train-split oversampling (Cavity/Crown boosted to β‰₯50% of Filling's count) plus class_weight='balanced' at train time. Crown recall may still be the weakest; check the confusion matrix below before trusting per-class numbers, especially since Crown has zero representation in one of the two source datasets. Real patient data. Training images are de-identified but sourced from real clinical panoramic X-rays (filenames in the raw source embedded real patient names, scrubbed during processing) β€” see data/README.md for provenance and the team's data-governance discussion before using this outside the course project.

Model details

Architecture3 conv blocks (32β†’64β†’128 filters, ReLU, maxpool) β†’ GAP β†’ Dense(128) β†’ Dropout(0.3) β†’ Dense(4, softmax)Input128Γ—128 RGBParameterFrom scratch, no pretrained weights (deliberate β€” see rationale below)ClassesCavity, Filling, Crown, Impacted Tooth Why trained from scratch, not transfer learning: this model exists to be a floor. A pretrained ImageNet backbone would set an artificially strong baseline and undercut the point of the SCRUM-7 comparison β€” the YOLO11 model should be measured against an honest, simple baseline, not a strong one. Training data Merged from two Roboflow-sourced X-ray datasets (dental-x-ray-1imfs and a panoramic dataset), deduplicated, split 70/15/15 stratified by source dataset. Full pipeline documented in the project repo's notebooks/01_eda.ipynb and 02_preprocessing.ipynb.

Total training images: Class distribution (train, post-oversampling): [fill in from balance_stats['after']]

Evaluation results Fill in from models/runs/cnn_baseline_summary.json after training: MetricValueTest accuracy[test_accuracy]Test loss[test_loss]Most confused pair[most_confused_true] β†’ [most_confused_pred] ([most_confused_count] times) See cnn_baseline_confusion_matrix.png and cnn_baseline_training_curves.png in this repo for the full per-class breakdown and train/val curves.

Model Card for Model ID

Dental Pathology Detector β€” YOLO11n The project's core deliverable (SCRUM-7). A YOLO11n object detector, fine-tuned via transfer learning (COCO-pretrained weights) on real dental X-rays, localizing and classifying 4 pathology types. Benchmarked against a from-scratch CNN classifier floor (see companion model card), this model substantially outperforms it, as it should, since it's the actual product deliverable. Results (test split, 2,202 images) ClassPrecisionRecall mAP50mAP50-95All (mean)0.7480.7440.7460.447Cavity0.6110.3910.4200.186Filling0.7130.7030.7480.423Crown0.7930.9250.8740.591Impacted Tooth0.8740.9570.9420.587 For teammates β€” known weakness, read before tuning Cavity is the clear weak point β€” recall of only 0.39 means the model misses over half of actual cavities in the test set, and its mAP50-95 (0.186) is far below the other 3 classes. Since cavities are arguably the most clinically important finding this project targets, this is the priority for Temirlan's tuning work, not a minor footnote. Possible contributing factors, not yet root-caused:

Cavity boxes may be visually subtler/smaller than Crown or Impacted Tooth (worth checking Varsha's EDA notebook for bbox-size stats per class) Even after train-split oversampling, Cavity instance count (1,674 in test) is still far below Filling (8,184), oversampling boosted train representation but didn't change what the model finds visually distinguishable Worth checking confusion patterns specifically: is Cavity being missed entirely, or confused with Filling (visually adjacent conditions on an X-ray)?

Model details

ArchitectureYOLO11n (nano)Parameters2,590,620Input size640Γ—640Pretrained onCOCO (transfer learning)Training50 epochs, batch 16, seed 42ClassesCavity, Filling, Crown, Impacted Tooth Training data Same merged, deduplicated, source-stratified dataset as the CNN baseline β€” see that model card or data/README.md in the project repo for full provenance and the real-patient-data / privacy note (important β€” read before external use).

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support