Аналитический документ: DXA Quality Assessment System

Содержание

  1. Обзор системы
  2. Архитектура
  3. Компоненты системы
  4. Пайплайн обработки
  5. API Endpoints
  6. Модели и алгоритмы
  7. PlantUML Диаграммы

Обзор системы

Система DXA Quality Assessment — это медицинский AI-сервис для автоматизированной оценки качества исследований DXA (денситометрия костей). Система анализирует DICOM файлы и определяет:

Целевое назначение

Параметр Значение
Тип Медицинский AI сервис
Входные данные DICOM файлы (DXA исследования)
Выходные данные JSON / XLSX отчеты
Тип классификации Бинарный (OK / Violation)
Целевые регионы Позвоночник (L1-L4), Бедро (левое/правое)

Архитектура

Высокоуровневая архитектура

┌─────────────────────────────────────────────────────────────────────────┐
│                          DXA Quality Assessment                          │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────────────┐ │
│  │   Клиент     │───▶│   FastAPI    │───▶│   Orchestrator           │ │
│  │  (Web UI)    │    │   Server     │    │   (Pipeline Control)    │ │
│  └──────────────┘    └──────────────┘    └───────────┬──────────────┘ │
│                                                        │                 │
│                                    ┌───────────────────┼───────────────┐ │
│                                    ▼                   ▼               ▼ │
│                           ┌───────────────┐  ┌─────────────┐  ┌──────────┐ │
│                           │ DXA Classifier │  │  Segmentor │  │ Quality  │ │
│                           │   (ResNet18)   │  │ (Threshold) │  │  Scorer  │ │
│                           └───────────────┘  └─────────────┘  └──────────┘ │
│                                                                          │
│  ┌────────────────────────────────────────────────────────────────────┐  │
│  │                    Detailed Assessment Module                      │  │
│  │  ┌─────────┐  ┌──────────┐  ┌─────────┐  ┌───────┐  ┌────────┐ │  │
│  │  │  Motion │  │ Artifact │  │ Position│  │  ROI  │  │Rotation│ │  │
│  │  │Detector │  │ Detector │  │Validator│  │ Check │  │ Checker│ │  │
│  │  └─────────┘  └──────────┘  └─────────┘  └───────┘  └────────┘ │  │
│  └────────────────────────────────────────────────────────────────────┘  │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

Технологический стек

Компонент Технология
Backend Python 3.10, FastAPI, Uvicorn
ML/DL PyTorch, torchvision (ResNet18)
Image Processing PIL, OpenCV, pydicom, scipy
Data Handling pandas, openpyxl
Containerization Docker

Компоненты системы

1. API Layer (src/main.py)

Точка входа — FastAPI приложение с REST эндпоинтами.

Основные функции:

# Основной API эндпоинт
@app.post("/api/v1/analyze/detailed")
async def analyze_dicom_detailed(file: UploadFile = File(...)):
    # 1. Загрузка модели
    # 2. Предобработка DICOM
    # 3. Инференс ResNet18
    # 4. Генерация сегментации
    # 5. Детальная оценка качества
    # 6. Формирование ответа

2. DXA Classifier (src/dxa/model.py)

Модель для бинарной классификации качества изображения.

Архитектура:

Input (224x224x3)
    │
    ▼
ResNet18 (pretrained on ImageNet)
    │
    ├── Remove final FC layer
    │
    ▼
Classifier Head:
    ├── Dropout(0.3)
    ├── Linear(512 → 256)
    ├── ReLU
    ├── Dropout(0.3)
    └── Linear(256 → 2)
    │
    ▼
Output: [prob_OK, prob_Violation]

Параметры модели:

3. Segmentator (Простая реализация)

Для сегментации используется простой пороговый метод:

# Threshold-based segmentation
threshold = np.percentile(image, 90)
segmentation = (image > threshold).astype(np.uint8)

Планируется: Замена на UNet или TotalSegmentator для более точной сегментации.

4. Detailed Assessment (src/quality/detailed_assessment.py)

Модуль детальной оценки качества включает:

4.1 Motion Detection

4.2 Artifact Detection

4.3 Region-Specific Checks

Для позвоночника (spine):

Для бедра (hip):

4.4 ROI Validation

5. Region Detector (src/dxa/inference.py)

Определение анатомической области по содержимому изображения:

Алгоритм:

  1. Пороговая бинаризация (95 перцентиль)
  2. Вычисление bounding box яркой области
  3. Соотношение сторон bbox:
    • < 1.5 → spine (более квадратная область)
    • ≥ 1.5 → hip (вытянутая область)
  4. Для hip: определение левого/правого по асимметрии яркости

Пайплайн обработки

Основной пайплайн

DXA Quality Assessment PipelineUpload DICOM fileParse DICOM metadata- Normalize to 0-1- Convert to 3-channel- Resize to 224x224Preprocess image- Get prediction (OK/Violation)- Get confidence scoresModel Inference (ResNet18)- bbox_aspect ratio analysis- left/right brightness ratioDetermine Anatomical Region- Threshold-based (90th percentile)Generate Segmentation- Motion detection- Artifact detection- Region-specific checks- ROI validationDetailed Quality Assessment- correct- position_error- artifact_motion- artifact_other- labeling_error- incomplete_view- roi_error- rotationDetermine Violation TypeGenerate Response

