System Development медицинской визуализации (Medical Imaging AI)
Медицинская визуализация — одна из наиболее ответственных областей применения Computer Vision. Ошибочное предсказание может стоить жизни. Поэтому требования к системе принципиально отличаются от обычного CV: обязательная валидация на клинических данных, explainability (объяснимость), интеграция с процессом принятия решений врачом как «второй взгляд», а не замена.
Особенности медицинских данных
Форматы: DICOM — стандарт медицинских изображений. Содержит метаданные пациента, параметры съёмки, серийные снимки (КТ/МРТ — это стек из сотен срезов).
import pydicom
import numpy as np
import cv2
class DICOMProcessor:
def load_series(self, dicom_dir: str) -> np.ndarray:
"""Загрузка серии DICOM срезов (КТ/МРТ) в 3D массив"""
import os
slices = []
for file in sorted(os.listdir(dicom_dir)):
if file.endswith('.dcm'):
dcm = pydicom.dcmread(os.path.join(dicom_dir, file))
slices.append(dcm)
# Сортируем по позиции среза
slices.sort(key=lambda x: float(x.ImagePositionPatient[2]))
# Конвертация в HU (Hounsfield Units) для КТ
volume = np.stack([self._to_hu(s) for s in slices])
return volume, slices[0] # volume + metadata
def _to_hu(self, dcm: pydicom.Dataset) -> np.ndarray:
"""DICOM pixel data → Hounsfield Units"""
pixel_array = dcm.pixel_array.astype(np.float32)
slope = float(dcm.RescaleSlope)
intercept = float(dcm.RescaleIntercept)
return pixel_array * slope + intercept
def window_level(self, hu_array: np.ndarray,
window: int = 400, level: int = 40) -> np.ndarray:
"""Windowing для визуализации конкретных тканей"""
low = level - window // 2
high = level + window // 2
clipped = np.clip(hu_array, low, high)
return ((clipped - low) / (high - low) * 255).astype(np.uint8)
Architecture системы Computer-Aided Detection (CAD)
import torch
import torch.nn as nn
import segmentation_models_pytorch as smp
class MedicalCADSystem:
def __init__(self, config: dict):
# Модель для сегментации патологий
self.segmentation_model = smp.Unet(
encoder_name='efficientnet-b4',
encoder_weights='imagenet',
in_channels=1, # grayscale для КТ/МРТ
classes=config['num_classes'],
activation=None
)
# Классификатор для верификации
self.classifier = self._build_classifier(config)
# Grad-CAM для explainability
self.explainer = GradCAMExplainer(self.classifier)
@torch.no_grad()
def analyze(self, dicom_slice: np.ndarray) -> dict:
tensor = self._preprocess(dicom_slice)
# Сегментация
seg_logits = self.segmentation_model(tensor)
seg_probs = torch.sigmoid(seg_logits).squeeze().numpy()
# Классификация
cls_logits = self.classifier(tensor)
cls_probs = torch.softmax(cls_logits, dim=1).squeeze().numpy()
# Explainability heatmap
grad_cam = self.explainer.generate(tensor, target_class=cls_probs.argmax())
return {
'segmentation_mask': (seg_probs > 0.5).astype(np.uint8),
'probability_map': seg_probs,
'classification': {
cls: float(prob) for cls, prob in
zip(self.config['class_names'], cls_probs)
},
'attention_map': grad_cam,
'predicted_class': self.config['class_names'][cls_probs.argmax()],
'confidence': float(cls_probs.max())
}
Требования к разработке медицинских систем
Валидация:
- Внутренняя: разделение данных train/val/test с temporal split (train до 2022, test после)
- Внешняя: валидация на независимом датасете из другого медучреждения
- Клиническая: проспективное исследование с участием врачей
Регуляторные требования:
- В ЕС: CE Class IIa/IIb (MDR 2017/745)
- В США: FDA 510(k) clearance
- В РФ: Росздравнадзор, ГОСТ Р
Этические требования:
- Анонимизация данных: удаление DICOM тегов с ПДН через pydicom
- Информированное согласие на использование данных
- Аудиторский след всех предсказаний
Metrics медицинских AI-систем
| Метрика | Описание | Применение |
|---|---|---|
| AUC-ROC | Общая дискриминирующая способность | Классификация |
| Sensitivity (recall) | Доля найденных патологий | Скрининг |
| Specificity | Доля правильных «норм» | Исключение патологий |
| F1, Dice | Баланс precision/recall | Сегментация |
| NNR (Number Needed to Read) | Сколько снимков нужно просмотреть врачу | Эффективность |
Типичная цель: sensitivity ≥ 90% при specificity ≥ 85%.
| Тип системы | Срок разработки |
|---|---|
| CAD (второй взгляд) для одной патологии | 12–18 недель |
| Полноценный радиологический ИИ | 24–40 недель |
| Системы требующие клинической валидации | 40–80 недель |







