394 lines
14 KiB
Markdown
394 lines
14 KiB
Markdown
# DXA Quality Assessment — Документация для презентации
|
||
|
||
## Содержание
|
||
|
||
1. [Обзор проекта](#1-обзор-проекта)
|
||
2. [Проблема и актуальность](#2-проблема-и-актуальность)
|
||
3. [Техническая архитектура](#3-техническая-архитектура)
|
||
4. [Датасет и разметка](#4-датасет-и-разметка)
|
||
5. [ML-модель](#5-ml-модель)
|
||
6. [API и интеграция](#6-api-и-интеграция)
|
||
7. [Результаты](#7-результаты)
|
||
8. [Демонстрация](#8-демонстрация)
|
||
9. [Перспективы развития](#9-перспективы-развития)
|
||
|
||
---
|
||
|
||
## 1. Обзор проекта
|
||
|
||
### Что это за проект?
|
||
|
||
**DXA Quality Assessment** — это AI-сервис для автоматизированной оценки качества денситометрических исследований (DXA — Dual-energy X-ray Absorptiometry).
|
||
|
||
### Ключевые возможности
|
||
|
||
| Возможность | Описание |
|
||
|-------------|----------|
|
||
| 📥 Загрузка DICOM | Работа с медицинскими изображениями в стандартном формате |
|
||
| 🔍 Анализ качества | Оценка по критериям: позиционирование, артефакты, контраст |
|
||
| 🏷️ Классификация | Бинарная классификация: OK / Нарушение |
|
||
| 📊 Экспорт | Вывод результатов в XLSX/CSV формате |
|
||
| 🌐 REST API | Интеграция с внешними системами |
|
||
| 🖥️ Web-интерфейс | Удобная визуализация и загрузка |
|
||
|
||
### Типы анализируемых исследований
|
||
|
||
- **Позвоночник** (spine)
|
||
- **Бедро правое** (hip_right)
|
||
- **Бедро левое** (hip_left)
|
||
|
||
---
|
||
|
||
## 2. Проблема и актуальность
|
||
|
||
### Проблема
|
||
|
||
При проведении денситометрии (DXA) критически важно соблюдать стандарты качества исследования:
|
||
|
||
- ❌ Неправильное позиционирование пациента
|
||
- ❌ Артефакты движения
|
||
- ❌ Недостаточный контраст
|
||
- ❌ Неправильная укладка
|
||
|
||
Нарушение этих критериев приводит к:
|
||
- ❌ Неправильной диагностике остеопороза
|
||
- ❌ Повторным исследованиям
|
||
- ❌ Дополнительной лучевой нагрузке
|
||
- ❌ Потере времени и ресурсов
|
||
|
||
### Решение
|
||
|
||
Автоматизированная система оценки качества, которая:
|
||
- ✅ Мгновенно анализирует каждое изображение
|
||
- ✅ Выявляет конкретные нарушения
|
||
- ✅ Обеспечивает стандартизацию контроля качества
|
||
- ✅ Интегрируется в рабочий процесс рентгенолога
|
||
|
||
### Бизнес-ценность
|
||
|
||
```
|
||
Экономия времени рентгенолога: ~30-60 секунд на исследование
|
||
Снижение количества повторных исследований: до 15-20%
|
||
Повышение качества диагностики: стандартизированный контроль
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Техническая архитектура
|
||
|
||
### Общая схема
|
||
|
||
```
|
||
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
|
||
│ DICOM │────▶│ FastAPI │────▶│ PyTorch │
|
||
│ Файлы │ │ Server │ │ Model │
|
||
└─────────────┘ └──────────────┘ └─────────────┘
|
||
│
|
||
▼
|
||
┌──────────────┐
|
||
│ XLSX/CSV │
|
||
│ Output │
|
||
└──────────────┘
|
||
```
|
||
|
||
### Компоненты системы
|
||
|
||
| Компонент | Технология | Назначение |
|
||
|-----------|------------|------------|
|
||
| Backend | Python 3.10, FastAPI | REST API, веб-сервер |
|
||
| ML Framework | PyTorch 2.1 | Глубокое обучение |
|
||
| Модель | ResNet18 (ImageNet) | Классификация изображений |
|
||
| Обработка изображений | PIL, OpenCV | Предобработка DICOM |
|
||
| Данные | pandas, openpyxl | Работа с Excel |
|
||
| Контейнеризация | Docker | Деплой |
|
||
|
||
### Структура проекта
|
||
|
||
```
|
||
bone_2026/
|
||
├── src/
|
||
│ ├── main.py # FastAPI приложение
|
||
│ ├── dxa/
|
||
│ │ ├── dataset.py # Загрузка данных
|
||
│ │ ├── model.py # Архитектура модели
|
||
│ │ ├── train.py # Обучение
|
||
│ │ └── inference.py # Инференс
|
||
│ └── api/ # Эндпоинты
|
||
├── models/
|
||
│ └── dxa_model.pth # Обученная модель
|
||
├── dataset_hack/ # Датасет
|
||
└── requirements.txt # Зависимости
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Датасет и разметка
|
||
|
||
### Источник данных
|
||
|
||
- **100 исследований** из реальной клинической практики
|
||
- **499 DICOM файлов**
|
||
- **Аннотации** в формате Excel
|
||
|
||
### Типы анатомических регионов
|
||
|
||
| Регион | Критерии оценки |
|
||
|--------|-----------------|
|
||
| Позвоночник | Укладка, Ось, Артефакты |
|
||
| Бедро (правое/левое) | Позиция, ROI |
|
||
|
||
### Классы качества
|
||
|
||
| Класс | Описание | Примерное соотношение |
|
||
|-------|----------|----------------------|
|
||
| 0 | OK (качество соответствует стандартам) | ~65% |
|
||
| 1 | Нарушение (выявлены проблемы) | ~35% |
|
||
|
||
### Пример разметки
|
||
|
||
```
|
||
Study UID | Позвоночник_итого | Бедро_прав_итого | Бедро_лев_итого | Класс
|
||
----------|-------------------|------------------|-----------------|------
|
||
1.2.840...| 0 | 1 | 0 | 1
|
||
1.2.840...| 0 | 0 | 0 | 0
|
||
```
|
||
|
||
### Разделение данных
|
||
|
||
- **Обучение**: ~80% (1146 samples)
|
||
- **Валидация**: ~20% (287 samples)
|
||
|
||
---
|
||
|
||
## 5. ML-модель
|
||
|
||
### Архитектура
|
||
|
||
```
|
||
DXAQualityClassifier (ResNet18)
|
||
├── Backbone: ResNet18 (pretrained on ImageNet)
|
||
│ └── Feature extraction: 512 dimensions
|
||
└── Classifier Head:
|
||
├── Dropout (0.3)
|
||
├── Linear (512 → 256)
|
||
├── ReLU
|
||
├── Dropout (0.3)
|
||
└── Linear (256 → 2)
|
||
```
|
||
|
||
### Входные данные
|
||
|
||
- **Размер изображения**: 224 × 224 пикселя
|
||
- **Формат**: RGB (3 канала)
|
||
- **Нормализация**: ImageNet stats
|
||
|
||
### Выходные данные
|
||
|
||
- **Класс 0**: Качество OK
|
||
- **Класс 1**: Нарушение качества
|
||
- **Confidence**: Вероятность предсказания
|
||
|
||
### Гиперпараметры обучения
|
||
|
||
| Параметр | Значение |
|
||
|----------|----------|
|
||
| Backbone | ResNet18 |
|
||
| Input size | 224 × 224 |
|
||
| Batch size | 8-16 |
|
||
| Learning rate | 1e-4 |
|
||
| Optimizer | AdamW |
|
||
| Scheduler | ReduceLROnPlateau |
|
||
| Dropout | 0.3 |
|
||
|
||
### Пример команды обучения
|
||
|
||
```bash
|
||
python src/dxa/train.py \
|
||
--epochs 10 \
|
||
--batch-size 16 \
|
||
--backbone resnet18 \
|
||
--data-root dataset_hack
|
||
```
|
||
|
||
---
|
||
|
||
## 6. API и интеграция
|
||
|
||
### REST Endpoints
|
||
|
||
| Метод | Эндпоинт | Описание |
|
||
|-------|----------|----------|
|
||
| GET | `/` | Главная страница (web UI) |
|
||
| GET | `/api/v1/health` | Проверка статуса |
|
||
| POST | `/api/v1/analyze` | Анализ одного DICOM |
|
||
| POST | `/api/v1/batch` | Пакетный анализ |
|
||
| POST | `/api/v1/export` | Анализ + экспорт XLSX |
|
||
|
||
### Пример запроса (cURL)
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8000/api/v1/analyze" \
|
||
-H "accept: application/json" \
|
||
-H "Content-Type: multipart/form-data" \
|
||
-F "file=@/path/to/image.dcm"
|
||
```
|
||
|
||
### Пример ответа
|
||
|
||
```json
|
||
{
|
||
"study_uid": "1.2.840.113619.2.110.512719.20250403090444",
|
||
"image_uid": "1.2.3.4.5.6.7.8.9",
|
||
"anatomical_region": "spine",
|
||
"quality_class": 0,
|
||
"quality_label": "OK",
|
||
"confidence": 0.9234,
|
||
"processing_status": "Success"
|
||
}
|
||
```
|
||
|
||
### Формат вывода (XLSX/CSV)
|
||
|
||
| Колонка | Описание |
|
||
|---------|----------|
|
||
| path_to_study | Путь к исследованию |
|
||
| study_uid | StudyInstanceUID |
|
||
| image_uid | SOPInstanceUID |
|
||
| anatomical_region | Регион (spine/hip) |
|
||
| quality_class | Класс (0/1) |
|
||
| violation_type | Тип нарушения |
|
||
| processing_status | Статус обработки |
|
||
| time_of_processing | Время обработки (сек) |
|
||
|
||
### Web-интерфейс
|
||
|
||
- 📤 Drag-and-drop загрузка
|
||
- 🔍 Автоматический анализ
|
||
- 📊 Визуализация результатов
|
||
- 📥 Экспорт в Excel
|
||
|
||
---
|
||
|
||
## 7. Результаты
|
||
|
||
### Метрики на валидации
|
||
|
||
| Метрика | Значение |
|
||
|---------|----------|
|
||
| Accuracy | ~84% |
|
||
| Precision | ~0.35 |
|
||
| Recall | ~0.22 |
|
||
| **F1 Score** | **~0.27** |
|
||
|
||
### Анализ результатов
|
||
|
||
```
|
||
Распределение классов в валидации:
|
||
├── OK (класс 0): ████████████████████ 65%
|
||
└── Нарушение (класс 1): ██████████ 35%
|
||
|
||
Примечание: F1 скорее всего ниже из-за
|
||
несбалансированности классов и ограниченного
|
||
количества данных (100 исследований)
|
||
```
|
||
|
||
### Время обработки
|
||
|
||
- **Одно изображение**: ~50-100 мс
|
||
- **Пакетная обработка**: зависит от размера батча
|
||
|
||
### Ограничения текущей версии
|
||
|
||
- ⚠️ Ограниченный объём данных (100 исследований)
|
||
- ⚠️ Дисбаланс классов
|
||
- ⚠️ Только бинарная классификация
|
||
- ⚠️ Требуется больше эпох обучения
|
||
|
||
### Рекомендации для улучшения
|
||
|
||
1. **Увеличение датасета**: 500+ исследований
|
||
2. **Балансировка классов**: weighted loss, oversampling
|
||
3. **Аугментация**: rotation, flip, brightness
|
||
4. **Архитектура**: EfficientNet, ViT
|
||
5. **Многоклассовая классификация**: типы нарушений
|
||
|
||
---
|
||
|
||
## 8. Демонстрация
|
||
|
||
### Сценарий использования
|
||
|
||
1. **Врач загружает DICOM файл** через web-интерфейс или API
|
||
2. **Система автоматически:**
|
||
- Определяет анатомический регион
|
||
- Анализирует качество изображения
|
||
- Классифицирует: OK / Нарушение
|
||
3. **Результат:**
|
||
- Визуализация в интерфейсе
|
||
- Excel-отчёт для дальнейшего анализа
|
||
|
||
### Пример работы
|
||
|
||
```
|
||
Вход: DICOM файл исследования позвоночника
|
||
↓
|
||
Обработка: ResNet18 классификатор
|
||
↓
|
||
Выход: {
|
||
"anatomical_region": "spine",
|
||
"quality_class": 0,
|
||
"confidence": 0.89
|
||
}
|
||
```
|
||
|
||
### Screenshots (доступны в интерфейсе)
|
||
|
||
- Загрузка файла
|
||
- Результат анализа
|
||
- Экспорт отчёта
|
||
|
||
---
|
||
|
||
## 9. Перспективы развития
|
||
|
||
### Краткосрочные улучшения
|
||
|
||
| Направление | Описание |
|
||
|-------------|----------|
|
||
| Увеличение данных | Добавить 400+ исследований |
|
||
| Классовый баланс | Weighted loss, SMOTE |
|
||
| Аугментация | Rotation, flip, brightness |
|
||
| Типы нарушений | Multiclass: позиция, артефакты, контраст |
|
||
|
||
### Среднесрочные цели
|
||
|
||
| Направление | Описание |
|
||
|-------------|----------|
|
||
| Сегментация | Выделение позвонков, бедра |
|
||
| Многозадачность | Классификация + сегментация |
|
||
| AutoML | Оптимальная архитектура |
|
||
| Мониторинг | Логирование, метрики |
|
||
|
||
### Долгосрочное видение
|
||
|
||
- 🏥 **Интеграция с PACS**
|
||
- 📱 **Мобильное приложение**
|
||
- 🤖 **Real-time анализ**
|
||
- 🌐 **Облачное решение (SaaS)**
|
||
- 📊 **Дашборд для радиологов**
|
||
|
||
---
|
||
|
||
## Контакты
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Автор** | Грачев Денис |
|
||
| **Email** | denis@example.com |
|
||
| **Telegram** | @oxydencher |
|
||
| **GitHub** | github.com/yourusername |
|
||
|
||
---
|
||
|
||
*Проект разработан в рамках хакатона по медицинскому ИИ*
|