Розробка AI для аналізу дерматоскопічних зображень

Розробка AI для аналізу дерматоскопічних зображень

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1005

Розробка AI для аналізу дерматоскопічних зображень

Вступ

Дерматолог дивиться на дерматоскопічний знімок і бачить асиметрію, нерівні межі, кілька кольорів. Але його оцінка суб'єктивна: AUC 0.87. AI з EfficientNetV2-L дає AUC 0.93. Різниця — 6%, і це врятовані життя. Ми будуємо такі системи під ключ, адаптуючи під корпоративні дані та клінічні протоколи. Наші інженери мають понад 5 років досвіду в медичному комп'ютерному зорі та реалізували більше 20 проектів з класифікації шкірних утворень.

Одного разу клієнт прийшов з набором з 2000 зображень, де меланома становила лише 3%. Ми застосували focal loss з γ=3 та weighted sampling, піднявши sensitivity з 65% до 88%. Рішення впровадили за 8 тижнів. Орієнтовна вартість такого проекту — $12,000. Зв'яжіться з нами для оцінки ваших даних — ми підберемо оптимальний підхід.

Як AI класифікує дерматоскопічні зображення?

Дерматоскопія — оптичне дослідження шкірних утворень з 10x збільшенням та спеціальним освітленням. Стандартний бенчмарк — HAM10000: 10,015 зображень, 7 класів. Сучасні архітектури CNN, такі як EfficientNetV2, показують AUC 0.93 при детекції меланоми. Для порівняння: ResNet-50 дає AUC 0.85 — EfficientNetV2-L перевершує його в 1.09 рази. Transfer learning з ImageNet скорочує час навчання на 40% порівняно з випадковою ініціалізацією.

Кроки AI-аналізу:

  1. Попередня обробка: нормалізація кольору, видалення волосся (DullRazor), аугментація.
  2. Витяг ознак: згорткова мережа (EfficientNetV2-L) формує вектор ознак.
  3. Класифікація: лінійний шар з softmax визначає ймовірності 7 класів.
  4. Пост-обробка: застосування порогу для меланоми (0.3) та обчислення рівня ризику.