Детальная диаграмма последовательности

Sequence: Detailed AnalysisUserFastAPIDXA ModelRegion DetectorSegmentatorQuality AssessorUserUserFastAPIFastAPIDXA ModelDXA ModelRegion DetectorRegion DetectorSegmentatorSegmentatorQuality AssessorQuality AssessorPOST /api/v1/analyze/detailedpreprocess_dicom()predict(image)[prediction, confidence]determine_region(image)"spine" | "hip_left" | "hip_right"segment(image)segmentation_maskgenerate_quality_report()- detect_motion_blur()- detect_artifacts()- check_spine_completeness() / check_hip_completeness()- check_hip_rotation()- check_roi_boundaries()- determine_violation_type()quality_reportconvert_to_serializable()JSON response


API Endpoints

Method Endpoint Description
GET / Web interface
GET /api/v1/health Health check
POST /api/v1/analyze Basic analysis
POST /api/v1/analyze/detailed Detailed analysis with metrics
POST /api/v1/analyze/sr DICOM SR report
POST /api/v1/batch Batch processing
POST /api/v1/export Export to XLSX

Response Format (Detailed)

{
  "anatomical_region": "spine",
  "quality_class": 1,
  "quality_label": "Violation detected",
  "violation_type": "artifact_motion",
  "reason": "Обнаружен артефакт движения (размытие)",
  "confidence": 0.85,
  "confidence_per_class": {
    "correct": 0.15,
    "violation": 0.85
  },
  "view_quality": "full",
  "metrics": {
    "motion": {
      "motion_detected": true,
      "blur_laplacian": 0.001,
      "severity": "HIGH"
    },
    "artifacts": {
      "any_detected": false,
      "metal_detected": false
    },
    "roi_check": {
      "valid": true
    }
  },
  "overall_quality": "POOR",
  "severity": "HIGH"
}

Модели и алгоритмы

Типы нарушений

Для позвоночника:

Для бедра:

Метрики детекции движения

Метрика Порог Описание
Laplacian variance < 0.002 Низкая дисперсия = размытие
FFT high-freq ratio < 0.3 Низкая высокочастотная энергия
Edge duplication bool Дублирование краев

Алгоритм определения региона

Error 400: Cannot find if (Assumed diagram type: activity) (line: 22)


PlantUML Диаграммы

Диаграмма компонентов

Web ClientFastAPI ServerDXA ModelsQuality AssessmentFile SystemWeb UIUpload HandlerPreprocessorResponse BuilderResNet18 ClassifierRegion DetectorSegmentatorMotion DetectorArtifact DetectorPosition ValidatorROI CheckerRotation CheckerDICOM FilesModel WeightsHTTPRead/WriteInferenceQuality Metrics

Диаграмма классов (основные сущности)

DXAQualityClassifierbackbone: strnum_classes: intforward(x: Tensor) -> Tensorextract_features(x: Tensor) -> TensorDXAQualityModelmodel: DXAQualityClassifierdevice: strpredict(images: Tensor) -> (preds, probs)train_epoch(loader)validate(loader)DetailedAssessmentdetect_motion_blur(image) -> Dictdetect_artifacts(image, segmentation) -> Dictcheck_spine_completeness(segmentation) -> Dictcheck_hip_completeness(segmentation) -> Dictcheck_hip_rotation(segmentation, image) -> Dictcheck_roi_boundaries(segmentation, shape) -> Dictgenerate_quality_report(...) -> DictRegionDetectordetermine_region_from_image(image) -> strdetermine_anatomical_region(dcm_path) -> strusesprovides region

Диаграмма развертывания

Client LayerApplication LayerML PipelineInfrastructureBrowserWeb UI (HTML/JS)FastAPIUvicornDXA ClassifierSegmentatorQuality AssessorCPU/GPUFile SystemDockerPyTorchNumPy/SciPyModels/Data


Потоки данных

InputPreprocessingML ModelsQuality AnalysisOutputDICOM FileNormalization3-Channel ConvResize 224x224ResNet18Region DetectorThreshold SegMotion DetectionArtifact DetectionCompleteness CheckROI ValidationJSON ResponseXLSX Export


Ограничения и планы развития

Текущие ограничения

  1. Сегментация — простая пороговая обработка, требует замены на Deep Learning (UNet/TotalSegmentator)
  2. Модель — бинарная классификация, нужно расширение до многоклассовой для типов нарушений
  3. Dataset — ~100 исследований, требуется расширение до 500+
  4. F1 Score — текущий ~0.27, требует улучшения

Планируемые улучшения

Компонент План
Region Detector Отдельная модель для детекции региона
Segmentator UNet или TotalSegmentator
Quality Classifier Расширение на 8 классов нарушений
Violation Classifier Отдельная модель для классификации типа нарушения
Artifact Detector CNN для детекции металла/имплантатов
Visualization Grad-CAM для внимания модели

Заключение

Система DXA Quality Assessment представляет собой полнофункциональный AI-сервис для автоматизированной оценки качества DXA исследований. Архитектура построена на принципах модульности и расширяемости, что позволяет поэтапно улучшать отдельные компоненты.

Основные характеристики: