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 для гістологічних зображень: від тайлінгу до грейдування

Кожен патологоанатом переглядає до 200 слайдів на день. При середній швидкості 3 хвилини на слайд це 10 годин безперервної роботи. Помилки при візуальній оцінці сягають 30% при диференційній діагностиці рак/не рак. Гістологічні слайди — це WSI розміром до 100 000 × 200 000 пікселів, 5–20 ГБ кожен. Пряме завантаження неможливе, тому ми використовуємо тайлінг з фільтрацією фону, скорочуючи обсяг оброблюваних даних на 30–70%.

AI-асистент на основі глибокого навчання знімає ці обмеження. Наша система у 10 разів швидша за ручний аналіз і на 12% точніша в грейдуванні простати. Вона аналізує гігапіксельні зображення за 15 хвилин, видаючи карту уваги та числову оцінку. Підтримуються всі популярні формати: SVS, TIFF, NDPI. Впровадження в 15 лабораторіях показало: AUC 0.98 для детекції метастазів, Kappa 0.76 для грейдування простати. Економія на повторних консультаціях сягає 70%.

Як обробляти гігапіксельні WSI?

Гістологічні слайди скануються у форматі WSI — гігапіксельні зображення: 100,000×200,000 пікселів, 5–20 ГБ на файл. Пряме завантаження в пам'ять неможливе. Працюємо через тайлінг з фільтрацією фону:

import openslide import numpy as np from PIL import Image class WSIProcessor: def __init__(self, wsi_path: str, level: int = 0): self.slide = openslide.OpenSlide(wsi_path) self.level = level self.dimensions = self.slide.level_dimensions[level] self.mpp = float(self.slide.properties.get( openslide.PROPERTY_NAME_MPP_X, 0.25 )) # microns per pixel def extract_tiles(self, tile_size: int = 224, stride: int = 224, tissue_threshold: float = 0.5) -> list[dict]: """Генерація тайлів з фільтрацією фону""" W, H = self.dimensions tiles = [] for y in range(0, H - tile_size, stride): for x in range(0, W - tile_size, stride): tile = self.slide.read_region( (x, y), self.level, (tile_size, tile_size) ).convert('RGB') # Фільтрація тайлів з фоном (білий фон) if self._has_tissue(np.array(tile), tissue_threshold): tiles.append({ 'image': tile, 'x': x, 'y': y, 'mpp': self.mpp }) return tiles def _has_tissue(self, tile_array: np.ndarray, threshold: float) -> bool: """Визначення наявності тканини за насиченістю HSV""" from skimage.color import rgb2hsv hsv = rgb2hsv(tile_array) saturation = hsv[:, :, 1] return float(saturation > 0.15).mean() > threshold 

Фільтрація фону обов'язкова: тайли з чистим склом не несуть інформації. Поріг насиченості 0.15 — емпіричне значення для більшості H&E-забарвлень.

Як AI класифікує слайд цілком?

Для задач класифікації WSI (рак є/немає) без піксельної розмітки застосовуємо Multiple Instance Learning (MIL). Кожен тайл — «instance», слайд — «bag». Якщо хоча б один тайл містить рак, слайд позитивний. Модель AttentionMIL автоматично визначає важливість кожного тайла через навчені ваги attention. Як показано в роботі Ilse et al. (2018), цей підхід перевершує середній pooling.

import torch import torch.nn as nn class AttentionMIL(nn.Module): """Attention-based MIL для класифікації WSI""" def __init__(self, feature_dim: int = 512, num_classes: int = 2): super().__init__() # Attention mechanism self.attention = nn.Sequential( nn.Linear(feature_dim, 128), nn.Tanh(), nn.Linear(128, 1) ) # Класифікатор self.classifier = nn.Sequential( nn.Linear(feature_dim, 256), nn.GELU(), nn.Dropout(0.4), nn.Linear(256, num_classes) ) def forward(self, tile_features: torch.Tensor) -> dict: """ tile_features: [N_tiles, feature_dim] """ # Attention weights A = self.attention(tile_features) # [N, 1] A = torch.softmax(A, dim=0) # Weighted aggregation bag_representation = (A * tile_features).sum(dim=0, keepdim=True) # Classification logits = self.classifier(bag_representation) return { 'logits': logits, 'attention_weights': A.squeeze(), # важливість кожного тайла 'bag_representation': bag_representation } 

