PTv3 Dental Landmark Detector
Automatic detection of anatomical landmarks on 3D intraoral scans, developed
during a research internship at the
National Dental Centre of Singapore
(NDCS) and evaluated under the official
3DTeethLand — MICCAI 2024
challenge protocol.
The model takes a raw dental scan mesh (upper or lower jaw) and predicts six
classes of clinically relevant landmarks — Mesial, Distal, Cusp, InnerPoint,
OuterPoint, FacialPoint — directly from the point cloud, with no tooth
segmentation stage.
Approach
Landmark detection is formulated as dense per-point distance regression:
- Input — 10,000 vertices randomly sampled from the scan mesh, each with
its surface normal →
[N, 6] features (x, y, z, nx, ny, nz).
- Encoder — a Point-Transformer-v3-inspired stack: linear embedding to
256-d, then 4 stages × 2 pre-norm transformer blocks (multi-head
self-attention + MLP). Unlike standard PTv3, no downsampling is applied,
so per-point resolution is preserved end to end.
- Decoder — a lightweight per-point MLP (256→512→6) regressing, for each
landmark class, the normalized distance from the point to the nearest
landmark of that class. Training targets are Euclidean distances clamped
at 15 mm and sqrt-sharpened:
d = sqrt(min(d, 15) / 15), so 0 = at a
landmark. Dense distance supervision gives every point a training signal —
this proved far more trainable than the sparse Gaussian heatmaps used in
early experiments.
- Post-processing — points below a per-class distance threshold are
clustered with DBSCAN; each cluster contributes one landmark (the point
minimizing distance-to-centroid + 2× predicted distance). Per-class
(threshold, eps, min_samples) were tuned per arch and ship in config/.
Two models are provided, one per dental arch (weights/lower,
weights/upper). Each has 6.45 M parameters (~26 MB). Training used
MSE loss with gradient clipping, LR warmup → plateau → cosine decay
(AdamW, peak 2e-4), and rigid-transform augmentation (rotation ±0.5 rad,
translation ±5 mm, scale 0.8–1.2) on an NVIDIA A100.
Results (official 3DTeethLand'24 protocol)
Scored with the challenge's official evaluation code on the 50-scan test split
(per-arch):
| Arch | mAP | mAR |
|---|
| lower | 0.536 | 0.412 |
| upper | 0.553 | 0.438 |
Lower-arch mean AP/AR at selected matching thresholds:
| Threshold | 0.5 mm | 1.0 mm | 1.5 mm | 2.0 mm | 2.5 mm |
|---|
| mean AP | 0.091 | 0.473 | 0.701 | 0.790 | 0.823 |
| mean AR | 0.263 | 0.635 | 0.787 | 0.843 | 0.862 |
Inference takes ~0.9 s per scan on an Apple M3 Pro (CPU/MPS).
Usage
1pip install -r requirements.txt
2python inference.py --mesh your_scan.obj --arch lower --out landmarks.json
Or from Python:
1from ptv3_dental import load_model, load_dbscan_params, detect, landmarks_to_json
2
3model = load_model("weights/lower/best_model.pth")
4params = load_dbscan_params("config/dbscan_params_lower.json")
5landmarks, _, _ = detect("your_scan.obj", model, params) # {class: [k,3] coords}
Input: OBJ/STL/PLY mesh of a single arch, in millimeters, in the native
intraoral-scanner coordinate frame (as in Teeth3DS). Output: landmark
coordinates per class, in the 3DTeethLand annotation JSON format.
Limitations
- Not a medical device. Research prototype only; not validated for
clinical use.
- Precision degrades below ~1 mm matching tolerance (see table) — adequate for
initial planning tolerances, not yet for sub-millimeter applications.
- Supervision uses Euclidean (not geodesic) distance maps; landmarks on
adjacent teeth that are close in space but far along the surface may blur
together.
- Predictions vary slightly with the random point sample (controllable via
seed); multi-sample consensus is a natural extension.
- Trained on 120 scans/arch from a single dataset; robustness to other
scanners, partial arches, or heavy dental work is untested.
Training data & license
Trained on the 3DTeethLand'24 landmark annotations over Teeth3DS
(3DTeethSeg'22) meshes — 120 training / 50 test scans per arch. The datasets
are released for non-commercial research and are not redistributed here;
obtain them from the challenge organizers. Weights are released under
CC BY-NC 4.0 accordingly.
Links
Citation
1@misc{bathla2025ptv3dental,
2 author = {Bathla, Kartik},
3 title = {PTv3 Dental Landmark Detector: Direct Point-Cloud Landmark
4 Detection on 3D Intraoral Scans},
5 year = {2025},
6 note = {Research internship, National Dental Centre of Singapore},
7 url = {https://huggingface.co/kartikbathla/ptv3-dental-landmark-detector}
8}