Dermatological screening tool

AI-assisted lesion risk stratification.

Upload a clinical or dermoscopic photograph. An EfficientNet B4·B5·B7 ensemble returns a probability distribution across nine dermatological conditions, with high-risk classes flagged for professional follow-up.

Images are not retained after inference.
25,000+
Dermatoscopic training images
B4 · B5 · B7
EfficientNet soft-vote ensemble
9
Conditions screened per scan
Live inference

Submit a photograph for analysis.

Upload any skin lesion photograph. The ensemble returns a full probability distribution across all nine conditions — no account required.

Your result appears here
Upload a photo to begin screening.
Methodology

Three-stage inference pipeline.

01

Image submission

Upload a clear, close-up photograph of the lesion. Higher resolution and controlled lighting improve classification accuracy.

02

Ensemble inference

EfficientNet B4, B5, and B7 each run an independent forward pass. Output probability vectors are averaged via soft voting.

03

Risk stratification

MEL, BCC, SCC, and AK predictions above threshold are flagged as high-risk and prompt a dermatologist referral recommendation.

Classification scope

Nine-class dermatological classification.

Training corpus: ISIC 2019, ISIC 2020, and HAM10000 — combined dermatoscopic and clinical image archives.

HIGH-RISK Melanoma, basal cell carcinoma, squamous cell carcinoma and actinic keratosis are flagged as high-risk and trigger a recommendation for professional evaluation.
Architecture

EfficientNet soft-vote ensemble.

Three EfficientNet variants are trained independently on the same corpus. At inference, per-class probability vectors are averaged element-wise — reducing single-model variance without retraining.

ArchitectureEfficientNet B4 · B5 · B7
Ensemble methodSoft-vote (mean probs)
Training dataISIC 2019 + 2020 + HAM10000
Training images25,000+
Output classes9 conditions
High-risk flagsMEL · BCC · SCC · AK
inference.py view source →
# soft-voting ensemble
def predict_probs(self, img):
    per_model = []
    for model in self.models:        # B4, B5, B7
        h, w = self.input_size(model)
        arr  = _preprocess(img, (h, w))
        per_model.append(model.predict(arr)[0])
    return np.mean(per_model, axis=0)   # soft vote

# ImageNet normalization
arr = (img / 255. - [.485,.456,.406]) / [.229,.224,.225]
Python 3.11 TensorFlow 2.20 tf-keras FastAPI Next.js 14 Modal
Clinician network

Open to board-certified dermatologists.

We maintain a verified referral network for patients who receive high-risk screening results. If you're a practicing dermatologist, we'd like to list your practice.