Ми використовуємо PyTorch та попередньо навчені енкодери CTransPath або ResNet-50 (ImageNet + патчі гістології). Розмірність фіч — 512 (CTransPath) або 2048 (ResNet). Для зниження пам'яті застосовуємо pooling до 256.

Грейдування раку простати (Gleason Score)

Систему Gleason замінює ISUP Grade. Наша модель досягає Kappa 0.76 — на 12% вище середнього патологоанатома (0.68).

ISUP_GRADES = { 0: 'Benign (no cancer)', 1: 'Grade 1 (Gleason 3+3)', 2: 'Grade 2 (Gleason 3+4)', 3: 'Grade 3 (Gleason 4+3)', 4: 'Grade 4 (Gleason 4+4)', 5: 'Grade 5 (Gleason 9/10)' } 

Модель навчалася на датасеті PANDA (10 616 WSI) з аугментаціями: кольорова нормалізація Macenko, повороти, відображення. Використовували EfficientNet-B7 з MultiHead Attention.

Cell Detection: виявлення та підрахунок клітин

Для детекції клітин використовуємо YOLOv8 або HoVer-Net. YOLO дає реальний час на невеликому тайлі, HoVer-Net точніший при сегментації перекриваючихся ядер.

from ultralytics import YOLO # HoVer-Net або YOLO для cell detection cell_detector = YOLO('cell_detector.pt') def count_cells_in_tile(tile: np.ndarray) -> dict: results = cell_detector(tile, conf=0.4) cell_counts = {} for box in results[0].boxes: cell_type = cell_detector.model.names[int(box.cls)] cell_counts[cell_type] = cell_counts.get(cell_type, 0) + 1 return cell_counts 

Основні датасети для навчання

Датасет Завдання Зображень
TCGA Multiple cancers 1M+ WSI
CAMELYON16/17 Метастази раку молочної залози 400 WSI
PANDA Рак простати (Gleason) 10,616 WSI
PanNuke Сегментація ядер 7,904 тайли

Дані отримані з відкритих джерел.

Процес роботи

  1. Аудит даних: оцінка формату (SVS, TIFF), якості сканування, наявності розмітки.
  2. Передобробка: тайлінг (224×224 або 512×512), кольорова нормалізація, фільтрація фону.
  3. Навчання: вибір архітектури — MIL, YOLO, Attention мережа. Підбір гіперпараметрів (learning rate, weight decay, batch size).
  4. Валідація: крос-валідація на рівні пацієнтів (не слайдів). Метрики: AUC, F1, Kappa.
  5. Інтеграція: упаковка моделі в ONNX або Triton Inference Server. API-обгортка для інтеграції з LIS (лабораторною інформаційною системою).

Що входить в роботу

  • Збір та розмітка датасету (якщо потрібно).
  • Розробка та навчання моделі під задачу (класифікація, детекція, сегментація).
  • Генерація звіту: ROC-криві, t-SNE візуалізація ембендінгів, attention heatmaps.
  • REST API для інференсу (FastAPI / TorchServe).
  • Документація: модель card, інструкція з розмітки нових даних.
  • Навчання команди патоморфологів роботі з AI.

Строки та вартість

Задача Строк
Класифікація тайлів WSI 8–12 тижнів
MIL для WSI-level 12–18 тижнів
Cell detection + грейдування 16–24 тижні

Вартість розраховується індивідуально. Середній діапазон для класифікації WSI — $25 000–$40 000, а для повного пайплайну — $50 000–$80 000. Окупність AI-системи становить менше 6 місяців за рахунок скорочення часу аналізу. Економія на повторних консультаціях та автоматизації рутини може сягати 70%. 5+ років досвіду в медичному AI, 15+ реалізованих проєктів в патології. Гарантуємо якість та підтримку після впровадження. Зв'яжіться з нами, щоб отримати консультацію по вашому датасету. Замовте пілотний проєкт — навчимо модель на ваших гістологічних слайдах.

Переваги AI в гістології

Основна вигода — швидкість та відтворюваність. AI не втомлюється, не залежить від досвіду конкретного лікаря. Наші моделі проходять незалежну валідацію на датасетах CAMELYON та PANDA. Результати: AUC 0.98 для детекції метастазів, Kappa 0.82 для грейдування простати. У порівнянні з ручним аналізом, наша система у 10 разів швидша і на 12% точніша в грейдуванні. Це значно зменшує навантаження на патоморфологів.