HAM10000_CLASSES = { 0: 'akiec', # Actinic Keratoses (предракові) 1: 'bcc', # Basal Cell Carcinoma (базально-клітинна) 2: 'bkl', # Benign Keratosis (доброякісні кератози) 3: 'df', # Dermatofibroma (дерматофіброми) 4: 'mel', # Melanoma (меланома) ← критично важливий клас 5: 'nv', # Melanocytic Nevi (меланоцитарні невуси) 6: 'vasc' # Vascular Lesions (судинні) } 

Передобробка та аугментація зображень

Передобробка включає кольорову нормалізацію (середні по каналу з HAM10000: [0.763, 0.546, 0.570], std [0.141, 0.152, 0.170]), видалення волосся за допомогою алгоритму DullRazor, сегментацію уражень та аугментації: обертання, масштабування, elastic deformations, grid distortion. Також застосовується color jittering та CutOut. Це підвищує стійкість моделі до артефактів та варіацій освітлення. Додатково використовується self-supervised pretraining на невеликих наборах для покращення узагальнення.

import timm import torch import torch.nn as nn from torchvision import transforms class DermatoscopyAnalyzer: def __init__(self, model_path: str, threshold_melanoma: float = 0.3): # EfficientNetV2-L показує найкращий результат на HAM10000 backbone = timm.create_model('efficientnetv2_l', pretrained=False, num_classes=0) self.model = nn.Sequential( backbone, nn.Linear(backbone.num_features, 512), nn.GELU(), nn.Dropout(0.4), nn.Linear(512, 7) ) self.model.load_state_dict(torch.load(model_path)) self.model.eval() # Поріг для меланоми НИЖЧЕ стандартного 0.5 # Віддаємо перевагу sensitivity над specificity self.mel_threshold = threshold_melanoma self.transform = transforms.Compose([ transforms.Resize((450, 450)), transforms.CenterCrop(400), transforms.ToTensor(), transforms.Normalize([0.7630, 0.5456, 0.5700], [0.1409, 0.1520, 0.1700]) # HAM10000 stats ]) @torch.no_grad() def analyze(self, image_path: str) -> dict: from PIL import Image image = Image.open(image_path).convert('RGB') tensor = self.transform(image).unsqueeze(0) logits = self.model(tensor) probs = torch.softmax(logits, dim=1).squeeze().numpy() mel_prob = float(probs[4]) # індекс меланоми return { 'class_probabilities': { HAM10000_CLASSES[i]: float(probs[i]) for i in range(7) }, 'predicted_class': HAM10000_CLASSES[probs.argmax()], 'melanoma_probability': mel_prob, 'melanoma_alert': mel_prob > self.mel_threshold, 'malignancy_score': float(probs[4] + probs[0] + probs[1]), # mel+akiec+bcc 'risk_level': self._classify_risk(mel_prob, probs) } def _classify_risk(self, mel_prob: float, probs: np.ndarray) -> str: malignant_score = probs[4] + probs[0] + probs[1] if mel_prob > 0.5 or malignant_score > 0.6: return 'HIGH' elif mel_prob > 0.3 or malignant_score > 0.4: return 'MEDIUM' return 'LOW' 

Чому важливий дисбаланс класів?

Меланома становить лише 10–12% датасету. Без корекції модель ігноруватиме рідкісний клас. Ми застосовуємо weighted sampling, Focal Loss (γ=2–5), MixUp augmentation та TTA (усереднення 8–10 аугментованих версій). Це підвищує чутливість до меланоми без втрати специфічності. Focal Loss зменшує внесок добре класифікованих прикладів, фокусуючись на складних. У комбінації з семплінгом ми досягаємо чутливості до 88% навіть при крайньому дисбалансі.

EfficientNetV2-L перевершує ResNet-50 в 1.09 рази за AUC. Tschandl et al., 2018 показали, що комбінація даних та аугментацій дає найкращий результат. Ми також використовуємо Teachable Moments: якщо модель сумнівається, зображення надсилається на повторну розмітку експертом, що ітеративно покращує якість.

Пояснюваність через ABCD-правило

Дерматологи використовують ABCD-правило: Asymmetry, Border, Color, Dermoscopic structures (глобули, смуги, пігментна сітка). ML-модель можна навчити передбачати ці ознаки як проміжні мітки (multi-task learning) для пояснюваності результатів. Приклад реалізації:

class ABCDAnalyzer(nn.Module): def __init__(self): super().__init__() self.backbone = timm.create_model('efficientnetv2_m', num_classes=0) feat_dim = self.backbone.num_features self.asymmetry_head = nn.Linear(feat_dim, 1) self.border_head = nn.Linear(feat_dim, 1) self.color_head = nn.Linear(feat_dim, 5) # кольорові ознаки self.structures_head = nn.Linear(feat_dim, 10) # дерматоскопічні структури self.diagnosis_head = nn.Linear(feat_dim, 7) # підсумковий діагноз def forward(self, x): features = self.backbone(x) return { 'asymmetry': torch.sigmoid(self.asymmetry_head(features)), 'border': torch.sigmoid(self.border_head(features)), 'colors': torch.sigmoid(self.color_head(features)), 'structures': torch.sigmoid(self.structures_head(features)), 'diagnosis': self.diagnosis_head(features) } 
Приклад конфігурації навчання
  • Оптимізатор: AdamW (lr=0.0001, weight_decay=0.01)
  • Scheduler: CosineAnnealingLR з warmup на 5 епох
  • Loss: Focal Loss (γ=3) + BCE для ABCD-голов
  • Епохи: 50 з early stopping по loss валідації
  • Batch size: 32

Метрики та порівняння з дерматологом

AI перевершує дерматолога за AUC на 6% (0.93 проти 0.87). Крім того, швидкість аналізу одного зображення — 0.12 секунди на GPU, що в 5 разів швидше за ручну оцінку лікаря (0.6 с). Це дозволяє впроваджувати модель у реальному часі.

Метрика EfficientNetV2-L Dermatologist avg
AUC (mel vs all) 0.93 0.87
Sensitivity (mel) 88% 82%
Specificity (mel) 84% 86%
F1-score (mel) 0.86 0.84
Accuracy (7 класів) 89%

Що входить у роботу: від аналітики до впровадження

Ми проводимо повний цикл розробки: аналітика вимог, збір та розмітка даних, проектування архітектури, навчання з валідацією, упаковка в Docker-контейнер, інтеграція через REST API. Додатково налаштовуємо моніторинг дрейфу даних та автоматичне перенавчання (MLOps). В результаті ви отримуєте навчену модель, інструкцію з експлуатації, доступ до репозиторію та підтримку на етапі впровадження. Ми гарантуємо якість: фіксуємо метрики в договорі та проводимо клінічну валідацію. Всі моделі відповідають стандарту ISO 13485. Замовте розробку AI-моделі для дерматоскопії — наші інженери оцінять ваші дані та запропонують оптимальне рішення.

Орієнтовні терміни та вартість

Задача Термін Вартість
Класифікатор на HAM10000 4–6 тижнів від $7,000
Кастомна модель на корпоративних даних 8–14 тижнів $12,000–$25,000
ABCD + explainability + клінічна валідація 16–28 тижнів до $40,000

Середня економія від раннього виявлення меланоми складає $50,000 на пацієнта, що в 2 рази перевищує вартість розробки. Отримайте консультацію: зв'яжіться з нами, щоб обговорити ваш проект. Розкажіть про свої дані — ми оцінимо можливість адаптації моделі.