develop - hack_2026
This commit is contained in:
parent
157b7b89a6
commit
3de6ed5af3
|
|
@ -6,3 +6,8 @@
|
|||
.vscode/
|
||||
/.pytest_cache/
|
||||
/venv/
|
||||
|
||||
# Автономный HTML-пакет для ручной разметки (снимки внутри, ~7 МБ) —
|
||||
# генерируется командой `python -m src.dxa.review_pack --out review/doctor_review.html`,
|
||||
# в репозитории не хранится.
|
||||
/review/
|
||||
|
|
|
|||
|
|
@ -46,10 +46,12 @@ RUN python -c "import src.main; print('app import ok')"
|
|||
|
||||
# --- Проверка статики для офлайн-работы ---
|
||||
# Веб-интерфейс не должен зависеть от CDN: Tailwind и FontAwesome лежат в
|
||||
# src/api/static/vendor и src/api/static/webfonts (см. index.html).
|
||||
# src/api/static/vendor и src/api/static/webfonts (см. index.html). Страница
|
||||
# ручной разметки /label тоже должна попасть в образ целиком.
|
||||
RUN python -c "import os; \
|
||||
files=['src/api/static/vendor/tailwind.js','src/api/static/vendor/fontawesome.css', \
|
||||
'src/api/static/webfonts/fa-solid-900.woff2']; \
|
||||
'src/api/static/webfonts/fa-solid-900.woff2', \
|
||||
'src/api/static/label.html','src/api/static/js/labeling.js']; \
|
||||
missing=[f for f in files if not os.path.exists(f)]; \
|
||||
assert not missing, f'missing frontend assets: {missing}'; \
|
||||
print('frontend assets ok')"
|
||||
|
|
|
|||
136
QWEN.md
136
QWEN.md
|
|
@ -37,6 +37,8 @@
|
|||
src/dxa/
|
||||
├── labels.py # имена -> метки, склейка дублей, разбиение, фиксация сплита
|
||||
├── excel_labels.py # разметка снимков по экспертной таблице (labels_images.csv)
|
||||
├── manual_labels.py # вердикты специалиста: хранение, наложение, выгрузка (/label)
|
||||
├── review_pack.py # автономный HTML-пакет разметки для врача (без сервера и сети)
|
||||
├── rename_files.py # приведение имён DICOM к виду область_NN[_метка]
|
||||
├── violations.py # единый словарь типов нарушений (коды, подписи, коды SR)
|
||||
├── model_card.py # карточка решения: разметка, данные, метрики, ограничения
|
||||
|
|
@ -63,14 +65,14 @@ src/dxa/
|
|||
| Решение | Причина |
|
||||
|---|---|
|
||||
| Единый словарь типов нарушений (`src/dxa/violations.py`) | Коды, подписи и коды SR были в трёх копиях (инференс, `main.py`, `dxa-app.js`) и не знали кодов экспертной таблицы. Теперь подписи отдаёт сервер, фронт копий не держит |
|
||||
| Метки только из экспертной таблицы (правило `table`): `labels/labels_images.csv`, 77 нарушений | Таблица описывает исследование, но каждая область встречается в нём один раз, поэтому вердикт переносится на снимок однозначно. Правило выбрано измерением: учёт ручных пометок из имён файлов дал ROC-AUC 0.6199 против 0.6764, хуже на всех 5 seed'ах. См. `assets/labeling.md` |
|
||||
| Склейка побайтных дублей | 544 файла, но 252 уникальных снимка; без склейки снимок попадал в оба класса |
|
||||
| Метки только из экспертной таблицы (правило `table`): `labels/labels_images.csv`, 76 нарушений | Таблица описывает исследование, но каждая область встречается в нём один раз, поэтому вердикт переносится на снимок однозначно. Правило выбрано измерением: учёт ручных пометок из имён файлов дал ROC-AUC 0.6003 против 0.6726, хуже на всех 5 seed'ах. См. `assets/labeling.md` |
|
||||
| Склейка побайтных дублей | 482 файла, но 251 уникальный снимок; без склейки снимок попадал в оба класса |
|
||||
| Разбиение по исследованиям, не по снимкам | Исключение утечки: снимки одного исследования в одной части |
|
||||
| Линейный зонд (замороженный backbone) | Полный fine-tune при ~250 снимках переобучается (val AUC → 0.5) |
|
||||
| Порог по логиту, подбор по F1 | При доле нарушений около 30 % порог 0.5 даёт почти нулевой recall; вероятности насыщаются |
|
||||
| Аугментация выключена по умолчанию | Яркость и положение сами являются признаками качества: AUC 0.87 → 0.56 |
|
||||
| Область по ширине кадра | Позвоночник 300 px, бедро 280 px; 99/99 для позвоночника |
|
||||
| Панель деталей показывает измерения, а не вердикты | Эвристики `detailed_assessment` не калиброваны: `motion_detected`/`any_detected` истинны почти всегда, ROI-отступы срабатывают для 227/252 снимков |
|
||||
| Панель деталей показывает измерения, а не вердикты | Эвристики `detailed_assessment` не калиброваны: `roi.valid` ложен для всех 251 снимка (краевой отступ срабатывает у 249 из 251), поэтому в панели показываются числовые измерения, а не вердикты «Да/Нет» |
|
||||
|
||||
### Проверка вклада модели
|
||||
|
||||
|
|
@ -86,12 +88,12 @@ python -m src.dxa.discriminator --model-path models/dxa_model.pth
|
|||
|
||||
| Предиктор | Общий AUC | spine | hip_right | hip_left |
|
||||
|---|---|---|---|---|
|
||||
| Модель | 0.854 | 0.928 | 0.861 | 0.853 |
|
||||
| Правило «позвоночник = нарушение» | 0.529 | 0.500 | 0.500 | 0.500 |
|
||||
| Модель | 0.885 | 0.954 | 0.875 | 0.880 |
|
||||
| Правило «позвоночник = нарушение» | 0.534 | 0.500 | 0.500 | 0.500 |
|
||||
|
||||
Модель использует содержимое снимка: внутри областей она даёт 0.85–0.93.
|
||||
Модель использует содержимое снимка: внутри областей она даёт 0.88–0.95.
|
||||
Правило по области внутри области всегда 0.50 (подсказки нет). Честная оценка на
|
||||
held-out — в `assets/labeling.md` §8: ROC-AUC 0.6764 [0.6309, 0.7218] по пяти seed'ам.
|
||||
held-out — в `assets/labeling.md` §8: ROC-AUC 0.6726 [0.6367, 0.7086] по пяти seed'ам.
|
||||
|
||||
## Данные (`dataset_hack/`)
|
||||
|
||||
|
|
@ -99,7 +101,7 @@ held-out — в `assets/labeling.md` §8: ROC-AUC 0.6764 [0.6309, 0.7218] по
|
|||
|
||||
```
|
||||
dataset_hack/
|
||||
├── Для теста/ # bad.dcm, l_hip.dcm, r_hip.dcm, spine.dcm
|
||||
├── Для теста/ # l_hip_01.dcm, r_hip_01.dcm, r_hip_01_bad.dcm, spine_01.dcm
|
||||
└── НД_для_обучения/
|
||||
├── разметка.xlsx # экспертная оценка на уровне ИССЛЕДОВАНИЯ
|
||||
└── Исследования/<study_uid>/.../<region>_<n>[_good|_bad].dcm
|
||||
|
|
@ -107,12 +109,13 @@ dataset_hack/
|
|||
|
||||
Факты, важные для обучения:
|
||||
|
||||
- 544 файла на диске, но **252 уникальных снимка** (по пиксельному содержимому)
|
||||
на 100 исследований: позвоночник 99, бедро R 79, бедро L 73, 1 с неопределённой
|
||||
- **482 файла `.dcm` на диске** (было 520: удалены 38 лишних побайтных копий и 10
|
||||
файлов `.DS_Store`), но **251 уникальный снимок** (по пиксельному содержимому)
|
||||
на 100 исследований: позвоночник 99, бедро R 78, бедро L 73, 1 с неопределённой
|
||||
областью.
|
||||
- Экспертная таблица отмечает нарушения у **74 снимков (29.4 %)**; три снимка
|
||||
- Экспертная таблица отмечает нарушения у **73 снимков (29.1 %)**; три снимка
|
||||
таблица область не оценивала.
|
||||
- Рабочая разметка (правило `table`) — **77 нарушений из 252 (30.6 %)**: 74 по
|
||||
- Рабочая разметка (правило `table`) — **76 нарушений из 251 (30.3 %)**: 73 по
|
||||
таблице плюс 3 снимка без экспертной оценки, помеченных `filename_fallback`.
|
||||
- Дубли не пересекают границы исследований, конфликтов меток при склейке нет.
|
||||
Два побайтных дубля названы по-разному, поэтому область определяется
|
||||
|
|
@ -121,7 +124,9 @@ dataset_hack/
|
|||
`l_hip`, `r_hip`); инструмент — `src/dxa/rename_files.py`, карта отката —
|
||||
`labels/rename_map.csv`. Суффиксы `_good`/`_bad` проставлялись вручную, в
|
||||
метках **не участвуют** — только как диагностический столбец
|
||||
`quality_from_filename`: они расходились с оценкой эксперта в 15 случаях из 252.
|
||||
`quality_from_filename`: они расходились с оценкой эксперта в 62 случаях из 251
|
||||
(повторное переименование 2026-09-27 дописало пометки уже после сборки
|
||||
разметки и с тех пор расхождений стало вчетверо больше).
|
||||
- В DICOM **нет** разметки ROI (ни OverlayData, ни GraphicAnnotationSequence) и
|
||||
пусты теги `Laterality`/`ImageLaterality`, поэтому ни корректность областей, ни
|
||||
сторону бедра нельзя проверить по метаданным.
|
||||
|
|
@ -174,10 +179,10 @@ python -m src.dxa.train --head mlp --freeze-epochs 0 --epochs 30
|
|||
рассинхронизироваться с обучением, а по файлу видно, на какой разметке он обучен.
|
||||
|
||||
Рабочий чекпоинт — `models/dxa_model.pth` (правило `table`, seed 42 по умолчанию,
|
||||
эпоха 39, порог логита −0.4930 → вероятность 0.379; val ROC-AUC 0.6706 при
|
||||
честной оценке 0.6764 [0.6309, 0.7218] по пяти seed'ам). Это единственный
|
||||
чекпоинт в репозитории: прежние версии и прогоны сравнения удалены, откатиться
|
||||
можно только переобучением.
|
||||
эпоха 57, порог логита −0.1370 → вероятность 0.466; val ROC-AUC 0.6689 при
|
||||
честной оценке 0.6726 [0.6367, 0.7086] по пяти seed'ам). Переобучен 2026-09-27
|
||||
после пересборки разметки. Это единственный чекпоинт в репозитории: прежние
|
||||
версии и прогоны сравнения удалены, откатиться можно только переобучением.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -186,6 +191,7 @@ python -m src.dxa.train --head mlp --freeze-epochs 0 --epochs 30
|
|||
| Метод | Путь | Назначение |
|
||||
|---|---|---|
|
||||
| GET | `/` | Веб-интерфейс |
|
||||
| GET | `/label` | Интерфейс ручной разметки (подтверждение вердиктов специалистом) |
|
||||
| GET | `/api/v1/health` | Статус, признак загрузки модели и её происхождение (разметка, разбиение, порог, эпоха) |
|
||||
| GET | `/api/v1/model` | Карточка решения: разметка, данные, метрики с интервалами, словарь нарушений, ограничения |
|
||||
| POST | `/api/v1/analyze` | Базовый анализ файла |
|
||||
|
|
@ -193,6 +199,11 @@ python -m src.dxa.train --head mlp --freeze-epochs 0 --epochs 30
|
|||
| POST | `/api/v1/analyze/sr` | Текстовый отчёт DICOM SR |
|
||||
| POST | `/api/v1/batch` | Пакетный анализ |
|
||||
| POST | `/api/v1/export` | Пакетный анализ + XLSX |
|
||||
| GET | `/api/v1/labeling/items` | Снимки датасета для разбора: текущая метка, её источник, расхождения |
|
||||
| GET | `/api/v1/labeling/image` | PNG снимка для просмотра (путь проверяется на выход за каталог датасета) |
|
||||
| POST | `/api/v1/labeling/verdict` | Сохранить вердикт специалиста в `labels/manual_labels.csv` |
|
||||
| DELETE | `/api/v1/labeling/verdict` | Снять вердикт и вернуть снимок к построенной разметке |
|
||||
| GET | `/api/v1/labeling/export` | Выгрузка разметки: `scope=all` годится как `--labels-csv` |
|
||||
|
||||
Путь к модели — переменная окружения `DXA_MODEL_PATH` (по умолчанию
|
||||
`models/dxa_model.pth`), чтобы контейнер не зависел от рабочего каталога.
|
||||
|
|
@ -205,7 +216,7 @@ API и CLI используют один код предсказания (`predi
|
|||
|
||||
```bash
|
||||
./run.sh test
|
||||
python -m pytest tests/ -q # 209 тестов
|
||||
python -m pytest tests/ -q # 272 теста
|
||||
```
|
||||
|
||||
- `tests/test_labels.py` — разбор имён, склейка дублей, отсутствие утечки при
|
||||
|
|
@ -215,7 +226,10 @@ python -m pytest tests/ -q # 209 тестов
|
|||
- `tests/test_excel_labels.py` — разметка по экспертной таблице: чтение
|
||||
критериев, «1 = нарушение», голосование по области, перенос оценки на
|
||||
единственное бедро, три правила метки (`table` / `union` / `expert`) и их
|
||||
согласованность, подключение к обучению.
|
||||
согласованность, подключение к обучению, чтение CSV, сохранённого Excel с BOM.
|
||||
- `tests/test_manual_labels.py` — ручная разметка: проверка вердикта (область,
|
||||
метка, тип нарушения и его совместимость с областью), хранение и правка,
|
||||
наложение поверх построенной разметки, подсчёт прогресса и выгрузка.
|
||||
- `tests/test_violations.py` — единый словарь типов: коды и подписи, коды SR,
|
||||
приведение устаревших значений, согласованность с критериями таблицы.
|
||||
- `tests/test_preprocess_and_model.py` — предобработка, метрики, подбор порога,
|
||||
|
|
@ -224,6 +238,13 @@ python -m pytest tests/ -q # 209 тестов
|
|||
(панель деталей ранее показывала прочерки из-за расхождения ключей),
|
||||
различимость метрик между снимками, валидность PNG-визуализаций, отсутствие
|
||||
некалиброванных вердиктов в ответе.
|
||||
- `tests/test_labeling_api.py` — контракт `/api/v1/labeling/*`: отказ отдавать
|
||||
файлы вне датасета (обход каталога, не-DICOM), проверка вердикта, выгрузка,
|
||||
читаемая обучением как `--labels-csv`.
|
||||
- `tests/test_review_pack.py` — пакет для врача: отпечаток набора, порядок
|
||||
(расхождения первыми), встроенные данные разбираются как JSON, страница не
|
||||
ссылается на сеть, слияние вердиктов с построенной разметкой и сообщение о
|
||||
путях из чужого пакета.
|
||||
|
||||
### Проверка веб-интерфейса в браузере
|
||||
|
||||
|
|
@ -237,6 +258,17 @@ python -m pytest tests/ -q # 209 тестов
|
|||
значения панели меняются при переключении строк; панель «О модели» наполняется
|
||||
метриками и словарём (иначе раздел остался бы пустым каркасом).
|
||||
- `ui_violation.js` — ветка «нарушение» (бейдж, POOR, HIGH, заключение).
|
||||
- `ui_labeling.js` — интерфейс ручной разметки: список снимков с прогрессом,
|
||||
расхождения первыми, снимок отрисовывается, вердикт сохраняется и переживает
|
||||
перезагрузку страницы, фильтр «только расхождения», отсутствие внешних запросов.
|
||||
Запускать с временным файлом вердиктов:
|
||||
`DXA_MANUAL_LABELS=/tmp/manual_ui.csv python -m uvicorn src.main:app --port 8123`,
|
||||
иначе проверка пишет в рабочий `labels/manual_labels.csv`.
|
||||
- `review_pack.js` — автономный пакет разметки: открывает HTML прямо с диска
|
||||
(`file://`, сервер не нужен), проверяет отрисовку встроенного снимка, вердикт,
|
||||
его сохранение после перезагрузки, выгрузку CSV и восстановление прогресса из
|
||||
этого же файла, а также отсутствие любых сетевых запросов. Запуск:
|
||||
`PACK=review/doctor_review.html node tests/browser/review_pack.js`.
|
||||
- `ui_offline.js` — страница не обращается к внешним хостам.
|
||||
|
||||
### Честность интерфейса
|
||||
|
|
@ -263,9 +295,10 @@ Tailwind и FontAwesome лежат локально (`src/api/static/vendor`,
|
|||
|
||||
1. Разметка снимков выведена из таблицы, описывающей исследование: поштучной
|
||||
экспертной оценки снимков в наборе нет. Оценка качества модели упирается в
|
||||
качество этой разметки, а не только в объём данных.
|
||||
2. Мало данных: 252 снимка, 77 нарушений; доверительные интервалы широкие
|
||||
(ROC-AUC 0.6764 [0.6309, 0.7218] по пяти seed'ам).
|
||||
качество этой разметки, а не только в объём данных. Для поштучной разметки есть
|
||||
интерфейс `/label` (см. ниже) — им ещё не пользовались.
|
||||
2. Мало данных: 251 снимок, 76 нарушений; доверительные интервалы широкие
|
||||
(ROC-AUC 0.6726 [0.6367, 0.7086] по пяти seed'ам).
|
||||
3. Эталон оценки — та же экспертная таблица, независимой истины нет; сравнение
|
||||
правил разметки частично благоприятствует варианту «только таблица».
|
||||
4. Тип нарушения определяется эвристиками, а не обученной моделью; 5 снимков
|
||||
|
|
@ -275,6 +308,52 @@ Tailwind и FontAwesome лежат локально (`src/api/static/vendor`,
|
|||
6. Сторона бедра в 7 исследованиях с единственным снимком не проверяема: теги
|
||||
`Laterality` пусты, оценка взята из единственного заполненного столбца.
|
||||
7. Порог `SPINE_MIN_WIDTH` привязан к текущему оборудованию.
|
||||
8. Разметка и датасет уже расходились: повторное переименование 2026-09-27
|
||||
дописало суффиксы `_good`/`_bad` после сборки разметки, из-за чего 20 из 252
|
||||
путей устарели, 6 снимков получали метку «нарушение» вопреки эксперту и
|
||||
пайплайн отдавал 251/82 вместо 252/77. Расхождение устранено пересборкой
|
||||
разметки и переобучением в тот же день; числа в этом файле — уже новые.
|
||||
Разбор — в `assets/labeling.md` §7.
|
||||
|
||||
## Ручная разметка (`/label`)
|
||||
|
||||
Поштучной экспертной оценки снимков в наборе нет (ограничение №1), а раздел 2.6
|
||||
задания просит «автоматическую коррекцию разметки с возможностью подтверждения
|
||||
специалистом». Поэтому в сервисе есть отдельный интерфейс `/label`:
|
||||
`src/dxa/manual_labels.py` — хранение вердиктов, эндпоинты `/api/v1/labeling/*` —
|
||||
список снимков, просмотр и сохранение, страница `src/api/static/label.html` +
|
||||
`js/labeling.js`.
|
||||
|
||||
Вердикты лежат в `labels/manual_labels.csv` (переменная `DXA_MANUAL_LABELS`) в
|
||||
формате построенной разметки, поэтому файл читается тем же `load_labels_csv` и
|
||||
принимается обучением как `--labels-csv`. Выгрузка `scope=all` накладывает ручные
|
||||
вердикты на построенную разметку и годится как источник меток напрямую.
|
||||
|
||||
Оценка модели в интерфейсе намеренно не показывается: подсказка смещала бы
|
||||
разметчика, а цель — независимое суждение человека. Список выводит первыми
|
||||
снимки, где метка разметки расходится с пометкой в имени файла: там ошибка
|
||||
возможна в любом из источников.
|
||||
|
||||
### Пакет для врача (разметка без сервиса)
|
||||
|
||||
`/label` требует запущенного сервиса и Python, а размечать должен врач — на своей
|
||||
машине. Поэтому тот же сценарий собирается в **один HTML-файл**:
|
||||
|
||||
```bash
|
||||
./run.sh review --out review/doctor_review.html # ~7 МБ, 251 снимок
|
||||
./run.sh review --limit 20 --out review/pilot.html # пилот на выборке
|
||||
./run.sh review --merge review/doctor.csv --out labels/labels_images_reviewed.csv
|
||||
```
|
||||
|
||||
Снимки встроены как data-URI, вердикты лежат в `localStorage` браузера, выгрузка —
|
||||
CSV в формате `manual_labels.csv` (плюс колонка `pack_id` — отпечаток набора,
|
||||
чтобы различить пакеты). Файл открывается двойным щелчком, работает без сети и
|
||||
без установки чего-либо; каталог `review/` в git не хранится.
|
||||
|
||||
Вердикты врача принимаются как есть: `load_verdicts` читает выгрузку, `--merge`
|
||||
накладывает её на построенную разметку (и сообщает о путях, которых нет в
|
||||
датасете — признак чужого пакета), а `--labels-csv` с этим файлом годится для
|
||||
обучения. Оценка модели в пакет не попадает по той же причине, что и в `/label`.
|
||||
|
||||
## Удалённый устаревший код
|
||||
|
||||
|
|
@ -292,6 +371,19 @@ position_validator,universal_scorer,medical_quality}.py`) удалены 2026-09
|
|||
`__version__`, а `src/quality/__init__.py` — только докстрока. При добавлении
|
||||
новых модулей в `src/quality/` помнить, что пакет больше ничего не импортирует.
|
||||
|
||||
`docs/` после удаления появился снова — владелец вернул его под сдачу: там лежат
|
||||
`technical-description.html` (сдаточный технический документ) и его PDF-версия,
|
||||
а также презентация команды. Это не материалы README: корневой `README.md`
|
||||
ссылается только на `assets/`. PDF печатается из HTML тем же Chrome, а не
|
||||
отдельным конвертером:
|
||||
|
||||
```bash
|
||||
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless \
|
||||
--disable-gpu --no-pdf-header-footer --user-data-dir=/tmp/chrome-pdf-profile \
|
||||
--print-to-pdf="$PWD/docs/technical-description.pdf" \
|
||||
"file://$PWD/docs/technical-description.html"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Docker
|
||||
|
|
|
|||
123
README.md
123
README.md
|
|
@ -96,15 +96,16 @@ DICOM ──▶ предобработка ──▶ ResNet18 (замороже
|
|||
из экспертной таблицы командой `./run.sh label` (разбор — в
|
||||
`assets/labeling.md`): в таблице отмечены критерии качества по каждому
|
||||
исследованию, а каждая область встречается в нём ровно один раз, поэтому
|
||||
вердикт переносится на снимок однозначно. Такой разметки — 77 нарушений из
|
||||
252 (30.6 %). Правило выбрано измерением: учёт ручных пометок из имён файлов
|
||||
вердикт переносится на снимок однозначно. Такой разметки — 76 нарушений из
|
||||
251 (30.3 %). Правило выбрано измерением: учёт ручных пометок из имён файлов
|
||||
дал худший результат на held-out наборе, поэтому в метках они не участвуют.
|
||||
Резервный режим `--labels-csv ""` берёт метку из суффикса `_good`/`_bad` и
|
||||
оставлен для совместимости.
|
||||
|
||||
3. **Склейка побайтных дублей.** В датасете 544 файла, но 252 уникальных снимка:
|
||||
3. **Склейка побайтных дублей.** В датасете 482 файла, но 251 уникальный снимок:
|
||||
один и тот же кадр сохранён многократно под разными именами (часть — с меткой,
|
||||
часть — без). Без склейки одно изображение попадало бы в оба класса.
|
||||
часть — без). Без склейки одно изображение попадало бы в оба класса. Лишние
|
||||
байт-идентичные копии удалены.
|
||||
|
||||
4. **Разбиение по исследованиям.** Снимки одного исследования не попадают
|
||||
одновременно в train и val — иначе метрики завышаются за счёт утечки.
|
||||
|
|
@ -161,6 +162,7 @@ DICOM ──▶ предобработка ──▶ ResNet18 (замороже
|
|||
| Метод | Путь | Назначение |
|
||||
|---|---|---|
|
||||
| GET | `/` | Веб-интерфейс |
|
||||
| GET | `/label` | Интерфейс ручной разметки: подтверждение и правка вердиктов специалистом |
|
||||
| GET | `/api/v1/health` | Статус, признак загрузки модели и её происхождение |
|
||||
| GET | `/api/v1/model` | Карточка решения: разметка, данные, метрики с интервалами, словарь нарушений |
|
||||
| POST | `/api/v1/analyze` | Базовый анализ одного файла |
|
||||
|
|
@ -168,6 +170,11 @@ DICOM ──▶ предобработка ──▶ ResNet18 (замороже
|
|||
| POST | `/api/v1/analyze/sr` | Текстовое представление отчёта DICOM SR |
|
||||
| POST | `/api/v1/batch` | Пакетный анализ |
|
||||
| POST | `/api/v1/export` | Пакетный анализ и выгрузка в XLSX |
|
||||
| GET | `/api/v1/labeling/items` | Снимки датасета для разбора: текущая метка, её источник, расхождения |
|
||||
| GET | `/api/v1/labeling/image` | PNG снимка для просмотра |
|
||||
| POST | `/api/v1/labeling/verdict` | Сохранить вердикт специалиста |
|
||||
| DELETE | `/api/v1/labeling/verdict` | Снять вердикт, вернуть снимок к построенной разметке |
|
||||
| GET | `/api/v1/labeling/export` | Выгрузка разметки: `scope=all` принимается обучением как `--labels-csv` |
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/api/v1/analyze -F "file=@study/spine.dcm"
|
||||
|
|
@ -258,27 +265,85 @@ curl -X POST http://localhost:8000/api/v1/analyze -F "file=@study/spine.dcm"
|
|||
- числовые метрики в панели деталей по-прежнему идут под дисклеймером о
|
||||
некалиброванности порогов.
|
||||
|
||||
### Ручная разметка (`/label`)
|
||||
|
||||
Поштучной экспертной оценки снимков в наборе нет: таблица оценивает исследование,
|
||||
и снимок наследует вердикт исследования. Закрыть это автоматически нечем —
|
||||
локальная vision-модель оказалась непригодна (`assets/labeling.md` §11). Поэтому
|
||||
в сервисе есть отдельный интерфейс ручной разметки: раздел 2.6 задания просит
|
||||
«автоматическую коррекцию разметки с возможностью подтверждения специалистом».
|
||||
|
||||
Откройте `http://localhost:8000/label`. Интерфейс показывает снимок целиком и его
|
||||
текущую метку с указанием источника (`экспертная таблица`, `имя файла`, `ручной
|
||||
вердикт`). Снимки, где метка разметки расходится с пометкой в имени файла, идут
|
||||
первыми: там ошибка возможна в любом из источников. Специалист подтверждает
|
||||
вердикт или ставит свой — область, «годное / нарушение», тип нарушения,
|
||||
комментарий.
|
||||
|
||||
Вердикты сохраняются в `labels/manual_labels.csv` в том же формате, что и
|
||||
построенная разметка, поэтому файл можно сразу передать обучению:
|
||||
|
||||
```bash
|
||||
curl -o manual_labels.csv "http://localhost:8000/api/v1/labeling/export?scope=all"
|
||||
python -m src.dxa.train --labels-csv manual_labels.csv
|
||||
```
|
||||
|
||||
`scope=all` накладывает ручные вердикты на построенную разметку (весь набор),
|
||||
`scope=reviewed` отдаёт только разобранные снимки — для сверки с построенной
|
||||
разметкой. Оценка модели в интерфейсе намеренно не показывается: подсказка
|
||||
смещала бы разметчика, а ценность здесь именно в независимом суждении.
|
||||
|
||||
### Передать разметку врачу: автономный HTML-пакет
|
||||
|
||||
Интерфейс `/label` требует запущенного сервиса, а размечать должен специалист — на
|
||||
своей машине, без Python и без сети. Поэтому тот же сценарий упаковывается в один
|
||||
файл: снимки встроены внутрь, вердикты хранятся в браузере, выгрузка — CSV.
|
||||
|
||||
```bash
|
||||
./run.sh review --out review/doctor_review.html # весь набор, ~7 МБ
|
||||
./run.sh review --limit 20 --out review/pilot.html # пилот на выборке из 20 снимков
|
||||
```
|
||||
|
||||
Файл врач открывает двойным щелчком: снимок, построенная метка с указанием
|
||||
источника, кнопки «годное / нарушение», тип нарушения, комментарий, горячие
|
||||
клавиши. Работает полностью офлайн — страница не делает ни одного сетевого
|
||||
запроса, и это проверяется автоматически (`tests/browser/review_pack.js`).
|
||||
Прогресс сохраняется в браузере, а кнопка «Выгрузить CSV» отдаёт файл, который
|
||||
принимается обучением как есть; загрузить его обратно можно на другой машине —
|
||||
кнопкой «Загрузить CSV».
|
||||
|
||||
Вердикты врача накладываются на построенную разметку одной командой, с проверкой,
|
||||
что все пути есть в датасете:
|
||||
|
||||
```bash
|
||||
./run.sh review --merge review/doctor.csv --out labels/labels_images_reviewed.csv
|
||||
python -m src.dxa.train --labels-csv labels/labels_images_reviewed.csv
|
||||
```
|
||||
|
||||
Каталог `review/` в git не хранится: пакет генерируется, а внутри — медицинские
|
||||
снимки.
|
||||
|
||||
---
|
||||
|
||||
## Метрики
|
||||
|
||||
Метрики зависят от выбранного разбиения по исследованиям, поэтому приводятся
|
||||
с разбросом. Основная оценка — на **фиксированном** разбиении по исследованиям
|
||||
(обучение 199 снимков / 81 исследование, валидация 53 снимка / 19 исследований,
|
||||
(обучение 198 снимков / 81 исследование, валидация 53 снимка / 19 исследований,
|
||||
16 нарушений), пять seed'ов обучения, эталон — вердикт эксперта:
|
||||
|
||||
| Что измерено | Значение | Как измерено |
|
||||
|---|---|---|
|
||||
| ROC-AUC | **0.6764** [0.6309, 0.7218] | 5 seed'ов на фиксированном разбиении |
|
||||
| PR-AUC | 0.4759 [0.4141, 0.5377] | там же; базовый уровень при 30 % нарушений — 0.30 |
|
||||
| F1 | 0.5676 [0.5270, 0.6082] | там же; порог подобран на той же валидации — смещено вверх |
|
||||
| ROC-AUC по областям | позвоночник 0.943, бедро R 0.576, бедро L 0.550 | рабочий чекпоинт, собственная валидация |
|
||||
| ROC-AUC | **0.6726** [0.6367, 0.7086] | 5 seed'ов на фиксированном разбиении |
|
||||
| PR-AUC | 0.4753 [0.4188, 0.5318] | там же; базовый уровень при 30 % нарушений — 0.30 |
|
||||
| F1 | 0.5559 [0.5212, 0.5906] | там же; порог подобран на той же валидации — смещено вверх |
|
||||
| ROC-AUC по областям | позвоночник 0.929, бедро R 0.606, бедро L 0.567 | рабочий чекпоинт, собственная валидация |
|
||||
| Контрольная задача «позвоночник / бедро» | AUC 1.00 | проверка работоспособности пайплайна |
|
||||
| Модель использует снимок, а не область | AUC 0.854 против 0.529 у правила области | `discriminator` на всём наборе, включая обучающие снимки |
|
||||
| Модель использует снимок, а не область | AUC 0.885 против 0.534 у правила области | `discriminator` на всём наборе, включая обучающие снимки |
|
||||
|
||||
Метрики по областям — в `models/train_report.md`, он создаётся при обучении.
|
||||
Разбивка важна, потому что нарушения распределены неравномерно: в позвоночнике
|
||||
33 из 99, у бёдер 21–22 из 73–79, а область почти однозначно определяется по
|
||||
33 из 99, у бёдер 20–22 из 73–78, а область почти однозначно определяется по
|
||||
ширине кадра. Поэтому общий AUC частично отражает различение области, а не только
|
||||
распознавание дефекта.
|
||||
|
||||
|
|
@ -286,18 +351,18 @@ curl -X POST http://localhost:8000/api/v1/analyze -F "file=@study/spine.dcm"
|
|||
|
||||
Метку можно было строить только из экспертной таблицы или дополнительно
|
||||
учитывать пометки, проставленные вручную в именах файлов (суффикс `_bad`).
|
||||
Пометки расходились с оценкой эксперта в 15 случаях из 252, поэтому правило
|
||||
Пометки расходились с оценкой эксперта в 62 случаях из 251, поэтому правило
|
||||
выбиралось измерением: одно разбиение, пять seed'ов, один эталон.
|
||||
|
||||
| Метрика (эталон) | только таблица | с суффиксами имён |
|
||||
|---|---|---|
|
||||
| ROC-AUC | **0.6764** [0.6309, 0.7218] | 0.6199 [0.5840, 0.6559] |
|
||||
| PR-AUC | **0.4759** [0.4141, 0.5377] | 0.4046 [0.3702, 0.4391] |
|
||||
| F1 | **0.5676** [0.5270, 0.6082] | 0.5426 [0.5073, 0.5778] |
|
||||
| Recall / Precision | 0.700 / 0.486 | 0.863 / 0.404 |
|
||||
| ROC-AUC | **0.6726** [0.6367, 0.7086] | 0.6003 [0.5592, 0.6415] |
|
||||
| PR-AUC | **0.4753** [0.4188, 0.5318] | 0.3864 [0.3487, 0.4242] |
|
||||
| F1 | **0.5559** [0.5212, 0.5906] | 0.5354 [0.4978, 0.5729] |
|
||||
| Recall / Precision | 0.713 / 0.472 | 0.788 / 0.409 |
|
||||
|
||||
Парная разница (только таблица − с суффиксами): ROC-AUC **+0.0564**
|
||||
[+0.0403, +0.0725], PR-AUC **+0.0713** [+0.0398, +0.1028] — знаки `+++++`, то
|
||||
Парная разница (только таблица − с суффиксами): ROC-AUC **+0.0723**
|
||||
[+0.0541, +0.0905], PR-AUC **+0.0889** [+0.0500, +0.1277] — знаки `+++++`, то
|
||||
есть преимущество на всех пяти seed'ах.
|
||||
|
||||
**Принято правило «только экспертная таблица».** Пометки в именах файлов
|
||||
|
|
@ -322,12 +387,13 @@ curl -X POST http://localhost:8000/api/v1/analyze -F "file=@study/spine.dcm"
|
|||
1. **Разметка выведена из оценки исследования.** Экспертная таблица описывает
|
||||
исследование, а не снимок; перенос однозначен (область встречается один раз),
|
||||
но поштучной экспертной оценки снимков в наборе нет. Происхождение каждой
|
||||
строки зафиксировано в `labels/labels_images.csv`. Разбор — в
|
||||
строки зафиксировано в `labels/labels_images.csv`. Для поштучной разметки есть
|
||||
интерфейс `/label` (см. «Веб-интерфейс»), им ещё не пользовались. Разбор — в
|
||||
`assets/labeling.md`.
|
||||
2. **Мало данных.** 252 уникальных снимка, 77 нарушений. Доверительные интервалы
|
||||
2. **Мало данных.** 251 уникальный снимок, 76 нарушений. Доверительные интервалы
|
||||
широкие; оценка на закрытом наборе может отличаться.
|
||||
3. **Тип нарушения определяется эвристиками, а не обученной моделью.** Для
|
||||
честного мультикласса нужна разметка типов на уровне снимка.
|
||||
честного мультикласса нужна разметка типов на уровне снимка — её даёт `/label`.
|
||||
4. **Область определяется по размеру кадра.** Признак безошибочно работает на этом
|
||||
оборудовании (99/99 для позвоночника), но при смене аппарата порог
|
||||
`SPINE_MIN_WIDTH` потребует калибровки.
|
||||
|
|
@ -350,15 +416,18 @@ curl -X POST http://localhost:8000/api/v1/analyze -F "file=@study/spine.dcm"
|
|||
|
||||
| Проверка | Команда | Результат |
|
||||
|---|---|---|
|
||||
| Модель использует снимок, а не только область | `python -m src.dxa.discriminator` | AUC 0.854 против 0.529 у правила «позвоночник = нарушение»; внутри областей у модели 0.85–0.93, у правила 0.50 |
|
||||
| Модель использует снимок, а не только область | `python -m src.dxa.discriminator` | AUC 0.885 против 0.534 у правила «позвоночник = нарушение»; внутри областей у модели 0.88–0.95, у правила 0.50 |
|
||||
| Контракт API для веб-интерфейса | `python -m pytest tests/test_api_contract.py` | поля панели деталей, различимость метрик, PNG-визуализации, отсутствие некалиброванных вердиктов, канонические коды типов нарушений, карточка модели |
|
||||
| Ручная разметка | `python -m pytest tests/test_manual_labels.py tests/test_labeling_api.py` | проверка вердикта (область, метка, совместимость типа нарушения с областью), хранение и наложение на построенную разметку, отказ отдавать файлы вне датасета, выгрузка, читаемая обучением |
|
||||
| Пакет разметки для врача | `python -m pytest tests/test_review_pack.py` | отпечаток набора, порядок «расхождения первыми», встроенные данные, отсутствие сетевых ссылок в странице, слияние вердиктов с разметкой |
|
||||
| Единый словарь нарушений | `python -m pytest tests/test_violations.py` | коды, подписи, коды SR, приведение устаревших значений, согласованность с таблицей |
|
||||
| Разметка и разбиение данных | `python -m pytest tests/test_labels.py` | склейка дублей, разбор имён, фиксация разбиения, отсутствие утечки между train/val |
|
||||
| Имена DICOM-файлов | `python -m pytest tests/test_rename_files.py` | разбор имён, поиск свободного номера при конфликте, отказ от угадывания области, цикл «применить → откатить» |
|
||||
| Разметка по экспертной таблице | `python -m pytest tests/test_excel_labels.py` | чтение критериев, голосование по области, перенос на единственное бедро, правила `table`/`union`/`expert`, подключение к обучению |
|
||||
| Выбор правила метки | `./run.sh split && ./run.sh compare` | ROC-AUC 0.6764 против 0.6199 по эталону, парная Δ +0.0564 [+0.0403, +0.0725], 5/5 seed'ов в пользу экспертной таблицы |
|
||||
| Выбор правила метки | `./run.sh split && ./run.sh compare` | ROC-AUC 0.6726 против 0.6003 по эталону, парная Δ +0.0723 [+0.0541, +0.0905], 5/5 seed'ов в пользу экспертной таблицы |
|
||||
| Метрики и порог | `python -m pytest tests/test_preprocess_and_model.py` | подбор порога при дисбалансе, roundtrip чекпоинта, BatchNorm |
|
||||
| Веб-интерфейс в браузере | `node tests/browser/ui_check.js` | подсказка о кликабельности строк видна и скрывается на пустом фильтре; кнопка «Открыть» открывает панель; значения панели меняются при переключении строк; панель «О модели» наполняется метриками и словарём |
|
||||
| Интерфейс ручной разметки в браузере | `node tests/browser/ui_labeling.js` | расхождения идут первыми, снимок отрисовывается, вердикт сохраняется и переживает перезагрузку страницы, фильтр «только расхождения» работает, внешних запросов нет |
|
||||
| Работа без сети | `node tests/browser/ui_offline.js` | ноль внешних запросов, стили и иконки на месте |
|
||||
|
||||
Браузерные проверки требуют запущенного сервера:
|
||||
|
|
@ -367,6 +436,9 @@ curl -X POST http://localhost:8000/api/v1/analyze -F "file=@study/spine.dcm"
|
|||
python -m uvicorn src.main:app --port 8123
|
||||
node tests/browser/ui_check.js # панель деталей обновляется по клику
|
||||
node tests/browser/ui_offline.js # работа без доступа к внешним сервисам
|
||||
# проверка ручной разметки пишет вердикты, поэтому файл стоит отвести в /tmp:
|
||||
DXA_MANUAL_LABELS=/tmp/manual_ui.csv python -m uvicorn src.main:app --port 8123
|
||||
node tests/browser/ui_labeling.js
|
||||
```
|
||||
|
||||
Офлайн-режим обеспечен локальными копиями Tailwind и FontAwesome
|
||||
|
|
@ -389,6 +461,8 @@ bone_2026/
|
|||
│ ├── dxa/ # действующий модуль оценки качества
|
||||
│ │ ├── labels.py # разбор имён, метки, склейка дублей, сплит
|
||||
│ │ ├── excel_labels.py # разметка снимков по экспертной таблице
|
||||
│ │ ├── manual_labels.py # ручная разметка: хранение вердиктов (/label)
|
||||
│ │ ├── review_pack.py # автономный HTML-пакет разметки для врача
|
||||
│ │ ├── rename_files.py # приведение имён DICOM к единому виду
|
||||
│ │ ├── violations.py # единый словарь типов нарушений (коды, подписи)
|
||||
│ │ ├── model_card.py # карточка решения для /api/v1/model и интерфейса
|
||||
|
|
@ -401,8 +475,9 @@ bone_2026/
|
|||
│ │ ├── train.py # обучение и отчёт
|
||||
│ │ └── inference.py # пакетный инференс, определение области
|
||||
│ ├── quality/ # эвристики качества, используются API
|
||||
│ └── api/static/ # веб-интерфейс
|
||||
│ └── api/static/ # веб-интерфейс (index.html — анализ, label.html — разметка)
|
||||
├── labels/labels_images.csv # разметка снимков: официальная (+ .xlsx)
|
||||
├── labels/manual_labels.csv # вердикты специалиста из /label (появляется после правок)
|
||||
├── labels/labels_images_table.csv # вариант «только таблица» (то же, что выше)
|
||||
├── labels/labels_images_union.csv # вариант «таблица или суффикс имени»
|
||||
├── labels/labels_images_expert.csv # эталон для оценки: только снимки с оценкой
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
| Шаг | Что делается | Почему так |
|
||||
|---|---|---|
|
||||
| Ключ склейки | имя каталога исследования | таблица ссылается на каталог (`2.25…`), а в DICOM лежит другой идентификатор (`1.2.643…`); соответствие каталог → тег 100/100 |
|
||||
| Склейка дублей | по хешу пиксельных данных | 544 файла — это 252 уникальных снимка |
|
||||
| Склейка дублей | по хешу пиксельных данных | 478 файлов — это 251 уникальный снимок |
|
||||
| Область снимка | голосование по именам файлов группы | один снимок назван и как позвоночник, и как бедро; при равенстве голосов область остаётся неопределённой (такой снимок один) |
|
||||
| Вердикт | оценка области переносится на её снимок | **каждая область встречается в исследовании ровно один раз**, поэтому не нужно решать, какой из нескольких снимков «плохой» |
|
||||
| Сторона бедра | при единственном снимке бедра берётся единственный заполненный столбец | в 71 из 72 исследований с двумя бёдрами столбцы совпадают с именами файлов; в 7 исследованиях с одним снимком заполнена противоположная сторона. Факт переноса фиксируется флагом `laterality_mirrored`; теги `Laterality` в DICOM пусты |
|
||||
|
|
@ -53,8 +53,8 @@
|
|||
|
||||
Метка могла строиться двумя способами: только из таблицы или с добавлением
|
||||
пометок, которые вручную проставлялись в именах файлов (суффикс `_bad`). Пометки
|
||||
в именах оказались ненадёжными: они расходились с оценкой эксперта в **15 случаях
|
||||
из 252**. Выбор сделан измерением, а не по вкусу.
|
||||
в именах оказались ненадёжными: они расходились с оценкой эксперта в **62 случаях
|
||||
из 251**. Выбор сделан измерением, а не по вкусу.
|
||||
|
||||
**Постановка.** Разбиение по исследованиям зафиксировано один раз, оба варианта
|
||||
обучены пятью seed'ами на нём, оценены по одному эталону — вердикту эксперта на
|
||||
|
|
@ -67,25 +67,25 @@
|
|||
|
||||
| Метрика (эталон) | только таблица | таблица или суффикс `_bad` |
|
||||
|---|---|---|
|
||||
| ROC-AUC | **0.6764** [0.6309, 0.7218] | 0.6199 [0.5840, 0.6559] |
|
||||
| PR-AUC | **0.4759** [0.4141, 0.5377] | 0.4046 [0.3702, 0.4391] |
|
||||
| F1 | **0.5676** [0.5270, 0.6082] | 0.5426 [0.5073, 0.5778] |
|
||||
| Recall | 0.7000 | 0.8625 |
|
||||
| Precision | 0.4857 | 0.4043 |
|
||||
| ROC-AUC | **0.6726** [0.6367, 0.7086] | 0.6003 [0.5592, 0.6415] |
|
||||
| PR-AUC | **0.4753** [0.4188, 0.5318] | 0.3864 [0.3487, 0.4242] |
|
||||
| F1 | **0.5559** [0.5212, 0.5906] | 0.5354 [0.4978, 0.5729] |
|
||||
| Recall | 0.7125 | 0.7875 |
|
||||
| Precision | 0.4716 | 0.4087 |
|
||||
|
||||
Парная разница («только таблица» − «с суффиксами»):
|
||||
|
||||
| Метрика | Δ, среднее [95 % ДИ] | Знаки по seed'ам |
|
||||
|---|---|---|
|
||||
| ROC-AUC | **+0.0564** [+0.0403, +0.0725] | `+++++` |
|
||||
| PR-AUC | **+0.0713** [+0.0398, +0.1028] | `+++++` |
|
||||
| F1 | +0.0251 [−0.0056, +0.0558] | `+++-+` |
|
||||
| Precision | +0.0815 [+0.0590, +0.1039] | `+++++` |
|
||||
| Recall | −0.1625 [−0.2715, −0.0535] | `--0--` |
|
||||
| ROC-AUC | **+0.0723** [+0.0541, +0.0905] | `+++++` |
|
||||
| PR-AUC | **+0.0889** [+0.0500, +0.1277] | `+++++` |
|
||||
| F1 | +0.0205 [−0.0182, +0.0592] | `+-+-+` |
|
||||
| Precision | +0.0629 [−0.0133, +0.1392] | `+++-+` |
|
||||
| Recall | −0.0750 [−0.1931, +0.0431] | `0---0` |
|
||||
|
||||
**Решение: принято правило «только экспертная таблица».** Дополнительные пометки
|
||||
из имён файлов ухудшали согласие модели с экспертом на невиданных
|
||||
исследованиях: вариант с ними чаще срабатывал (recall 0.86), но за счёт
|
||||
исследованиях: вариант с ними чаще срабатывал (recall 0.79), но за счёт
|
||||
точности, а по беспороговым метрикам проигрывал на всех пяти seed'ах.
|
||||
|
||||
Оговорка: эталон — та же экспертная таблица, поэтому вариант, обучавшийся
|
||||
|
|
@ -107,8 +107,9 @@
|
|||
| `labeling_error` | Ошибка разметки | позвоночник | критерии методики |
|
||||
| `unspecified` | Нарушение без уточнения | любая | служебный |
|
||||
|
||||
Распределение в разметке: `rotation` 36, `artifact` 17, `axis_deviation` 10,
|
||||
`roi_incorrect` 7, `positioning` 6, `unspecified` 5.
|
||||
Распределение в разметке: `rotation` 35, `artifact` 17, `axis_deviation` 10,
|
||||
`roi_incorrect` 7, `positioning` 6, `unspecified` 5. Всего 80 критериев на 76
|
||||
нарушений: у части снимков таблица отмечает по два критерия.
|
||||
|
||||
Словарь один на всё решение (`src/dxa/violations.py`): коды используют инференс,
|
||||
отчёт DICOM SR и веб-интерфейс, подписи отдаёт сервер, копий в JavaScript нет.
|
||||
|
|
@ -120,8 +121,8 @@
|
|||
| | позвоночник | бедро R | бедро L | неопред. | всего |
|
||||
|---|---|---|---|---|---|
|
||||
| качественных | 66 | 58 | 51 | 0 | 175 |
|
||||
| с нарушением | 33 | 21 | 22 | 1 | 77 |
|
||||
| **итого** | **99** | **79** | **73** | **1** | **252** |
|
||||
| с нарушением | 33 | 20 | 22 | 1 | 76 |
|
||||
| **итого** | **99** | **78** | **73** | **1** | **251** |
|
||||
|
||||
Помимо метки в CSV сохранено происхождение: `quality_from_excel` (вердикт
|
||||
эксперта), `quality_from_filename` (пометка из имени файла), `sources_conflict`,
|
||||
|
|
@ -130,7 +131,7 @@
|
|||
|
||||
Рядом лежат варианты для воспроизведения сравнения:
|
||||
`labels_images_table.csv`, `labels_images_union.csv`, `labels_images_expert.csv`
|
||||
(эталон: только снимки с экспертной оценкой, 249 строк) и
|
||||
(эталон: только снимки с экспертной оценкой, 248 строк) и
|
||||
`split_expert_seed42.json` (зафиксированное разбиение).
|
||||
|
||||
## 7. Гигиена данных: имена файлов
|
||||
|
|
@ -144,25 +145,56 @@
|
|||
проверено, что оно на них не влияет: набор из 252 пиксельных групп идентичен до и
|
||||
после, разметка не изменилась ни в одной строке. Суффиксы `_good`/`_bad`
|
||||
сохранены как были и в метках не участвуют — только как диагностический столбец.
|
||||
Числа в этих двух абзацах — состояние на момент проверки; актуальное состояние
|
||||
набора и разметки приведено ниже.
|
||||
|
||||
### Расхождение разметки с датасетом и его устранение (2026-09-27)
|
||||
|
||||
К описанному проходу добавился более поздний: 2026-09-27 около 02:02 суффиксы
|
||||
`_good`/`_bad` дописаны ещё 54 файлам, то есть **после** сборки разметки
|
||||
(2026-09-26 22:35). `apply_excel_labels` сопоставляет метки строго по
|
||||
`path_to_image`, поэтому во всех четырёх файлах разметки (`labels_images.csv`,
|
||||
`_table`, `_union`, `_expert`) 20 строк стали ссылаться на имена, которых больше
|
||||
нет. Последствие: эти 20 снимков теряли экспертную метку и падали на пометку из
|
||||
имени файла, у 6 из них метка инвертировалась 0 → 1 (вердикт эксперта — «годное»,
|
||||
файл назван `..._bad.dcm`), и пайплайн отдавал 251 снимок / 82 нарушения вместо
|
||||
записанных выше 252 / 77. Расхождение нашли сравнением меток с именами файлов;
|
||||
тесты падали на числах (`assert 251 == 252`), то есть оно было замечено, а не
|
||||
осталось незамеченным.
|
||||
|
||||
Устранено пересборкой: `./run.sh label` и три варианта правила, `./run.sh split`,
|
||||
затем переобучение `./run.sh train`. Актуальное состояние — 251 снимок / 76
|
||||
нарушений, все пути разметки существуют, расхождений с датасетом нет. Пометки в
|
||||
именах при этом расходятся с вердиктом эксперта в **62 случаях из 251** (было 15
|
||||
из 252): после второго переименования пометок стало больше, и они чаще спорят с
|
||||
таблицей. На метку это не влияет — правило `table` их не использует (см. §4), —
|
||||
но именно эти 62 снимка имеет смысл разобрать первыми в интерфейсе ручной
|
||||
разметки (см. §10).
|
||||
|
||||
Чистка датасета в тот же день: удалены 38 лишних байт-идентичных копий `.dcm`
|
||||
внутри `НД_для_обучения` и 10 файлов `.DS_Store`. На разметку и на набор
|
||||
пиксельных групп это не влияет: групп 251, все совпадают с `path_to_image`. На
|
||||
диске 482 `.dcm` из 494 файлов. У каждого удалённого файла остался байт-идентичный
|
||||
близнец, поэтому потеряно только имя, а не содержимое.
|
||||
|
||||
## 8. Оценка качества модели
|
||||
|
||||
Разбиение по исследованиям (по умолчанию seed 42): обучение 199 снимков /
|
||||
Разбиение по исследованиям (по умолчанию seed 42): обучение 198 снимков /
|
||||
81 исследование, валидация 53 снимка / 19 исследований, 16 нарушений.
|
||||
|
||||
| Метрика | Значение | Как получено |
|
||||
|---|---|---|
|
||||
| ROC-AUC | **0.6764** [0.6309, 0.7218] | 5 seed'ов на фиксированном разбиении, эталон — вердикт эксперта |
|
||||
| PR-AUC | 0.4759 [0.4141, 0.5377] | там же |
|
||||
| F1 | 0.5676 [0.5270, 0.6082] | там же; порог подобран по F1 на валидации, поэтому смещён вверх |
|
||||
| ROC-AUC по областям | позвоночник 0.943, бедро R 0.576, бедро L 0.550 | рабочий чекпоинт, его собственная валидация |
|
||||
| ROC-AUC | **0.6726** [0.6367, 0.7086] | 5 seed'ов на фиксированном разбиении, эталон — вердикт эксперта |
|
||||
| PR-AUC | 0.4753 [0.4188, 0.5318] | там же |
|
||||
| F1 | 0.5559 [0.5212, 0.5906] | там же; порог подобран по F1 на валидации, поэтому смещён вверх |
|
||||
| ROC-AUC по областям | позвоночник 0.929, бедро R 0.606, бедро L 0.567 | рабочий чекпоинт, его собственная валидация |
|
||||
|
||||
Рабочий чекпоинт — обычный прогон с seed по умолчанию (эпоха 39, порог логита
|
||||
−0.4930 → вероятность 0.379), его собственная валидационная ROC-AUC 0.6706
|
||||
Рабочий чекпоинт — обычный прогон с seed по умолчанию (эпоха 57, порог логита
|
||||
−0.1370 → вероятность 0.466), его собственная валидационная ROC-AUC 0.6689
|
||||
близка к среднему по seed'ам, то есть результат не отобран по удачности.
|
||||
|
||||
Проверка, что модель смотрит на снимок, а не угадывает анатомию: внутри областей
|
||||
она даёт AUC 0.85–0.93, правило «позвоночник значит нарушение» — ровно 0.50.
|
||||
она даёт AUC 0.88–0.95, правило «позвоночник значит нарушение» — ровно 0.50.
|
||||
Числа считаются на всём наборе, включая обучающие снимки, поэтому смещены вверх и
|
||||
отвечают на вопрос «есть ли вклад содержимого», а не «каково качество на новых
|
||||
данных».
|
||||
|
|
@ -172,7 +204,7 @@
|
|||
1. **Разметка унаследована от исследования.** Таблица оценивает исследование, а
|
||||
не снимок; перенос однозначен, потому что область встречается один раз, но
|
||||
исходная оценка всё равно не поштучная.
|
||||
2. **Мало данных:** 252 снимка, 77 нарушений. Интервалы широкие.
|
||||
2. **Мало данных:** 251 снимок, 76 нарушений. Интервалы широкие.
|
||||
3. **Эталон — та же таблица.** Независимой истины нет; вариант, обучавшийся на
|
||||
таблице, в сравнении в выигрышном положении.
|
||||
4. **Тип нарушения — эвристика**, а не вывод модели: 5 снимков имеют только
|
||||
|
|
@ -182,8 +214,83 @@
|
|||
6. **Сторона бедра в 7 исследованиях не проверяема:** теги латеральности пусты.
|
||||
7. **Корректность областей интереса наследуется из таблицы:** разметки ROI в
|
||||
DICOM нет, сравнить её напрямую не с чем.
|
||||
8. **Пометки в именах файлов спорят с таблицей в 62 случаях из 251.** На метку
|
||||
это не влияет (правило `table`), но означает, что один из двух источников
|
||||
ошибается почти в четверти набора. Разбирать их поштучно можно в `/label`; для
|
||||
выбора правила измерения в §8 такие снимки не использовались.
|
||||
9. **Поштучной разметки всё ещё нет.** Интерфейс `/label` (§10) её даёт, но им
|
||||
ещё не пользовались: пока набор размечен на уровне исследования.
|
||||
|
||||
## 10. Отрицательный результат: локальная vision-модель
|
||||
## 10. Ручная разметка: интерфейс `/label`
|
||||
|
||||
Поштучной экспертной оценки снимков в наборе нет — это ограничение №1, и
|
||||
автоматически его не закрыть: локальная vision-модель оказалась непригодна (§11),
|
||||
а экспертная таблица описывает исследование. Поэтому в сервисе есть интерфейс
|
||||
ручной разметки — раздел 2.6 задания прямо просит «автоматическую коррекцию
|
||||
разметки с возможностью подтверждения специалистом».
|
||||
|
||||
```bash
|
||||
./run.sh serve # http://localhost:8000/label
|
||||
```
|
||||
|
||||
Что он делает:
|
||||
|
||||
* показывает снимок целиком (PNG через `/api/v1/labeling/image`) без наложений,
|
||||
чтобы разметчик судил по изображению, а не по подсказке алгоритма;
|
||||
* отдаёт список снимков с текущей меткой и её источником (`table`, `filename` или
|
||||
`manual`), причём снимки с расхождением метки и пометки в имени файла идут
|
||||
первыми — именно там один из источников ошибается (см. §9, п. 8);
|
||||
* сохраняет вердикт: анатомическая область, «годное / нарушение», тип нарушения из
|
||||
`violations.py` и комментарий. Тип нарушения проверяется на совместимость с
|
||||
областью (ротация — критерий бедра), у качественного снимка типа быть не может,
|
||||
а опечатка в коде не превращается молча в `unspecified`;
|
||||
* пишет вердикты в `labels/manual_labels.csv`. Формат тот же, что у построенной
|
||||
разметки, поэтому файл читается `load_labels_csv` и принимается обучением как
|
||||
`--labels-csv`;
|
||||
* выгружает `scope=all` — весь набор с наложенными ручными вердиктами (готовый
|
||||
источник меток для `./run.sh train`) — или `scope=reviewed` — только разобранные
|
||||
снимки, чтобы сверить их с построенной разметкой.
|
||||
|
||||
Оценка модели в интерфейсе намеренно не показывается: разметчик, видя подсказку,
|
||||
соглашался бы с ней, и поштучная разметка теряла бы ценность независимого
|
||||
суждения. Прогресс по областям и число расхождений показаны, чтобы работу можно
|
||||
было вести частями и прерывать.
|
||||
|
||||
Горячие клавиши: `g` — годное, `b` — нарушение, `Enter` — сохранить и перейти к
|
||||
следующему, `d` — снять вердикт, `j`/`k` — навигация по списку.
|
||||
|
||||
Инструмент не заменяет эксперта: он только фиксирует суждение специалиста в
|
||||
формате, который пайплайн уже умеет читать.
|
||||
|
||||
### Передача врачу: автономный пакет
|
||||
|
||||
`/label` требует запущенного сервиса и Python, а размечать должен врач — обычно на
|
||||
своей машине, вне сети и без установки чего-либо. Поэтому тот же сценарий
|
||||
собирается в один HTML-файл со встроенными снимками (`src/dxa/review_pack.py`):
|
||||
|
||||
```bash
|
||||
python -m src.dxa.review_pack --out review/doctor_review.html # 251 снимок, ~7 МБ
|
||||
python -m src.dxa.review_pack --merge review/doctor.csv \
|
||||
--out labels/labels_images_reviewed.csv # наложить вердикты врача
|
||||
```
|
||||
|
||||
Страница не делает ни одного сетевого запроса (проверяется тестом), вердикты
|
||||
хранит браузер, выгрузка — CSV в формате `manual_labels.csv` с дополнительной
|
||||
колонкой `pack_id` (отпечаток набора: по нему видно, что файл вернулся из того же
|
||||
пакета). Модель в пакет не попадает: если показать разметчику оценку алгоритма,
|
||||
он будет с ней соглашаться, и независимого суждения не получится.
|
||||
|
||||
**Что стоит размечать.** Порядок в пакете и в интерфейсе — как в §7: сперва 62
|
||||
снимка, где метка разметки расходится с пометкой в имени файла (там ошибается
|
||||
один из двух источников). Но одних расхождений мало: они отобраны по признаку,
|
||||
который сам может быть смещён. Чтобы получить **независимую** оценку качества,
|
||||
нужен ещё случайный подсчёт — если врач разметит, например, случайные 50 снимков
|
||||
из 251, по ним можно будет измерить ROC-AUC и F1 модели на человеческом суждении,
|
||||
а не на той же экспертной таблице, из которой выведена разметка (ограничение 3 в
|
||||
§9). Такой замер в проекте ещё не делался: ни один снимок пока не размечен
|
||||
поштучно.
|
||||
|
||||
## 11. Отрицательный результат: локальная vision-модель
|
||||
|
||||
Планировалась визуальная разметка локальной vision-моделью (9 млрд параметров,
|
||||
офлайн), чтобы не зависеть от таблицы. На калибровке по 14 снимкам, из которых 8
|
||||
|
|
@ -196,7 +303,7 @@
|
|||
контактных листов остались в `src/dxa/render.py` — они полезны для выборочной
|
||||
ручной проверки.
|
||||
|
||||
## 11. Воспроизведение
|
||||
## 12. Воспроизведение
|
||||
|
||||
```bash
|
||||
./run.sh label # разметка по экспертной таблице
|
||||
|
|
@ -206,9 +313,11 @@ python -m src.dxa.excel_labels --label-rule union --out-name labels_images_union
|
|||
python -m src.dxa.render --by-region --out dataset_hack/_preview
|
||||
```
|
||||
|
||||
## 12. Что дальше
|
||||
## 13. Что дальше
|
||||
|
||||
- Поштучная разметка снимков специалистом — снимет ограничение №1.
|
||||
- Мультилейбл по типам нарушений вместо эвристики.
|
||||
- Поштучная разметка снимков специалистом через `/label` (§10) — снимет
|
||||
ограничение №1 и позволит перемерить качество на независимом суждении.
|
||||
- Мультилейбл по типам нарушений вместо эвристики: в интерфейсе тип уже
|
||||
проставляется вручную, но модель его не предсказывает.
|
||||
- Больше исследований (500+), чтобы сузить интервалы.
|
||||
- Калибровка порога определения области под конкретное оборудование.
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ services:
|
|||
image: dxa-quality:cuda
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile_cuda
|
||||
dockerfile: Dockerfile_cuda.txt
|
||||
ports:
|
||||
- "8000:8000"
|
||||
restart: unless-stopped
|
||||
|
|
|
|||
|
|
@ -67,9 +67,9 @@
|
|||
<tr><th>Дата документа</th><td>27 сентября 2026 г.</td></tr>
|
||||
<tr><th>Команда</th><td>Грачев Денис — разработка; Грачев Татьяна — капитан</td></tr>
|
||||
<tr><th>Версия решения</th><td>1.0.0 (<code>src/__init__.py</code>)</td></tr>
|
||||
<tr><th>Рабочий чекпоинт</th><td><code>models/dxa_model.pth</code>: ResNet18 + линейная голова, разметка <code>table</code>, seed 42, эпоха 39, порог логита −0.4930 (вероятность 0.379)</td></tr>
|
||||
<tr><th>Ключевые метрики</th><td>ROC-AUC 0.6764 [0.6309, 0.7218], F1 0.5676 [0.5270, 0.6082] — пять seed'ов на фиксированном разбиении по исследованиям</td></tr>
|
||||
<tr><th>Время обработки</th><td>0.021 с на изображение (медиана, CPU), 548 файлов за 12.1 с; требование «≤ 3 мин на исследование» выполняется с запасом</td></tr>
|
||||
<tr><th>Рабочий чекпоинт</th><td><code>models/dxa_model.pth</code>: ResNet18 + линейная голова, разметка <code>table</code>, seed 42, эпоха 57, порог логита −0.1370 (вероятность 0.466)</td></tr>
|
||||
<tr><th>Ключевые метрики</th><td>ROC-AUC 0.6726 [0.6367, 0.7086], F1 0.5559 [0.5212, 0.5906] — пять seed'ов на фиксированном разбиении по исследованиям</td></tr>
|
||||
<tr><th>Время обработки</th><td>0.022 с на изображение (медиана, CPU), 482 файла за 13.9 с; требование «≤ 3 мин на исследование» выполняется с запасом</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
|
@ -144,7 +144,7 @@
|
|||
<td>Разд. 9 (состав столбцов проверен на реальном прогоне)</td></tr>
|
||||
<tr><td>Время обработки одного исследования ≤ 3 мин</td>
|
||||
<td>Один снимок — один прямой проход сети 224×224, без итеративных процедур</td>
|
||||
<td>Разд. 13: 0.021 с медиана на CPU, запас более чем трёхкратный</td></tr>
|
||||
<td>Разд. 13: 0.022 с медиана на CPU, запас более чем трёхкратный</td></tr>
|
||||
<tr><td>Отсутствие необработанных исключений; ошибки фиксируются в отчёте</td>
|
||||
<td>Ошибка на файле не прерывает пакет: строка получает <code>processing_status = Failure: …</code></td>
|
||||
<td>Разд. 16</td></tr>
|
||||
|
|
@ -155,8 +155,11 @@
|
|||
<td>Обход каталога, лог прогресса, XLSX/CSV, опциональный zip с визуализацией</td>
|
||||
<td>Разд. 9, 13</td></tr>
|
||||
<tr><td>API для пакетной обработки тестового набора</td>
|
||||
<td>FastAPI: восемь маршрутов, включая <code>/api/v1/batch</code> и <code>/api/v1/export</code></td>
|
||||
<td>FastAPI: четырнадцать маршрутов, включая <code>/api/v1/batch</code>, <code>/api/v1/export</code> и маршруты ручной разметки <code>/api/v1/labeling/*</code></td>
|
||||
<td>Разд. 10</td></tr>
|
||||
<tr><td>Дополнительно (п. 2.6): коррекция разметки с возможностью подтверждения специалистом</td>
|
||||
<td>Интерфейс <code>/label</code>: снимок целиком, текущая метка с указанием источника, вердикт специалиста сохраняется в <code>labels/manual_labels.csv</code> и принимается обучением как <code>--labels-csv</code></td>
|
||||
<td>Разд. 11.1; <code>tests/test_manual_labels.py</code>, <code>tests/test_labeling_api.py</code>, <code>tests/browser/ui_labeling.js</code></td></tr>
|
||||
<tr><td>Обязательная контейнеризация, скрипт сборки и запуска в Linux</td>
|
||||
<td><code>Dockerfile</code> (python:3.11-slim, чекпоинт внутри образа), <code>Dockerfile_cuda</code> для GPU, <code>docker-compose.yml</code> на оба случая, <code>run.sh</code></td>
|
||||
<td>Разд. 14; сборка и запуск проверены, см. 14</td></tr>
|
||||
|
|
@ -224,7 +227,7 @@
|
|||
Параметры предобработки хранятся в чекпоинте и берутся из него, а не из кода по умолчанию.</li>
|
||||
<li><b>Оценка качества.</b> Один прямой проход сети даёт логит. Решение принимается по логиту:
|
||||
<code>quality_class = 1</code>, если логит выше порога. Порог подобран по F1 на валидации и
|
||||
сохранён в чекпоинте (текущее значение −0.4930, что соответствует вероятности 0.379).</li>
|
||||
сохранён в чекпоинте (текущее значение −0.1370, что соответствует вероятности 0.466).</li>
|
||||
<li><b>Анатомическая область.</b> Определяется независимо от модели, по геометрии кадра (разд. 7),
|
||||
с оценкой уверенности.</li>
|
||||
<li><b>Измерения и тип нарушения.</b> Для снимков с нарушением вычисляются числовые признаки снимка,
|
||||
|
|
@ -242,12 +245,12 @@
|
|||
|
||||
<table>
|
||||
<tr><th>Показатель</th><th class="num">Значение</th><th>Пояснение</th></tr>
|
||||
<tr><td>Файлов на диске</td><td class="num">544</td><td>в обучающем наборе (<code>dataset_hack/НД_для_обучения</code>)</td></tr>
|
||||
<tr><td>Уникальных снимков</td><td class="num">252</td><td>по пиксельному содержимому; 292 файла — побайтные дубли</td></tr>
|
||||
<tr><td>Файлов на диске</td><td class="num">478</td><td>DICOM в обучающем наборе (<code>dataset_hack/НД_для_обучения</code>); лишние побайтные копии удалены</td></tr>
|
||||
<tr><td>Уникальных снимков</td><td class="num">251</td><td>по пиксельному содержимому; 227 файлов — дубли одного и того же кадра</td></tr>
|
||||
<tr><td>Исследований</td><td class="num">100</td><td>разбиение выполняется по исследованиям, а не по снимкам</td></tr>
|
||||
<tr><td>Позвоночник / бедро правое / бедро левое / не определено</td><td class="num">99 / 79 / 73 / 1</td><td>голосование по именам файлов после склейки дублей</td></tr>
|
||||
<tr><td>Нарушений по экспертной таблице</td><td class="num">74 (29.4 %)</td><td>три снимка таблица не оценивала</td></tr>
|
||||
<tr><td>Нарушений в рабочей разметке</td><td class="num">77 (30.6 %)</td><td>74 по таблице плюс 3 снимка с пометкой в имени файла</td></tr>
|
||||
<tr><td>Позвоночник / бедро правое / бедро левое / не определено</td><td class="num">99 / 78 / 73 / 1</td><td>голосование по именам файлов после склейки дублей</td></tr>
|
||||
<tr><td>Нарушений по экспертной таблице</td><td class="num">73 (29.1 %)</td><td>три снимка таблица не оценивала</td></tr>
|
||||
<tr><td>Нарушений в рабочей разметке</td><td class="num">76 (30.3 %)</td><td>73 по таблице плюс 3 снимка с пометкой в имени файла</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Дубли не пересекают границы исследований, конфликтов меток при склейке не возникает. Два побайтных
|
||||
|
|
@ -267,7 +270,7 @@
|
|||
|
||||
<p>Возможны были два правила: учитывать только экспертную таблицу либо дополнительно учитывать
|
||||
пометки <code>_good</code>/<code>_bad</code>, проставленные вручную в именах файлов. Пометки
|
||||
расходились с экспертом в 15 случаях из 252, поэтому правило выбиралось измерением: одно
|
||||
расходились с экспертом в 62 случаях из 251, поэтому правило выбиралось измерением: одно
|
||||
зафиксированное разбиение, пять seed'ов обучения, один эталон (табл. в разд. 12.3). Выбрано правило
|
||||
«только экспертная таблица».</p>
|
||||
|
||||
|
|
@ -275,7 +278,7 @@
|
|||
|
||||
<table>
|
||||
<tr><th>Часть</th><th class="num">Снимков</th><th class="num">Исследований</th><th class="num">Нарушений</th><th>Файл</th></tr>
|
||||
<tr><td>Обучение</td><td class="num">199</td><td class="num">81</td><td class="num">61</td><td rowspan="2"><code>labels/split_expert_seed42.json</code></td></tr>
|
||||
<tr><td>Обучение</td><td class="num">198</td><td class="num">81</td><td class="num">60</td><td rowspan="2"><code>labels/split_expert_seed42.json</code></td></tr>
|
||||
<tr><td>Валидация</td><td class="num">53</td><td class="num">19</td><td class="num">16</td></tr>
|
||||
</table>
|
||||
|
||||
|
|
@ -383,9 +386,9 @@ backbone заморожен и обучается только голова на
|
|||
Аргумент <code>--min-recall</code> позволяет вместо этого взять максимальный порог с recall не ниже
|
||||
заданного.</p>
|
||||
|
||||
<p><b>Рабочий чекпоинт.</b> Лучшая эпоха — 39 из прогона в 64 эпохи (обучение остановлено по терпению),
|
||||
порог логита −0.4930 (вероятность 0.379). Метрики этой эпохи — в разделе 12, честная оценка варианта на
|
||||
пяти seed'ах — ROC-AUC 0.6764.</p>
|
||||
<p><b>Рабочий чекпоинт.</b> Лучшая эпоха — 57 из прогона в 82 эпохи (обучение остановлено по терпению),
|
||||
порог логита −0.1370 (вероятность 0.466). Метрики этой эпохи — в разделе 12, честная оценка варианта на
|
||||
пяти seed'ах — ROC-AUC 0.6726.</p>
|
||||
|
||||
<h3>6.3. Чекпоинт и отчёты</h3>
|
||||
|
||||
|
|
@ -437,17 +440,17 @@ backbone заморожен и обучается только голова на
|
|||
<p>Если ширина кадра неизвестна, используется предсказание головы, а затем форма яркой области
|
||||
(<code>bbox_aspect</code> и <code>symmetry</code>).</p>
|
||||
|
||||
<p><b>Точность.</b> Сопоставление с областью из рабочей разметки (252 снимка, раздел 4):</p>
|
||||
<p><b>Точность.</b> Сопоставление с областью из рабочей разметки (251 снимок, раздел 4):</p>
|
||||
|
||||
<table>
|
||||
<tr><th>Что проверялось</th><th class="num">Результат</th></tr>
|
||||
<tr><td>Позвоночник</td><td class="num">99 / 99</td></tr>
|
||||
<tr><td>Сторона бедра (правое / левое)</td><td class="num">135 / 152 (88.8 %)</td></tr>
|
||||
<tr><td>Итого по всем областям</td><td class="num">234 / 251 (93.2 %)</td></tr>
|
||||
<tr><td>Сторона бедра (правое / левое)</td><td class="num">134 / 151 (88.7 %)</td></tr>
|
||||
<tr><td>Итого по всем областям</td><td class="num">233 / 250 (93.2 %)</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Различение позвоночника и бедра по ширине кадра работает безошибочно, а сторона бедра определяется
|
||||
менее надёжно: перевес светимости путает левое и правое в 17 случаях из 152. Сторона не проверялась по
|
||||
менее надёжно: перевес светимости путает левое и правое в 17 случаях из 151. Сторона не проверялась по
|
||||
тегам DICOM — <code>Laterality</code> в наборе пуст, — поэтому это ограничение (раздел 17, п. 7), а не
|
||||
измеренная ошибка модели.</p>
|
||||
|
||||
|
|
@ -490,12 +493,12 @@ acceptable) с флагом <code>FINAL</code>, нарушение — с фла
|
|||
|
||||
<p>Экспертная таблица кодирует не все девять кодов, а пять: <code>positioning</code>,
|
||||
<code>axis_deviation</code>, <code>artifact</code>, <code>rotation</code>, <code>roi_incorrect</code>.
|
||||
Распределение в рабочей разметке (в четырёх из 77 нарушений указано по два критерия, поэтому сумма
|
||||
больше 77):</p>
|
||||
Распределение в рабочей разметке (в четырёх из 76 нарушений указано по два критерия, поэтому сумма
|
||||
больше 76):</p>
|
||||
|
||||
<table>
|
||||
<tr><th>Код</th><th class="num">Снимков</th></tr>
|
||||
<tr><td><code>rotation</code></td><td class="num">36</td></tr>
|
||||
<tr><td><code>rotation</code></td><td class="num">35</td></tr>
|
||||
<tr><td><code>artifact</code></td><td class="num">17</td></tr>
|
||||
<tr><td><code>axis_deviation</code></td><td class="num">10</td></tr>
|
||||
<tr><td><code>roi_incorrect</code></td><td class="num">7</td></tr>
|
||||
|
|
@ -519,8 +522,8 @@ acceptable) с флагом <code>FINAL</code>, нарушение — с фла
|
|||
<div class="note">На текущем чекпоинте эта ветка практически вырождена. Пороги
|
||||
<code>motion_threshold</code> и <code>artifact_threshold</code> в вызов не передаются, поэтому
|
||||
действуют значения по умолчанию (0.0 и 1.0), которых признаки достичь не могут, а условие ротации
|
||||
(<code>bbox_aspect</code> вне диапазона 0.4–3.0) на наборе не срабатывает. Прогон по всем 548 файлам
|
||||
даёт одинаковый результат: все 341 решение с нарушением помечены <code>unspecified</code>. Для
|
||||
(<code>bbox_aspect</code> вне диапазона 0.4–3.0) на наборе не срабатывает. Прогон по всем 482 файлам
|
||||
даёт одинаковый результат: все 206 решений с нарушением помечены <code>unspecified</code>. Для
|
||||
содержательного типа нужна разметка типов на уровне снимка и обученный мультилейбл-классификатор
|
||||
(раздел 18), поэтому в ответе API тип всегда идёт с флагом
|
||||
<code>violation_type_is_heuristic = true</code>.</div>
|
||||
|
|
@ -651,50 +654,92 @@ acceptable) с флагом <code>FINAL</code>, нарушение — с фла
|
|||
состав данных, словарь нарушений и список ограничений. Данные приходят из <code>/api/v1/model</code>.</figcaption>
|
||||
</figure>
|
||||
|
||||
<h3>11.1. Ручная разметка (<code>/label</code>)</h3>
|
||||
|
||||
<p>Поштучной экспертной оценки снимков в наборе нет — это ограничение 1 в разд. 17, и автоматически его
|
||||
закрыть нечем: локальная vision-модель оказалась непригодна как разметчик (отрицательный результат
|
||||
описан в <code>assets/labeling.md</code> §11). Поэтому реализован отдельный интерфейс ручной разметки, который
|
||||
отвечает пункту 2.6 задания — «автоматическая коррекция разметки с возможностью подтверждения
|
||||
специалистом».</p>
|
||||
|
||||
<p>Страница доступна по адресу <code>/label</code> и работает на тех же офлайн-ассетах, что и основная.
|
||||
Она показывает снимок целиком (PNG через <code>/api/v1/labeling/image</code>, без наложений), его
|
||||
текущую метку и <b>источник</b> этой метки: <code>table</code> (экспертная таблица),
|
||||
<code>filename</code> (пометка в имени файла) или <code>manual</code> (вердикт специалиста). Снимки, где
|
||||
метка разметки расходится с пометкой в имени файла, выводятся первыми: именно там один из источников
|
||||
ошибается, и таких снимков в наборе 62 из 251.</p>
|
||||
|
||||
<p>Специалист подтверждает вердикт или ставит свой: анатомическая область, «годное / нарушение», тип
|
||||
нарушения из словаря (разд. 8) и комментарий. Вердикт проверяется на согласованность: тип нарушения
|
||||
обязан относиться к выбранной области (ротация — критерий бедра), у качественного снимка типа быть не
|
||||
может, а неизвестный код отклоняется, а не подменяется на «не уточнён». Есть горячие клавиши
|
||||
(<code>g</code> — годное, <code>b</code> — нарушение, <code>Enter</code> — сохранить и перейти к
|
||||
следующему) и прогресс по областям, чтобы работу можно было вести частями.</p>
|
||||
|
||||
<p>Вердикты сохраняются в <code>labels/manual_labels.csv</code> в том же формате, что и построенная
|
||||
разметка, поэтому файл читается тем же загрузчиком и принимается обучением как
|
||||
<code>--labels-csv</code>. Выгрузка <code>scope=all</code> отдаёт весь набор с наложенными ручными
|
||||
вердиктами (готовый источник меток), <code>scope=reviewed</code> — только разобранные снимки, чтобы
|
||||
сверить их с построенной разметкой.</p>
|
||||
|
||||
<p><b>Разметка без сервиса.</b> Интерфейс <code>/label</code> требует запущенного сервиса, а
|
||||
размечать должен специалист — как правило, на своей машине, вне сети и без установки чего-либо.
|
||||
Поэтому тот же сценарий упаковывается в один автономный HTML-файл
|
||||
(<code>src/dxa/review_pack.py</code>, около 7 МБ на 251 снимок): изображения встроены как
|
||||
data-URI, вердикты хранятся в браузере, а кнопка «Выгрузить CSV» отдаёт файл, который принимается
|
||||
обучением как есть. Страница не делает ни одного сетевого запроса, и это проверяется автоматически
|
||||
(<code>tests/browser/review_pack.js</code>). Вердикты специалиста накладываются на построенную
|
||||
разметку командой <code>python -m src.dxa.review_pack --merge</code>; если в файле окажутся пути
|
||||
из другого набора, команда сообщает об этом.</p>
|
||||
|
||||
<div class="note">Оценка модели в интерфейсе намеренно не показывается: разметчик, видя подсказку,
|
||||
соглашался бы с ней, и поштучная разметка потеряла бы ценность независимого суждения. Инструмент не
|
||||
заменяет эксперта — он фиксирует его суждение в формате, который пайплайн уже умеет читать.</div>
|
||||
|
||||
<h2 id="s12">12. Метрики качества</h2>
|
||||
|
||||
<h3>12.1. Основная оценка</h3>
|
||||
|
||||
<p>Оценка получена на фиксированном разбиении по исследованиям (обучение 199 снимков / 81 исследование,
|
||||
<p>Оценка получена на фиксированном разбиении по исследованиям (обучение 198 снимков / 81 исследование,
|
||||
валидация 53 снимка / 19 исследований, 16 нарушений), пять seed'ов обучения, эталон — вердикт
|
||||
эксперта из таблицы. Приоритетные по заданию метрики приведены с 95 % доверительными интервалами.</p>
|
||||
|
||||
<table>
|
||||
<tr><th>Метрика</th><th class="num">Значение</th><th class="num">95 % ДИ</th><th>Комментарий</th></tr>
|
||||
<tr><td>ROC-AUC</td><td class="num">0.6764</td><td class="num">[0.6309, 0.7218]</td><td>приоритетная метрика задания</td></tr>
|
||||
<tr><td>PR-AUC</td><td class="num">0.4759</td><td class="num">[0.4141, 0.5377]</td><td>базовый уровень при доле нарушений 30 % — около 0.30</td></tr>
|
||||
<tr><td>F1</td><td class="num">0.5676</td><td class="num">[0.5270, 0.6082]</td><td>порог подбирался по F1 на той же валидации, поэтому значение смещено вверх</td></tr>
|
||||
<tr><td>Recall / Precision</td><td class="num">0.700 / 0.486</td><td class="num">—</td><td>рабочая точка выбранного порога</td></tr>
|
||||
<tr><td>ROC-AUC</td><td class="num">0.6726</td><td class="num">[0.6367, 0.7086]</td><td>приоритетная метрика задания</td></tr>
|
||||
<tr><td>PR-AUC</td><td class="num">0.4753</td><td class="num">[0.4188, 0.5318]</td><td>базовый уровень при доле нарушений 30 % — около 0.30</td></tr>
|
||||
<tr><td>F1</td><td class="num">0.5559</td><td class="num">[0.5212, 0.5906]</td><td>порог подбирался по F1 на той же валидации, поэтому значение смещено вверх</td></tr>
|
||||
<tr><td>Recall / Precision</td><td class="num">0.713 / 0.472</td><td class="num">—</td><td>рабочая точка выбранного порога</td></tr>
|
||||
</table>
|
||||
|
||||
<h3>12.2. Оценка по областям и контрольные проверки</h3>
|
||||
|
||||
<table>
|
||||
<tr><th>Что измерено</th><th class="num">Значение</th><th>Как получено</th></tr>
|
||||
<tr><td>ROC-AUC: позвоночник / бедро правое / бедро левое</td><td class="num">0.943 / 0.576 / 0.550</td><td>рабочий чекпоинт, собственная валидация</td></tr>
|
||||
<tr><td>ROC-AUC: позвоночник / бедро правое / бедро левое</td><td class="num">0.929 / 0.606 / 0.567</td><td>рабочий чекпоинт, собственная валидация</td></tr>
|
||||
<tr><td>Контрольная задача «позвоночник / бедро»</td><td class="num">AUC 1.00</td><td>проверка работоспособности пайплайна, а не клиническая метрика</td></tr>
|
||||
<tr><td>Модель против правила «позвоночник = нарушение»</td><td class="num">0.854 против 0.529</td><td>оценка на всём наборе, включая обучающие снимки, поэтому смещена вверх</td></tr>
|
||||
<tr><td>Модель против правила «позвоночник = нарушение»</td><td class="num">0.885 против 0.534</td><td>оценка на всём наборе, включая обучающие снимки, поэтому смещена вверх</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Разбивка по областям нужна потому, что нарушения распределены неравномерно: в позвоночнике
|
||||
33 из 99 снимков, у бёдер 21–22 из 73–79, а сама область почти однозначно определяется по ширине
|
||||
33 из 99 снимков, у бёдер 20–22 из 73–78, а сама область почти однозначно определяется по ширине
|
||||
кадра. Поэтому общий AUC частично отражает различение области, а не только распознавание дефекта.
|
||||
Чтобы отделить одно от другого, выполнена проверка: правило «позвоночник = нарушение» даёт внутри
|
||||
областей 0.50 (подсказки нет), модель — 0.85–0.93. Это означает, что модель использует содержимое
|
||||
областей 0.50 (подсказки нет), модель — 0.88–0.95. Это означает, что модель использует содержимое
|
||||
снимка, а не только область.</p>
|
||||
|
||||
<h3>12.3. Выбор правила разметки</h3>
|
||||
|
||||
<table>
|
||||
<tr><th>Метрика (эталон)</th><th class="num">только таблица</th><th class="num">с суффиксами имён</th></tr>
|
||||
<tr><td>ROC-AUC</td><td class="num">0.6764 [0.6309, 0.7218]</td><td class="num">0.6199 [0.5840, 0.6559]</td></tr>
|
||||
<tr><td>PR-AUC</td><td class="num">0.4759 [0.4141, 0.5377]</td><td class="num">0.4046 [0.3702, 0.4391]</td></tr>
|
||||
<tr><td>F1</td><td class="num">0.5676 [0.5270, 0.6082]</td><td class="num">0.5426 [0.5073, 0.5778]</td></tr>
|
||||
<tr><td>Recall / Precision</td><td class="num">0.700 / 0.486</td><td class="num">0.863 / 0.404</td></tr>
|
||||
<tr><td>ROC-AUC</td><td class="num">0.6726 [0.6367, 0.7086]</td><td class="num">0.6003 [0.5592, 0.6415]</td></tr>
|
||||
<tr><td>PR-AUC</td><td class="num">0.4753 [0.4188, 0.5318]</td><td class="num">0.3864 [0.3487, 0.4242]</td></tr>
|
||||
<tr><td>F1</td><td class="num">0.5559 [0.5212, 0.5906]</td><td class="num">0.5354 [0.4978, 0.5729]</td></tr>
|
||||
<tr><td>Recall / Precision</td><td class="num">0.713 / 0.472</td><td class="num">0.788 / 0.409</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Парная разница (только таблица минус с суффиксами): ROC-AUC <b>+0.0564</b> [+0.0403, +0.0725],
|
||||
PR-AUC <b>+0.0713</b> [+0.0398, +0.1028] — знаки <code>+++++</code>, то есть преимущество на всех пяти
|
||||
<p>Парная разница (только таблица минус с суффиксами): ROC-AUC <b>+0.0723</b> [+0.0541, +0.0905],
|
||||
PR-AUC <b>+0.0889</b> [+0.0500, +0.1277] — знаки <code>+++++</code>, то есть преимущество на всех пяти
|
||||
seed'ах. Принято правило «только экспертная таблица». Оговорка, важная для интерпретации: эталон — та
|
||||
же таблица, поэтому вариант, обучавшийся на ней, находится в выигрышном положении; значимо здесь то,
|
||||
что добавление ненадёжных пометок согласие с экспертом <b>снижает</b>, а не повышает.</p>
|
||||
|
|
@ -704,15 +749,15 @@ seed'ах. Принято правило «только экспертная т
|
|||
<h3>13.1. Измерения</h3>
|
||||
|
||||
<p>Измерения выполнены на рабочей машине разработчика (macOS, Apple Silicon) на полном наборе данных —
|
||||
548 файлов в <code>dataset_hack</code> (544 обучающих плюс 4 тестовых). Инференс принудительно
|
||||
482 DICOM-файла в <code>dataset_hack</code> (478 обучающих плюс 4 тестовых). Инференс принудительно
|
||||
переведён на CPU параметром <code>--device cpu</code>, чтобы числа не зависели от наличия ускорителя.</p>
|
||||
|
||||
<table>
|
||||
<tr><th>Показатель</th><th class="num">Значение</th><th>Условия</th></tr>
|
||||
<tr><td>Время на изображение (медиана)</td><td class="num">0.021 с</td><td>CPU, включает чтение DICOM, предобработку и проход сети</td></tr>
|
||||
<tr><td>Время на изображение (максимум)</td><td class="num">0.131 с</td><td>тот же прогон; первый снимок включает прогрев</td></tr>
|
||||
<tr><td>Пакет целиком (548 файлов)</td><td class="num">12.1 с</td><td>от запуска процесса до записи XLSX, включая загрузку чекпоинта</td></tr>
|
||||
<tr><td>Доля успешно обработанных файлов</td><td class="num">548 / 548 (100 %)</td><td>ошибок чтения на этом наборе нет</td></tr>
|
||||
<tr><td>Время на изображение (медиана)</td><td class="num">0.022 с</td><td>CPU, включает чтение DICOM, предобработку и проход сети</td></tr>
|
||||
<tr><td>Время на изображение (максимум)</td><td class="num">0.041 с</td><td>тот же прогон</td></tr>
|
||||
<tr><td>Пакет целиком (482 файла)</td><td class="num">13.9 с</td><td>от запуска процесса до записи XLSX, включая загрузку чекпоинта</td></tr>
|
||||
<tr><td>Доля успешно обработанных файлов</td><td class="num">482 / 482 (100 %)</td><td>ошибок чтения на этом наборе нет</td></tr>
|
||||
<tr><td>Пиковая память процесса</td><td class="num">≈ 640 МБ</td><td>maximum resident set size, пакетный CPU-инференс</td></tr>
|
||||
<tr><td>Ответ API на один файл</td><td class="num">16–18 мс</td><td>вызов внутри процесса, после прогрева; первый запрос 390 мс. Здесь устройство выбрано автоматически (MPS), на CPU значение того же порядка — см. медиану пакетного прогона выше</td></tr>
|
||||
<tr><td>Время старта сервиса</td><td class="num">≈ 3 с</td><td>импорт библиотек и загрузка чекпоинта</td></tr>
|
||||
|
|
@ -769,10 +814,10 @@ seed'ах. Принято правило «только экспертная т
|
|||
|
||||
<p><b>Что проверено на самом образе.</b> Сборка проходит три внутренние проверки:
|
||||
<code>app import ok</code>, <code>frontend assets ok</code> и
|
||||
<code>checkpoint ok: resnet18 linear threshold -0.4930129051208496</code>. Контейнер запущен без единого
|
||||
<code>checkpoint ok: resnet18 linear threshold -0.13703127205371857</code>. Контейнер запущен без единого
|
||||
монтирования (<code>docker run -d -p 8000:8000 dxa-quality:cpu</code>): чекпоинт присутствует внутри
|
||||
образа (<code>/app/models/dxa_model.pth</code>), <code>/api/v1/health</code> сообщает
|
||||
<code>model_loaded: true</code>, <code>device: cpu</code>, эпоху 39 и файл разметки
|
||||
<code>model_loaded: true</code>, <code>device: cpu</code>, эпоху 57 и файл разметки
|
||||
<code>labels/labels_images.csv</code>, запрос <code>/api/v1/analyze</code> отвечает корректной строкой
|
||||
результата, а <code>/api/v1/export</code> возвращает XLSX с ожидаемым набором столбцов. Сквозная
|
||||
проверка выполнена в контейнере на той же машине, где снимались измерения производительности. Оба
|
||||
|
|
@ -809,8 +854,8 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
|
||||
<h2 id="s15">15. Тесты и проверки</h2>
|
||||
|
||||
<p>Тесты — <code>pytest</code>, 209 проверок в шести файлах; запуск — <code>./run.sh test</code> или
|
||||
<code>python -m pytest tests/ -q</code>. Сверка выполнена на дату документа: 209 passed.</p>
|
||||
<p>Тесты — <code>pytest</code>, 272 проверки в девяти файлах; запуск — <code>./run.sh test</code> или
|
||||
<code>python -m pytest tests/ -q</code>. Сверка выполнена на дату документа: 272 passed.</p>
|
||||
|
||||
<table>
|
||||
<tr><th style="width:30%">Файл</th><th class="num" style="width:10%">Тестов</th><th>Что проверяет</th></tr>
|
||||
|
|
@ -818,11 +863,15 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
<td>разбор имён, определение области и метки по имени, стратифицированное разбиение по
|
||||
исследованиям, отсутствие утечки, фиксация и переиспользование разбиения в файле, сверка с
|
||||
реальным датасетом</td></tr>
|
||||
<tr><td><code>tests/test_excel_labels.py</code></td><td class="num">50</td>
|
||||
<tr><td><code>tests/test_excel_labels.py</code></td><td class="num">51</td>
|
||||
<td>разметка по экспертной таблице: чтение критериев, правило «1 = нарушение», голосование по
|
||||
области, перенос оценки на единственное бедро, три правила метки
|
||||
(<code>table</code> / <code>union</code> / <code>expert</code>), их согласованность и подключение
|
||||
к обучению</td></tr>
|
||||
(<code>table</code> / <code>union</code> / <code>expert</code>), их согласованность, подключение
|
||||
к обучению и чтение CSV, сохранённого Excel с BOM</td></tr>
|
||||
<tr><td><code>tests/test_manual_labels.py</code></td><td class="num">26</td>
|
||||
<td>ручная разметка: проверка вердикта (область, метка, совместимость типа нарушения с областью,
|
||||
отказ от опечаток), хранение и правка вердиктов, чтение файла с BOM, наложение поверх построенной
|
||||
разметки, подсчёт прогресса и выгрузка</td></tr>
|
||||
<tr><td><code>tests/test_rename_files.py</code></td><td class="num">36</td>
|
||||
<td>приведение имён DICOM: разбор и канонизация, поиск свободного номера при конфликте, отказ
|
||||
угадывать область, цикл «применить → откатить»</td></tr>
|
||||
|
|
@ -836,12 +885,20 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
<td>поля ответов, которые читает веб-интерфейс: базовый и детальный анализ, здоровье и карточка
|
||||
модели, выгрузка XLSX, обработка ошибок; различимость метрик между снимками и валидность
|
||||
PNG-визуализаций</td></tr>
|
||||
<tr><td><code>tests/test_labeling_api.py</code></td><td class="num">19</td>
|
||||
<td>контракт <code>/api/v1/labeling/*</code>: отказ отдавать файлы вне датасета (обход каталога,
|
||||
не-DICOM), проверка вердикта, выгрузка, читаемая обучением как <code>--labels-csv</code></td></tr>
|
||||
<tr><td><code>tests/test_review_pack.py</code></td><td class="num">17</td>
|
||||
<td>автономный пакет разметки: отпечаток набора, порядок «расхождения первыми», встроенные
|
||||
данные разбираются как JSON, в странице нет ссылок на сеть, слияние вердиктов с построенной
|
||||
разметкой и сообщение о путях из чужого пакета</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Отдельный контур — браузерные проверки интерфейса (<code>tests/browser/*.js</code>, Node и
|
||||
<code>playwright-core</code>): они открывают интерфейс во временном профиле Chrome, загружают DICOM,
|
||||
кликают по строкам таблицы и снимают содержимое панели деталей. Требуется запущенный сервер на
|
||||
<code>127.0.0.1:8123</code>; профиль пользователя не затрагивается.</p>
|
||||
кликают по строкам таблицы и снимают содержимое панели деталей. Для проверок интерфейса и ручной
|
||||
разметки требуется запущенный сервер на <code>127.0.0.1:8123</code>; проверке автономного пакета
|
||||
сервер не нужен вовсе — она открывает файл прямо с диска. Профиль пользователя не затрагивается.</p>
|
||||
|
||||
<table>
|
||||
<tr><th style="width:28%">Сценарий</th><th>Что проверяет</th></tr>
|
||||
|
|
@ -851,8 +908,16 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
словарём</td></tr>
|
||||
<tr><td><code>ui_violation.js</code></td>
|
||||
<td>ветку «нарушение»: бейдж, <code>POOR</code>, <code>HIGH</code>, текст заключения</td></tr>
|
||||
<tr><td><code>ui_labeling.js</code></td>
|
||||
<td>интерфейс ручной разметки: список снимков с прогрессом, расхождения первыми, отрисовку
|
||||
снимка, сохранение вердикта и его живучесть после перезагрузки страницы, фильтр «только
|
||||
расхождения», отсутствие внешних запросов</td></tr>
|
||||
<tr><td><code>ui_offline.js</code></td>
|
||||
<td>отсутствие обращений страницы к внешним хостам</td></tr>
|
||||
<tr><td><code>review_pack.js</code></td>
|
||||
<td>автономный пакет разметки — без сервера вообще: файл открывается с диска, встроенный снимок
|
||||
рисуется, вердикт сохраняется и переживает перезагрузку, CSV выгружается и загружается обратно,
|
||||
ни одного сетевого запроса</td></tr>
|
||||
</table>
|
||||
|
||||
<h2 id="s16">16. Известные ошибки и их обработка</h2>
|
||||
|
|
@ -915,9 +980,10 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
<li><b>Разметка выведена из оценки исследования, а не снимка.</b> Экспертная таблица описывает
|
||||
исследование; перенос вердикта на снимок однозначен (область встречается один раз), но
|
||||
поштучной экспертной оценки снимков в наборе нет. Оценка качества модели упирается в качество
|
||||
этой разметки, а не только в объём данных.</li>
|
||||
<li><b>Мало данных.</b> 252 уникальных снимка, 77 нарушений. Доверительные интервалы широкие
|
||||
(ROC-AUC 0.6764 [0.6309, 0.7218] по пяти seed'ам), поэтому оценка на закрытом наборе может
|
||||
этой разметки, а не только в объём данных. Для поштучной разметки в сервисе есть интерфейс
|
||||
<code>/label</code> (раздел 11.1), им ещё не пользовались.</li>
|
||||
<li><b>Мало данных.</b> 251 уникальный снимок, 76 нарушений. Доверительные интервалы широкие
|
||||
(ROC-AUC 0.6726 [0.6367, 0.7086] по пяти seed'ам), поэтому оценка на закрытом наборе может
|
||||
отличаться.</li>
|
||||
<li><b>Эталон — та же таблица.</b> Независимой истины нет, поэтому сравнение правил разметки
|
||||
частично благоприятствует варианту «только таблица» (раздел 12.3).</li>
|
||||
|
|
@ -938,16 +1004,17 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
<li><b>Числовые эвристики панели деталей не калиброваны.</b> Их пороги рассчитаны на другой
|
||||
масштаб интенсивностей, поэтому в интерфейсе показываются измерения, а не вердикты.</li>
|
||||
<li><b>Рабочая точка порога даёт высокий recall при умеренной точности.</b> На обучающем наборе при
|
||||
пороге, подобранном по F1, модель относит к нарушениям 341 строку из 548 (≈ 62 %) при
|
||||
фактической доле нарушений 30.6 %, что согласуется с precision 0.486. Порог выбран в пользу
|
||||
пороге, подобранном по F1, модель относит к нарушениям 204 строки из 482 (≈ 42 %) при
|
||||
фактической доле нарушений 30.3 %, что согласуется с precision 0.472. Порог выбран в пользу
|
||||
полноты: пропустить непригодное исследование дороже, чем показать лишнее.</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="s18">18. План развития</h2>
|
||||
|
||||
<ul>
|
||||
<li>Разметить типы нарушений на уровне снимка и обучить мультилейбл-классификатор — это снимает
|
||||
главное ограничение (тип нарушения определяется признаками, а не моделью).</li>
|
||||
<li>Разметить типы нарушений на уровне снимка через интерфейс <code>/label</code> (раздел 11.1) и
|
||||
обучить мультилейбл-классификатор — это снимает главное ограничение (тип нарушения определяется
|
||||
признаками, а не моделью). Инструмент готов, разметка ещё не проводилась.</li>
|
||||
<li>Расширить набор до 500+ исследований: доверительные интервалы сузятся, появится возможность
|
||||
честной валидации без пересечения с обучением.</li>
|
||||
<li>Заменить признак «ширина кадра» на калибровку по метаданным аппарата, чтобы определение области
|
||||
|
|
@ -971,6 +1038,8 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
│ │ ├── inference.py пакетный инференс, определение области, визуализация
|
||||
│ │ ├── labels.py разбор имён, метки, склейка дублей, разбиение
|
||||
│ │ ├── excel_labels.py разметка снимков по экспертной таблице
|
||||
│ │ ├── manual_labels.py ручная разметка: хранение вердиктов специалиста (/label)
|
||||
│ │ ├── review_pack.py автономный HTML-пакет разметки для специалиста (без сервера)
|
||||
│ │ ├── rename_files.py приведение имён DICOM к единому виду
|
||||
│ │ ├── violations.py единый словарь типов нарушений
|
||||
│ │ ├── model_card.py карточка решения для API и интерфейса
|
||||
|
|
@ -997,12 +1066,19 @@ CPU-образ содержит <code>torch 2.8.0+cpu</code> и ни одног
|
|||
|
||||
# инференс и сервис
|
||||
./run.sh infer "dataset_hack/Для теста" results.xlsx
|
||||
./run.sh serve API и веб-интерфейс на порту 8000
|
||||
./run.sh serve API и веб-интерфейс на порту 8000; /label — ручная разметка
|
||||
python -m src.dxa.discriminator проверка вклада содержимого снимка
|
||||
|
||||
# проверки
|
||||
./run.sh test pytest (209 тестов)
|
||||
./run.sh test pytest (272 теста)
|
||||
node tests/browser/ui_check.js проверки интерфейса (нужен сервер на 127.0.0.1:8123)
|
||||
node tests/browser/ui_labeling.js проверка интерфейса ручной разметки
|
||||
PACK=review/doctor_review.html node tests/browser/review_pack.js автономный пакет (без сервера)
|
||||
|
||||
# разметка специалистом для набора целиком
|
||||
./run.sh review --out review/doctor_review.html файл-пакет для специалиста
|
||||
./run.sh review --merge review/doctor.csv \
|
||||
--out labels/labels_images_reviewed.csv наложить вердикты на разметку
|
||||
|
||||
# контейнер (чекпоинт лежит внутри образа, монтировать пути не нужно)
|
||||
docker compose up -d CPU-сервис в фоне, http://localhost:8000
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -22,11 +22,11 @@ dataset_hack/НД_для_обучения/Исследования/2.25.10386878
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.08120904010605130814050710080508,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.14130208070502001411050502150202,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.11131406091213131205130612021414,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.108537195937431169718850276671337677972/series_002_2_CR/A250479795 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.108537195937431169718850276671337677972,1.2.643.5.1.13.13.12.2.77.8252.00011402030913150507081413120310,1.2.643.5.1.13.13.12.2.77.8252.14031513011512070711151413071213,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.07121414121104070401050315140813,,1,unspecified,,1,0,0,1,table,1,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.12051512011202090502051206130907,hip_right,0,,0,0,0,1,0,table,0,,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.11051001091403121310010813110103,spine,1,artifact,1,1,0,0,0,table,0,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_03_bad.dcm,spine_03_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.08101400121500101415120401040211,,1,unspecified,,1,0,0,1,table,1,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.112621744005021908434051268014787122937/series_002_2_CR/A2504301685 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.112621744005021908434051268014787122937,1.2.643.5.1.13.13.12.2.77.8252.14150011111304110807130802031100,1.2.643.5.1.13.13.12.2.77.8252.15090515141309140806011408041204,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.03150400010605060115070904121304,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.15050814070214050107040604101305,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
|
|
@ -42,8 +42,8 @@ dataset_hack/НД_для_обучения/Исследования/2.25.12489063
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.08050506060410091114110412130504,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.04131510070001011107040403071102,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.125521310320333648427417313254965624364/series_001_2_CR/A250444126 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.125521310320333648427417313254965624364,1.2.643.5.1.13.13.12.2.77.8252.04020303131005050903141411050509,1.2.643.5.1.13.13.12.2.77.8252.06141210040207130507130606070312,spine,1,positioning,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.10031005061115110908060312000307,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.01070801081413060013111012010201,hip_left,1,rotation,1,0,1,0,0,table,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.10040807011312021210130513011200,hip_right,1,rotation;roi_incorrect,1,0,1,0,0,table,0,,перелом
|
||||
|
|
@ -53,16 +53,15 @@ dataset_hack/НД_для_обучения/Исследования/2.25.12798473
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07111115111305011108141412010801,spine,0,,0,0,0,0,0,table,0,,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128197189461989832465575162384360009377/series_001_2_CR/A2507216909 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128197189461989832465575162384360009377,1.2.643.5.1.13.13.12.2.77.8252.12090514001006040904030606011401,1.2.643.5.1.13.13.12.2.77.8252.02030508140000071310150302011113,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128630285053087246379265602913470285158/series_003_2_CR/A2504394821 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128630285053087246379265602913470285158,1.2.643.5.1.13.13.12.2.77.8252.02080810120709040103090703140106,1.2.643.5.1.13.13.12.2.77.8252.09070705131210061514041509120513,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.09150805131402040209060509150410,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.11000605051111050207041006140905,spine,1,positioning,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.129239680100193368599713239115902740628/series_003_3_CR/A250757345 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.129239680100193368599713239115902740628,1.2.643.5.1.13.13.12.2.77.8252.08111201111203050510020404121406,1.2.643.5.1.13.13.12.2.77.8252.00131503020212110600101502020700,hip_right,1,rotation,1,0,1,1,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.05100110120015150515030506140402,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.06120903051105150112061201080014,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.13151303131009131214000609090104,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.15140601101305061400021505010802,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.05020106091400040809110708040301,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.07151108041411120004040810151209,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
|
|
@ -103,7 +102,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.15638907
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.14100604010411121207140303140506,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.01041213150709070704090905040703,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.15011410150513090204040606151204,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.11050703151212091005010115120315,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.13040700151412120600060201031309,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.08140602091513140007031414030212,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
|
|
@ -160,7 +159,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.19033130
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11050911061500091304001000100608,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11100109131006120600020910050910,spine,1,axis_deviation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.10101410111513000809081215030802,hip_right,0,,0,0,0,1,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.00070615051510041500030210150312,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.02120211101306000510080011031411,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.05011012001311141515001115080104,spine,0,,0,0,0,0,0,table,0,,
|
||||
|
|
@ -177,16 +176,16 @@ dataset_hack/НД_для_обучения/Исследования/2.25.24771403
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12031014110715041000030602140501,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12130902030702050210110604020115,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.02001209000515050108060411111311,spine,1,axis_deviation;artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.01011201030601080312040805131303,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06121304010102150202081301011406,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06030606140315081407041104141012,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.06120002061108140400041203121102,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.15130815100101091501031008111015,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.13000009090006001202001212051006,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.11091010090201121300090614051311,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.15080906090913051107110915140103,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.02141512030209141106060309030501,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
|
|
@ -196,14 +195,14 @@ dataset_hack/НД_для_обучения/Исследования/2.25.29638026
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.306921081709806079165809721263236241032/series_002_2_CR/A2504381177 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.306921081709806079165809721263236241032,1.2.643.5.1.13.13.12.2.77.8252.13070707001109051012021502000705,1.2.643.5.1.13.13.12.2.77.8252.05140704131104071313121101000313,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.12090115120005000603040515131409,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.09020610121102091006070609000414,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.09030700121011131209150303151015,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.07070904150315000704031208001011,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.03121103130007121510030803050514,spine,1,axis_deviation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02000306061002040514101500000812,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.01130904120915050401031210031001,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02120204101515130306021007150210,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.338439598607961312040815816824093323492/series_002_2_CR/A2504147124 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.338439598607961312040815816824093323492,1.2.643.5.1.13.13.12.2.77.8252.09061205050201001102041514000912,1.2.643.5.1.13.13.12.2.77.8252.13110108131113110013070512051310,spine,1,artifact,1,1,0,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.05111003151314100612100700031506,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.11010912010413080807030107050600,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
|
|
@ -219,7 +218,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.39068163
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.15141302131508150312140605060212,spine,1,axis_deviation;artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.06080100090802110008000311010501,hip_left,1,rotation,1,0,1,0,0,table,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.03010404051000131408111209140108,hip_right,1,rotation,1,0,1,0,0,table,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,0,1,0,0,table,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,1,0,0,0,table,0,bad,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52532476139575422857225834315571570912/series_001_2_CR/A2504247961 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.52532476139575422857225834315571570912,1.2.643.5.1.13.13.12.2.77.8252.12150004000513030900100606011509,1.2.643.5.1.13.13.12.2.77.8252.07120809010109050202061111011110,spine,1,unspecified,1,1,0,0,0,table,0,bad,"Сколиоз, не верня разметка"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.07081506021006111207090213090701,hip_left,0,,0,0,0,0,0,table,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.06001210040802120801060507001509,hip_right,0,,0,0,0,0,0,table,0,,"L6, люмбализация"
|
||||
|
|
@ -232,8 +231,8 @@ dataset_hack/НД_для_обучения/Исследования/2.25.65954778
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.08021214010408050013070405100802,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.02091011000006010704070004091411,hip_right,1,rotation,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.01011407000709010910090115010000,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.12110509121413070408000802041201,hip_left,1,rotation,1,0,1,0,0,table,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.00031305050707070014000611130907,hip_right,1,rotation,1,0,1,0,0,table,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_02_bad.dcm,l_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.09110310111109140609041514031010,hip_left,1,rotation,1,1,0,0,0,table,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_02_bad.dcm,r_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.13090506040311041500070413151313,hip_right,1,rotation,1,1,0,0,0,table,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.07150604010711031305090702140107,spine,1,axis_deviation,1,0,1,0,0,table,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.14130302090906050506100315000611,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.02050808061207030811150709091509,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
|
|
@ -250,4 +249,4 @@ dataset_hack/НД_для_обучения/Исследования/2.25.87869906
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.04050904100201141507070306131511,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.04000607141411061507120106050309,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.08061201060114131102110802141411,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,1,0,0,0,table,0,bad,
|
||||
|
|
|
|||
|
Binary file not shown.
|
|
@ -22,7 +22,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.10386878
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.08120904010605130814050710080508,spine,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.14130208070502001411050502150202,hip_left,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.11131406091213131205130612021414,hip_right,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,1,1,0,0,expert,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.108537195937431169718850276671337677972/series_002_2_CR/A250479795 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.108537195937431169718850276671337677972,1.2.643.5.1.13.13.12.2.77.8252.00011402030913150507081413120310,1.2.643.5.1.13.13.12.2.77.8252.14031513011512070711151413071213,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.12051512011202090502051206130907,hip_right,0,,0,0,0,1,0,expert,0,,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.11051001091403121310010813110103,spine,1,artifact,1,1,0,0,0,expert,0,bad,правое бедро эндопротезирования
|
||||
|
|
@ -41,8 +41,8 @@ dataset_hack/НД_для_обучения/Исследования/2.25.12489063
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.08050506060410091114110412130504,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.04131510070001011107040403071102,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.125521310320333648427417313254965624364/series_001_2_CR/A250444126 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.125521310320333648427417313254965624364,1.2.643.5.1.13.13.12.2.77.8252.04020303131005050903141411050509,1.2.643.5.1.13.13.12.2.77.8252.06141210040207130507130606070312,spine,1,positioning,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,1,1,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.10031005061115110908060312000307,spine,0,,0,1,1,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.01070801081413060013111012010201,hip_left,1,rotation,1,0,1,0,0,expert,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.10040807011312021210130513011200,hip_right,1,rotation;roi_incorrect,1,0,1,0,0,expert,0,,перелом
|
||||
|
|
@ -50,16 +50,15 @@ dataset_hack/НД_для_обучения/Исследования/2.25.12712613
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07111115111305011108141412010801,spine,0,,0,0,0,0,0,expert,0,,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128197189461989832465575162384360009377/series_001_2_CR/A2507216909 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128197189461989832465575162384360009377,1.2.643.5.1.13.13.12.2.77.8252.12090514001006040904030606011401,1.2.643.5.1.13.13.12.2.77.8252.02030508140000071310150302011113,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128630285053087246379265602913470285158/series_003_2_CR/A2504394821 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128630285053087246379265602913470285158,1.2.643.5.1.13.13.12.2.77.8252.02080810120709040103090703140106,1.2.643.5.1.13.13.12.2.77.8252.09070705131210061514041509120513,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.09150805131402040209060509150410,hip_right,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.11000605051111050207041006140905,spine,1,positioning,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.129239680100193368599713239115902740628/series_003_3_CR/A250757345 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.129239680100193368599713239115902740628,1.2.643.5.1.13.13.12.2.77.8252.08111201111203050510020404121406,1.2.643.5.1.13.13.12.2.77.8252.00131503020212110600101502020700,hip_right,1,rotation,1,0,1,1,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.05100110120015150515030506140402,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.06120903051105150112061201080014,hip_left,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.13151303131009131214000609090104,hip_right,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,1,1,0,0,expert,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.15140601101305061400021505010802,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.05020106091400040809110708040301,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.07151108041411120004040810151209,spine,0,,0,1,1,0,0,expert,0,bad,
|
||||
|
|
@ -100,7 +99,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.15638907
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.14100604010411121207140303140506,hip_left,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.01041213150709070704090905040703,hip_right,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.15011410150513090204040606151204,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,1,1,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.11050703151212091005010115120315,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.13040700151412120600060201031309,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.08140602091513140007031414030212,spine,1,artifact,1,1,0,0,0,expert,0,bad,
|
||||
|
|
@ -157,7 +156,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.19033130
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11050911061500091304001000100608,hip_right,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11100109131006120600020910050910,spine,1,axis_deviation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.10101410111513000809081215030802,hip_right,0,,0,0,0,1,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.00070615051510041500030210150312,hip_left,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.02120211101306000510080011031411,hip_right,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.05011012001311141515001115080104,spine,0,,0,0,0,0,0,expert,0,,
|
||||
|
|
@ -174,16 +173,16 @@ dataset_hack/НД_для_обучения/Исследования/2.25.24771403
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12031014110715041000030602140501,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12130902030702050210110604020115,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.02001209000515050108060411111311,spine,1,axis_deviation;artifact,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,1,1,0,0,expert,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.01011201030601080312040805131303,hip_left,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06121304010102150202081301011406,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06030606140315081407041104141012,spine,0,,0,1,1,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.06120002061108140400041203121102,hip_left,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.15130815100101091501031008111015,hip_right,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.13000009090006001202001212051006,spine,0,,0,1,1,0,0,expert,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,1,1,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.11091010090201121300090614051311,hip_left,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.15080906090913051107110915140103,hip_right,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.02141512030209141106060309030501,spine,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
|
|
@ -193,14 +192,14 @@ dataset_hack/НД_для_обучения/Исследования/2.25.29638026
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.306921081709806079165809721263236241032/series_002_2_CR/A2504381177 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.306921081709806079165809721263236241032,1.2.643.5.1.13.13.12.2.77.8252.13070707001109051012021502000705,1.2.643.5.1.13.13.12.2.77.8252.05140704131104071313121101000313,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.12090115120005000603040515131409,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.09020610121102091006070609000414,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.09030700121011131209150303151015,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.07070904150315000704031208001011,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.03121103130007121510030803050514,spine,1,axis_deviation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02000306061002040514101500000812,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.01130904120915050401031210031001,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02120204101515130306021007150210,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,1,1,0,0,expert,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.338439598607961312040815816824093323492/series_002_2_CR/A2504147124 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.338439598607961312040815816824093323492,1.2.643.5.1.13.13.12.2.77.8252.09061205050201001102041514000912,1.2.643.5.1.13.13.12.2.77.8252.13110108131113110013070512051310,spine,1,artifact,1,1,0,0,0,expert,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.05111003151314100612100700031506,hip_left,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.11010912010413080807030107050600,hip_right,0,,0,0,0,0,0,expert,0,,сколиоз
|
||||
|
|
@ -216,7 +215,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.39068163
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.15141302131508150312140605060212,spine,1,axis_deviation;artifact,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.06080100090802110008000311010501,hip_left,1,rotation,1,0,1,0,0,expert,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.03010404051000131408111209140108,hip_right,1,rotation,1,0,1,0,0,expert,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,0,1,0,0,expert,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,1,0,0,0,expert,0,bad,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52532476139575422857225834315571570912/series_001_2_CR/A2504247961 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.52532476139575422857225834315571570912,1.2.643.5.1.13.13.12.2.77.8252.12150004000513030900100606011509,1.2.643.5.1.13.13.12.2.77.8252.07120809010109050202061111011110,spine,1,unspecified,1,1,0,0,0,expert,0,bad,"Сколиоз, не верня разметка"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.07081506021006111207090213090701,hip_left,0,,0,0,0,0,0,expert,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.06001210040802120801060507001509,hip_right,0,,0,0,0,0,0,expert,0,,"L6, люмбализация"
|
||||
|
|
@ -229,8 +228,8 @@ dataset_hack/НД_для_обучения/Исследования/2.25.65954778
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.08021214010408050013070405100802,hip_left,1,rotation,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.02091011000006010704070004091411,hip_right,1,rotation,1,1,0,0,0,expert,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.01011407000709010910090115010000,spine,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.12110509121413070408000802041201,hip_left,1,rotation,1,0,1,0,0,expert,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.00031305050707070014000611130907,hip_right,1,rotation,1,0,1,0,0,expert,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_02_bad.dcm,l_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.09110310111109140609041514031010,hip_left,1,rotation,1,1,0,0,0,expert,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_02_bad.dcm,r_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.13090506040311041500070413151313,hip_right,1,rotation,1,1,0,0,0,expert,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.07150604010711031305090702140107,spine,1,axis_deviation,1,0,1,0,0,expert,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.14130302090906050506100315000611,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.02050808061207030811150709091509,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
|
|
@ -247,4 +246,4 @@ dataset_hack/НД_для_обучения/Исследования/2.25.87869906
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.04050904100201141507070306131511,spine,1,artifact,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.04000607141411061507120106050309,hip_left,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.08061201060114131102110802141411,hip_right,0,,0,0,0,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,0,1,0,0,expert,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,1,0,0,0,expert,0,bad,
|
||||
|
|
|
|||
|
Binary file not shown.
|
|
@ -22,11 +22,11 @@ dataset_hack/НД_для_обучения/Исследования/2.25.10386878
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.08120904010605130814050710080508,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.14130208070502001411050502150202,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.11131406091213131205130612021414,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.108537195937431169718850276671337677972/series_002_2_CR/A250479795 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.108537195937431169718850276671337677972,1.2.643.5.1.13.13.12.2.77.8252.00011402030913150507081413120310,1.2.643.5.1.13.13.12.2.77.8252.14031513011512070711151413071213,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.07121414121104070401050315140813,,1,unspecified,,1,0,0,1,table,1,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.12051512011202090502051206130907,hip_right,0,,0,0,0,1,0,table,0,,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.11051001091403121310010813110103,spine,1,artifact,1,1,0,0,0,table,0,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_03_bad.dcm,spine_03_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.08101400121500101415120401040211,,1,unspecified,,1,0,0,1,table,1,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.112621744005021908434051268014787122937/series_002_2_CR/A2504301685 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.112621744005021908434051268014787122937,1.2.643.5.1.13.13.12.2.77.8252.14150011111304110807130802031100,1.2.643.5.1.13.13.12.2.77.8252.15090515141309140806011408041204,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.03150400010605060115070904121304,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.15050814070214050107040604101305,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
|
|
@ -42,8 +42,8 @@ dataset_hack/НД_для_обучения/Исследования/2.25.12489063
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.08050506060410091114110412130504,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.04131510070001011107040403071102,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.125521310320333648427417313254965624364/series_001_2_CR/A250444126 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.125521310320333648427417313254965624364,1.2.643.5.1.13.13.12.2.77.8252.04020303131005050903141411050509,1.2.643.5.1.13.13.12.2.77.8252.06141210040207130507130606070312,spine,1,positioning,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.10031005061115110908060312000307,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.01070801081413060013111012010201,hip_left,1,rotation,1,0,1,0,0,table,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.10040807011312021210130513011200,hip_right,1,rotation;roi_incorrect,1,0,1,0,0,table,0,,перелом
|
||||
|
|
@ -53,16 +53,15 @@ dataset_hack/НД_для_обучения/Исследования/2.25.12798473
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07111115111305011108141412010801,spine,0,,0,0,0,0,0,table,0,,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128197189461989832465575162384360009377/series_001_2_CR/A2507216909 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128197189461989832465575162384360009377,1.2.643.5.1.13.13.12.2.77.8252.12090514001006040904030606011401,1.2.643.5.1.13.13.12.2.77.8252.02030508140000071310150302011113,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128630285053087246379265602913470285158/series_003_2_CR/A2504394821 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128630285053087246379265602913470285158,1.2.643.5.1.13.13.12.2.77.8252.02080810120709040103090703140106,1.2.643.5.1.13.13.12.2.77.8252.09070705131210061514041509120513,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.09150805131402040209060509150410,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.11000605051111050207041006140905,spine,1,positioning,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.129239680100193368599713239115902740628/series_003_3_CR/A250757345 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.129239680100193368599713239115902740628,1.2.643.5.1.13.13.12.2.77.8252.08111201111203050510020404121406,1.2.643.5.1.13.13.12.2.77.8252.00131503020212110600101502020700,hip_right,1,rotation,1,0,1,1,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.05100110120015150515030506140402,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.06120903051105150112061201080014,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.13151303131009131214000609090104,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.15140601101305061400021505010802,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.05020106091400040809110708040301,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.07151108041411120004040810151209,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
|
|
@ -103,7 +102,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.15638907
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.14100604010411121207140303140506,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.01041213150709070704090905040703,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.15011410150513090204040606151204,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.11050703151212091005010115120315,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.13040700151412120600060201031309,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.08140602091513140007031414030212,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
|
|
@ -160,7 +159,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.19033130
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11050911061500091304001000100608,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11100109131006120600020910050910,spine,1,axis_deviation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.10101410111513000809081215030802,hip_right,0,,0,0,0,1,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.00070615051510041500030210150312,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.02120211101306000510080011031411,hip_right,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.05011012001311141515001115080104,spine,0,,0,0,0,0,0,table,0,,
|
||||
|
|
@ -177,16 +176,16 @@ dataset_hack/НД_для_обучения/Исследования/2.25.24771403
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12031014110715041000030602140501,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12130902030702050210110604020115,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.02001209000515050108060411111311,spine,1,axis_deviation;artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.01011201030601080312040805131303,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06121304010102150202081301011406,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06030606140315081407041104141012,spine,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.06120002061108140400041203121102,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.15130815100101091501031008111015,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.13000009090006001202001212051006,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,1,1,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.11091010090201121300090614051311,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.15080906090913051107110915140103,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.02141512030209141106060309030501,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
|
|
@ -196,14 +195,14 @@ dataset_hack/НД_для_обучения/Исследования/2.25.29638026
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.306921081709806079165809721263236241032/series_002_2_CR/A2504381177 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.306921081709806079165809721263236241032,1.2.643.5.1.13.13.12.2.77.8252.13070707001109051012021502000705,1.2.643.5.1.13.13.12.2.77.8252.05140704131104071313121101000313,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.12090115120005000603040515131409,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.09020610121102091006070609000414,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.09030700121011131209150303151015,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.07070904150315000704031208001011,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.03121103130007121510030803050514,spine,1,axis_deviation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02000306061002040514101500000812,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.01130904120915050401031210031001,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02120204101515130306021007150210,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,1,1,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.338439598607961312040815816824093323492/series_002_2_CR/A2504147124 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.338439598607961312040815816824093323492,1.2.643.5.1.13.13.12.2.77.8252.09061205050201001102041514000912,1.2.643.5.1.13.13.12.2.77.8252.13110108131113110013070512051310,spine,1,artifact,1,1,0,0,0,table,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.05111003151314100612100700031506,hip_left,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.11010912010413080807030107050600,hip_right,0,,0,0,0,0,0,table,0,,сколиоз
|
||||
|
|
@ -219,7 +218,7 @@ dataset_hack/НД_для_обучения/Исследования/2.25.39068163
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.15141302131508150312140605060212,spine,1,axis_deviation;artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.06080100090802110008000311010501,hip_left,1,rotation,1,0,1,0,0,table,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.03010404051000131408111209140108,hip_right,1,rotation,1,0,1,0,0,table,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,0,1,0,0,table,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,1,0,0,0,table,0,bad,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52532476139575422857225834315571570912/series_001_2_CR/A2504247961 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.52532476139575422857225834315571570912,1.2.643.5.1.13.13.12.2.77.8252.12150004000513030900100606011509,1.2.643.5.1.13.13.12.2.77.8252.07120809010109050202061111011110,spine,1,unspecified,1,1,0,0,0,table,0,bad,"Сколиоз, не верня разметка"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.07081506021006111207090213090701,hip_left,0,,0,0,0,0,0,table,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.06001210040802120801060507001509,hip_right,0,,0,0,0,0,0,table,0,,"L6, люмбализация"
|
||||
|
|
@ -232,8 +231,8 @@ dataset_hack/НД_для_обучения/Исследования/2.25.65954778
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.08021214010408050013070405100802,hip_left,1,rotation,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.02091011000006010704070004091411,hip_right,1,rotation,1,1,0,0,0,table,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.01011407000709010910090115010000,spine,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.12110509121413070408000802041201,hip_left,1,rotation,1,0,1,0,0,table,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.00031305050707070014000611130907,hip_right,1,rotation,1,0,1,0,0,table,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_02_bad.dcm,l_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.09110310111109140609041514031010,hip_left,1,rotation,1,1,0,0,0,table,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_02_bad.dcm,r_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.13090506040311041500070413151313,hip_right,1,rotation,1,1,0,0,0,table,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.07150604010711031305090702140107,spine,1,axis_deviation,1,0,1,0,0,table,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.14130302090906050506100315000611,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.02050808061207030811150709091509,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
|
|
@ -250,4 +249,4 @@ dataset_hack/НД_для_обучения/Исследования/2.25.87869906
|
|||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.04050904100201141507070306131511,spine,1,artifact,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.04000607141411061507120106050309,hip_left,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.08061201060114131102110802141411,hip_right,0,,0,0,0,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,0,1,0,0,table,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,1,0,0,0,table,0,bad,
|
||||
|
|
|
|||
|
Binary file not shown.
|
|
@ -1,253 +1,252 @@
|
|||
path_to_image,file,study,study_uid,image_uid,anatomical_region,quality_class,violation_type,quality_from_excel,quality_from_filename,sources_conflict,laterality_mirrored,region_ambiguous,filename_marker,expert_comment
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403090444/series_004_3_CR/DXA/CR DXA/l_hip_01_good.dcm,l_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403090444,1.2.643.5.1.13.13.12.2.77.8252.08110703091310150605090907130304,1.2.643.5.1.13.13.12.2.77.8252.03030811151201151502050615010000,hip_left,1,rotation,1,0,1,0,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403090444/series_004_3_CR/DXA/CR DXA/r_hip_01_good.dcm,r_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403090444,1.2.643.5.1.13.13.12.2.77.8252.08110703091310150605090907130304,1.2.643.5.1.13.13.12.2.77.8252.06000812101106141213041404150112,hip_right,0,,0,0,0,0,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403090444/series_004_3_CR/DXA/CR DXA/spine_01_good.dcm,spine_01_good.dcm,1.2.840.113619.2.110.512719.20250403090444,1.2.643.5.1.13.13.12.2.77.8252.08110703091310150605090907130304,1.2.643.5.1.13.13.12.2.77.8252.14031015091008031013040205110915,spine,0,,0,0,0,0,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403092052/series_003_3_CR/DXA/CR DXA/l_hip_01_good.dcm,l_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403092052,1.2.643.5.1.13.13.12.2.77.8252.06000805130607060714150602050114,1.2.643.5.1.13.13.12.2.77.8252.06140010030611061314081200121305,hip_left,0,,0,0,0,0,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403092052/series_003_3_CR/DXA/CR DXA/r_hip_01_good.dcm,r_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403092052,1.2.643.5.1.13.13.12.2.77.8252.06000805130607060714150602050114,1.2.643.5.1.13.13.12.2.77.8252.09040712010609120601031410140610,hip_right,0,,0,0,0,0,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403092052/series_003_3_CR/DXA/CR DXA/spine_01_good.dcm,spine_01_good.dcm,1.2.840.113619.2.110.512719.20250403092052,1.2.643.5.1.13.13.12.2.77.8252.06000805130607060714150602050114,1.2.643.5.1.13.13.12.2.77.8252.09050515110402090102050206010406,spine,0,,0,0,0,0,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250407113211/series_001_2_CR/DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,1.2.840.113619.2.110.512719.20250407113211,1.2.643.5.1.13.13.12.2.77.8252.02060902040212120608040605100100,1.2.643.5.1.13.13.12.2.77.8252.10011302120900111505101501141402,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250407113211/series_001_2_CR/DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,1.2.840.113619.2.110.512719.20250407113211,1.2.643.5.1.13.13.12.2.77.8252.02060902040212120608040605100100,1.2.643.5.1.13.13.12.2.77.8252.07140808121311040315101301051200,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250407113211/series_001_2_CR/DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,1.2.840.113619.2.110.512719.20250407113211,1.2.643.5.1.13.13.12.2.77.8252.02060902040212120608040605100100,1.2.643.5.1.13.13.12.2.77.8252.13101207101114060008151413130115,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.10245777060263212829333021434108890537/series_003_2_CR/A2504412435 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.10245777060263212829333021434108890537,1.2.643.5.1.13.13.12.2.77.8252.13060115000811100715140205030915,1.2.643.5.1.13.13.12.2.77.8252.07000215121313030213041009101409,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.10245777060263212829333021434108890537/series_003_2_CR/A2504412435 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.10245777060263212829333021434108890537,1.2.643.5.1.13.13.12.2.77.8252.13060115000811100715140205030915,1.2.643.5.1.13.13.12.2.77.8252.03081500040505121009070211080902,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.10245777060263212829333021434108890537/series_003_2_CR/A2504412435 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.10245777060263212829333021434108890537,1.2.643.5.1.13.13.12.2.77.8252.13060115000811100715140205030915,1.2.643.5.1.13.13.12.2.77.8252.14131410040814100713070401091213,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102755089973625799055786462646268820450/series_002_2_CR/A2504257770 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.102755089973625799055786462646268820450,1.2.643.5.1.13.13.12.2.77.8252.05091110020805070808081311010412,1.2.643.5.1.13.13.12.2.77.8252.10100907120107030904131503081506,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102755089973625799055786462646268820450/series_002_2_CR/A2504257770 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.102755089973625799055786462646268820450,1.2.643.5.1.13.13.12.2.77.8252.05091110020805070808081311010412,1.2.643.5.1.13.13.12.2.77.8252.01140903011212140408111315130511,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102755089973625799055786462646268820450/series_002_2_CR/A2504257770 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.102755089973625799055786462646268820450,1.2.643.5.1.13.13.12.2.77.8252.05091110020805070808081311010412,1.2.643.5.1.13.13.12.2.77.8252.10030113050111051002020402141304,spine,1,axis_deviation,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102965897799404973225419898683246248872/series_001_2_CR/A250726353 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.102965897799404973225419898683246248872,1.2.643.5.1.13.13.12.2.77.8252.02150001030902110114090106081007,1.2.643.5.1.13.13.12.2.77.8252.06050309100102041203101101110913,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102965897799404973225419898683246248872/series_001_2_CR/A250726353 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.102965897799404973225419898683246248872,1.2.643.5.1.13.13.12.2.77.8252.02150001030902110114090106081007,1.2.643.5.1.13.13.12.2.77.8252.10140807011010031112140700150015,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102965897799404973225419898683246248872/series_001_2_CR/A250726353 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.102965897799404973225419898683246248872,1.2.643.5.1.13.13.12.2.77.8252.02150001030902110114090106081007,1.2.643.5.1.13.13.12.2.77.8252.11011413051206050400150606100110,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.12051209130410130502141403101414,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.15031208100010080909150509041308,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.08120904010605130814050710080508,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.14130208070502001411050502150202,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.11131406091213131205130612021414,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.108537195937431169718850276671337677972/series_002_2_CR/A250479795 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.108537195937431169718850276671337677972,1.2.643.5.1.13.13.12.2.77.8252.00011402030913150507081413120310,1.2.643.5.1.13.13.12.2.77.8252.14031513011512070711151413071213,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.12051512011202090502051206130907,hip_right,0,,0,0,0,1,0,,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.11051001091403121310010813110103,spine,1,artifact,1,1,0,0,0,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_03_bad.dcm,spine_03_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.08101400121500101415120401040211,,1,unspecified,,1,0,0,1,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.112621744005021908434051268014787122937/series_002_2_CR/A2504301685 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.112621744005021908434051268014787122937,1.2.643.5.1.13.13.12.2.77.8252.14150011111304110807130802031100,1.2.643.5.1.13.13.12.2.77.8252.15090515141309140806011408041204,spine,1,unspecified,0,1,1,0,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.03150400010605060115070904121304,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.15050814070214050107040604101305,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.10001500010311100907131007040004,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.116822802042655971810859435524105064465/series_003_2_CR/A2507273296 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.116822802042655971810859435524105064465,1.2.643.5.1.13.13.12.2.77.8252.09001101031503060803041311070312,1.2.643.5.1.13.13.12.2.77.8252.13011301091003020814061203020304,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.116822802042655971810859435524105064465/series_003_2_CR/A2507273296 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.116822802042655971810859435524105064465,1.2.643.5.1.13.13.12.2.77.8252.09001101031503060803041311070312,1.2.643.5.1.13.13.12.2.77.8252.01010713081306120510130101121412,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.116822802042655971810859435524105064465/series_003_2_CR/A2507273296 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.116822802042655971810859435524105064465,1.2.643.5.1.13.13.12.2.77.8252.09001101031503060803041311070312,1.2.643.5.1.13.13.12.2.77.8252.05150512091506110304120408070606,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.122446767306607067205618235949445789306/series_001_2_CR/A2504255080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.122446767306607067205618235949445789306,1.2.643.5.1.13.13.12.2.77.8252.00101409100812000205071213151011,1.2.643.5.1.13.13.12.2.77.8252.02101009080308000015051512140806,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.122446767306607067205618235949445789306/series_001_2_CR/A2504255080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.122446767306607067205618235949445789306,1.2.643.5.1.13.13.12.2.77.8252.00101409100812000205071213151011,1.2.643.5.1.13.13.12.2.77.8252.02091106060004131215091000000909,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.122446767306607067205618235949445789306/series_001_2_CR/A2504255080 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.122446767306607067205618235949445789306,1.2.643.5.1.13.13.12.2.77.8252.00101409100812000205071213151011,1.2.643.5.1.13.13.12.2.77.8252.15060100040008041103060904131005,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.123175695355749859846173904788591707879/series_001_2_CR/A250722449 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.123175695355749859846173904788591707879,1.2.643.5.1.13.13.12.2.77.8252.11130601031507131510140912150209,1.2.643.5.1.13.13.12.2.77.8252.12031311070507060813050800031313,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.10081312010805021201100507060411,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.08050506060410091114110412130504,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.04131510070001011107040403071102,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.125521310320333648427417313254965624364/series_001_2_CR/A250444126 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.125521310320333648427417313254965624364,1.2.643.5.1.13.13.12.2.77.8252.04020303131005050903141411050509,1.2.643.5.1.13.13.12.2.77.8252.06141210040207130507130606070312,spine,1,positioning,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.10031005061115110908060312000307,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.01070801081413060013111012010201,hip_left,1,rotation,1,0,1,0,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.10040807011312021210130513011200,hip_right,1,rotation;roi_incorrect,1,0,1,0,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.13130511100900071404010502130909,spine,1,axis_deviation,1,1,0,0,0,bad,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07050602130910101513020700010509,hip_left,1,unspecified,,1,0,0,0,bad,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.02011409120209130807021302101100,hip_right,1,unspecified,,1,0,0,0,bad,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07111115111305011108141412010801,spine,0,,0,0,0,0,0,,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128197189461989832465575162384360009377/series_001_2_CR/A2507216909 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128197189461989832465575162384360009377,1.2.643.5.1.13.13.12.2.77.8252.12090514001006040904030606011401,1.2.643.5.1.13.13.12.2.77.8252.02030508140000071310150302011113,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128630285053087246379265602913470285158/series_003_2_CR/A2504394821 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128630285053087246379265602913470285158,1.2.643.5.1.13.13.12.2.77.8252.02080810120709040103090703140106,1.2.643.5.1.13.13.12.2.77.8252.09070705131210061514041509120513,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.09150805131402040209060509150410,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.11000605051111050207041006140905,spine,1,positioning,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.129239680100193368599713239115902740628/series_003_3_CR/A250757345 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.129239680100193368599713239115902740628,1.2.643.5.1.13.13.12.2.77.8252.08111201111203050510020404121406,1.2.643.5.1.13.13.12.2.77.8252.00131503020212110600101502020700,hip_right,1,rotation,1,0,1,1,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.05100110120015150515030506140402,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.06120903051105150112061201080014,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.13151303131009131214000609090104,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.15140601101305061400021505010802,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.05020106091400040809110708040301,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.07151108041411120004040810151209,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13325817932854000792938662637654885530/series_002_2_CR/A2507365486 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13325817932854000792938662637654885530,1.2.643.5.1.13.13.12.2.77.8252.01011312130808040910091102031113,1.2.643.5.1.13.13.12.2.77.8252.11020707081006150000011408140609,hip_left,1,roi_incorrect,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13325817932854000792938662637654885530/series_002_2_CR/A2507365486 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13325817932854000792938662637654885530,1.2.643.5.1.13.13.12.2.77.8252.01011312130808040910091102031113,1.2.643.5.1.13.13.12.2.77.8252.04080409110008071309041404000111,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13325817932854000792938662637654885530/series_002_2_CR/A2507365486 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13325817932854000792938662637654885530,1.2.643.5.1.13.13.12.2.77.8252.01011312130808040910091102031113,1.2.643.5.1.13.13.12.2.77.8252.02090003020511130407030106110206,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.134456506307367483341018281460841912845/series_002_2_CR/A2507120612 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.134456506307367483341018281460841912845,1.2.643.5.1.13.13.12.2.77.8252.14001106061015010402061009020003,1.2.643.5.1.13.13.12.2.77.8252.14121200111500000012151207021305,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.134456506307367483341018281460841912845/series_002_2_CR/A2507120612 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.134456506307367483341018281460841912845,1.2.643.5.1.13.13.12.2.77.8252.14001106061015010402061009020003,1.2.643.5.1.13.13.12.2.77.8252.04040803080402061202041005000304,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.134456506307367483341018281460841912845/series_002_2_CR/A2507120612 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.134456506307367483341018281460841912845,1.2.643.5.1.13.13.12.2.77.8252.14001106061015010402061009020003,1.2.643.5.1.13.13.12.2.77.8252.13090607110001000310151006050113,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.135241889065705954191821710363605596815/series_003_3_CR/A250715060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.135241889065705954191821710363605596815,1.2.643.5.1.13.13.12.2.77.8252.02111204140006020215081404050209,1.2.643.5.1.13.13.12.2.77.8252.04060811050000140014040410080212,hip_right,0,,0,0,0,1,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.135241889065705954191821710363605596815/series_003_3_CR/A250715060 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.135241889065705954191821710363605596815,1.2.643.5.1.13.13.12.2.77.8252.02111204140006020215081404050209,1.2.643.5.1.13.13.12.2.77.8252.12060607091105150404131215110908,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13566237352084812982996047541944701548/series_002_2_CR/A2504268931 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13566237352084812982996047541944701548,1.2.643.5.1.13.13.12.2.77.8252.02110607061101140709130908071405,1.2.643.5.1.13.13.12.2.77.8252.09030712140506070904071003000708,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137344827330550141320158285144101816664/series_003_3_CR/A2507146630 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.137344827330550141320158285144101816664,1.2.643.5.1.13.13.12.2.77.8252.07080911030405120513131308130103,1.2.643.5.1.13.13.12.2.77.8252.03131510081105080011060404010511,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137344827330550141320158285144101816664/series_003_3_CR/A2507146630 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.137344827330550141320158285144101816664,1.2.643.5.1.13.13.12.2.77.8252.07080911030405120513131308130103,1.2.643.5.1.13.13.12.2.77.8252.14140312010015010504081306061203,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137344827330550141320158285144101816664/series_003_3_CR/A2507146630 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.137344827330550141320158285144101816664,1.2.643.5.1.13.13.12.2.77.8252.07080911030405120513131308130103,1.2.643.5.1.13.13.12.2.77.8252.02050314081501100100131400110412,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137675513852774974135210999345676405116/series_001_2_CR/A2504106597 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.137675513852774974135210999345676405116,1.2.643.5.1.13.13.12.2.77.8252.00091501080806120506120114090107,1.2.643.5.1.13.13.12.2.77.8252.05060902130204131205041207051405,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13983650679559142983913935144968795415/series_003_2_CR/A2504335111 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13983650679559142983913935144968795415,1.2.643.5.1.13.13.12.2.77.8252.04111012020210100809111310020901,1.2.643.5.1.13.13.12.2.77.8252.02030711120805150008090200030710,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13983650679559142983913935144968795415/series_003_2_CR/A2504335111 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13983650679559142983913935144968795415,1.2.643.5.1.13.13.12.2.77.8252.04111012020210100809111310020901,1.2.643.5.1.13.13.12.2.77.8252.05100908130706051511060907050202,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13983650679559142983913935144968795415/series_003_2_CR/A2504335111 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13983650679559142983913935144968795415,1.2.643.5.1.13.13.12.2.77.8252.04111012020210100809111310020901,1.2.643.5.1.13.13.12.2.77.8252.01100509051301061200120505020711,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.144941557565802351596730914409170713112/series_001_2_CR/A250728979 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.144941557565802351596730914409170713112,1.2.643.5.1.13.13.12.2.77.8252.06041008131200110706010301000604,1.2.643.5.1.13.13.12.2.77.8252.14070202101304120203120502100808,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.144941557565802351596730914409170713112/series_001_2_CR/A250728979 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.144941557565802351596730914409170713112,1.2.643.5.1.13.13.12.2.77.8252.06041008131200110706010301000604,1.2.643.5.1.13.13.12.2.77.8252.01100715050305071000110707040014,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.144941557565802351596730914409170713112/series_001_2_CR/A250728979 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.144941557565802351596730914409170713112,1.2.643.5.1.13.13.12.2.77.8252.06041008131200110706010301000604,1.2.643.5.1.13.13.12.2.77.8252.14021109030605071205090308080911,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.145848300160680194368420189079847088556/series_002_2_CR/A2504248615 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.145848300160680194368420189079847088556,1.2.643.5.1.13.13.12.2.77.8252.00020104100613061304040514090111,1.2.643.5.1.13.13.12.2.77.8252.06130104100900080002100912090901,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.145848300160680194368420189079847088556/series_002_2_CR/A2504248615 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.145848300160680194368420189079847088556,1.2.643.5.1.13.13.12.2.77.8252.00020104100613061304040514090111,1.2.643.5.1.13.13.12.2.77.8252.09091111090903031309150614110215,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.145848300160680194368420189079847088556/series_002_2_CR/A2504248615 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.145848300160680194368420189079847088556,1.2.643.5.1.13.13.12.2.77.8252.00020104100613061304040514090111,1.2.643.5.1.13.13.12.2.77.8252.07040802010906150312000007110303,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.151186844055172005615813066162721550889/series_002_2_CR/A250436130 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.151186844055172005615813066162721550889,1.2.643.5.1.13.13.12.2.77.8252.02060202021413001406000512080208,1.2.643.5.1.13.13.12.2.77.8252.07071507091013150605060411110414,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.151186844055172005615813066162721550889/series_002_2_CR/A250436130 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.151186844055172005615813066162721550889,1.2.643.5.1.13.13.12.2.77.8252.02060202021413001406000512080208,1.2.643.5.1.13.13.12.2.77.8252.06120514140811101106020900110711,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.151186844055172005615813066162721550889/series_002_2_CR/A250436130 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.151186844055172005615813066162721550889,1.2.643.5.1.13.13.12.2.77.8252.02060202021413001406000512080208,1.2.643.5.1.13.13.12.2.77.8252.07051313070907070603030815070904,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156021661584944120526934974594604520993/series_003_2_CR/A2507142228 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.156021661584944120526934974594604520993,1.2.643.5.1.13.13.12.2.77.8252.07100203071411091300120005090303,1.2.643.5.1.13.13.12.2.77.8252.12020806150405080200131300151004,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156021661584944120526934974594604520993/series_003_2_CR/A2507142228 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.156021661584944120526934974594604520993,1.2.643.5.1.13.13.12.2.77.8252.07100203071411091300120005090303,1.2.643.5.1.13.13.12.2.77.8252.09091502110711081102050610090100,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156021661584944120526934974594604520993/series_003_2_CR/A2507142228 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.156021661584944120526934974594604520993,1.2.643.5.1.13.13.12.2.77.8252.07100203071411091300120005090303,1.2.643.5.1.13.13.12.2.77.8252.09130714090405151215050914040809,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156375884487675936513403083218009333856/series_003_2_CR/A250727121 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.156375884487675936513403083218009333856,1.2.643.5.1.13.13.12.2.77.8252.03010905090814080711141406121501,1.2.643.5.1.13.13.12.2.77.8252.00010208150107110206110212130810,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156375884487675936513403083218009333856/series_003_2_CR/A250727121 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.156375884487675936513403083218009333856,1.2.643.5.1.13.13.12.2.77.8252.03010905090814080711141406121501,1.2.643.5.1.13.13.12.2.77.8252.04001402031200081204010009090110,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156375884487675936513403083218009333856/series_003_2_CR/A250727121 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.156375884487675936513403083218009333856,1.2.643.5.1.13.13.12.2.77.8252.03010905090814080711141406121501,1.2.643.5.1.13.13.12.2.77.8252.07090311111312140315080706100515,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156389075510671877606923458507011517218/series_001_2_CR/A2507389755 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.156389075510671877606923458507011517218,1.2.643.5.1.13.13.12.2.77.8252.14051001011001020103110813110612,1.2.643.5.1.13.13.12.2.77.8252.12101514000107101207120412120213,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156389075510671877606923458507011517218/series_001_2_CR/A2507389755 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.156389075510671877606923458507011517218,1.2.643.5.1.13.13.12.2.77.8252.14051001011001020103110813110612,1.2.643.5.1.13.13.12.2.77.8252.05051100060005040907000403081502,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156389075510671877606923458507011517218/series_001_2_CR/A2507389755 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.156389075510671877606923458507011517218,1.2.643.5.1.13.13.12.2.77.8252.14051001011001020103110813110612,1.2.643.5.1.13.13.12.2.77.8252.10040508121311001415130412050515,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.14100604010411121207140303140506,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.01041213150709070704090905040703,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.15011410150513090204040606151204,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.11050703151212091005010115120315,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.13040700151412120600060201031309,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.08140602091513140007031414030212,spine,1,artifact,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.159930383074323525630608416881201447861/series_002_2_CR/A2507139428 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.159930383074323525630608416881201447861,1.2.643.5.1.13.13.12.2.77.8252.05080007010908151412021401130712,1.2.643.5.1.13.13.12.2.77.8252.03050413050004110015050414021412,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.164566280810634620154538016595892212884/series_001_2_CR/A2504291878 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.164566280810634620154538016595892212884,1.2.643.5.1.13.13.12.2.77.8252.11031305020803120210110303010607,1.2.643.5.1.13.13.12.2.77.8252.05080909100510090906081209130901,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.164566280810634620154538016595892212884/series_001_2_CR/A2504291878 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.164566280810634620154538016595892212884,1.2.643.5.1.13.13.12.2.77.8252.11031305020803120210110303010607,1.2.643.5.1.13.13.12.2.77.8252.00071210060602011311010906021407,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.164566280810634620154538016595892212884/series_001_2_CR/A2504291878 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.164566280810634620154538016595892212884,1.2.643.5.1.13.13.12.2.77.8252.11031305020803120210110303010607,1.2.643.5.1.13.13.12.2.77.8252.02030112081401101404040904010405,spine,1,positioning,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165091430504580219034019815337441064349/series_001_2_CR/A2504415443 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.165091430504580219034019815337441064349,1.2.643.5.1.13.13.12.2.77.8252.07040007120602101304050600010708,1.2.643.5.1.13.13.12.2.77.8252.14100208080000030010140812001111,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165091430504580219034019815337441064349/series_001_2_CR/A2504415443 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.165091430504580219034019815337441064349,1.2.643.5.1.13.13.12.2.77.8252.07040007120602101304050600010708,1.2.643.5.1.13.13.12.2.77.8252.12140710150813060013011403140807,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165091430504580219034019815337441064349/series_001_2_CR/A2504415443 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.165091430504580219034019815337441064349,1.2.643.5.1.13.13.12.2.77.8252.07040007120602101304050600010708,1.2.643.5.1.13.13.12.2.77.8252.01120104060301100213100004141203,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165355673991587715046346525964554729786/series_003_3_CR/A2506448267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.165355673991587715046346525964554729786,1.2.643.5.1.13.13.12.2.77.8252.12060501010302051215051203010600,1.2.643.5.1.13.13.12.2.77.8252.03030806061309020808141008071213,hip_right,0,,0,0,0,1,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165355673991587715046346525964554729786/series_003_3_CR/A2506448267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.165355673991587715046346525964554729786,1.2.643.5.1.13.13.12.2.77.8252.12060501010302051215051203010600,1.2.643.5.1.13.13.12.2.77.8252.05130006080703150808130311150104,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.167344201679287285499405412654740659745/series_003_2_CR/A2504249537 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.167344201679287285499405412654740659745,1.2.643.5.1.13.13.12.2.77.8252.11061310061408070513110011010800,1.2.643.5.1.13.13.12.2.77.8252.05050004021105041108010100020012,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.167344201679287285499405412654740659745/series_003_2_CR/A2504249537 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.167344201679287285499405412654740659745,1.2.643.5.1.13.13.12.2.77.8252.11061310061408070513110011010800,1.2.643.5.1.13.13.12.2.77.8252.03020203090713120707041512070302,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.167344201679287285499405412654740659745/series_003_2_CR/A2504249537 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.167344201679287285499405412654740659745,1.2.643.5.1.13.13.12.2.77.8252.11061310061408070513110011010800,1.2.643.5.1.13.13.12.2.77.8252.06020510071406141308051102110806,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.16773626720107440979805052259711419763/series_004_2_CR/A2507537392 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.16773626720107440979805052259711419763,1.2.643.5.1.13.13.12.2.77.8252.09131109110213080611001502040813,1.2.643.5.1.13.13.12.2.77.8252.15000110101510080415120006131402,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.16773626720107440979805052259711419763/series_004_2_CR/A2507537392 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.16773626720107440979805052259711419763,1.2.643.5.1.13.13.12.2.77.8252.09131109110213080611001502040813,1.2.643.5.1.13.13.12.2.77.8252.13040605040810031203041510031012,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.16773626720107440979805052259711419763/series_004_2_CR/A2507537392 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.16773626720107440979805052259711419763,1.2.643.5.1.13.13.12.2.77.8252.09131109110213080611001502040813,1.2.643.5.1.13.13.12.2.77.8252.09031014151115011007041507060209,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.168317503020329569414190677927680518621/series_004_2_CR/A2507557128 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.168317503020329569414190677927680518621,1.2.643.5.1.13.13.12.2.77.8252.11120509060313030005050308070506,1.2.643.5.1.13.13.12.2.77.8252.03110002011112060400010906040109,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.168317503020329569414190677927680518621/series_004_2_CR/A2507557128 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.168317503020329569414190677927680518621,1.2.643.5.1.13.13.12.2.77.8252.11120509060313030005050308070506,1.2.643.5.1.13.13.12.2.77.8252.10050700041001040614050614130103,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.168317503020329569414190677927680518621/series_004_2_CR/A2507557128 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.168317503020329569414190677927680518621,1.2.643.5.1.13.13.12.2.77.8252.11120509060313030005050308070506,1.2.643.5.1.13.13.12.2.77.8252.08150001020008051511060800070004,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.169242707068684757906797344800977707240/series_003_2_CR/A2507185832 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.169242707068684757906797344800977707240,1.2.643.5.1.13.13.12.2.77.8252.11130805080112021004150213051005,1.2.643.5.1.13.13.12.2.77.8252.03020907090204060013031106111312,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.172445998420765569384934552191547932566/series_004_2_CR/A2507368766 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.172445998420765569384934552191547932566,1.2.643.5.1.13.13.12.2.77.8252.07141114011403010702060406101512,1.2.643.5.1.13.13.12.2.77.8252.05030907080814020708000711150507,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.172445998420765569384934552191547932566/series_004_2_CR/A2507368766 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.172445998420765569384934552191547932566,1.2.643.5.1.13.13.12.2.77.8252.07141114011403010702060406101512,1.2.643.5.1.13.13.12.2.77.8252.15151313120000020410110702050700,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.172445998420765569384934552191547932566/series_004_2_CR/A2507368766 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.172445998420765569384934552191547932566,1.2.643.5.1.13.13.12.2.77.8252.07141114011403010702060406101512,1.2.643.5.1.13.13.12.2.77.8252.08131412000401011215150704040610,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173731186748227489808861376513577450951/series_002_2_CR/A2507188958 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.173731186748227489808861376513577450951,1.2.643.5.1.13.13.12.2.77.8252.02011400121411091003041007011307,1.2.643.5.1.13.13.12.2.77.8252.04070212140009090002060410031413,hip_right,0,,0,0,0,1,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173731186748227489808861376513577450951/series_002_2_CR/A2507188958 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.173731186748227489808861376513577450951,1.2.643.5.1.13.13.12.2.77.8252.02011400121411091003041007011307,1.2.643.5.1.13.13.12.2.77.8252.01091510011014070612050311031410,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173753313169335820519632380691065649420/series_003_2_CR/A2504265499 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.173753313169335820519632380691065649420,1.2.643.5.1.13.13.12.2.77.8252.09090912081008051408101503020807,1.2.643.5.1.13.13.12.2.77.8252.10100404000008120405081411021306,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173753313169335820519632380691065649420/series_003_2_CR/A2504265499 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.173753313169335820519632380691065649420,1.2.643.5.1.13.13.12.2.77.8252.09090912081008051408101503020807,1.2.643.5.1.13.13.12.2.77.8252.04111300031205120703050100121209,hip_right,1,roi_incorrect,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173753313169335820519632380691065649420/series_003_2_CR/A2504265499 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.173753313169335820519632380691065649420,1.2.643.5.1.13.13.12.2.77.8252.09090912081008051408101503020807,1.2.643.5.1.13.13.12.2.77.8252.13001014110608151112110112061114,spine,1,axis_deviation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175881661753775295785039265792986971602/series_003_2_CR/A2507266462 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.175881661753775295785039265792986971602,1.2.643.5.1.13.13.12.2.77.8252.01091501110815031100020500130014,1.2.643.5.1.13.13.12.2.77.8252.06070803110509120507010310141201,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175881661753775295785039265792986971602/series_003_2_CR/A2507266462 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.175881661753775295785039265792986971602,1.2.643.5.1.13.13.12.2.77.8252.01091501110815031100020500130014,1.2.643.5.1.13.13.12.2.77.8252.10000603030913050503020611051415,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175881661753775295785039265792986971602/series_003_2_CR/A2507266462 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.175881661753775295785039265792986971602,1.2.643.5.1.13.13.12.2.77.8252.01091501110815031100020500130014,1.2.643.5.1.13.13.12.2.77.8252.14060403060314010506081209070311,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175903805423871105435148927871625232853/series_001_2_CR/A2507159447 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.175903805423871105435148927871625232853,1.2.643.5.1.13.13.12.2.77.8252.08010308000211020503020307091312,1.2.643.5.1.13.13.12.2.77.8252.13151105000600070510031109011109,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175903805423871105435148927871625232853/series_001_2_CR/A2507159447 DXA/CR DXA/r_hip_02.dcm,r_hip_02.dcm,2.25.175903805423871105435148927871625232853,1.2.643.5.1.13.13.12.2.77.8252.08010308000211020503020307091312,1.2.643.5.1.13.13.12.2.77.8252.15100208060002090813060606131404,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175903805423871105435148927871625232853/series_001_2_CR/A2507159447 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.175903805423871105435148927871625232853,1.2.643.5.1.13.13.12.2.77.8252.08010308000211020503020307091312,1.2.643.5.1.13.13.12.2.77.8252.12071204070300150506091512141413,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.17706555930735581384953296958427669848/series_004_3_CR/A2504146513 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.17706555930735581384953296958427669848,1.2.643.5.1.13.13.12.2.77.8252.15150900091406150103131401151205,1.2.643.5.1.13.13.12.2.77.8252.08081313070715151208110603030015,hip_left,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.17706555930735581384953296958427669848/series_004_3_CR/A2504146513 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.17706555930735581384953296958427669848,1.2.643.5.1.13.13.12.2.77.8252.15150900091406150103131401151205,1.2.643.5.1.13.13.12.2.77.8252.11051514070611150905020505061111,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.17706555930735581384953296958427669848/series_004_3_CR/A2504146513 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.17706555930735581384953296958427669848,1.2.643.5.1.13.13.12.2.77.8252.15150900091406150103131401151205,1.2.643.5.1.13.13.12.2.77.8252.03050114141207061001080502130215,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.177745077805190810016231350557005569203/series_002_2_CR/A2504273759 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.177745077805190810016231350557005569203,1.2.643.5.1.13.13.12.2.77.8252.11110412020614040803060513120911,1.2.643.5.1.13.13.12.2.77.8252.06130700140211110505051411010711,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.177745077805190810016231350557005569203/series_002_2_CR/A2504273759 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.177745077805190810016231350557005569203,1.2.643.5.1.13.13.12.2.77.8252.11110412020614040803060513120911,1.2.643.5.1.13.13.12.2.77.8252.04150214121314031409051312111410,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.177745077805190810016231350557005569203/series_002_2_CR/A2504273759 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.177745077805190810016231350557005569203,1.2.643.5.1.13.13.12.2.77.8252.11110412020614040803060513120911,1.2.643.5.1.13.13.12.2.77.8252.03031110041309110901030612131412,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.178533355209696795441380751187185128893/series_003_2_CR/A2507155452 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.178533355209696795441380751187185128893,1.2.643.5.1.13.13.12.2.77.8252.05000609021402010711070801100904,1.2.643.5.1.13.13.12.2.77.8252.14110604050810020100071004090404,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.181196659018348153828200695057897449628/series_004_2_CR/A2507370620 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.181196659018348153828200695057897449628,1.2.643.5.1.13.13.12.2.77.8252.04121102011402150303110508111305,1.2.643.5.1.13.13.12.2.77.8252.07040306041313130904140702020908,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.181196659018348153828200695057897449628/series_004_2_CR/A2507370620 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.181196659018348153828200695057897449628,1.2.643.5.1.13.13.12.2.77.8252.04121102011402150303110508111305,1.2.643.5.1.13.13.12.2.77.8252.14150808010700150501131415040808,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.181196659018348153828200695057897449628/series_004_2_CR/A2507370620 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.181196659018348153828200695057897449628,1.2.643.5.1.13.13.12.2.77.8252.04121102011402150303110508111305,1.2.643.5.1.13.13.12.2.77.8252.08141015091400020302110912090508,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.184198356665635336833172191504278054074/series_004_2_CR/A250788286 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.184198356665635336833172191504278054074,1.2.643.5.1.13.13.12.2.77.8252.04101108050208091310021407111214,1.2.643.5.1.13.13.12.2.77.8252.02150805140008141106110606070801,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.184198356665635336833172191504278054074/series_004_2_CR/A250788286 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.184198356665635336833172191504278054074,1.2.643.5.1.13.13.12.2.77.8252.04101108050208091310021407111214,1.2.643.5.1.13.13.12.2.77.8252.11141409010404080202090702050104,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.184198356665635336833172191504278054074/series_004_2_CR/A250788286 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.184198356665635336833172191504278054074,1.2.643.5.1.13.13.12.2.77.8252.04101108050208091310021407111214,1.2.643.5.1.13.13.12.2.77.8252.04151306060901060605121400081206,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.186201010600484120326273381077449377115/series_004_2_CR/A250777475 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.186201010600484120326273381077449377115,1.2.643.5.1.13.13.12.2.77.8252.04030111120106061513080209011000,1.2.643.5.1.13.13.12.2.77.8252.00091315091215060415120908060402,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.186201010600484120326273381077449377115/series_004_2_CR/A250777475 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.186201010600484120326273381077449377115,1.2.643.5.1.13.13.12.2.77.8252.04030111120106061513080209011000,1.2.643.5.1.13.13.12.2.77.8252.01110601131107041511021510061211,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.186201010600484120326273381077449377115/series_004_2_CR/A250777475 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.186201010600484120326273381077449377115,1.2.643.5.1.13.13.12.2.77.8252.04030111120106061513080209011000,1.2.643.5.1.13.13.12.2.77.8252.07140512060315100814061103061308,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.03000010070307110614031003090302,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11050911061500091304001000100608,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11100109131006120600020910050910,spine,1,axis_deviation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.10101410111513000809081215030802,hip_right,0,,0,0,0,1,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.00070615051510041500030210150312,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.02120211101306000510080011031411,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.05011012001311141515001115080104,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.217397325224876728316360420804118329081/series_002_2_CR/A250474631 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.217397325224876728316360420804118329081,1.2.643.5.1.13.13.12.2.77.8252.15060506051311040306151405130812,1.2.643.5.1.13.13.12.2.77.8252.10000400041408060608031009090710,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.217397325224876728316360420804118329081/series_002_2_CR/A250474631 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.217397325224876728316360420804118329081,1.2.643.5.1.13.13.12.2.77.8252.15060506051311040306151405130812,1.2.643.5.1.13.13.12.2.77.8252.02091115080411030312040600000701,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.217397325224876728316360420804118329081/series_002_2_CR/A250474631 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.217397325224876728316360420804118329081,1.2.643.5.1.13.13.12.2.77.8252.15060506051311040306151405130812,1.2.643.5.1.13.13.12.2.77.8252.04131001000110131311121304090609,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.220866240977467582196609708837940253840/series_001_2_CR/A2504258893 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.220866240977467582196609708837940253840,1.2.643.5.1.13.13.12.2.77.8252.04071115100300090601031200020808,1.2.643.5.1.13.13.12.2.77.8252.03010603150012061509030005111300,spine,1,axis_deviation,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.234651502352368356456298825489565282446/series_002_2_CR/A2504307193 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.234651502352368356456298825489565282446,1.2.643.5.1.13.13.12.2.77.8252.11000715091405120315010100101510,1.2.643.5.1.13.13.12.2.77.8252.02051208030605070510050510081213,hip_left,1,rotation,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.234651502352368356456298825489565282446/series_002_2_CR/A2504307193 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.234651502352368356456298825489565282446,1.2.643.5.1.13.13.12.2.77.8252.11000715091405120315010100101510,1.2.643.5.1.13.13.12.2.77.8252.09140613011500120102030800080807,hip_right,1,rotation,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.234651502352368356456298825489565282446/series_002_2_CR/A2504307193 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.234651502352368356456298825489565282446,1.2.643.5.1.13.13.12.2.77.8252.11000715091405120315010100101510,1.2.643.5.1.13.13.12.2.77.8252.09031307051100020212010511060414,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.247714038039430659432048101646401574824/series_002_2_CR/A2504238024 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.247714038039430659432048101646401574824,1.2.643.5.1.13.13.12.2.77.8252.01010712071105151008051412091100,1.2.643.5.1.13.13.12.2.77.8252.13110800060502010303101404091303,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.247714038039430659432048101646401574824/series_002_2_CR/A2504238024 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.247714038039430659432048101646401574824,1.2.643.5.1.13.13.12.2.77.8252.01010712071105151008051412091100,1.2.643.5.1.13.13.12.2.77.8252.06051510010614000404080600020603,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.247714038039430659432048101646401574824/series_002_2_CR/A2504238024 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.247714038039430659432048101646401574824,1.2.643.5.1.13.13.12.2.77.8252.01010712071105151008051412091100,1.2.643.5.1.13.13.12.2.77.8252.06030210110500061108030910090908,spine,1,artifact,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12031014110715041000030602140501,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12130902030702050210110604020115,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.02001209000515050108060411111311,spine,1,axis_deviation;artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.01011201030601080312040805131303,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06121304010102150202081301011406,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06030606140315081407041104141012,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.06120002061108140400041203121102,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.15130815100101091501031008111015,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.13000009090006001202001212051006,spine,1,unspecified,0,1,1,0,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.11091010090201121300090614051311,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.15080906090913051107110915140103,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.02141512030209141106060309030501,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.29638026465755240167985424461715024381/series_004_3_CR/A2504115579 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.29638026465755240167985424461715024381,1.2.643.5.1.13.13.12.2.77.8252.09020304121009030507130509070701,1.2.643.5.1.13.13.12.2.77.8252.09040806151211060704090912150608,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.29638026465755240167985424461715024381/series_004_3_CR/A2504115579 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.29638026465755240167985424461715024381,1.2.643.5.1.13.13.12.2.77.8252.09020304121009030507130509070701,1.2.643.5.1.13.13.12.2.77.8252.12090901030412121214030908040015,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.29638026465755240167985424461715024381/series_004_3_CR/A2504115579 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.29638026465755240167985424461715024381,1.2.643.5.1.13.13.12.2.77.8252.09020304121009030507130509070701,1.2.643.5.1.13.13.12.2.77.8252.12021011000615031102060001101203,spine,1,positioning,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.306921081709806079165809721263236241032/series_002_2_CR/A2504381177 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.306921081709806079165809721263236241032,1.2.643.5.1.13.13.12.2.77.8252.13070707001109051012021502000705,1.2.643.5.1.13.13.12.2.77.8252.05140704131104071313121101000313,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.12090115120005000603040515131409,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.09020610121102091006070609000414,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.09030700121011131209150303151015,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.07070904150315000704031208001011,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.03121103130007121510030803050514,spine,1,axis_deviation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02000306061002040514101500000812,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.01130904120915050401031210031001,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02120204101515130306021007150210,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.338439598607961312040815816824093323492/series_002_2_CR/A2504147124 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.338439598607961312040815816824093323492,1.2.643.5.1.13.13.12.2.77.8252.09061205050201001102041514000912,1.2.643.5.1.13.13.12.2.77.8252.13110108131113110013070512051310,spine,1,artifact,1,1,0,0,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.05111003151314100612100700031506,hip_left,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.11010912010413080807030107050600,hip_right,0,,0,0,0,0,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.04091012040015061107090014081504,spine,1,unspecified,1,1,0,0,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.340839477910528898406207279980417945/series_001_2_CR/A2504224555 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.340839477910528898406207279980417945,1.2.643.5.1.13.13.12.2.77.8252.02100613110404001511060101141303,1.2.643.5.1.13.13.12.2.77.8252.05030701101012140702110704000714,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.340839477910528898406207279980417945/series_001_2_CR/A2504224555 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.340839477910528898406207279980417945,1.2.643.5.1.13.13.12.2.77.8252.02100613110404001511060101141303,1.2.643.5.1.13.13.12.2.77.8252.14120712151005010200040708001308,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.340839477910528898406207279980417945/series_001_2_CR/A2504224555 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.340839477910528898406207279980417945,1.2.643.5.1.13.13.12.2.77.8252.02100613110404001511060101141303,1.2.643.5.1.13.13.12.2.77.8252.12111312010203070900101115051015,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.37515662379281069436632838996073181551/series_001_2_CR/A2504329840 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.37515662379281069436632838996073181551,1.2.643.5.1.13.13.12.2.77.8252.08050709020911100006011108031308,1.2.643.5.1.13.13.12.2.77.8252.08110803070615141513021414111001,hip_left,0,,0,0,0,0,0,,Хороший пример отклонения оси при КТ п-ка
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.37515662379281069436632838996073181551/series_001_2_CR/A2504329840 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.37515662379281069436632838996073181551,1.2.643.5.1.13.13.12.2.77.8252.08050709020911100006011108031308,1.2.643.5.1.13.13.12.2.77.8252.12090208061115110101131315120813,hip_right,0,,0,0,0,0,0,,Хороший пример отклонения оси при КТ п-ка
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.37515662379281069436632838996073181551/series_001_2_CR/A2504329840 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.37515662379281069436632838996073181551,1.2.643.5.1.13.13.12.2.77.8252.08050709020911100006011108031308,1.2.643.5.1.13.13.12.2.77.8252.05001409080504151204111500000514,spine,1,axis_deviation,1,1,0,0,0,bad,Хороший пример отклонения оси при КТ п-ка
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.00030605020706130003080307080701,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.07150610130411050211021514011106,hip_right,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.15141302131508150312140605060212,spine,1,axis_deviation;artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.06080100090802110008000311010501,hip_left,1,rotation,1,0,1,0,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.03010404051000131408111209140108,hip_right,1,rotation,1,0,1,0,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,0,1,0,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52532476139575422857225834315571570912/series_001_2_CR/A2504247961 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.52532476139575422857225834315571570912,1.2.643.5.1.13.13.12.2.77.8252.12150004000513030900100606011509,1.2.643.5.1.13.13.12.2.77.8252.07120809010109050202061111011110,spine,1,unspecified,1,1,0,0,0,bad,"Сколиоз, не верня разметка"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.07081506021006111207090213090701,hip_left,0,,0,0,0,0,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.06001210040802120801060507001509,hip_right,0,,0,0,0,0,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.02030504060005060505040905021305,spine,1,positioning,1,0,1,0,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.54396839637320114639948764487283877793/series_003_2_CR/A2504111090 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.54396839637320114639948764487283877793,1.2.643.5.1.13.13.12.2.77.8252.15041203090015060404010507050405,1.2.643.5.1.13.13.12.2.77.8252.02060605151213121009151302130207,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.59542620917302828428419211045951914336/series_001_2_CR/A2504303391 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.59542620917302828428419211045951914336,1.2.643.5.1.13.13.12.2.77.8252.13101512050003031109001004060403,1.2.643.5.1.13.13.12.2.77.8252.07101010011513020401030213080905,spine,1,artifact,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.65954778282254353457041255543338557112/series_004_3_CR/A2504246289 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.65954778282254353457041255543338557112,1.2.643.5.1.13.13.12.2.77.8252.09110800100012120800030006041405,1.2.643.5.1.13.13.12.2.77.8252.11130315030911081202140406010814,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.65954778282254353457041255543338557112/series_004_3_CR/A2504246289 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.65954778282254353457041255543338557112,1.2.643.5.1.13.13.12.2.77.8252.09110800100012120800030006041405,1.2.643.5.1.13.13.12.2.77.8252.10000615050107010300151404090301,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.65954778282254353457041255543338557112/series_004_3_CR/A2504246289 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.65954778282254353457041255543338557112,1.2.643.5.1.13.13.12.2.77.8252.09110800100012120800030006041405,1.2.643.5.1.13.13.12.2.77.8252.05111111030105140803060510040613,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.08021214010408050013070405100802,hip_left,1,rotation,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.02091011000006010704070004091411,hip_right,1,rotation,1,1,0,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.01011407000709010910090115010000,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.12110509121413070408000802041201,hip_left,1,rotation,1,0,1,0,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.00031305050707070014000611130907,hip_right,1,rotation,1,0,1,0,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.07150604010711031305090702140107,spine,1,axis_deviation,1,0,1,0,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.14130302090906050506100315000611,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.02050808061207030811150709091509,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.06151311061015011100110511080701,spine,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.78999454687125053757525542837745968726/series_004_3_CR/A2504222617 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.78999454687125053757525542837745968726,1.2.643.5.1.13.13.12.2.77.8252.11011102050904000102020212011404,1.2.643.5.1.13.13.12.2.77.8252.07150713040501120002001009141410,hip_left,1,rotation,1,0,1,0,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.78999454687125053757525542837745968726/series_004_3_CR/A2504222617 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.78999454687125053757525542837745968726,1.2.643.5.1.13.13.12.2.77.8252.11011102050904000102020212011404,1.2.643.5.1.13.13.12.2.77.8252.05120913001500151408091003040415,hip_right,1,rotation,1,0,1,0,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.78999454687125053757525542837745968726/series_004_3_CR/A2504222617 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.78999454687125053757525542837745968726,1.2.643.5.1.13.13.12.2.77.8252.11011102050904000102020212011404,1.2.643.5.1.13.13.12.2.77.8252.11011500050713141305050211140308,spine,0,,0,0,0,0,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.82912555346523716720160717883917565880/series_002_2_CR/A2504149480 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.82912555346523716720160717883917565880,1.2.643.5.1.13.13.12.2.77.8252.07120201111314111500000602130205,1.2.643.5.1.13.13.12.2.77.8252.13130903011502030304101506090814,hip_left,0,,0,0,0,0,0,,Хороший пример ротации
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.82912555346523716720160717883917565880/series_002_2_CR/A2504149480 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.82912555346523716720160717883917565880,1.2.643.5.1.13.13.12.2.77.8252.07120201111314111500000602130205,1.2.643.5.1.13.13.12.2.77.8252.15121403061107000609060400100413,hip_right,1,rotation,1,0,1,0,0,,Хороший пример ротации
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.82912555346523716720160717883917565880/series_002_2_CR/A2504149480 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.82912555346523716720160717883917565880,1.2.643.5.1.13.13.12.2.77.8252.07120201111314111500000602130205,1.2.643.5.1.13.13.12.2.77.8252.15001111061311011106030303001309,spine,0,,0,0,0,0,0,,Хороший пример ротации
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87718478011637131470224319788530286374/series_002_2_CR/A2504337993 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.87718478011637131470224319788530286374,1.2.643.5.1.13.13.12.2.77.8252.07060506150205030514061006111408,1.2.643.5.1.13.13.12.2.77.8252.10041006131411151513070104110809,spine,1,unspecified,0,1,1,0,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.15101115041306031303150405131115,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.06111209081313111015020309051508,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.04050904100201141507070306131511,spine,1,artifact,1,0,1,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.04000607141411061507120106050309,hip_left,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.08061201060114131102110802141411,hip_right,0,,0,0,0,0,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,0,1,0,0,,
|
||||
path_to_image,file,study,study_uid,image_uid,anatomical_region,quality_class,violation_type,quality_from_excel,quality_from_filename,sources_conflict,laterality_mirrored,region_ambiguous,label_rule,filename_fallback,filename_marker,expert_comment
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403090444/series_004_3_CR/DXA/CR DXA/l_hip_01_good.dcm,l_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403090444,1.2.643.5.1.13.13.12.2.77.8252.08110703091310150605090907130304,1.2.643.5.1.13.13.12.2.77.8252.03030811151201151502050615010000,hip_left,1,rotation,1,0,1,0,0,union,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403090444/series_004_3_CR/DXA/CR DXA/r_hip_01_good.dcm,r_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403090444,1.2.643.5.1.13.13.12.2.77.8252.08110703091310150605090907130304,1.2.643.5.1.13.13.12.2.77.8252.06000812101106141213041404150112,hip_right,0,,0,0,0,0,0,union,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403090444/series_004_3_CR/DXA/CR DXA/spine_01_good.dcm,spine_01_good.dcm,1.2.840.113619.2.110.512719.20250403090444,1.2.643.5.1.13.13.12.2.77.8252.08110703091310150605090907130304,1.2.643.5.1.13.13.12.2.77.8252.14031015091008031013040205110915,spine,0,,0,0,0,0,0,union,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403092052/series_003_3_CR/DXA/CR DXA/l_hip_01_good.dcm,l_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403092052,1.2.643.5.1.13.13.12.2.77.8252.06000805130607060714150602050114,1.2.643.5.1.13.13.12.2.77.8252.06140010030611061314081200121305,hip_left,0,,0,0,0,0,0,union,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403092052/series_003_3_CR/DXA/CR DXA/r_hip_01_good.dcm,r_hip_01_good.dcm,1.2.840.113619.2.110.512719.20250403092052,1.2.643.5.1.13.13.12.2.77.8252.06000805130607060714150602050114,1.2.643.5.1.13.13.12.2.77.8252.09040712010609120601031410140610,hip_right,0,,0,0,0,0,0,union,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250403092052/series_003_3_CR/DXA/CR DXA/spine_01_good.dcm,spine_01_good.dcm,1.2.840.113619.2.110.512719.20250403092052,1.2.643.5.1.13.13.12.2.77.8252.06000805130607060714150602050114,1.2.643.5.1.13.13.12.2.77.8252.09050515110402090102050206010406,spine,0,,0,0,0,0,0,union,0,good,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250407113211/series_001_2_CR/DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,1.2.840.113619.2.110.512719.20250407113211,1.2.643.5.1.13.13.12.2.77.8252.02060902040212120608040605100100,1.2.643.5.1.13.13.12.2.77.8252.10011302120900111505101501141402,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250407113211/series_001_2_CR/DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,1.2.840.113619.2.110.512719.20250407113211,1.2.643.5.1.13.13.12.2.77.8252.02060902040212120608040605100100,1.2.643.5.1.13.13.12.2.77.8252.07140808121311040315101301051200,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/1.2.840.113619.2.110.512719.20250407113211/series_001_2_CR/DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,1.2.840.113619.2.110.512719.20250407113211,1.2.643.5.1.13.13.12.2.77.8252.02060902040212120608040605100100,1.2.643.5.1.13.13.12.2.77.8252.13101207101114060008151413130115,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.10245777060263212829333021434108890537/series_003_2_CR/A2504412435 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.10245777060263212829333021434108890537,1.2.643.5.1.13.13.12.2.77.8252.13060115000811100715140205030915,1.2.643.5.1.13.13.12.2.77.8252.07000215121313030213041009101409,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.10245777060263212829333021434108890537/series_003_2_CR/A2504412435 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.10245777060263212829333021434108890537,1.2.643.5.1.13.13.12.2.77.8252.13060115000811100715140205030915,1.2.643.5.1.13.13.12.2.77.8252.03081500040505121009070211080902,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.10245777060263212829333021434108890537/series_003_2_CR/A2504412435 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.10245777060263212829333021434108890537,1.2.643.5.1.13.13.12.2.77.8252.13060115000811100715140205030915,1.2.643.5.1.13.13.12.2.77.8252.14131410040814100713070401091213,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102755089973625799055786462646268820450/series_002_2_CR/A2504257770 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.102755089973625799055786462646268820450,1.2.643.5.1.13.13.12.2.77.8252.05091110020805070808081311010412,1.2.643.5.1.13.13.12.2.77.8252.10100907120107030904131503081506,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102755089973625799055786462646268820450/series_002_2_CR/A2504257770 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.102755089973625799055786462646268820450,1.2.643.5.1.13.13.12.2.77.8252.05091110020805070808081311010412,1.2.643.5.1.13.13.12.2.77.8252.01140903011212140408111315130511,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102755089973625799055786462646268820450/series_002_2_CR/A2504257770 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.102755089973625799055786462646268820450,1.2.643.5.1.13.13.12.2.77.8252.05091110020805070808081311010412,1.2.643.5.1.13.13.12.2.77.8252.10030113050111051002020402141304,spine,1,axis_deviation,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102965897799404973225419898683246248872/series_001_2_CR/A250726353 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.102965897799404973225419898683246248872,1.2.643.5.1.13.13.12.2.77.8252.02150001030902110114090106081007,1.2.643.5.1.13.13.12.2.77.8252.06050309100102041203101101110913,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102965897799404973225419898683246248872/series_001_2_CR/A250726353 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.102965897799404973225419898683246248872,1.2.643.5.1.13.13.12.2.77.8252.02150001030902110114090106081007,1.2.643.5.1.13.13.12.2.77.8252.10140807011010031112140700150015,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.102965897799404973225419898683246248872/series_001_2_CR/A250726353 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.102965897799404973225419898683246248872,1.2.643.5.1.13.13.12.2.77.8252.02150001030902110114090106081007,1.2.643.5.1.13.13.12.2.77.8252.11011413051206050400150606100110,spine,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.12051209130410130502141403101414,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.15031208100010080909150509041308,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.103868781101960771917584077315578649178/series_001_3_CR/A2507485409 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.103868781101960771917584077315578649178,1.2.643.5.1.13.13.12.2.77.8252.01081208070113050704060608151002,1.2.643.5.1.13.13.12.2.77.8252.08120904010605130814050710080508,spine,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.14130208070502001411050502150202,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.11131406091213131205130612021414,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.105033841136787477881326326053319223817/series_001_2_CR/A250790559 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.105033841136787477881326326053319223817,1.2.643.5.1.13.13.12.2.77.8252.07010502020008121005080211011503,1.2.643.5.1.13.13.12.2.77.8252.00071307071102020311080215100104,spine,1,unspecified,0,1,1,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.108537195937431169718850276671337677972/series_002_2_CR/A250479795 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.108537195937431169718850276671337677972,1.2.643.5.1.13.13.12.2.77.8252.00011402030913150507081413120310,1.2.643.5.1.13.13.12.2.77.8252.14031513011512070711151413071213,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.07121414121104070401050315140813,,1,unspecified,,1,0,0,1,union,1,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.12051512011202090502051206130907,hip_right,0,,0,0,0,1,0,union,0,,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.11175860580562939441493697221497597640/series_003_2_CR/A2507431060 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.11175860580562939441493697221497597640,1.2.643.5.1.13.13.12.2.77.8252.01021511080002000006040601030906,1.2.643.5.1.13.13.12.2.77.8252.11051001091403121310010813110103,spine,1,artifact,1,1,0,0,0,union,0,bad,правое бедро эндопротезирования
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.112621744005021908434051268014787122937/series_002_2_CR/A2504301685 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.112621744005021908434051268014787122937,1.2.643.5.1.13.13.12.2.77.8252.14150011111304110807130802031100,1.2.643.5.1.13.13.12.2.77.8252.15090515141309140806011408041204,spine,1,unspecified,0,1,1,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.03150400010605060115070904121304,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.15050814070214050107040604101305,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.114887542067602662452692698814728642117/series_001_2_CR/A2504131887 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.114887542067602662452692698814728642117,1.2.643.5.1.13.13.12.2.77.8252.12090510061110050103011205010113,1.2.643.5.1.13.13.12.2.77.8252.10001500010311100907131007040004,spine,1,artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.116822802042655971810859435524105064465/series_003_2_CR/A2507273296 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.116822802042655971810859435524105064465,1.2.643.5.1.13.13.12.2.77.8252.09001101031503060803041311070312,1.2.643.5.1.13.13.12.2.77.8252.13011301091003020814061203020304,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.116822802042655971810859435524105064465/series_003_2_CR/A2507273296 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.116822802042655971810859435524105064465,1.2.643.5.1.13.13.12.2.77.8252.09001101031503060803041311070312,1.2.643.5.1.13.13.12.2.77.8252.01010713081306120510130101121412,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.116822802042655971810859435524105064465/series_003_2_CR/A2507273296 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.116822802042655971810859435524105064465,1.2.643.5.1.13.13.12.2.77.8252.09001101031503060803041311070312,1.2.643.5.1.13.13.12.2.77.8252.05150512091506110304120408070606,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.122446767306607067205618235949445789306/series_001_2_CR/A2504255080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.122446767306607067205618235949445789306,1.2.643.5.1.13.13.12.2.77.8252.00101409100812000205071213151011,1.2.643.5.1.13.13.12.2.77.8252.02101009080308000015051512140806,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.122446767306607067205618235949445789306/series_001_2_CR/A2504255080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.122446767306607067205618235949445789306,1.2.643.5.1.13.13.12.2.77.8252.00101409100812000205071213151011,1.2.643.5.1.13.13.12.2.77.8252.02091106060004131215091000000909,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.122446767306607067205618235949445789306/series_001_2_CR/A2504255080 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.122446767306607067205618235949445789306,1.2.643.5.1.13.13.12.2.77.8252.00101409100812000205071213151011,1.2.643.5.1.13.13.12.2.77.8252.15060100040008041103060904131005,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.123175695355749859846173904788591707879/series_001_2_CR/A250722449 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.123175695355749859846173904788591707879,1.2.643.5.1.13.13.12.2.77.8252.11130601031507131510140912150209,1.2.643.5.1.13.13.12.2.77.8252.12031311070507060813050800031313,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.10081312010805021201100507060411,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.08050506060410091114110412130504,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.124890633326693921702195356152595253940/series_002_2_CR/A2504263153 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.124890633326693921702195356152595253940,1.2.643.5.1.13.13.12.2.77.8252.04120502090713030002100002030500,1.2.643.5.1.13.13.12.2.77.8252.04131510070001011107040403071102,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.125521310320333648427417313254965624364/series_001_2_CR/A250444126 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.125521310320333648427417313254965624364,1.2.643.5.1.13.13.12.2.77.8252.04020303131005050903141411050509,1.2.643.5.1.13.13.12.2.77.8252.06141210040207130507130606070312,spine,1,positioning,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.08121504041301080101130415050611,hip_left,1,rotation;roi_incorrect,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.11151304101402090112060913070605,hip_right,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.126293418391331346694592071563510265596/series_002_3_CR/A2507250865 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.126293418391331346694592071563510265596,1.2.643.5.1.13.13.12.2.77.8252.06000203070703071315151100081515,1.2.643.5.1.13.13.12.2.77.8252.10031005061115110908060312000307,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.01070801081413060013111012010201,hip_left,1,rotation,1,0,1,0,0,union,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.10040807011312021210130513011200,hip_right,1,rotation;roi_incorrect,1,0,1,0,0,union,0,,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.127126130998341190348103034690069487890/series_002_2_CR/A250428736 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.127126130998341190348103034690069487890,1.2.643.5.1.13.13.12.2.77.8252.01100712050309061210070903020211,1.2.643.5.1.13.13.12.2.77.8252.13130511100900071404010502130909,spine,1,axis_deviation,1,1,0,0,0,union,0,bad,перелом
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07050602130910101513020700010509,hip_left,1,unspecified,,1,0,0,0,union,1,bad,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.02011409120209130807021302101100,hip_right,1,unspecified,,1,0,0,0,union,1,bad,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.12798473087614376830819854616447908612/series_002_2_CR/A2507538847 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.12798473087614376830819854616447908612,1.2.643.5.1.13.13.12.2.77.8252.09130409131001141403120204031509,1.2.643.5.1.13.13.12.2.77.8252.07111115111305011108141412010801,spine,0,,0,0,0,0,0,union,0,,эндопротезирования ТБС
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128197189461989832465575162384360009377/series_001_2_CR/A2507216909 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128197189461989832465575162384360009377,1.2.643.5.1.13.13.12.2.77.8252.12090514001006040904030606011401,1.2.643.5.1.13.13.12.2.77.8252.02030508140000071310150302011113,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128630285053087246379265602913470285158/series_003_2_CR/A2504394821 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.128630285053087246379265602913470285158,1.2.643.5.1.13.13.12.2.77.8252.02080810120709040103090703140106,1.2.643.5.1.13.13.12.2.77.8252.09070705131210061514041509120513,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.02111507100612121000021204080801,hip_left,1,rotation,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.128990540359421489042453547244535073735/series_002_2_CR/A2507388698 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.128990540359421489042453547244535073735,1.2.643.5.1.13.13.12.2.77.8252.10140103050104100015110907140800,1.2.643.5.1.13.13.12.2.77.8252.11000605051111050207041006140905,spine,1,positioning,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.129239680100193368599713239115902740628/series_003_3_CR/A250757345 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.129239680100193368599713239115902740628,1.2.643.5.1.13.13.12.2.77.8252.08111201111203050510020404121406,1.2.643.5.1.13.13.12.2.77.8252.00131503020212110600101502020700,hip_right,1,rotation,1,0,1,1,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.06081211090913150712130913130401,hip_left,1,roi_incorrect,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.12051101030200021506031210090702,hip_right,1,roi_incorrect,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13069823278093578548407087310307113784/series_003_2_CR/A2507242667 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13069823278093578548407087310307113784,1.2.643.5.1.13.13.12.2.77.8252.01101508090608101115020806060015,1.2.643.5.1.13.13.12.2.77.8252.05100110120015150515030506140402,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.06120903051105150112061201080014,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.13151303131009131214000609090104,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132083163398091874662674590622589534350/series_003_2_CR/A2507386583 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132083163398091874662674590622589534350,1.2.643.5.1.13.13.12.2.77.8252.00030206020209110205100406021412,1.2.643.5.1.13.13.12.2.77.8252.15080409060108110106110204020115,spine,1,unspecified,0,1,1,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.15140601101305061400021505010802,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.05020106091400040809110708040301,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.132272637351979990811754009849547633391/series_003_3_CR/A2504141080 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.132272637351979990811754009849547633391,1.2.643.5.1.13.13.12.2.77.8252.07060700030806121503030014110206,1.2.643.5.1.13.13.12.2.77.8252.07151108041411120004040810151209,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13325817932854000792938662637654885530/series_002_2_CR/A2507365486 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13325817932854000792938662637654885530,1.2.643.5.1.13.13.12.2.77.8252.01011312130808040910091102031113,1.2.643.5.1.13.13.12.2.77.8252.11020707081006150000011408140609,hip_left,1,roi_incorrect,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13325817932854000792938662637654885530/series_002_2_CR/A2507365486 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13325817932854000792938662637654885530,1.2.643.5.1.13.13.12.2.77.8252.01011312130808040910091102031113,1.2.643.5.1.13.13.12.2.77.8252.04080409110008071309041404000111,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13325817932854000792938662637654885530/series_002_2_CR/A2507365486 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13325817932854000792938662637654885530,1.2.643.5.1.13.13.12.2.77.8252.01011312130808040910091102031113,1.2.643.5.1.13.13.12.2.77.8252.02090003020511130407030106110206,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.134456506307367483341018281460841912845/series_002_2_CR/A2507120612 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.134456506307367483341018281460841912845,1.2.643.5.1.13.13.12.2.77.8252.14001106061015010402061009020003,1.2.643.5.1.13.13.12.2.77.8252.14121200111500000012151207021305,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.134456506307367483341018281460841912845/series_002_2_CR/A2507120612 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.134456506307367483341018281460841912845,1.2.643.5.1.13.13.12.2.77.8252.14001106061015010402061009020003,1.2.643.5.1.13.13.12.2.77.8252.04040803080402061202041005000304,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.134456506307367483341018281460841912845/series_002_2_CR/A2507120612 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.134456506307367483341018281460841912845,1.2.643.5.1.13.13.12.2.77.8252.14001106061015010402061009020003,1.2.643.5.1.13.13.12.2.77.8252.13090607110001000310151006050113,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.135241889065705954191821710363605596815/series_003_3_CR/A250715060 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.135241889065705954191821710363605596815,1.2.643.5.1.13.13.12.2.77.8252.02111204140006020215081404050209,1.2.643.5.1.13.13.12.2.77.8252.04060811050000140014040410080212,hip_right,0,,0,0,0,1,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.135241889065705954191821710363605596815/series_003_3_CR/A250715060 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.135241889065705954191821710363605596815,1.2.643.5.1.13.13.12.2.77.8252.02111204140006020215081404050209,1.2.643.5.1.13.13.12.2.77.8252.12060607091105150404131215110908,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13566237352084812982996047541944701548/series_002_2_CR/A2504268931 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13566237352084812982996047541944701548,1.2.643.5.1.13.13.12.2.77.8252.02110607061101140709130908071405,1.2.643.5.1.13.13.12.2.77.8252.09030712140506070904071003000708,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137344827330550141320158285144101816664/series_003_3_CR/A2507146630 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.137344827330550141320158285144101816664,1.2.643.5.1.13.13.12.2.77.8252.07080911030405120513131308130103,1.2.643.5.1.13.13.12.2.77.8252.03131510081105080011060404010511,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137344827330550141320158285144101816664/series_003_3_CR/A2507146630 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.137344827330550141320158285144101816664,1.2.643.5.1.13.13.12.2.77.8252.07080911030405120513131308130103,1.2.643.5.1.13.13.12.2.77.8252.14140312010015010504081306061203,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137344827330550141320158285144101816664/series_003_3_CR/A2507146630 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.137344827330550141320158285144101816664,1.2.643.5.1.13.13.12.2.77.8252.07080911030405120513131308130103,1.2.643.5.1.13.13.12.2.77.8252.02050314081501100100131400110412,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.137675513852774974135210999345676405116/series_001_2_CR/A2504106597 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.137675513852774974135210999345676405116,1.2.643.5.1.13.13.12.2.77.8252.00091501080806120506120114090107,1.2.643.5.1.13.13.12.2.77.8252.05060902130204131205041207051405,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13983650679559142983913935144968795415/series_003_2_CR/A2504335111 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.13983650679559142983913935144968795415,1.2.643.5.1.13.13.12.2.77.8252.04111012020210100809111310020901,1.2.643.5.1.13.13.12.2.77.8252.02030711120805150008090200030710,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13983650679559142983913935144968795415/series_003_2_CR/A2504335111 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.13983650679559142983913935144968795415,1.2.643.5.1.13.13.12.2.77.8252.04111012020210100809111310020901,1.2.643.5.1.13.13.12.2.77.8252.05100908130706051511060907050202,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.13983650679559142983913935144968795415/series_003_2_CR/A2504335111 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.13983650679559142983913935144968795415,1.2.643.5.1.13.13.12.2.77.8252.04111012020210100809111310020901,1.2.643.5.1.13.13.12.2.77.8252.01100509051301061200120505020711,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.144941557565802351596730914409170713112/series_001_2_CR/A250728979 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.144941557565802351596730914409170713112,1.2.643.5.1.13.13.12.2.77.8252.06041008131200110706010301000604,1.2.643.5.1.13.13.12.2.77.8252.14070202101304120203120502100808,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.144941557565802351596730914409170713112/series_001_2_CR/A250728979 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.144941557565802351596730914409170713112,1.2.643.5.1.13.13.12.2.77.8252.06041008131200110706010301000604,1.2.643.5.1.13.13.12.2.77.8252.01100715050305071000110707040014,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.144941557565802351596730914409170713112/series_001_2_CR/A250728979 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.144941557565802351596730914409170713112,1.2.643.5.1.13.13.12.2.77.8252.06041008131200110706010301000604,1.2.643.5.1.13.13.12.2.77.8252.14021109030605071205090308080911,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.145848300160680194368420189079847088556/series_002_2_CR/A2504248615 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.145848300160680194368420189079847088556,1.2.643.5.1.13.13.12.2.77.8252.00020104100613061304040514090111,1.2.643.5.1.13.13.12.2.77.8252.06130104100900080002100912090901,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.145848300160680194368420189079847088556/series_002_2_CR/A2504248615 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.145848300160680194368420189079847088556,1.2.643.5.1.13.13.12.2.77.8252.00020104100613061304040514090111,1.2.643.5.1.13.13.12.2.77.8252.09091111090903031309150614110215,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.145848300160680194368420189079847088556/series_002_2_CR/A2504248615 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.145848300160680194368420189079847088556,1.2.643.5.1.13.13.12.2.77.8252.00020104100613061304040514090111,1.2.643.5.1.13.13.12.2.77.8252.07040802010906150312000007110303,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.151186844055172005615813066162721550889/series_002_2_CR/A250436130 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.151186844055172005615813066162721550889,1.2.643.5.1.13.13.12.2.77.8252.02060202021413001406000512080208,1.2.643.5.1.13.13.12.2.77.8252.07071507091013150605060411110414,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.151186844055172005615813066162721550889/series_002_2_CR/A250436130 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.151186844055172005615813066162721550889,1.2.643.5.1.13.13.12.2.77.8252.02060202021413001406000512080208,1.2.643.5.1.13.13.12.2.77.8252.06120514140811101106020900110711,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.151186844055172005615813066162721550889/series_002_2_CR/A250436130 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.151186844055172005615813066162721550889,1.2.643.5.1.13.13.12.2.77.8252.02060202021413001406000512080208,1.2.643.5.1.13.13.12.2.77.8252.07051313070907070603030815070904,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156021661584944120526934974594604520993/series_003_2_CR/A2507142228 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.156021661584944120526934974594604520993,1.2.643.5.1.13.13.12.2.77.8252.07100203071411091300120005090303,1.2.643.5.1.13.13.12.2.77.8252.12020806150405080200131300151004,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156021661584944120526934974594604520993/series_003_2_CR/A2507142228 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.156021661584944120526934974594604520993,1.2.643.5.1.13.13.12.2.77.8252.07100203071411091300120005090303,1.2.643.5.1.13.13.12.2.77.8252.09091502110711081102050610090100,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156021661584944120526934974594604520993/series_003_2_CR/A2507142228 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.156021661584944120526934974594604520993,1.2.643.5.1.13.13.12.2.77.8252.07100203071411091300120005090303,1.2.643.5.1.13.13.12.2.77.8252.09130714090405151215050914040809,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156375884487675936513403083218009333856/series_003_2_CR/A250727121 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.156375884487675936513403083218009333856,1.2.643.5.1.13.13.12.2.77.8252.03010905090814080711141406121501,1.2.643.5.1.13.13.12.2.77.8252.00010208150107110206110212130810,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156375884487675936513403083218009333856/series_003_2_CR/A250727121 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.156375884487675936513403083218009333856,1.2.643.5.1.13.13.12.2.77.8252.03010905090814080711141406121501,1.2.643.5.1.13.13.12.2.77.8252.04001402031200081204010009090110,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156375884487675936513403083218009333856/series_003_2_CR/A250727121 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.156375884487675936513403083218009333856,1.2.643.5.1.13.13.12.2.77.8252.03010905090814080711141406121501,1.2.643.5.1.13.13.12.2.77.8252.07090311111312140315080706100515,spine,1,artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156389075510671877606923458507011517218/series_001_2_CR/A2507389755 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.156389075510671877606923458507011517218,1.2.643.5.1.13.13.12.2.77.8252.14051001011001020103110813110612,1.2.643.5.1.13.13.12.2.77.8252.12101514000107101207120412120213,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156389075510671877606923458507011517218/series_001_2_CR/A2507389755 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.156389075510671877606923458507011517218,1.2.643.5.1.13.13.12.2.77.8252.14051001011001020103110813110612,1.2.643.5.1.13.13.12.2.77.8252.05051100060005040907000403081502,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.156389075510671877606923458507011517218/series_001_2_CR/A2507389755 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.156389075510671877606923458507011517218,1.2.643.5.1.13.13.12.2.77.8252.14051001011001020103110813110612,1.2.643.5.1.13.13.12.2.77.8252.10040508121311001415130412050515,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.14100604010411121207140303140506,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.01041213150709070704090905040703,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.157462338378550185821790046400986801350/series_001_2_CR/A2507498707 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.157462338378550185821790046400986801350,1.2.643.5.1.13.13.12.2.77.8252.04090607151301101110121009081500,1.2.643.5.1.13.13.12.2.77.8252.15011410150513090204040606151204,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158197739569377798130962967413133224194/series_002_2_CR/A2504245497 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.158197739569377798130962967413133224194,1.2.643.5.1.13.13.12.2.77.8252.08130702060402020111101401090509,1.2.643.5.1.13.13.12.2.77.8252.09040703010601060814101313081104,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.11050703151212091005010115120315,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.13040700151412120600060201031309,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.158646777318759504110695916200521633609/series_003_6_CR/A2507266260 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.158646777318759504110695916200521633609,1.2.643.5.1.13.13.12.2.77.8252.10030514041010111403040803061004,1.2.643.5.1.13.13.12.2.77.8252.08140602091513140007031414030212,spine,1,artifact,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.159930383074323525630608416881201447861/series_002_2_CR/A2507139428 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.159930383074323525630608416881201447861,1.2.643.5.1.13.13.12.2.77.8252.05080007010908151412021401130712,1.2.643.5.1.13.13.12.2.77.8252.03050413050004110015050414021412,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.164566280810634620154538016595892212884/series_001_2_CR/A2504291878 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.164566280810634620154538016595892212884,1.2.643.5.1.13.13.12.2.77.8252.11031305020803120210110303010607,1.2.643.5.1.13.13.12.2.77.8252.05080909100510090906081209130901,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.164566280810634620154538016595892212884/series_001_2_CR/A2504291878 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.164566280810634620154538016595892212884,1.2.643.5.1.13.13.12.2.77.8252.11031305020803120210110303010607,1.2.643.5.1.13.13.12.2.77.8252.00071210060602011311010906021407,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.164566280810634620154538016595892212884/series_001_2_CR/A2504291878 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.164566280810634620154538016595892212884,1.2.643.5.1.13.13.12.2.77.8252.11031305020803120210110303010607,1.2.643.5.1.13.13.12.2.77.8252.02030112081401101404040904010405,spine,1,positioning,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165091430504580219034019815337441064349/series_001_2_CR/A2504415443 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.165091430504580219034019815337441064349,1.2.643.5.1.13.13.12.2.77.8252.07040007120602101304050600010708,1.2.643.5.1.13.13.12.2.77.8252.14100208080000030010140812001111,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165091430504580219034019815337441064349/series_001_2_CR/A2504415443 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.165091430504580219034019815337441064349,1.2.643.5.1.13.13.12.2.77.8252.07040007120602101304050600010708,1.2.643.5.1.13.13.12.2.77.8252.12140710150813060013011403140807,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165091430504580219034019815337441064349/series_001_2_CR/A2504415443 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.165091430504580219034019815337441064349,1.2.643.5.1.13.13.12.2.77.8252.07040007120602101304050600010708,1.2.643.5.1.13.13.12.2.77.8252.01120104060301100213100004141203,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165355673991587715046346525964554729786/series_003_3_CR/A2506448267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.165355673991587715046346525964554729786,1.2.643.5.1.13.13.12.2.77.8252.12060501010302051215051203010600,1.2.643.5.1.13.13.12.2.77.8252.03030806061309020808141008071213,hip_right,0,,0,0,0,1,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.165355673991587715046346525964554729786/series_003_3_CR/A2506448267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.165355673991587715046346525964554729786,1.2.643.5.1.13.13.12.2.77.8252.12060501010302051215051203010600,1.2.643.5.1.13.13.12.2.77.8252.05130006080703150808130311150104,spine,1,artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.167344201679287285499405412654740659745/series_003_2_CR/A2504249537 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.167344201679287285499405412654740659745,1.2.643.5.1.13.13.12.2.77.8252.11061310061408070513110011010800,1.2.643.5.1.13.13.12.2.77.8252.05050004021105041108010100020012,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.167344201679287285499405412654740659745/series_003_2_CR/A2504249537 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.167344201679287285499405412654740659745,1.2.643.5.1.13.13.12.2.77.8252.11061310061408070513110011010800,1.2.643.5.1.13.13.12.2.77.8252.03020203090713120707041512070302,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.167344201679287285499405412654740659745/series_003_2_CR/A2504249537 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.167344201679287285499405412654740659745,1.2.643.5.1.13.13.12.2.77.8252.11061310061408070513110011010800,1.2.643.5.1.13.13.12.2.77.8252.06020510071406141308051102110806,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.16773626720107440979805052259711419763/series_004_2_CR/A2507537392 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.16773626720107440979805052259711419763,1.2.643.5.1.13.13.12.2.77.8252.09131109110213080611001502040813,1.2.643.5.1.13.13.12.2.77.8252.15000110101510080415120006131402,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.16773626720107440979805052259711419763/series_004_2_CR/A2507537392 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.16773626720107440979805052259711419763,1.2.643.5.1.13.13.12.2.77.8252.09131109110213080611001502040813,1.2.643.5.1.13.13.12.2.77.8252.13040605040810031203041510031012,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.16773626720107440979805052259711419763/series_004_2_CR/A2507537392 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.16773626720107440979805052259711419763,1.2.643.5.1.13.13.12.2.77.8252.09131109110213080611001502040813,1.2.643.5.1.13.13.12.2.77.8252.09031014151115011007041507060209,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.168317503020329569414190677927680518621/series_004_2_CR/A2507557128 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.168317503020329569414190677927680518621,1.2.643.5.1.13.13.12.2.77.8252.11120509060313030005050308070506,1.2.643.5.1.13.13.12.2.77.8252.03110002011112060400010906040109,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.168317503020329569414190677927680518621/series_004_2_CR/A2507557128 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.168317503020329569414190677927680518621,1.2.643.5.1.13.13.12.2.77.8252.11120509060313030005050308070506,1.2.643.5.1.13.13.12.2.77.8252.10050700041001040614050614130103,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.168317503020329569414190677927680518621/series_004_2_CR/A2507557128 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.168317503020329569414190677927680518621,1.2.643.5.1.13.13.12.2.77.8252.11120509060313030005050308070506,1.2.643.5.1.13.13.12.2.77.8252.08150001020008051511060800070004,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.169242707068684757906797344800977707240/series_003_2_CR/A2507185832 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.169242707068684757906797344800977707240,1.2.643.5.1.13.13.12.2.77.8252.11130805080112021004150213051005,1.2.643.5.1.13.13.12.2.77.8252.03020907090204060013031106111312,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.172445998420765569384934552191547932566/series_004_2_CR/A2507368766 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.172445998420765569384934552191547932566,1.2.643.5.1.13.13.12.2.77.8252.07141114011403010702060406101512,1.2.643.5.1.13.13.12.2.77.8252.05030907080814020708000711150507,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.172445998420765569384934552191547932566/series_004_2_CR/A2507368766 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.172445998420765569384934552191547932566,1.2.643.5.1.13.13.12.2.77.8252.07141114011403010702060406101512,1.2.643.5.1.13.13.12.2.77.8252.15151313120000020410110702050700,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.172445998420765569384934552191547932566/series_004_2_CR/A2507368766 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.172445998420765569384934552191547932566,1.2.643.5.1.13.13.12.2.77.8252.07141114011403010702060406101512,1.2.643.5.1.13.13.12.2.77.8252.08131412000401011215150704040610,spine,1,artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173731186748227489808861376513577450951/series_002_2_CR/A2507188958 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.173731186748227489808861376513577450951,1.2.643.5.1.13.13.12.2.77.8252.02011400121411091003041007011307,1.2.643.5.1.13.13.12.2.77.8252.04070212140009090002060410031413,hip_right,0,,0,0,0,1,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173731186748227489808861376513577450951/series_002_2_CR/A2507188958 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.173731186748227489808861376513577450951,1.2.643.5.1.13.13.12.2.77.8252.02011400121411091003041007011307,1.2.643.5.1.13.13.12.2.77.8252.01091510011014070612050311031410,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173753313169335820519632380691065649420/series_003_2_CR/A2504265499 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.173753313169335820519632380691065649420,1.2.643.5.1.13.13.12.2.77.8252.09090912081008051408101503020807,1.2.643.5.1.13.13.12.2.77.8252.10100404000008120405081411021306,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173753313169335820519632380691065649420/series_003_2_CR/A2504265499 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.173753313169335820519632380691065649420,1.2.643.5.1.13.13.12.2.77.8252.09090912081008051408101503020807,1.2.643.5.1.13.13.12.2.77.8252.04111300031205120703050100121209,hip_right,1,roi_incorrect,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.173753313169335820519632380691065649420/series_003_2_CR/A2504265499 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.173753313169335820519632380691065649420,1.2.643.5.1.13.13.12.2.77.8252.09090912081008051408101503020807,1.2.643.5.1.13.13.12.2.77.8252.13001014110608151112110112061114,spine,1,axis_deviation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175881661753775295785039265792986971602/series_003_2_CR/A2507266462 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.175881661753775295785039265792986971602,1.2.643.5.1.13.13.12.2.77.8252.01091501110815031100020500130014,1.2.643.5.1.13.13.12.2.77.8252.06070803110509120507010310141201,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175881661753775295785039265792986971602/series_003_2_CR/A2507266462 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.175881661753775295785039265792986971602,1.2.643.5.1.13.13.12.2.77.8252.01091501110815031100020500130014,1.2.643.5.1.13.13.12.2.77.8252.10000603030913050503020611051415,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175881661753775295785039265792986971602/series_003_2_CR/A2507266462 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.175881661753775295785039265792986971602,1.2.643.5.1.13.13.12.2.77.8252.01091501110815031100020500130014,1.2.643.5.1.13.13.12.2.77.8252.14060403060314010506081209070311,spine,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175903805423871105435148927871625232853/series_001_2_CR/A2507159447 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.175903805423871105435148927871625232853,1.2.643.5.1.13.13.12.2.77.8252.08010308000211020503020307091312,1.2.643.5.1.13.13.12.2.77.8252.13151105000600070510031109011109,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175903805423871105435148927871625232853/series_001_2_CR/A2507159447 DXA/CR DXA/r_hip_02.dcm,r_hip_02.dcm,2.25.175903805423871105435148927871625232853,1.2.643.5.1.13.13.12.2.77.8252.08010308000211020503020307091312,1.2.643.5.1.13.13.12.2.77.8252.15100208060002090813060606131404,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.175903805423871105435148927871625232853/series_001_2_CR/A2507159447 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.175903805423871105435148927871625232853,1.2.643.5.1.13.13.12.2.77.8252.08010308000211020503020307091312,1.2.643.5.1.13.13.12.2.77.8252.12071204070300150506091512141413,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.17706555930735581384953296958427669848/series_004_3_CR/A2504146513 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.17706555930735581384953296958427669848,1.2.643.5.1.13.13.12.2.77.8252.15150900091406150103131401151205,1.2.643.5.1.13.13.12.2.77.8252.08081313070715151208110603030015,hip_left,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.17706555930735581384953296958427669848/series_004_3_CR/A2504146513 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.17706555930735581384953296958427669848,1.2.643.5.1.13.13.12.2.77.8252.15150900091406150103131401151205,1.2.643.5.1.13.13.12.2.77.8252.11051514070611150905020505061111,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.17706555930735581384953296958427669848/series_004_3_CR/A2504146513 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.17706555930735581384953296958427669848,1.2.643.5.1.13.13.12.2.77.8252.15150900091406150103131401151205,1.2.643.5.1.13.13.12.2.77.8252.03050114141207061001080502130215,spine,1,artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.177745077805190810016231350557005569203/series_002_2_CR/A2504273759 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.177745077805190810016231350557005569203,1.2.643.5.1.13.13.12.2.77.8252.11110412020614040803060513120911,1.2.643.5.1.13.13.12.2.77.8252.06130700140211110505051411010711,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.177745077805190810016231350557005569203/series_002_2_CR/A2504273759 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.177745077805190810016231350557005569203,1.2.643.5.1.13.13.12.2.77.8252.11110412020614040803060513120911,1.2.643.5.1.13.13.12.2.77.8252.04150214121314031409051312111410,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.177745077805190810016231350557005569203/series_002_2_CR/A2504273759 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.177745077805190810016231350557005569203,1.2.643.5.1.13.13.12.2.77.8252.11110412020614040803060513120911,1.2.643.5.1.13.13.12.2.77.8252.03031110041309110901030612131412,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.178533355209696795441380751187185128893/series_003_2_CR/A2507155452 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.178533355209696795441380751187185128893,1.2.643.5.1.13.13.12.2.77.8252.05000609021402010711070801100904,1.2.643.5.1.13.13.12.2.77.8252.14110604050810020100071004090404,spine,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.181196659018348153828200695057897449628/series_004_2_CR/A2507370620 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.181196659018348153828200695057897449628,1.2.643.5.1.13.13.12.2.77.8252.04121102011402150303110508111305,1.2.643.5.1.13.13.12.2.77.8252.07040306041313130904140702020908,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.181196659018348153828200695057897449628/series_004_2_CR/A2507370620 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.181196659018348153828200695057897449628,1.2.643.5.1.13.13.12.2.77.8252.04121102011402150303110508111305,1.2.643.5.1.13.13.12.2.77.8252.14150808010700150501131415040808,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.181196659018348153828200695057897449628/series_004_2_CR/A2507370620 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.181196659018348153828200695057897449628,1.2.643.5.1.13.13.12.2.77.8252.04121102011402150303110508111305,1.2.643.5.1.13.13.12.2.77.8252.08141015091400020302110912090508,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.184198356665635336833172191504278054074/series_004_2_CR/A250788286 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.184198356665635336833172191504278054074,1.2.643.5.1.13.13.12.2.77.8252.04101108050208091310021407111214,1.2.643.5.1.13.13.12.2.77.8252.02150805140008141106110606070801,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.184198356665635336833172191504278054074/series_004_2_CR/A250788286 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.184198356665635336833172191504278054074,1.2.643.5.1.13.13.12.2.77.8252.04101108050208091310021407111214,1.2.643.5.1.13.13.12.2.77.8252.11141409010404080202090702050104,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.184198356665635336833172191504278054074/series_004_2_CR/A250788286 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.184198356665635336833172191504278054074,1.2.643.5.1.13.13.12.2.77.8252.04101108050208091310021407111214,1.2.643.5.1.13.13.12.2.77.8252.04151306060901060605121400081206,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.186201010600484120326273381077449377115/series_004_2_CR/A250777475 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.186201010600484120326273381077449377115,1.2.643.5.1.13.13.12.2.77.8252.04030111120106061513080209011000,1.2.643.5.1.13.13.12.2.77.8252.00091315091215060415120908060402,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.186201010600484120326273381077449377115/series_004_2_CR/A250777475 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.186201010600484120326273381077449377115,1.2.643.5.1.13.13.12.2.77.8252.04030111120106061513080209011000,1.2.643.5.1.13.13.12.2.77.8252.01110601131107041511021510061211,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.186201010600484120326273381077449377115/series_004_2_CR/A250777475 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.186201010600484120326273381077449377115,1.2.643.5.1.13.13.12.2.77.8252.04030111120106061513080209011000,1.2.643.5.1.13.13.12.2.77.8252.07140512060315100814061103061308,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.03000010070307110614031003090302,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11050911061500091304001000100608,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190331309633057244929837507901317950031/series_001_2_CR/A250791815 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.190331309633057244929837507901317950031,1.2.643.5.1.13.13.12.2.77.8252.08070600001410030512060707091212,1.2.643.5.1.13.13.12.2.77.8252.11100109131006120600020910050910,spine,1,axis_deviation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.10101410111513000809081215030802,hip_right,0,,0,0,0,1,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.190807933410234695931591553323782771995/series_002_3_CR/A250762254 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.190807933410234695931591553323782771995,1.2.643.5.1.13.13.12.2.77.8252.13050309140908091510010214121510,1.2.643.5.1.13.13.12.2.77.8252.04000404020304020301120408100801,spine,1,artifact,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.00070615051510041500030210150312,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.02120211101306000510080011031411,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.215177279960644564778148238928738915103/series_002_2_CR/A2504147013 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.215177279960644564778148238928738915103,1.2.643.5.1.13.13.12.2.77.8252.13011101150906100811130003020808,1.2.643.5.1.13.13.12.2.77.8252.05011012001311141515001115080104,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.217397325224876728316360420804118329081/series_002_2_CR/A250474631 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.217397325224876728316360420804118329081,1.2.643.5.1.13.13.12.2.77.8252.15060506051311040306151405130812,1.2.643.5.1.13.13.12.2.77.8252.10000400041408060608031009090710,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.217397325224876728316360420804118329081/series_002_2_CR/A250474631 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.217397325224876728316360420804118329081,1.2.643.5.1.13.13.12.2.77.8252.15060506051311040306151405130812,1.2.643.5.1.13.13.12.2.77.8252.02091115080411030312040600000701,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.217397325224876728316360420804118329081/series_002_2_CR/A250474631 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.217397325224876728316360420804118329081,1.2.643.5.1.13.13.12.2.77.8252.15060506051311040306151405130812,1.2.643.5.1.13.13.12.2.77.8252.04131001000110131311121304090609,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.220866240977467582196609708837940253840/series_001_2_CR/A2504258893 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.220866240977467582196609708837940253840,1.2.643.5.1.13.13.12.2.77.8252.04071115100300090601031200020808,1.2.643.5.1.13.13.12.2.77.8252.03010603150012061509030005111300,spine,1,axis_deviation,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.234651502352368356456298825489565282446/series_002_2_CR/A2504307193 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.234651502352368356456298825489565282446,1.2.643.5.1.13.13.12.2.77.8252.11000715091405120315010100101510,1.2.643.5.1.13.13.12.2.77.8252.02051208030605070510050510081213,hip_left,1,rotation,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.234651502352368356456298825489565282446/series_002_2_CR/A2504307193 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.234651502352368356456298825489565282446,1.2.643.5.1.13.13.12.2.77.8252.11000715091405120315010100101510,1.2.643.5.1.13.13.12.2.77.8252.09140613011500120102030800080807,hip_right,1,rotation,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.234651502352368356456298825489565282446/series_002_2_CR/A2504307193 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.234651502352368356456298825489565282446,1.2.643.5.1.13.13.12.2.77.8252.11000715091405120315010100101510,1.2.643.5.1.13.13.12.2.77.8252.09031307051100020212010511060414,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.247714038039430659432048101646401574824/series_002_2_CR/A2504238024 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.247714038039430659432048101646401574824,1.2.643.5.1.13.13.12.2.77.8252.01010712071105151008051412091100,1.2.643.5.1.13.13.12.2.77.8252.13110800060502010303101404091303,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.247714038039430659432048101646401574824/series_002_2_CR/A2504238024 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.247714038039430659432048101646401574824,1.2.643.5.1.13.13.12.2.77.8252.01010712071105151008051412091100,1.2.643.5.1.13.13.12.2.77.8252.06051510010614000404080600020603,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.247714038039430659432048101646401574824/series_002_2_CR/A2504238024 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.247714038039430659432048101646401574824,1.2.643.5.1.13.13.12.2.77.8252.01010712071105151008051412091100,1.2.643.5.1.13.13.12.2.77.8252.06030210110500061108030910090908,spine,1,artifact,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12031014110715041000030602140501,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.12130902030702050210110604020115,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269648774413746842548908998641183395622/series_001_2_CR/A2504393664 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.269648774413746842548908998641183395622,1.2.643.5.1.13.13.12.2.77.8252.13000111030510001210030508000815,1.2.643.5.1.13.13.12.2.77.8252.02001209000515050108060411111311,spine,1,axis_deviation;artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.269742577365511543488820993979123763373/series_003_2_CR/A250477751 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.269742577365511543488820993979123763373,1.2.643.5.1.13.13.12.2.77.8252.05011409090000061404080803060404,1.2.643.5.1.13.13.12.2.77.8252.11081308031311040302130506061304,spine,1,unspecified,0,1,1,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.01011201030601080312040805131303,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06121304010102150202081301011406,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.272690031744216183651627058502316132741/series_002_2_CR/A2504373414 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.272690031744216183651627058502316132741,1.2.643.5.1.13.13.12.2.77.8252.15120712020613071211131414040509,1.2.643.5.1.13.13.12.2.77.8252.06030606140315081407041104141012,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.06120002061108140400041203121102,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.15130815100101091501031008111015,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.276415754443998872860614500027519740375/series_002_2_CR/A2504387089 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.276415754443998872860614500027519740375,1.2.643.5.1.13.13.12.2.77.8252.06111506140814121408000710091014,1.2.643.5.1.13.13.12.2.77.8252.13000009090006001202001212051006,spine,1,unspecified,0,1,1,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/l_hip_01_bad.dcm,l_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.11140100091110050501140207060912,hip_left,1,roi_incorrect,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.09010705011309010307011213150407,hip_right,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.277752758923974029595977676354128739670/series_002_2_CR/A2504223752 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.277752758923974029595977676354128739670,1.2.643.5.1.13.13.12.2.77.8252.01150001000900060703031302131108,1.2.643.5.1.13.13.12.2.77.8252.15080302090100001214141305071301,spine,1,artifact,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.11091010090201121300090614051311,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.15080906090913051107110915140103,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.286999464611662854355201599068538813496/series_003_2_CR/A2504223477 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.286999464611662854355201599068538813496,1.2.643.5.1.13.13.12.2.77.8252.06121310051313071012071011000214,1.2.643.5.1.13.13.12.2.77.8252.02141512030209141106060309030501,spine,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.29638026465755240167985424461715024381/series_004_3_CR/A2504115579 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.29638026465755240167985424461715024381,1.2.643.5.1.13.13.12.2.77.8252.09020304121009030507130509070701,1.2.643.5.1.13.13.12.2.77.8252.09040806151211060704090912150608,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.29638026465755240167985424461715024381/series_004_3_CR/A2504115579 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.29638026465755240167985424461715024381,1.2.643.5.1.13.13.12.2.77.8252.09020304121009030507130509070701,1.2.643.5.1.13.13.12.2.77.8252.12090901030412121214030908040015,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.29638026465755240167985424461715024381/series_004_3_CR/A2504115579 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.29638026465755240167985424461715024381,1.2.643.5.1.13.13.12.2.77.8252.09020304121009030507130509070701,1.2.643.5.1.13.13.12.2.77.8252.12021011000615031102060001101203,spine,1,positioning,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.306921081709806079165809721263236241032/series_002_2_CR/A2504381177 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.306921081709806079165809721263236241032,1.2.643.5.1.13.13.12.2.77.8252.13070707001109051012021502000705,1.2.643.5.1.13.13.12.2.77.8252.05140704131104071313121101000313,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.12090115120005000603040515131409,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.09020610121102091006070609000414,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.307021710202910067378603383388989711646/series_004_2_CR/A2504110565 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.307021710202910067378603383388989711646,1.2.643.5.1.13.13.12.2.77.8252.04040806101100130101150009051415,1.2.643.5.1.13.13.12.2.77.8252.10011315050807060809100706050011,spine,1,artifact,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.09030700121011131209150303151015,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.07070904150315000704031208001011,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.309085571913348252136520206003694446566/series_002_2_CR/A2504116267 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.309085571913348252136520206003694446566,1.2.643.5.1.13.13.12.2.77.8252.06051105050701010502031403141206,1.2.643.5.1.13.13.12.2.77.8252.03121103130007121510030803050514,spine,1,axis_deviation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02000306061002040514101500000812,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.01130904120915050401031210031001,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.314147167453134440746270747484612743945/series_002_2_CR/A2504224780 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.314147167453134440746270747484612743945,1.2.643.5.1.13.13.12.2.77.8252.10110305110802141404051200020210,1.2.643.5.1.13.13.12.2.77.8252.02120204101515130306021007150210,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.322202456901330781765399791024580391565/series_002_2_CR/A2504350020 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.322202456901330781765399791024580391565,1.2.643.5.1.13.13.12.2.77.8252.10000214070110110712041100051105,1.2.643.5.1.13.13.12.2.77.8252.06061007030610120805010913100711,spine,1,unspecified,0,1,1,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.338439598607961312040815816824093323492/series_002_2_CR/A2504147124 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.338439598607961312040815816824093323492,1.2.643.5.1.13.13.12.2.77.8252.09061205050201001102041514000912,1.2.643.5.1.13.13.12.2.77.8252.13110108131113110013070512051310,spine,1,artifact,1,1,0,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.05111003151314100612100700031506,hip_left,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.11010912010413080807030107050600,hip_right,0,,0,0,0,0,0,union,0,,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.339027809107632348165171236474821772940/series_001_2_CR/A2504349642 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.339027809107632348165171236474821772940,1.2.643.5.1.13.13.12.2.77.8252.00021509100701140314011205150113,1.2.643.5.1.13.13.12.2.77.8252.04091012040015061107090014081504,spine,1,unspecified,1,1,0,0,0,union,0,bad,сколиоз
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.340839477910528898406207279980417945/series_001_2_CR/A2504224555 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.340839477910528898406207279980417945,1.2.643.5.1.13.13.12.2.77.8252.02100613110404001511060101141303,1.2.643.5.1.13.13.12.2.77.8252.05030701101012140702110704000714,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.340839477910528898406207279980417945/series_001_2_CR/A2504224555 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.340839477910528898406207279980417945,1.2.643.5.1.13.13.12.2.77.8252.02100613110404001511060101141303,1.2.643.5.1.13.13.12.2.77.8252.14120712151005010200040708001308,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.340839477910528898406207279980417945/series_001_2_CR/A2504224555 DXA Exam/CR DXA Images/spine_01.dcm,spine_01.dcm,2.25.340839477910528898406207279980417945,1.2.643.5.1.13.13.12.2.77.8252.02100613110404001511060101141303,1.2.643.5.1.13.13.12.2.77.8252.12111312010203070900101115051015,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.37515662379281069436632838996073181551/series_001_2_CR/A2504329840 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.37515662379281069436632838996073181551,1.2.643.5.1.13.13.12.2.77.8252.08050709020911100006011108031308,1.2.643.5.1.13.13.12.2.77.8252.08110803070615141513021414111001,hip_left,0,,0,0,0,0,0,union,0,,Хороший пример отклонения оси при КТ п-ка
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.37515662379281069436632838996073181551/series_001_2_CR/A2504329840 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.37515662379281069436632838996073181551,1.2.643.5.1.13.13.12.2.77.8252.08050709020911100006011108031308,1.2.643.5.1.13.13.12.2.77.8252.12090208061115110101131315120813,hip_right,0,,0,0,0,0,0,union,0,,Хороший пример отклонения оси при КТ п-ка
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.37515662379281069436632838996073181551/series_001_2_CR/A2504329840 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.37515662379281069436632838996073181551,1.2.643.5.1.13.13.12.2.77.8252.08050709020911100006011108031308,1.2.643.5.1.13.13.12.2.77.8252.05001409080504151204111500000514,spine,1,axis_deviation,1,1,0,0,0,union,0,bad,Хороший пример отклонения оси при КТ п-ка
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.00030605020706130003080307080701,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.07150610130411050211021514011106,hip_right,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.39068163399801173920284179500049527111/series_002_2_CR/A2504195842 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.39068163399801173920284179500049527111,1.2.643.5.1.13.13.12.2.77.8252.14030514000710060800130100011214,1.2.643.5.1.13.13.12.2.77.8252.15141302131508150312140605060212,spine,1,axis_deviation;artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/l_hip_01.dcm,l_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.06080100090802110008000311010501,hip_left,1,rotation,1,0,1,0,0,union,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/r_hip_01.dcm,r_hip_01.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.03010404051000131408111209140108,hip_right,1,rotation,1,0,1,0,0,union,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.48906424954135283790354958243772558962/series_001_2_CR/A2504185596 DXA Exam/CR DXA Images/spine_01_bad.dcm,spine_01_bad.dcm,2.25.48906424954135283790354958243772558962,1.2.643.5.1.13.13.12.2.77.8252.06031007110009040706001109051004,1.2.643.5.1.13.13.12.2.77.8252.02031401091510001200041308031003,spine,1,artifact,1,1,0,0,0,union,0,bad,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52532476139575422857225834315571570912/series_001_2_CR/A2504247961 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.52532476139575422857225834315571570912,1.2.643.5.1.13.13.12.2.77.8252.12150004000513030900100606011509,1.2.643.5.1.13.13.12.2.77.8252.07120809010109050202061111011110,spine,1,unspecified,1,1,0,0,0,union,0,bad,"Сколиоз, не верня разметка"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.07081506021006111207090213090701,hip_left,0,,0,0,0,0,0,union,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.06001210040802120801060507001509,hip_right,0,,0,0,0,0,0,union,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.52982400970721161435951723390541696819/series_001_2_CR/A2504331065 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.52982400970721161435951723390541696819,1.2.643.5.1.13.13.12.2.77.8252.14030804041506011403100115131006,1.2.643.5.1.13.13.12.2.77.8252.02030504060005060505040905021305,spine,1,positioning,1,0,1,0,0,union,0,,"L6, люмбализация"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.54396839637320114639948764487283877793/series_003_2_CR/A2504111090 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.54396839637320114639948764487283877793,1.2.643.5.1.13.13.12.2.77.8252.15041203090015060404010507050405,1.2.643.5.1.13.13.12.2.77.8252.02060605151213121009151302130207,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.59542620917302828428419211045951914336/series_001_2_CR/A2504303391 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.59542620917302828428419211045951914336,1.2.643.5.1.13.13.12.2.77.8252.13101512050003031109001004060403,1.2.643.5.1.13.13.12.2.77.8252.07101010011513020401030213080905,spine,1,artifact,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.65954778282254353457041255543338557112/series_004_3_CR/A2504246289 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.65954778282254353457041255543338557112,1.2.643.5.1.13.13.12.2.77.8252.09110800100012120800030006041405,1.2.643.5.1.13.13.12.2.77.8252.11130315030911081202140406010814,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.65954778282254353457041255543338557112/series_004_3_CR/A2504246289 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.65954778282254353457041255543338557112,1.2.643.5.1.13.13.12.2.77.8252.09110800100012120800030006041405,1.2.643.5.1.13.13.12.2.77.8252.10000615050107010300151404090301,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.65954778282254353457041255543338557112/series_004_3_CR/A2504246289 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.65954778282254353457041255543338557112,1.2.643.5.1.13.13.12.2.77.8252.09110800100012120800030006041405,1.2.643.5.1.13.13.12.2.77.8252.05111111030105140803060510040613,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.08021214010408050013070405100802,hip_left,1,rotation,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/r_hip_01_bad.dcm,r_hip_01_bad.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.02091011000006010704070004091411,hip_right,1,rotation,1,1,0,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.66397484472966116002950503539482860450/series_001_2_CR/A2504194637 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.66397484472966116002950503539482860450,1.2.643.5.1.13.13.12.2.77.8252.00140708141309070509131215090805,1.2.643.5.1.13.13.12.2.77.8252.01011407000709010910090115010000,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/l_hip_02_bad.dcm,l_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.09110310111109140609041514031010,hip_left,1,rotation,1,1,0,0,0,union,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/r_hip_02_bad.dcm,r_hip_02_bad.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.13090506040311041500070413151313,hip_right,1,rotation,1,1,0,0,0,union,0,bad,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.73070100851377917031356937075051545239/series_002_2_CR/A2504239110 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.73070100851377917031356937075051545239,1.2.643.5.1.13.13.12.2.77.8252.04140410030403000101120807100701,1.2.643.5.1.13.13.12.2.77.8252.07150604010711031305090702140107,spine,1,axis_deviation,1,0,1,0,0,union,0,,"Отклонение оси, нет малых вертелов"
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.14130302090906050506100315000611,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.02050808061207030811150709091509,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.76710355977373089612172037086913478687/series_002_3_CR/A2504104830 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.76710355977373089612172037086913478687,1.2.643.5.1.13.13.12.2.77.8252.02001413040700010813000013120308,1.2.643.5.1.13.13.12.2.77.8252.06151311061015011100110511080701,spine,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.78999454687125053757525542837745968726/series_004_3_CR/A2504222617 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.78999454687125053757525542837745968726,1.2.643.5.1.13.13.12.2.77.8252.11011102050904000102020212011404,1.2.643.5.1.13.13.12.2.77.8252.07150713040501120002001009141410,hip_left,1,rotation,1,0,1,0,0,union,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.78999454687125053757525542837745968726/series_004_3_CR/A2504222617 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.78999454687125053757525542837745968726,1.2.643.5.1.13.13.12.2.77.8252.11011102050904000102020212011404,1.2.643.5.1.13.13.12.2.77.8252.05120913001500151408091003040415,hip_right,1,rotation,1,0,1,0,0,union,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.78999454687125053757525542837745968726/series_004_3_CR/A2504222617 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.78999454687125053757525542837745968726,1.2.643.5.1.13.13.12.2.77.8252.11011102050904000102020212011404,1.2.643.5.1.13.13.12.2.77.8252.11011500050713141305050211140308,spine,0,,0,0,0,0,0,union,0,,Требует внимание
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.82912555346523716720160717883917565880/series_002_2_CR/A2504149480 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.82912555346523716720160717883917565880,1.2.643.5.1.13.13.12.2.77.8252.07120201111314111500000602130205,1.2.643.5.1.13.13.12.2.77.8252.13130903011502030304101506090814,hip_left,0,,0,0,0,0,0,union,0,,Хороший пример ротации
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.82912555346523716720160717883917565880/series_002_2_CR/A2504149480 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.82912555346523716720160717883917565880,1.2.643.5.1.13.13.12.2.77.8252.07120201111314111500000602130205,1.2.643.5.1.13.13.12.2.77.8252.15121403061107000609060400100413,hip_right,1,rotation,1,0,1,0,0,union,0,,Хороший пример ротации
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.82912555346523716720160717883917565880/series_002_2_CR/A2504149480 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.82912555346523716720160717883917565880,1.2.643.5.1.13.13.12.2.77.8252.07120201111314111500000602130205,1.2.643.5.1.13.13.12.2.77.8252.15001111061311011106030303001309,spine,0,,0,0,0,0,0,union,0,,Хороший пример ротации
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87718478011637131470224319788530286374/series_002_2_CR/A2504337993 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.87718478011637131470224319788530286374,1.2.643.5.1.13.13.12.2.77.8252.07060506150205030514061006111408,1.2.643.5.1.13.13.12.2.77.8252.10041006131411151513070104110809,spine,1,unspecified,0,1,1,0,0,union,0,bad,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.15101115041306031303150405131115,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.06111209081313111015020309051508,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.87869906212286587478854831452123526595/series_002_2_CR/A250419699 DXA/CR DXA/spine_01.dcm,spine_01.dcm,2.25.87869906212286587478854831452123526595,1.2.643.5.1.13.13.12.2.77.8252.09131504151204000006060612091203,1.2.643.5.1.13.13.12.2.77.8252.04050904100201141507070306131511,spine,1,artifact,1,0,1,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/l_hip_01.dcm,l_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.04000607141411061507120106050309,hip_left,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/r_hip_01.dcm,r_hip_01.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.08061201060114131102110802141411,hip_right,0,,0,0,0,0,0,union,0,,
|
||||
dataset_hack/НД_для_обучения/Исследования/2.25.91981043841368764114007975581101713077/series_003_2_CR/A250496619 DXA/CR DXA/spine_01_bad.dcm,spine_01_bad.dcm,2.25.91981043841368764114007975581101713077,1.2.643.5.1.13.13.12.2.77.8252.07090507040208000106080811060202,1.2.643.5.1.13.13.12.2.77.8252.07021003040810040809000711080701,spine,1,positioning,1,1,0,0,0,union,0,bad,
|
||||
|
|
|
|||
|
Binary file not shown.
|
|
@ -22,6 +22,6 @@
|
|||
],
|
||||
"val_fraction": 0.2,
|
||||
"seed": 42,
|
||||
"train_images": 199,
|
||||
"train_images": 198,
|
||||
"val_images": 53
|
||||
}
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -4,23 +4,23 @@
|
|||
- Устройство: `mps`
|
||||
- Источник меток: `labels/labels_images.csv`
|
||||
- Seed: 42, балансировка классов: `none`
|
||||
- Размер выборок: train 199 снимков / 81 исследований, val 53 снимков / 19 исследований (разбиение по исследованиям)
|
||||
- Размер выборок: train 198 снимков / 81 исследований, val 53 снимков / 19 исследований (разбиение по исследованиям)
|
||||
- Предобработка: `{'norm': 'percentile', 'p_low': 0.5, 'p_high': 99.5, 'imagenet_norm': True, 'input_size': 224}`
|
||||
- Обучено эпох: 64, лучшая эпоха: 39
|
||||
- Рабочий порог (подобран по F1 на валидации): логит -0.4930 (вероятность 0.3792)
|
||||
- Обучено эпох: 82, лучшая эпоха: 57
|
||||
- Рабочий порог (подобран по F1 на валидации): логит -0.1370 (вероятность 0.4658)
|
||||
|
||||
## Метрики на валидации (лучший чекпоинт)
|
||||
|
||||
| Метрика | Значение |
|
||||
|---|---|
|
||||
| Accuracy | 0.5849 |
|
||||
| Precision | 0.4118 |
|
||||
| Recall | 0.8750 |
|
||||
| F1 | 0.5600 |
|
||||
| ROC-AUC | 0.6706 |
|
||||
| PR-AUC | 0.4585 |
|
||||
| Порог (логит / вероятность) | -0.4930 / 0.3792 |
|
||||
| TP/TN/FP/FN | 14/17/20/2 |
|
||||
| Accuracy | 0.6792 |
|
||||
| Precision | 0.4783 |
|
||||
| Recall | 0.6875 |
|
||||
| F1 | 0.5641 |
|
||||
| ROC-AUC | 0.6689 |
|
||||
| PR-AUC | 0.4769 |
|
||||
| Порог (логит / вероятность) | -0.1370 / 0.4658 |
|
||||
| TP/TN/FP/FN | 11/25/12/5 |
|
||||
|
||||
> Валидация невелика (единицы исследований), поэтому метрики имеют широкий доверительный интервал и не заменяют оценку на закрытом наборе.
|
||||
|
||||
|
|
@ -28,9 +28,9 @@
|
|||
|
||||
| Область | n | Нарушений | ROC-AUC | F1 | Recall |
|
||||
|---|---|---|---|---|---|
|
||||
| spine | 19 | 5 | 0.9429 | 0.6667 | 1.0000 |
|
||||
| hip_right | 17 | 6 | 0.5758 | 0.5333 | 0.6667 |
|
||||
| hip_left | 17 | 5 | 0.5500 | 0.5000 | 1.0000 |
|
||||
| spine | 19 | 5 | 0.9286 | 0.8000 | 0.8000 |
|
||||
| hip_right | 17 | 6 | 0.6061 | 0.5714 | 0.6667 |
|
||||
| hip_left | 17 | 5 | 0.5667 | 0.4000 | 0.6000 |
|
||||
|
||||
> Нарушения в наборе распределены крайне неравномерно (в позвоночнике ~29 % снимков против ~4–5 % у бёдер), а анатомическая область почти однозначно определяется по размеру кадра. Поэтому общий AUC частично отражает различение области, а не только распознавание дефекта: сопоставляйте общий показатель со значениями по областям.
|
||||
|
||||
|
|
|
|||
27
run.sh
27
run.sh
|
|
@ -5,9 +5,10 @@
|
|||
# Использование: ./run.sh <команда> [аргументы]
|
||||
# ./run.sh train [доп. аргументы для src.dxa.train]
|
||||
# ./run.sh infer <вход> <выход.xlsx|.csv> [доп. аргументы]
|
||||
# ./run.sh serve [порт]
|
||||
# ./run.sh serve [порт] http://localhost:PORT — анализ; /label — ручная разметка
|
||||
# ./run.sh label
|
||||
# ./run.sh split
|
||||
# ./run.sh review [--limit N] пакет ручной разметки для врача; --merge — наложить вердикты
|
||||
# ./run.sh rename [--apply]
|
||||
# ./run.sh compare
|
||||
# ./run.sh test
|
||||
|
|
@ -28,6 +29,7 @@ LABELS_CSV=${LABELS_CSV:-labels/labels_images.csv}
|
|||
LABELS_REFERENCE_CSV=${LABELS_REFERENCE_CSV:-labels/labels_images_expert.csv}
|
||||
SPLIT_FILE=${SPLIT_FILE:-labels/split_expert_seed42.json}
|
||||
RENAME_MAP=${RENAME_MAP:-labels/rename_map.csv}
|
||||
REVIEW_OUT=${REVIEW_OUT:-review/doctor_review.html}
|
||||
PORT=${PORT:-8000}
|
||||
|
||||
command=${1:-help}
|
||||
|
|
@ -88,6 +90,29 @@ case "$command" in
|
|||
"$@"
|
||||
;;
|
||||
|
||||
review)
|
||||
# Два режима у одной команды: собрать пакет для специалиста или наложить
|
||||
# вернувшиеся вердикты. Наличие --merge в аргументах и различает их.
|
||||
if [[ " $* " == *" --merge "* ]]; then
|
||||
echo -e "${YELLOW}Наложение вердиктов специалиста на построенную разметку${NC}"
|
||||
"$PYTHON" -m src.dxa.review_pack \
|
||||
--data-root "$DATA_ROOT" \
|
||||
--annotation-path "$ANNOTATION_PATH" \
|
||||
--labels-csv "$LABELS_CSV" \
|
||||
"$@"
|
||||
else
|
||||
echo -e "${YELLOW}Пакет ручной разметки для специалиста${NC}"
|
||||
echo " пакет: $REVIEW_OUT (переопределяется --out)"
|
||||
echo " вернувшиеся вердикты: ./run.sh review --merge review/doctor.csv --out labels/labels_images_reviewed.csv"
|
||||
"$PYTHON" -m src.dxa.review_pack \
|
||||
--data-root "$DATA_ROOT" \
|
||||
--annotation-path "$ANNOTATION_PATH" \
|
||||
--labels-csv "$LABELS_CSV" \
|
||||
--out "$REVIEW_OUT" \
|
||||
"$@"
|
||||
fi
|
||||
;;
|
||||
|
||||
rename)
|
||||
echo -e "${YELLOW}Приведение имён DICOM к единому виду${NC}"
|
||||
if [ "${1:-}" = "--apply" ]; then
|
||||
|
|
|
|||
|
|
@ -0,0 +1,494 @@
|
|||
/*
|
||||
* Интерфейс ручной разметки снимков.
|
||||
*
|
||||
* Работает поверх /api/v1/labeling/*: список снимков с текущей меткой и её
|
||||
* происхождением, просмотр снимка и сохранение вердикта специалиста. Оценка
|
||||
* модели здесь намеренно не запрашивается — подсказка смещала бы разметчика, а
|
||||
* назначение инструмента ровно в том, чтобы получить независимое суждение
|
||||
* человека (раздел 2.6 задания: подтверждение разметки специалистом).
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
const REGION_LABELS = {
|
||||
spine: 'Позвоночник',
|
||||
hip_right: 'Бедро R',
|
||||
hip_left: 'Бедро L',
|
||||
'': 'область не определена',
|
||||
};
|
||||
|
||||
const SOURCE_LABELS = {
|
||||
table: 'экспертная таблица',
|
||||
filename: 'имя файла',
|
||||
manual: 'ручной вердикт',
|
||||
};
|
||||
|
||||
const state = {
|
||||
items: [],
|
||||
total: 0,
|
||||
offset: 0,
|
||||
limit: 24,
|
||||
selected: null,
|
||||
progress: null,
|
||||
regions: [],
|
||||
violations: [],
|
||||
loading: false,
|
||||
};
|
||||
|
||||
const $ = (id) => document.getElementById(id);
|
||||
|
||||
function esc(value) {
|
||||
return String(value === null || value === undefined ? '' : value).replace(
|
||||
/[&<>"']/g,
|
||||
(ch) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[ch])
|
||||
);
|
||||
}
|
||||
|
||||
function regionLabel(region) {
|
||||
return REGION_LABELS[region] || region || REGION_LABELS[''];
|
||||
}
|
||||
|
||||
function labelBadge(label, source) {
|
||||
const isBad = Number(label) === 1;
|
||||
const cls = isBad
|
||||
? 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300'
|
||||
: 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300';
|
||||
const text = isBad ? 'нарушение' : 'годное';
|
||||
return `<span class="px-2 py-0.5 rounded text-xs ${cls}">${text}</span>
|
||||
<span class="text-xs text-gray-500 dark:text-gray-400">${esc(SOURCE_LABELS[source] || source)}</span>`;
|
||||
}
|
||||
|
||||
async function api(url, options) {
|
||||
const response = await fetch(url, options);
|
||||
let payload = null;
|
||||
try {
|
||||
payload = await response.json();
|
||||
} catch (err) {
|
||||
payload = null;
|
||||
}
|
||||
if (!response.ok) {
|
||||
const message = (payload && payload.error) || `HTTP ${response.status}`;
|
||||
throw new Error(message);
|
||||
}
|
||||
return payload;
|
||||
}
|
||||
|
||||
/* --- Фильтры и список ---------------------------------------------------- */
|
||||
|
||||
function itemQuery(extra) {
|
||||
const params = new URLSearchParams();
|
||||
params.set('limit', String(state.limit));
|
||||
params.set('offset', String(state.offset));
|
||||
const region = $('filterRegion').value;
|
||||
if (region) params.set('region', region);
|
||||
if ($('filterConflicts').checked) params.set('conflicts', 'true');
|
||||
if ($('filterUnreviewed').checked) params.set('unreviewed', 'true');
|
||||
const query = $('filterQuery').value.trim();
|
||||
if (query) params.set('q', query);
|
||||
Object.entries(extra || {}).forEach(([key, value]) => params.set(key, value));
|
||||
return params;
|
||||
}
|
||||
|
||||
async function loadItems(reset) {
|
||||
if (state.loading) return;
|
||||
state.loading = true;
|
||||
if (reset) {
|
||||
state.offset = 0;
|
||||
state.items = [];
|
||||
}
|
||||
|
||||
try {
|
||||
const payload = await api(`/api/v1/labeling/items?${itemQuery()}`);
|
||||
state.total = payload.total;
|
||||
state.progress = payload.progress;
|
||||
state.regions = payload.regions;
|
||||
state.violations = payload.violations;
|
||||
state.items = reset ? payload.items : state.items.concat(payload.items);
|
||||
state.offset = state.items.length;
|
||||
renderSummary();
|
||||
renderList();
|
||||
} catch (err) {
|
||||
showError(`Не удалось получить список снимков: ${err.message}`);
|
||||
} finally {
|
||||
state.loading = false;
|
||||
}
|
||||
}
|
||||
|
||||
function renderSummary() {
|
||||
const progress = state.progress || {};
|
||||
const total = progress.total || 0;
|
||||
const reviewed = progress.reviewed || 0;
|
||||
const percent = total ? Math.round((reviewed / total) * 100) : 0;
|
||||
|
||||
$('progressText').textContent = `Разобрано ${reviewed} из ${total} снимков (${percent}%)`;
|
||||
$('progressBar').style.width = `${percent}%`;
|
||||
$('conflictText').textContent = progress.filename_conflict
|
||||
? `${progress.filename_conflict} расхождений разметки с именем файла`
|
||||
: '';
|
||||
$('byRegion').textContent = Object.entries(progress.by_region || {})
|
||||
.map(([region, counts]) => `${regionLabel(region)}: ${counts.reviewed}/${counts.total}`)
|
||||
.join(' · ');
|
||||
}
|
||||
|
||||
function renderList() {
|
||||
const list = $('list');
|
||||
if (!state.items.length) {
|
||||
list.innerHTML = '<p class="text-sm text-gray-500 dark:text-gray-400 p-3">Под фильтр ничего не подошло.</p>';
|
||||
$('more').classList.add('hidden');
|
||||
return;
|
||||
}
|
||||
|
||||
list.innerHTML = state.items
|
||||
.map((item) => {
|
||||
const active = state.selected && state.selected.path === item.path;
|
||||
const conflict = item.filename_conflict
|
||||
? '<span class="px-1.5 py-0.5 rounded text-xs bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300">расхождение</span>'
|
||||
: '';
|
||||
const reviewed = item.reviewed
|
||||
? '<i class="fas fa-circle-check text-green-600 dark:text-green-400"></i>'
|
||||
: '<i class="fas fa-circle text-xs text-gray-300 dark:text-gray-600"></i>';
|
||||
return `<button class="item-card w-full text-left p-2.5 rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700 ${active ? 'active' : ''}"
|
||||
data-path="${esc(item.path)}">
|
||||
<div class="flex items-center justify-between gap-2">
|
||||
<span class="text-sm font-medium truncate">${esc(item.file)}</span>
|
||||
${reviewed}
|
||||
</div>
|
||||
<div class="flex flex-wrap items-center gap-2 mt-1">
|
||||
${labelBadge(item.label, item.label_source)}
|
||||
<span class="text-xs text-gray-500 dark:text-gray-400">${esc(regionLabel(item.region))}</span>
|
||||
${conflict}
|
||||
</div>
|
||||
${item.violation_label ? `<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">${esc(item.violation_label)}</div>` : ''}
|
||||
</button>`;
|
||||
})
|
||||
.join('');
|
||||
|
||||
list.querySelectorAll('[data-path]').forEach((node) => {
|
||||
node.addEventListener('click', () => selectItem(node.dataset.path, false));
|
||||
});
|
||||
|
||||
$('more').classList.toggle('hidden', state.items.length >= state.total);
|
||||
}
|
||||
|
||||
/* --- Разбор выбранного снимка -------------------------------------------- */
|
||||
|
||||
function selectItem(path, scroll) {
|
||||
const item = state.items.find((candidate) => candidate.path === path);
|
||||
if (!item) return;
|
||||
state.selected = item;
|
||||
renderList();
|
||||
renderDetail();
|
||||
if (scroll) {
|
||||
const node = $('list').querySelector(`[data-path="${CSS.escape(path)}"]`);
|
||||
if (node) node.scrollIntoView({ block: 'nearest' });
|
||||
}
|
||||
}
|
||||
|
||||
function violationsFor(region) {
|
||||
const matches = state.violations.filter((entry) => {
|
||||
if (entry.scope === 'any') return true;
|
||||
if (entry.scope === 'hip') return region === 'hip_right' || region === 'hip_left';
|
||||
return entry.scope === region;
|
||||
});
|
||||
// Критерий конкретной области идёт первым: на бедре это ротация, а не
|
||||
// артефакт, который подходит любой области и потому стоит выше в словаре.
|
||||
return matches
|
||||
.filter((entry) => entry.scope !== 'any')
|
||||
.concat(matches.filter((entry) => entry.scope === 'any'));
|
||||
}
|
||||
|
||||
function renderDetail() {
|
||||
const item = state.selected;
|
||||
const detail = $('detail');
|
||||
if (!item) {
|
||||
detail.innerHTML = '<p class="text-gray-500 dark:text-gray-400">Выберите снимок из списка слева.</p>';
|
||||
return;
|
||||
}
|
||||
|
||||
const region = item.region || item.base_region || 'spine';
|
||||
const options = violationsFor(region)
|
||||
.map(
|
||||
(entry) =>
|
||||
`<option value="${esc(entry.code)}" ${entry.code === item.violation ? 'selected' : ''}>${esc(entry.label)}</option>`
|
||||
)
|
||||
.join('');
|
||||
|
||||
const conflict = item.filename_conflict
|
||||
? `<div class="mt-2 p-2 rounded bg-amber-50 dark:bg-amber-900/20 text-amber-800 dark:text-amber-300 text-xs">
|
||||
Метка разметки не совпадает с пометкой в имени файла (${esc(item.marker || '—')}).
|
||||
Проверьте снимок и подтвердите верный вердикт.
|
||||
</div>`
|
||||
: '';
|
||||
|
||||
const reviewedBlock = item.reviewed
|
||||
? `<div class="text-xs text-gray-500 dark:text-gray-400 mt-1">
|
||||
Ручной вердикт: ${esc(item.reviewer || 'без имени')}, ${esc(item.reviewed_at)}
|
||||
${item.comment ? `— «${esc(item.comment)}»` : ''}
|
||||
</div>`
|
||||
: '';
|
||||
|
||||
detail.innerHTML = `
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div class="min-w-0">
|
||||
<h2 class="text-base font-semibold truncate">${esc(item.file)}</h2>
|
||||
<p class="text-xs text-gray-500 dark:text-gray-400 break-all">${esc(item.path)}</p>
|
||||
<div class="flex flex-wrap items-center gap-2 mt-2">
|
||||
${labelBadge(item.label, item.label_source)}
|
||||
<span class="text-xs text-gray-500 dark:text-gray-400">${esc(regionLabel(item.region))}</span>
|
||||
${item.violation_label ? `<span class="text-xs text-gray-500 dark:text-gray-400">${esc(item.violation_label)}</span>` : ''}
|
||||
</div>
|
||||
${reviewedBlock}
|
||||
</div>
|
||||
<button id="deleteVerdict" class="px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-700 text-sm hover:bg-gray-200 dark:hover:bg-gray-600 transition ${item.reviewed ? '' : 'invisible'}">
|
||||
<i class="fas fa-rotate-left mr-1"></i> Снять вердикт
|
||||
</button>
|
||||
</div>
|
||||
|
||||
${conflict}
|
||||
|
||||
<div class="mt-4 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700">
|
||||
<img id="image" src="${esc(item.image_url)}" alt="${esc(item.file)}"
|
||||
class="w-full max-h-[52vh] object-contain">
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid gap-3 sm:grid-cols-2">
|
||||
<label class="text-sm">Анатомическая область
|
||||
<select id="region" class="mt-1 w-full px-2 py-1.5 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700">
|
||||
${['spine', 'hip_right', 'hip_left']
|
||||
.map((code) => `<option value="${code}" ${code === region ? 'selected' : ''}>${esc(REGION_LABELS[code])}</option>`)
|
||||
.join('')}
|
||||
</select>
|
||||
</label>
|
||||
<label class="text-sm">Тип нарушения
|
||||
<select id="violation" class="mt-1 w-full px-2 py-1.5 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700">
|
||||
<option value="">— нет нарушения —</option>
|
||||
${options}
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="mt-3 flex flex-wrap gap-2">
|
||||
<button id="markGood" class="flex-1 min-w-[10rem] px-4 py-2.5 rounded-lg bg-green-600 text-white hover:bg-green-700 transition">
|
||||
<i class="fas fa-check mr-1"></i> Годное <span class="text-xs opacity-75">(g)</span>
|
||||
</button>
|
||||
<button id="markBad" class="flex-1 min-w-[10rem] px-4 py-2.5 rounded-lg bg-red-600 text-white hover:bg-red-700 transition">
|
||||
<i class="fas fa-triangle-exclamation mr-1"></i> Нарушение <span class="text-xs opacity-75">(b)</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<label class="block mt-3 text-sm">Комментарий
|
||||
<input id="comment" type="text" value="${esc(item.comment)}" placeholder="что именно не так"
|
||||
class="mt-1 w-full px-2 py-1.5 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700">
|
||||
</label>
|
||||
|
||||
<div class="mt-3 flex items-center gap-3">
|
||||
<button id="saveVerdict" class="px-5 py-2.5 rounded-lg bg-primary-600 text-white hover:bg-primary-700 transition">
|
||||
<i class="fas fa-floppy-disk mr-1"></i> Сохранить и далее <span class="text-xs opacity-75">(Enter)</span>
|
||||
</button>
|
||||
<span id="detailStatus" class="text-sm text-gray-500 dark:text-gray-400"></span>
|
||||
</div>
|
||||
|
||||
<p class="text-xs text-gray-500 dark:text-gray-400 mt-3">
|
||||
Горячие клавиши: <b>g</b> — годное, <b>b</b> — нарушение, <b>Enter</b> — сохранить,
|
||||
<b>d</b> — снять вердикт, <b>j</b>/<b>k</b> — следующий/предыдущий снимок.
|
||||
</p>`;
|
||||
|
||||
$('markGood').addEventListener('click', () => applyQuality(0));
|
||||
$('markBad').addEventListener('click', () => applyQuality(1));
|
||||
$('saveVerdict').addEventListener('click', () => saveVerdict());
|
||||
$('deleteVerdict').addEventListener('click', () => deleteVerdict());
|
||||
$('region').addEventListener('change', renderDetail);
|
||||
$('violation').addEventListener('change', onViolationChange);
|
||||
}
|
||||
|
||||
/** Выбор качества: «нарушение» требует типа, «годное» его снимает. */
|
||||
function applyQuality(quality) {
|
||||
const item = state.selected;
|
||||
if (!item) return;
|
||||
item.pendingQuality = quality;
|
||||
|
||||
const violation = $('violation');
|
||||
if (quality === 0) {
|
||||
violation.value = '';
|
||||
} else if (!violation.value) {
|
||||
const first = violationsFor($('region').value)[0];
|
||||
if (first) violation.value = first.code;
|
||||
}
|
||||
|
||||
$('markGood').classList.toggle('ring-4', quality === 0);
|
||||
$('markBad').classList.toggle('ring-4', quality === 1);
|
||||
$('markGood').classList.toggle('ring-green-300', quality === 0);
|
||||
$('markBad').classList.toggle('ring-red-300', quality === 1);
|
||||
$('detailStatus').textContent = quality === 1 ? 'Отмечено: нарушение' : 'Отмечено: годное';
|
||||
}
|
||||
|
||||
function currentQuality() {
|
||||
const item = state.selected;
|
||||
if (item && item.pendingQuality !== undefined) return item.pendingQuality;
|
||||
return item ? Number(item.label) : 0;
|
||||
}
|
||||
|
||||
function onViolationChange() {
|
||||
const violation = $('violation').value;
|
||||
const item = state.selected;
|
||||
if (!item) return;
|
||||
// Тип нарушения и метка не могут противоречить друг другу: выбор типа
|
||||
// означает «нарушение», снятие типа — «годное».
|
||||
item.pendingQuality = violation ? 1 : 0;
|
||||
$('detailStatus').textContent = violation ? 'Отмечено: нарушение' : 'Отмечено: годное';
|
||||
}
|
||||
|
||||
async function saveVerdict() {
|
||||
const item = state.selected;
|
||||
if (!item) return;
|
||||
|
||||
const quality = currentQuality();
|
||||
const violation = $('violation').value;
|
||||
const payload = {
|
||||
path: item.path,
|
||||
region: $('region').value,
|
||||
quality: quality,
|
||||
violation: quality === 1 ? violation : '',
|
||||
comment: $('comment').value,
|
||||
reviewer: $('reviewer').value,
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await api('/api/v1/labeling/verdict', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
state.progress = response.progress;
|
||||
item.reviewed = true;
|
||||
item.label = quality;
|
||||
item.violation = payload.violation;
|
||||
item.comment = payload.comment;
|
||||
item.reviewer = payload.reviewer;
|
||||
item.reviewed_at = response.saved.reviewed_at;
|
||||
item.label_source = 'manual';
|
||||
item.violation_label = violationLabel(payload.violation);
|
||||
item.pendingQuality = undefined;
|
||||
renderSummary();
|
||||
renderList();
|
||||
goToNeighbour(1);
|
||||
} catch (err) {
|
||||
$('detailStatus').textContent = `Не сохранено: ${err.message}`;
|
||||
}
|
||||
}
|
||||
|
||||
function violationLabel(code) {
|
||||
const entry = state.violations.find((candidate) => candidate.code === code);
|
||||
return entry ? entry.label : '';
|
||||
}
|
||||
|
||||
async function deleteVerdict() {
|
||||
const item = state.selected;
|
||||
if (!item || !item.reviewed) return;
|
||||
try {
|
||||
const response = await api(`/api/v1/labeling/verdict?path=${encodeURIComponent(item.path)}`, {
|
||||
method: 'DELETE',
|
||||
});
|
||||
state.progress = response.progress;
|
||||
await refreshSelected(item.path);
|
||||
} catch (err) {
|
||||
$('detailStatus').textContent = `Не снято: ${err.message}`;
|
||||
}
|
||||
}
|
||||
|
||||
/** Перечитать список и удержать выбранный снимок (метки приходят с сервера). */
|
||||
async function refreshSelected(path) {
|
||||
const previous = state.total;
|
||||
state.limit = Math.max(state.limit, state.items.length);
|
||||
await loadItems(true);
|
||||
const target = state.items.find((candidate) => candidate.path === path);
|
||||
if (target) {
|
||||
selectItem(path, true);
|
||||
} else if (state.items.length) {
|
||||
selectItem(state.items[0].path, true);
|
||||
} else if (previous !== state.total) {
|
||||
renderDetail();
|
||||
}
|
||||
}
|
||||
|
||||
function goToNeighbour(step) {
|
||||
if (!state.selected) return;
|
||||
const index = state.items.findIndex((item) => item.path === state.selected.path);
|
||||
const next = state.items[index + step];
|
||||
if (next) {
|
||||
selectItem(next.path, true);
|
||||
} else if (!next && step > 0 && state.items.length < state.total) {
|
||||
loadItems(false).then(() => {
|
||||
const last = state.items.find((item) => !item.reviewed) || state.items[state.items.length - 1];
|
||||
if (last) selectItem(last.path, true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function showError(message) {
|
||||
const list = $('list');
|
||||
list.innerHTML = `<p class="text-sm text-red-600 dark:text-red-400 p-3">${esc(message)}</p>`;
|
||||
}
|
||||
|
||||
/* --- Служебное ----------------------------------------------------------- */
|
||||
|
||||
function downloadExport(scope, fmt) {
|
||||
window.location.href = `/api/v1/labeling/export?scope=${scope}&fmt=${fmt}`;
|
||||
}
|
||||
|
||||
function initTheme() {
|
||||
const stored = window.localStorage.getItem('dxa-theme');
|
||||
if (stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
||||
document.documentElement.classList.add('dark');
|
||||
}
|
||||
$('themeToggle').addEventListener('click', () => {
|
||||
document.documentElement.classList.toggle('dark');
|
||||
window.localStorage.setItem(
|
||||
'dxa-theme',
|
||||
document.documentElement.classList.contains('dark') ? 'dark' : 'light'
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function initShortcuts() {
|
||||
document.addEventListener('keydown', (event) => {
|
||||
if (event.target.matches('input, select, textarea')) {
|
||||
if (event.key === 'Enter' && state.selected) {
|
||||
event.preventDefault();
|
||||
saveVerdict();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!state.selected) return;
|
||||
switch (event.key) {
|
||||
case 'g': applyQuality(0); break;
|
||||
case 'b': applyQuality(1); break;
|
||||
case 'Enter': event.preventDefault(); saveVerdict(); break;
|
||||
case 'd': deleteVerdict(); break;
|
||||
case 'j': goToNeighbour(1); break;
|
||||
case 'k': goToNeighbour(-1); break;
|
||||
default: break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function initFilters() {
|
||||
['filterRegion', 'filterConflicts', 'filterUnreviewed'].forEach((id) => {
|
||||
$(id).addEventListener('change', () => loadItems(true));
|
||||
});
|
||||
let timer = null;
|
||||
$('filterQuery').addEventListener('input', () => {
|
||||
window.clearTimeout(timer);
|
||||
timer = window.setTimeout(() => loadItems(true), 300);
|
||||
});
|
||||
$('more').addEventListener('click', () => loadItems(false));
|
||||
$('exportCsv').addEventListener('click', () => downloadExport('all', 'csv'));
|
||||
$('exportReviewed').addEventListener('click', () => downloadExport('reviewed', 'csv'));
|
||||
$('exportXlsx').addEventListener('click', () => downloadExport('all', 'xlsx'));
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
initTheme();
|
||||
initFilters();
|
||||
initShortcuts();
|
||||
loadItems(true);
|
||||
});
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Ручная разметка — DXA Quality Assessment</title>
|
||||
<!-- Пустая favicon: без неё браузер запрашивает /favicon.ico и получает 404. -->
|
||||
<link rel="icon" href="data:,">
|
||||
<!-- Tailwind и FontAwesome локальные, как и на главной странице: сервис
|
||||
должен работать в закрытом контуре без обращений к CDN. -->
|
||||
<script src="/static/vendor/tailwind.js"></script>
|
||||
<link rel="stylesheet" href="/static/vendor/fontawesome.css">
|
||||
<script>
|
||||
tailwind.config = {
|
||||
darkMode: 'class',
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
primary: {
|
||||
50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd',
|
||||
400: '#60a5fa', 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8',
|
||||
800: '#1e40af', 900: '#1e3a8a',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.item-card { transition: background-color .15s ease, border-color .15s ease; }
|
||||
.item-card.active { border-color: #2563eb; background-color: #eff6ff; }
|
||||
.dark .item-card.active { background-color: rgba(37, 99, 235, .18); }
|
||||
#image { image-rendering: auto; background: #0f172a; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-50 dark:bg-gray-900 min-h-screen text-gray-800 dark:text-gray-100">
|
||||
<header class="bg-white dark:bg-gray-800 shadow-sm sticky top-0 z-10">
|
||||
<div class="max-w-[110rem] mx-auto px-4 py-3 flex flex-wrap items-center justify-between gap-3">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="w-10 h-10 bg-primary-600 rounded-lg flex items-center justify-center">
|
||||
<i class="fas fa-pen-to-square text-white text-xl"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="text-lg font-bold text-gray-900 dark:text-white">Ручная разметка</h1>
|
||||
<p class="text-xs text-gray-500 dark:text-gray-400">
|
||||
Поштучная оценка снимков специалистом — вердикты идут в
|
||||
<code>labels/manual_labels.csv</code>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<label class="text-sm text-gray-600 dark:text-gray-300">
|
||||
Разметчик
|
||||
<input id="reviewer" type="text" placeholder="ФИО"
|
||||
class="ml-1 px-2 py-1 w-40 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-sm">
|
||||
</label>
|
||||
<button id="themeToggle" class="p-2 rounded-lg bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-600 transition">
|
||||
<i class="fas fa-moon dark:hidden"></i>
|
||||
<i class="fas fa-sun hidden dark:inline"></i>
|
||||
</button>
|
||||
<a href="/" class="flex items-center gap-2 px-3 py-2 bg-gray-100 dark:bg-gray-700 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-600 transition text-sm">
|
||||
<i class="fas fa-arrow-left"></i> К анализу
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="max-w-[110rem] mx-auto px-4 py-5">
|
||||
<!-- Сводка и выгрузка -->
|
||||
<section class="mb-5 p-4 rounded-xl bg-white dark:bg-gray-800 shadow-sm">
|
||||
<div class="flex flex-wrap items-center justify-between gap-4">
|
||||
<div class="min-w-[18rem] flex-1">
|
||||
<div class="flex items-center justify-between text-sm mb-1">
|
||||
<span id="progressText" class="text-gray-600 dark:text-gray-300">Загрузка…</span>
|
||||
<span id="conflictText" class="text-amber-600 dark:text-amber-400"></span>
|
||||
</div>
|
||||
<div class="w-full h-2 rounded bg-gray-200 dark:bg-gray-700 overflow-hidden">
|
||||
<div id="progressBar" class="h-full bg-primary-600" style="width:0%"></div>
|
||||
</div>
|
||||
<p id="byRegion" class="text-xs text-gray-500 dark:text-gray-400 mt-2"></p>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<button id="exportCsv" class="px-3 py-2 rounded-lg bg-primary-600 text-white text-sm hover:bg-primary-700 transition">
|
||||
<i class="fas fa-file-csv mr-1"></i> CSV (весь набор)
|
||||
</button>
|
||||
<button id="exportReviewed" class="px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-700 text-sm hover:bg-gray-200 dark:hover:bg-gray-600 transition">
|
||||
<i class="fas fa-file-lines mr-1"></i> CSV (разобранное)
|
||||
</button>
|
||||
<button id="exportXlsx" class="px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-700 text-sm hover:bg-gray-200 dark:hover:bg-gray-600 transition">
|
||||
<i class="fas fa-file-excel mr-1"></i> XLSX
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-xs text-gray-500 dark:text-gray-400 mt-3">
|
||||
Выгрузка «весь набор» накладывает ручные вердикты на построенную разметку и
|
||||
принимается обучением как <code>--labels-csv</code>.
|
||||
Оценка модели здесь намеренно не показывается: подсказка смещала бы разметчика.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<div class="grid gap-5 lg:grid-cols-[26rem_minmax(0,1fr)]">
|
||||
<!-- Фильтры и список -->
|
||||
<aside class="space-y-3">
|
||||
<div class="p-3 rounded-xl bg-white dark:bg-gray-800 shadow-sm space-y-2">
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<select id="filterRegion" class="px-2 py-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-sm">
|
||||
<option value="">Все области</option>
|
||||
<option value="spine">Позвоночник</option>
|
||||
<option value="hip_right">Бедро R</option>
|
||||
<option value="hip_left">Бедро L</option>
|
||||
</select>
|
||||
<label class="flex items-center gap-1 text-sm">
|
||||
<input id="filterConflicts" type="checkbox"> только расхождения
|
||||
</label>
|
||||
<label class="flex items-center gap-1 text-sm">
|
||||
<input id="filterUnreviewed" type="checkbox" checked> неразобранные
|
||||
</label>
|
||||
</div>
|
||||
<input id="filterQuery" type="search" placeholder="Поиск по пути…"
|
||||
class="w-full px-2 py-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-sm">
|
||||
<p class="text-xs text-gray-500 dark:text-gray-400">
|
||||
Расхождения метки разметки с пометкой в имени файла идут первыми:
|
||||
ошибка возможна в любом из источников.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="list" class="space-y-2 max-h-[62vh] overflow-y-auto pr-1"></div>
|
||||
<button id="more" class="hidden w-full px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-700 text-sm hover:bg-gray-200 dark:hover:bg-gray-600 transition">
|
||||
Показать ещё
|
||||
</button>
|
||||
</aside>
|
||||
|
||||
<!-- Разбор снимка -->
|
||||
<section id="detail" class="p-4 rounded-xl bg-white dark:bg-gray-800 shadow-sm">
|
||||
<p class="text-gray-500 dark:text-gray-400">Выберите снимок из списка слева.</p>
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script src="/static/js/labeling.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -437,8 +437,14 @@ def write_csv(labels: Sequence[ImageLabel], out_path: str | Path) -> Path:
|
|||
|
||||
|
||||
def load_labels_csv(path: str | Path) -> Dict[str, Dict[str, str]]:
|
||||
"""Прочитать построенную разметку; ключ — путь к снимку из `path_to_image`."""
|
||||
with Path(path).open(newline="", encoding="utf-8") as fh:
|
||||
"""
|
||||
Прочитать построенную разметку; ключ — путь к снимку из `path_to_image`.
|
||||
|
||||
Файл читается как `utf-8-sig`: разметку правят в Excel, а он сохраняет CSV с
|
||||
BOM, после чего имя первого столбца перестаёт быть `path_to_image` и загрузка
|
||||
падает на несовпадении колонок. BOM в начале файла безвреден для чтения.
|
||||
"""
|
||||
with Path(path).open(newline="", encoding="utf-8-sig") as fh:
|
||||
rows = list(csv.DictReader(fh))
|
||||
if not rows:
|
||||
raise ValueError(f"Empty labels file: {path}")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,402 @@
|
|||
"""
|
||||
Ручная разметка снимков специалистом.
|
||||
|
||||
Зачем отдельный модуль. Экспертная оценка в наборе есть только на уровне
|
||||
исследования (`dataset_hack/НД_для_обучения/разметка.xlsx`), поштучной оценки
|
||||
снимков нет — это ограничение №1 в `assets/labeling.md`. Раздел 2.6 задания
|
||||
требует «автоматическую коррекцию разметки с возможностью подтверждения
|
||||
специалистом», поэтому вердикты, проставленные вручную в интерфейсе `/label`,
|
||||
хранятся отдельным файлом и накладываются поверх построенной разметки.
|
||||
|
||||
Формат `labels/manual_labels.csv` совместим с построенной разметкой: ключ —
|
||||
`path_to_image`, метка — `quality_class`. Поэтому файл читается тем же
|
||||
`excel_labels.load_labels_csv` и принимается обучением как `--labels-csv`, а
|
||||
проверить отличие от построенной разметки можно обычным сравнением CSV.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import csv
|
||||
import logging
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
from typing import Dict, Iterable, List, Optional, Sequence, Set, Tuple
|
||||
|
||||
import pydicom
|
||||
|
||||
from src.dxa.labels import QUALITY_BAD, QUALITY_GOOD, REGIONS, ImageRecord
|
||||
from src.dxa.violations import (
|
||||
LEGACY_ALIASES,
|
||||
VIOLATION_SCOPE,
|
||||
VIOLATION_TYPES,
|
||||
canon_type,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
#: Имя файла с ручными вердиктами внутри каталога разметки.
|
||||
MANUAL_FILENAME = "manual_labels.csv"
|
||||
|
||||
#: Столбцы файла. Обязательные для обучения — `path_to_image` и
|
||||
#: `quality_class`; остальные нужны разбору и повторной правке.
|
||||
MANUAL_FIELDS: Tuple[str, ...] = (
|
||||
"path_to_image",
|
||||
"anatomical_region",
|
||||
"quality_class",
|
||||
"violation_type",
|
||||
"comment",
|
||||
"reviewer",
|
||||
"reviewed_at",
|
||||
)
|
||||
|
||||
#: Значение `label_rule` для строк, проставленных человеком.
|
||||
MANUAL_RULE = "manual"
|
||||
|
||||
#: Регион, который специалист может выбрать (без «неизвестно»: выбор явный).
|
||||
SELECTABLE_REGIONS: Tuple[str, ...] = REGIONS
|
||||
|
||||
_KNOWN_VIOLATION_INPUTS = set(VIOLATION_TYPES) | set(LEGACY_ALIASES)
|
||||
|
||||
|
||||
class VerdictError(ValueError):
|
||||
"""Вердикт не соответствует формату разметки."""
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ManualVerdict:
|
||||
"""Вердикт специалиста по одному снимку."""
|
||||
|
||||
path: str
|
||||
region: str
|
||||
quality: int
|
||||
violation: str = ""
|
||||
comment: str = ""
|
||||
reviewer: str = ""
|
||||
reviewed_at: str = ""
|
||||
|
||||
def as_row(self) -> Dict[str, str]:
|
||||
return {
|
||||
"path_to_image": self.path,
|
||||
"anatomical_region": self.region,
|
||||
"quality_class": str(self.quality),
|
||||
"violation_type": self.violation,
|
||||
"comment": self.comment,
|
||||
"reviewer": self.reviewer,
|
||||
"reviewed_at": self.reviewed_at,
|
||||
}
|
||||
|
||||
|
||||
def _normalize_path(value: str | Path) -> str:
|
||||
"""Ключ вердикта — путь в том же виде, что у `ImageRecord.path` (POSIX)."""
|
||||
return Path(str(value)).as_posix()
|
||||
|
||||
|
||||
def _now() -> str:
|
||||
return datetime.now(timezone.utc).isoformat(timespec="seconds")
|
||||
|
||||
|
||||
def _scope_matches(scope: str, region: str) -> bool:
|
||||
"""Подходит ли нарушение области снимка.
|
||||
|
||||
В словаре нарушений (`violations.py`) бедро обозначено одним кодом `hip`,
|
||||
потому что критерий «позиционирование/ротация» в экспертной таблице один на
|
||||
оба бедра; в разметке же область всегда конкретная (`hip_right`/`hip_left`).
|
||||
"""
|
||||
if scope == "any":
|
||||
return True
|
||||
if scope == "hip":
|
||||
return region in ("hip_right", "hip_left")
|
||||
return scope == region
|
||||
|
||||
|
||||
def validate_verdict(
|
||||
region: Optional[str],
|
||||
quality: int,
|
||||
violation: Optional[str],
|
||||
) -> Tuple[str, int, str]:
|
||||
"""
|
||||
Проверить вердикт и привести тип нарушения к каноническому коду.
|
||||
|
||||
Raises:
|
||||
VerdictError: область вне `SELECTABLE_REGIONS`, метка не 0/1 или тип
|
||||
нарушения не из словаря `violations.py`. Неизвестное значение
|
||||
отклоняется, а не подменяется на `unspecified`: в ручном вводе это
|
||||
почти всегда опечатка.
|
||||
"""
|
||||
if region not in SELECTABLE_REGIONS:
|
||||
raise VerdictError(
|
||||
f"Область должна быть одной из {SELECTABLE_REGIONS}, получено {region!r}"
|
||||
)
|
||||
if int(quality) not in (QUALITY_GOOD, QUALITY_BAD):
|
||||
raise VerdictError(f"Метка качества должна быть 0 или 1, получено {quality!r}")
|
||||
|
||||
raw = (violation or "").strip().lower()
|
||||
if raw not in _KNOWN_VIOLATION_INPUTS:
|
||||
raise VerdictError(f"Неизвестный тип нарушения: {violation!r}")
|
||||
code = canon_type(raw)
|
||||
|
||||
if code and quality == QUALITY_GOOD:
|
||||
raise VerdictError("У качественного снимка не может быть типа нарушения")
|
||||
|
||||
scope = VIOLATION_SCOPE.get(code, "any")
|
||||
if code and not _scope_matches(scope, region):
|
||||
raise VerdictError(f"Нарушение {code!r} относится к области {scope!r}, а не к {region!r}")
|
||||
|
||||
return region, int(quality), code
|
||||
|
||||
|
||||
def make_verdict(
|
||||
path: str | Path,
|
||||
region: str,
|
||||
quality: int,
|
||||
violation: Optional[str] = None,
|
||||
comment: str = "",
|
||||
reviewer: str = "",
|
||||
reviewed_at: Optional[str] = None,
|
||||
) -> ManualVerdict:
|
||||
"""Собрать проверенный вердикт; `reviewed_at` по умолчанию — текущий момент."""
|
||||
region, quality, code = validate_verdict(region, quality, violation)
|
||||
return ManualVerdict(
|
||||
path=_normalize_path(path),
|
||||
region=region,
|
||||
quality=quality,
|
||||
violation=code,
|
||||
comment=(comment or "").strip(),
|
||||
reviewer=(reviewer or "").strip(),
|
||||
reviewed_at=reviewed_at or _now(),
|
||||
)
|
||||
|
||||
|
||||
def manual_labels_path(labels_dir: str | Path = "labels") -> Path:
|
||||
"""Путь к файлу ручных вердиктов."""
|
||||
return Path(labels_dir) / MANUAL_FILENAME
|
||||
|
||||
|
||||
def load_verdicts(source: str | Path) -> Dict[str, ManualVerdict]:
|
||||
"""
|
||||
Прочитать ручные вердикты; отсутствующий файл — это пустая разметка.
|
||||
|
||||
Битые строки не роняют разбор: они пропускаются с предупреждением, чтобы
|
||||
один испорченный ряд не делал недоступной всю накопленную разметку. Файл
|
||||
читается как `utf-8-sig` — его правят в Excel, а тот сохраняет CSV с BOM.
|
||||
"""
|
||||
path = Path(source)
|
||||
if not path.exists():
|
||||
return {}
|
||||
|
||||
verdicts: Dict[str, ManualVerdict] = {}
|
||||
with path.open(newline="", encoding="utf-8-sig") as fh:
|
||||
for lineno, row in enumerate(csv.DictReader(fh), start=2):
|
||||
if not row or not row.get("path_to_image"):
|
||||
continue
|
||||
try:
|
||||
verdict = make_verdict(
|
||||
path=row["path_to_image"],
|
||||
region=row.get("anatomical_region", ""),
|
||||
quality=row.get("quality_class", ""),
|
||||
violation=row.get("violation_type", ""),
|
||||
comment=row.get("comment", ""),
|
||||
reviewer=row.get("reviewer", ""),
|
||||
reviewed_at=row.get("reviewed_at", ""),
|
||||
)
|
||||
except (VerdictError, ValueError) as exc:
|
||||
logger.warning("Строка %d файла %s пропущена: %s", lineno, path, exc)
|
||||
continue
|
||||
verdicts[verdict.path] = verdict
|
||||
return verdicts
|
||||
|
||||
|
||||
def save_verdicts(source: str | Path, verdicts: Dict[str, ManualVerdict]) -> Path:
|
||||
"""Записать вердикты, отсортировав по пути; запись атомарная."""
|
||||
path = Path(source)
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
tmp = path.with_name(path.name + ".tmp")
|
||||
|
||||
with tmp.open("w", newline="", encoding="utf-8") as fh:
|
||||
writer = csv.DictWriter(fh, fieldnames=list(MANUAL_FIELDS))
|
||||
writer.writeheader()
|
||||
for key in sorted(verdicts):
|
||||
writer.writerow(verdicts[key].as_row())
|
||||
os.replace(tmp, path)
|
||||
return path
|
||||
|
||||
|
||||
def upsert_verdict(source: str | Path, verdict: ManualVerdict) -> Dict[str, ManualVerdict]:
|
||||
"""Добавить или заменить вердикт в файле и вернуть обновлённый словарь."""
|
||||
verdicts = load_verdicts(source)
|
||||
verdicts[verdict.path] = verdict
|
||||
save_verdicts(source, verdicts)
|
||||
return verdicts
|
||||
|
||||
|
||||
def remove_verdict(source: str | Path, target: str | Path) -> Dict[str, ManualVerdict]:
|
||||
"""Снять вердикт (вернуть снимок к построенной разметке)."""
|
||||
verdicts = load_verdicts(source)
|
||||
if verdicts.pop(_normalize_path(target), None) is None:
|
||||
raise VerdictError(f"Нет ручного вердикта для {target}")
|
||||
save_verdicts(source, verdicts)
|
||||
return verdicts
|
||||
|
||||
|
||||
def apply_manual(
|
||||
records: Sequence[ImageRecord],
|
||||
verdicts: Dict[str, ManualVerdict],
|
||||
) -> List[ImageRecord]:
|
||||
"""
|
||||
Наложить ручные вердикты поверх построенной разметки.
|
||||
|
||||
Записи без вердикта возвращаются как есть, поэтому специалист может
|
||||
разметить часть набора: остальные снимки сохраняют метку из таблицы или из
|
||||
имени файла.
|
||||
"""
|
||||
updated: List[ImageRecord] = []
|
||||
for rec in records:
|
||||
verdict = verdicts.get(_normalize_path(rec.path))
|
||||
if verdict is None:
|
||||
updated.append(rec)
|
||||
continue
|
||||
updated.append(
|
||||
ImageRecord(
|
||||
path=rec.path,
|
||||
study=rec.study,
|
||||
region=verdict.region,
|
||||
label=verdict.quality,
|
||||
marker=rec.marker,
|
||||
sources=rec.sources,
|
||||
)
|
||||
)
|
||||
return updated
|
||||
|
||||
|
||||
def review_progress(
|
||||
records: Sequence[ImageRecord],
|
||||
verdicts: Dict[str, ManualVerdict],
|
||||
) -> Dict:
|
||||
"""
|
||||
Сколько снимков разобрано и насколько вердикты расходятся с разметкой.
|
||||
|
||||
`changed` — снимки, где специалист изменил метку качества; `filename_conflict`
|
||||
— снимки, где метка разметки расходится с пометкой в имени файла (их и
|
||||
полезно показать первыми: это кандидаты на ошибку в любом из источников).
|
||||
"""
|
||||
by_region: Dict[str, Dict[str, int]] = {
|
||||
region: {"total": 0, "reviewed": 0} for region in SELECTABLE_REGIONS
|
||||
}
|
||||
reviewed = changed = filename_conflict = 0
|
||||
|
||||
for rec in records:
|
||||
key = _normalize_path(rec.path)
|
||||
bucket = by_region.setdefault(
|
||||
rec.region or "unknown", {"total": 0, "reviewed": 0}
|
||||
)
|
||||
bucket["total"] += 1
|
||||
|
||||
marker_label = QUALITY_BAD if rec.marker == "bad" else QUALITY_GOOD
|
||||
if marker_label != rec.label:
|
||||
filename_conflict += 1
|
||||
|
||||
verdict = verdicts.get(key)
|
||||
if verdict is None:
|
||||
continue
|
||||
reviewed += 1
|
||||
bucket["reviewed"] += 1
|
||||
if verdict.quality != rec.label:
|
||||
changed += 1
|
||||
|
||||
return {
|
||||
"total": len(records),
|
||||
"reviewed": reviewed,
|
||||
"remaining": len(records) - reviewed,
|
||||
"changed": changed,
|
||||
"confirmed": reviewed - changed,
|
||||
"filename_conflict": filename_conflict,
|
||||
"by_region": by_region,
|
||||
}
|
||||
|
||||
|
||||
def _read_dicom_uids(dcm_path: Path) -> Tuple[str, str]:
|
||||
"""StudyInstanceUID и SOPInstanceUID снимка (пустые строки, если тегов нет)."""
|
||||
try:
|
||||
ds = pydicom.dcmread(str(dcm_path), stop_before_pixels=True)
|
||||
except Exception as exc: # битый DICOM не должен ломать выгрузку
|
||||
logger.warning("Не удалось прочитать теги %s: %s", dcm_path, exc)
|
||||
return "", ""
|
||||
return (
|
||||
str(getattr(ds, "StudyInstanceUID", "") or ""),
|
||||
str(getattr(ds, "SOPInstanceUID", "") or ""),
|
||||
)
|
||||
|
||||
|
||||
def export_rows(
|
||||
records: Sequence[ImageRecord],
|
||||
verdicts: Dict[str, ManualVerdict],
|
||||
scope: str = "all",
|
||||
expert_paths: Optional[Iterable[str | Path]] = None,
|
||||
) -> List[Dict[str, str]]:
|
||||
"""
|
||||
Собрать строки для выгрузки в формате построенной разметки.
|
||||
|
||||
Args:
|
||||
scope: `all` — весь набор с наложенными вердиктами (годится как
|
||||
`--labels-csv`); `reviewed` — только разобранные специалистом снимки.
|
||||
expert_paths: пути, метка которых взята из экспертной таблицы; остальные
|
||||
помечаются как `filename` — чтобы по выгрузке было видно происхождение.
|
||||
|
||||
Returns:
|
||||
Строки со столбцами: `path_to_image`, `file`, `study`, `study_uid`,
|
||||
`image_uid`, `anatomical_region`, `quality_class`, `violation_type`,
|
||||
`label_rule`, `reviewer`, `comment`, `reviewed_at`.
|
||||
"""
|
||||
if scope not in ("all", "reviewed"):
|
||||
raise VerdictError(f"scope должен быть 'all' или 'reviewed', получено {scope!r}")
|
||||
|
||||
expert = {_normalize_path(p) for p in (expert_paths or ())}
|
||||
rows: List[Dict[str, str]] = []
|
||||
|
||||
for rec in records:
|
||||
key = _normalize_path(rec.path)
|
||||
verdict = verdicts.get(key)
|
||||
if scope == "reviewed" and verdict is None:
|
||||
continue
|
||||
|
||||
study_uid, image_uid = _read_dicom_uids(rec.path)
|
||||
if verdict is not None:
|
||||
rule = MANUAL_RULE
|
||||
else:
|
||||
rule = "table" if key in expert else "filename"
|
||||
|
||||
rows.append(
|
||||
{
|
||||
"path_to_image": key,
|
||||
"file": rec.path.name,
|
||||
"study": rec.study,
|
||||
"study_uid": study_uid,
|
||||
"image_uid": image_uid,
|
||||
"anatomical_region": (verdict.region if verdict else rec.region) or "",
|
||||
"quality_class": str(verdict.quality if verdict else rec.label),
|
||||
"violation_type": verdict.violation if verdict else "",
|
||||
"label_rule": rule,
|
||||
"reviewer": verdict.reviewer if verdict else "",
|
||||
"comment": verdict.comment if verdict else "",
|
||||
"reviewed_at": verdict.reviewed_at if verdict else "",
|
||||
}
|
||||
)
|
||||
return rows
|
||||
|
||||
|
||||
#: Столбцы выгрузки (совпадают с `export_rows`).
|
||||
EXPORT_FIELDS: Tuple[str, ...] = (
|
||||
"path_to_image",
|
||||
"file",
|
||||
"study",
|
||||
"study_uid",
|
||||
"image_uid",
|
||||
"anatomical_region",
|
||||
"quality_class",
|
||||
"violation_type",
|
||||
"label_rule",
|
||||
"reviewer",
|
||||
"comment",
|
||||
"reviewed_at",
|
||||
)
|
||||
|
|
@ -22,7 +22,7 @@ from typing import Dict, List
|
|||
from src.dxa.violations import catalogue as violations_catalogue
|
||||
|
||||
#: Дата, на которую верны числа ниже.
|
||||
SNAPSHOT_DATE = "2026-09-26"
|
||||
SNAPSHOT_DATE = "2026-09-27"
|
||||
|
||||
#: Источник чисел — чтобы их можно было перепроверить, а не принимать на веру.
|
||||
SOURCES: List[str] = [
|
||||
|
|
@ -32,14 +32,14 @@ SOURCES: List[str] = [
|
|||
]
|
||||
|
||||
DATASET: Dict = {
|
||||
"files_on_disk": 544,
|
||||
"unique_images": 252,
|
||||
"files_on_disk": 482,
|
||||
"unique_images": 251,
|
||||
"studies": 100,
|
||||
"per_region": {"spine": 99, "hip_right": 79, "hip_left": 73, "unknown": 1},
|
||||
"violations_expert": 74,
|
||||
"violations_labeled": 77,
|
||||
"per_region": {"spine": 99, "hip_right": 78, "hip_left": 73, "unknown": 1},
|
||||
"violations_expert": 73,
|
||||
"violations_labeled": 76,
|
||||
"images_without_expert_verdict": 3,
|
||||
"violation_share": 0.3056,
|
||||
"violation_share": 0.3028,
|
||||
}
|
||||
|
||||
LABELS: Dict = {
|
||||
|
|
@ -70,7 +70,8 @@ COMPARISON: Dict = {
|
|||
"question": (
|
||||
"Метку можно брать только из экспертной таблицы или дополнительно "
|
||||
"учитывать служебные пометки, проставленные при подготовке набора. "
|
||||
"Пометки расходились с оценкой эксперта в 15 случаях из 252, поэтому "
|
||||
"Пометки расходятся с оценкой эксперта в 62 случаях из 251 (в 20 из них "
|
||||
"эксперт считает снимок годным, а имя файла помечено `_bad`), поэтому "
|
||||
"правило нужно было выбрать измерением."
|
||||
),
|
||||
"variants": {"table": "только экспертная таблица", "union": "таблица и служебные пометки"},
|
||||
|
|
@ -79,16 +80,16 @@ COMPARISON: Dict = {
|
|||
"val_violations": 16,
|
||||
"reference": "вердикт эксперта из labels/labels_images_expert.csv",
|
||||
"metrics": {
|
||||
"roc_auc": {"table": [0.6764, 0.6309, 0.7218], "union": [0.6199, 0.5840, 0.6559]},
|
||||
"pr_auc": {"table": [0.4759, 0.4141, 0.5377], "union": [0.4046, 0.3702, 0.4391]},
|
||||
"f1": {"table": [0.5676, 0.5270, 0.6082], "union": [0.5426, 0.5073, 0.5778]},
|
||||
"roc_auc": {"table": [0.6726, 0.6367, 0.7086], "union": [0.6003, 0.5592, 0.6415]},
|
||||
"pr_auc": {"table": [0.4753, 0.4188, 0.5318], "union": [0.3864, 0.3487, 0.4242]},
|
||||
"f1": {"table": [0.5559, 0.5212, 0.5906], "union": [0.5354, 0.4978, 0.5729]},
|
||||
},
|
||||
"paired_delta_table_minus_union": {
|
||||
"roc_auc": [0.0564, 0.0403, 0.0725],
|
||||
"pr_auc": [0.0713, 0.0398, 0.1028],
|
||||
"f1": [0.0251, -0.0056, 0.0558],
|
||||
"roc_auc": [0.0723, 0.0541, 0.0905],
|
||||
"pr_auc": [0.0889, 0.0500, 0.1277],
|
||||
"f1": [0.0205, -0.0182, 0.0592],
|
||||
},
|
||||
"paired_wins": "5 из 5 seed'ов в пользу экспертной таблицы",
|
||||
"paired_wins": "5 из 5 seed'ов по ROC-AUC и PR-AUC в пользу экспертной таблицы",
|
||||
"decision": "Принято правило `table`: служебные пометки в метках не участвуют.",
|
||||
}
|
||||
|
||||
|
|
@ -104,22 +105,22 @@ DEPLOYED: Dict = {
|
|||
# зафиксированный файл — поэтому поле пустое, и это ожидаемо.
|
||||
"split_file": None,
|
||||
"seed": 42,
|
||||
"epoch": 39,
|
||||
"threshold_logit": -0.4930129051208496,
|
||||
"threshold_probability": 0.3792,
|
||||
"train_images": 199,
|
||||
"epoch": 57,
|
||||
"threshold_logit": -0.13703127205371857,
|
||||
"threshold_probability": 0.4658,
|
||||
"train_images": 198,
|
||||
"val_images": 53,
|
||||
"val_violations": 16,
|
||||
"val_roc_auc": 0.6706,
|
||||
"val_pr_auc": 0.4585,
|
||||
"val_f1": 0.5600,
|
||||
"val_recall": 0.8750,
|
||||
"val_precision": 0.4118,
|
||||
"val_roc_auc": 0.6689,
|
||||
"val_pr_auc": 0.4769,
|
||||
"val_f1": 0.5641,
|
||||
"val_recall": 0.6875,
|
||||
"val_precision": 0.4783,
|
||||
"caveat": (
|
||||
"Это обычный прогон с seed по умолчанию, а не лучший из выборки. "
|
||||
"Незавышенная ожидаемая оценка того же варианта разметки — среднее по пяти "
|
||||
"seed'ам: ROC-AUC 0.6764 [0.6309, 0.7218]. Его собственная валидационная "
|
||||
"ROC-AUC 0.6706 близка к этому среднему."
|
||||
"seed'ам: ROC-AUC 0.6726 [0.6367, 0.7086]. Его собственная валидационная "
|
||||
"ROC-AUC 0.6689 близка к этому среднему."
|
||||
),
|
||||
}
|
||||
|
||||
|
|
@ -128,7 +129,7 @@ LIMITATIONS: List[str] = [
|
|||
"Модель бинарная: она отвечает «пригоден / есть нарушение» и НЕ определяет тип нарушения.",
|
||||
"Тип нарушения в ответе — эвристика по метрикам снимка; на этом наборе она чаще "
|
||||
"всего даёт общую категорию `unspecified`.",
|
||||
"Мало данных: 252 снимка, 77 нарушений; доверительные интервалы широкие.",
|
||||
"Мало данных: 251 снимок, 76 нарушений; доверительные интервалы широкие.",
|
||||
"Эталон — экспертная таблица, независимой истины нет; интервалы не покрывают "
|
||||
"неопределённость самой разметки.",
|
||||
"Для 3 снимков таблица область не оценивала — метка взята из служебной пометки "
|
||||
|
|
|
|||
|
|
@ -0,0 +1,841 @@
|
|||
"""
|
||||
Самодостаточный HTML-пакет для разметки снимков специалистом вне сервиса.
|
||||
|
||||
Зачем. Интерфейс `/label` требует запущенного сервиса (`src/main.py`), а размечать
|
||||
должен врач — на своей машине, без Python, без Docker и без сети. Поэтому тот же
|
||||
сценарий собирается в один HTML-файл: снимки встроены как data-URI, вердикты
|
||||
хранятся в localStorage браузера, выгрузка — CSV в формате `manual_labels.csv`.
|
||||
|
||||
Порядок работы:
|
||||
|
||||
python -m src.dxa.review_pack --out review/doctor.html
|
||||
# врач открывает файл двойным щелчком, размечает, жмёт «Выгрузить CSV»
|
||||
python -m src.dxa.review_pack --merge review/doctor.csv --out labels/labels_images_reviewed.csv
|
||||
|
||||
Полученный от врача CSV — это готовый `manual_labels.csv`: он читается
|
||||
`manual_labels.load_verdicts`, накладывается на построенную разметку и
|
||||
принимается обучением как `--labels-csv`. Отдельная команда `--merge` делает
|
||||
наложение сразу и заодно сообщает, если в файле есть пути, которых нет в датасете.
|
||||
|
||||
Что пакет намеренно НЕ содержит: оценки модели. Разметчик не должен соглашаться
|
||||
с подсказкой алгоритма — ему показывается только построенная разметка и её
|
||||
источник (экспертная таблица или пометка в имени файла).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import hashlib
|
||||
import logging
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Dict, Iterable, List, Optional, Sequence, Tuple
|
||||
|
||||
from src.dxa.dataset import build_records
|
||||
from src.dxa.excel_labels import load_labels_csv
|
||||
from src.dxa.inference import image_png_base64
|
||||
from src.dxa.labels import QUALITY_BAD, QUALITY_GOOD, REGIONS, ImageRecord
|
||||
from src.dxa.manual_labels import (
|
||||
MANUAL_FIELDS,
|
||||
MANUAL_RULE,
|
||||
export_rows,
|
||||
load_verdicts,
|
||||
)
|
||||
from src.dxa.preprocess import load_dicom_array
|
||||
from src.dxa.violations import catalogue, label as violation_label
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
#: Столбцы файла, который выгружает разметчик. Совпадают с `manual_labels.csv`,
|
||||
#: поэтому выгрузку можно положить в `labels/manual_labels.csv` как есть.
|
||||
REVIEW_FIELDS: Tuple[str, ...] = tuple(MANUAL_FIELDS) + ("pack_id",)
|
||||
|
||||
#: Маркеры в шаблоне страницы. `str.format` не используется: в JS и CSS слишком
|
||||
#: много фигурных скобок, и экранировать их было бы источником ошибок.
|
||||
_PLACEHOLDER = {
|
||||
"items": "@@ITEMS@@",
|
||||
"catalogue": "@@CATALOGUE@@",
|
||||
"regions": "@@REGIONS@@",
|
||||
"title": "@@TITLE@@",
|
||||
"pack_id": "@@PACK_ID@@",
|
||||
"total": "@@TOTAL@@",
|
||||
}
|
||||
|
||||
REGION_LABELS: Dict[str, str] = {
|
||||
"spine": "Позвоночник",
|
||||
"hip_right": "Бедро R",
|
||||
"hip_left": "Бедро L",
|
||||
"": "область не определена",
|
||||
}
|
||||
|
||||
|
||||
def pack_fingerprint(paths: Iterable[str]) -> str:
|
||||
"""
|
||||
Короткий отпечаток набора снимков в пакете.
|
||||
|
||||
Нужен по двум причинам: ключ localStorage не должен смешивать вердикты из
|
||||
разных пакетов, а разметчик и заказчик должны уметь сверить, что речь об
|
||||
одном и том же файле (отпечаток печатается на странице и есть в выгрузке).
|
||||
"""
|
||||
digest = hashlib.sha1("\n".join(sorted(paths)).encode("utf-8")).hexdigest()
|
||||
return digest[:10]
|
||||
|
||||
|
||||
def collect_items(
|
||||
records: Sequence[ImageRecord],
|
||||
labels_table: Dict[str, Dict[str, str]],
|
||||
expert_paths: Iterable[str] = (),
|
||||
limit: Optional[int] = None,
|
||||
only_conflicts: bool = False,
|
||||
) -> List[Dict]:
|
||||
"""
|
||||
Собрать элементы пакета: снимок, построенная метка, её источник.
|
||||
|
||||
Порядок — как в интерфейсе `/label`: сперва расхождения метки разметки с
|
||||
пометкой в имени файла (там ошибается один из источников), затем остальные.
|
||||
"""
|
||||
expert = set(expert_paths)
|
||||
items: List[Dict] = []
|
||||
|
||||
for rec in records:
|
||||
key = rec.path.as_posix()
|
||||
row = labels_table.get(key, {})
|
||||
marker = (rec.marker or "") or ""
|
||||
marker_label = QUALITY_BAD if marker == "bad" else QUALITY_GOOD
|
||||
conflict = marker_label != rec.label
|
||||
|
||||
if only_conflicts and not conflict:
|
||||
continue
|
||||
|
||||
violation = (row.get("violation_type") or "").strip()
|
||||
items.append(
|
||||
{
|
||||
"path": key,
|
||||
"file": rec.path.name,
|
||||
"study": rec.study,
|
||||
"region": rec.region or "",
|
||||
"label": int(rec.label),
|
||||
"violation": violation,
|
||||
"violation_label": violation_label(violation.split(";")[0], empty="") if violation else "",
|
||||
"conflict": bool(conflict),
|
||||
"marker": marker,
|
||||
"source": ("table" if row else "filename"),
|
||||
}
|
||||
)
|
||||
|
||||
items.sort(key=lambda i: (not i["conflict"], i["path"]))
|
||||
if limit is not None:
|
||||
items = items[:limit]
|
||||
return items
|
||||
|
||||
|
||||
def _render_items_html(items: Sequence[Dict]) -> str:
|
||||
"""PNG каждого снимка встроить в элемент как data-URI."""
|
||||
rendered: List[Dict] = []
|
||||
total_bytes = 0
|
||||
for index, item in enumerate(items, start=1):
|
||||
array = load_dicom_array(Path(item["path"]))
|
||||
encoded = image_png_base64(array)
|
||||
total_bytes += len(encoded)
|
||||
rendered.append({**item, "image": f"data:image/png;base64,{encoded}"})
|
||||
if index % 25 == 0 or index == len(items):
|
||||
logger.info("Подготовлено снимков: %d/%d", index, len(items))
|
||||
logger.info("Суммарный размер изображений (base64): %.1f МБ", total_bytes / 1024 / 1024)
|
||||
return rendered
|
||||
|
||||
|
||||
def render_html(
|
||||
items: Sequence[Dict],
|
||||
pack_title: str,
|
||||
pack_id: str,
|
||||
violations: Sequence[Dict],
|
||||
regions: Sequence[str] = REGIONS,
|
||||
) -> str:
|
||||
"""
|
||||
Собрать страницу пакета.
|
||||
|
||||
Страница автономна: ни одного внешнего запроса — ни CDN, ни `/static/`.
|
||||
Это требование методики (работа в закрытом контуре) и единственный способ
|
||||
гарантировать, что файл откроется на машине врача без сети.
|
||||
"""
|
||||
payload = {
|
||||
"title": pack_title,
|
||||
"packId": pack_id,
|
||||
"items": [
|
||||
{k: v for k, v in item.items() if k != "violation_label"} for item in items
|
||||
],
|
||||
"violations": [
|
||||
{"code": v["code"], "label": v["label"], "scope": v.get("scope", "any")}
|
||||
for v in violations
|
||||
],
|
||||
"regions": list(regions),
|
||||
"regionLabels": REGION_LABELS,
|
||||
"reviewFields": list(REVIEW_FIELDS),
|
||||
}
|
||||
|
||||
html = _PAGE.replace(_PLACEHOLDER["title"], pack_title)
|
||||
html = html.replace(_PLACEHOLDER["pack_id"], pack_id)
|
||||
html = html.replace(_PLACEHOLDER["total"], str(len(items)))
|
||||
html = html.replace(
|
||||
_PLACEHOLDER["items"],
|
||||
json.dumps(payload, ensure_ascii=False).replace("</", "<\\/"),
|
||||
)
|
||||
# Каталог нарушений и области уже внутри payload; отдельные маркеры оставлены,
|
||||
# чтобы шаблон можно было расширять без пересборки строк.
|
||||
html = html.replace(_PLACEHOLDER["catalogue"], "null")
|
||||
html = html.replace(_PLACEHOLDER["regions"], "null")
|
||||
return html
|
||||
|
||||
|
||||
def build_pack(
|
||||
data_root: str | Path = "dataset_hack",
|
||||
annotation_path: str | Path = "dataset_hack/НД_для_обучения/разметка.xlsx",
|
||||
labels_csv: str | Path = "labels/labels_images.csv",
|
||||
limit: Optional[int] = None,
|
||||
only_conflicts: bool = False,
|
||||
) -> Tuple[str, Dict]:
|
||||
"""Собрать HTML-пакет и вернуть его вместе со сводкой."""
|
||||
records = build_records(
|
||||
str(data_root), str(annotation_path), dedup=True, labels_csv=str(labels_csv)
|
||||
)
|
||||
labels_table = load_labels_csv(labels_csv)
|
||||
|
||||
items = collect_items(
|
||||
records, labels_table, expert_paths=labels_table.keys(),
|
||||
limit=limit, only_conflicts=only_conflicts,
|
||||
)
|
||||
if not items:
|
||||
raise ValueError("В пакет не попал ни один снимок: проверьте фильтры")
|
||||
|
||||
pack_id = pack_fingerprint(item["path"] for item in items)
|
||||
title = f"Разметка снимков DXA — {len(items)} снимков"
|
||||
html = render_html(_render_items_html(items), title, pack_id, catalogue())
|
||||
|
||||
stats = {
|
||||
"items": len(items),
|
||||
"conflicts": sum(1 for item in items if item["conflict"]),
|
||||
"pack_id": pack_id,
|
||||
"bytes": len(html.encode("utf-8")),
|
||||
}
|
||||
return html, stats
|
||||
|
||||
|
||||
def write_pack(out_path: str | Path, **kwargs) -> Dict:
|
||||
"""Собрать пакет и записать файл; вернуть сводку."""
|
||||
html, stats = build_pack(**kwargs)
|
||||
path = Path(out_path)
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(html, encoding="utf-8")
|
||||
stats["path"] = str(path)
|
||||
return stats
|
||||
|
||||
|
||||
def merge_review(
|
||||
review_csv: str | Path,
|
||||
out_csv: str | Path,
|
||||
data_root: str | Path = "dataset_hack",
|
||||
annotation_path: str | Path = "dataset_hack/НД_для_обучения/разметка.xlsx",
|
||||
labels_csv: str | Path = "labels/labels_images.csv",
|
||||
) -> Dict:
|
||||
"""
|
||||
Наложить вердикты разметчика на построенную разметку и записать результат.
|
||||
|
||||
Возвращает сводку, включая пути из файла разметчика, которых нет в датасете:
|
||||
это признак того, что пакет собирался из другого набора, и молча принимать
|
||||
такие вердикты нельзя.
|
||||
"""
|
||||
verdicts = load_verdicts(review_csv)
|
||||
if not verdicts:
|
||||
raise ValueError(f"В файле {review_csv} нет ни одного разобранного вердикта")
|
||||
|
||||
records = build_records(
|
||||
str(data_root), str(annotation_path), dedup=True, labels_csv=str(labels_csv)
|
||||
)
|
||||
known = {rec.path.as_posix() for rec in records}
|
||||
unknown = sorted(set(verdicts) - known)
|
||||
|
||||
labels_table = load_labels_csv(labels_csv)
|
||||
rows = export_rows(
|
||||
records, verdicts, scope="all", expert_paths=labels_table.keys()
|
||||
)
|
||||
|
||||
path = Path(out_csv)
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with path.open("w", newline="", encoding="utf-8-sig") as fh:
|
||||
writer = csv.DictWriter(fh, fieldnames=list(rows[0].keys()))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
|
||||
overridden = sum(1 for row in rows if row["label_rule"] == MANUAL_RULE)
|
||||
return {
|
||||
"reviewed": len(verdicts),
|
||||
"overridden": overridden,
|
||||
"unmatched": unknown,
|
||||
"rows": len(rows),
|
||||
"path": str(path),
|
||||
}
|
||||
|
||||
|
||||
def main(argv: Optional[Sequence[str]] = None) -> int:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Собрать автономный HTML-пакет для ручной разметки или влить вердикты"
|
||||
)
|
||||
parser.add_argument("--out", help="путь к HTML-пакету или к CSV при --merge")
|
||||
parser.add_argument("--merge", metavar="REVIEW_CSV",
|
||||
help="CSV, полученный от разметчика: наложить на построенную разметку")
|
||||
parser.add_argument("--data-root", default="dataset_hack")
|
||||
parser.add_argument("--annotation-path", default="dataset_hack/НД_для_обучения/разметка.xlsx")
|
||||
parser.add_argument("--labels-csv", default="labels/labels_images.csv")
|
||||
parser.add_argument("--limit", type=int, default=None,
|
||||
help="взять только первые N снимков (например, для пилота)")
|
||||
parser.add_argument("--only-conflicts", action="store_true",
|
||||
help="включить только снимки, где разметка расходится с именем файла")
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="%(message)s")
|
||||
|
||||
if args.merge:
|
||||
if not args.out:
|
||||
parser.error("--merge требует --out: куда записать объединённую разметку")
|
||||
summary = merge_review(
|
||||
args.merge, args.out,
|
||||
data_root=args.data_root,
|
||||
annotation_path=args.annotation_path,
|
||||
labels_csv=args.labels_csv,
|
||||
)
|
||||
print(f"Разобрано снимков: {summary['reviewed']}")
|
||||
print(f"Переопределено меток: {summary['overridden']} из {summary['rows']}")
|
||||
if summary["unmatched"]:
|
||||
print(f"ВНИМАНИЕ: путей нет в датасете: {len(summary['unmatched'])}")
|
||||
for path in summary["unmatched"][:5]:
|
||||
print(" ", path)
|
||||
print(f"Разметка записана: {summary['path']}")
|
||||
return 0
|
||||
|
||||
if not args.out:
|
||||
parser.error("укажите --out: куда записать HTML-пакет")
|
||||
|
||||
stats = write_pack(
|
||||
args.out,
|
||||
data_root=args.data_root,
|
||||
annotation_path=args.annotation_path,
|
||||
labels_csv=args.labels_csv,
|
||||
limit=args.limit,
|
||||
only_conflicts=args.only_conflicts,
|
||||
)
|
||||
print(f"Снимков в пакете: {stats['items']} (расхождений: {stats['conflicts']})")
|
||||
print(f"Отпечаток набора: {stats['pack_id']}")
|
||||
print(f"Размер файла: {stats['bytes'] / 1024 / 1024:.1f} МБ")
|
||||
print(f"Готово: {stats['path']}")
|
||||
return 0
|
||||
|
||||
|
||||
#: Шаблон страницы. Стили и скрипт встроены: файл должен открываться без сети.
|
||||
_PAGE = r"""<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>@@TITLE@@</title>
|
||||
<style>
|
||||
:root { color-scheme: light dark; --bg:#f5f6f8; --card:#fff; --ink:#1f2430; --muted:#6b7280;
|
||||
--line:#e2e5ea; --accent:#2563eb; --good:#15803d; --bad:#b91c1c; --warn:#b45309; }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root { --bg:#15181f; --card:#1e222b; --ink:#e8eaf0; --muted:#9aa2b1; --line:#333846; }
|
||||
}
|
||||
* { box-sizing: border-box; }
|
||||
body { margin:0; background:var(--bg); color:var(--ink);
|
||||
font:15px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; }
|
||||
header { background:var(--card); border-bottom:1px solid var(--line); padding:12px 20px;
|
||||
display:flex; flex-wrap:wrap; gap:12px; align-items:center; justify-content:space-between; }
|
||||
h1 { font-size:17px; margin:0; }
|
||||
.sub { color:var(--muted); font-size:12px; }
|
||||
main { display:grid; gap:16px; padding:16px 20px 40px; grid-template-columns: 24rem minmax(0,1fr);
|
||||
max-width:110rem; margin:0 auto; }
|
||||
@media (max-width: 900px) { main { grid-template-columns:1fr; } }
|
||||
.card { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:12px; }
|
||||
.bar { height:8px; background:var(--line); border-radius:4px; overflow:hidden; }
|
||||
.bar > div { height:100%; background:var(--accent); width:0; }
|
||||
.row { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
|
||||
.muted { color:var(--muted); }
|
||||
.small { font-size:12px; }
|
||||
.badge { display:inline-block; padding:1px 7px; border-radius:999px; font-size:12px; }
|
||||
.badge.good { background:#dcfce7; color:#166534; }
|
||||
.badge.bad { background:#fee2e2; color:#991b1b; }
|
||||
.badge.warn { background:#fef3c7; color:#92400e; }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.badge.good { background:#14361f; color:#86efac; }
|
||||
.badge.bad { background:#3f1616; color:#fca5a5; }
|
||||
.badge.warn { background:#3d2d0c; color:#fcd34d; }
|
||||
}
|
||||
button, select, input[type=text], input[type=search] { font:inherit; }
|
||||
button { border:1px solid var(--line); background:var(--card); color:var(--ink);
|
||||
border-radius:8px; padding:7px 12px; cursor:pointer; }
|
||||
button:hover { border-color:var(--accent); }
|
||||
button.primary { background:var(--accent); border-color:var(--accent); color:#fff; }
|
||||
button.good { background:var(--good); border-color:var(--good); color:#fff; }
|
||||
button.bad { background:var(--bad); border-color:var(--bad); color:#fff; }
|
||||
button[disabled] { opacity:.5; cursor:default; }
|
||||
select, input[type=text], input[type=search] { background:var(--card); color:var(--ink);
|
||||
border:1px solid var(--line); border-radius:8px; padding:6px 8px; width:100%; }
|
||||
#list { max-height:62vh; overflow:auto; display:flex; flex-direction:column; gap:6px; margin-top:8px; }
|
||||
.item { text-align:left; width:100%; border:1px solid var(--line); background:var(--card);
|
||||
border-radius:8px; padding:8px 10px; }
|
||||
.item.active { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent) inset; }
|
||||
.item .name { font-weight:600; }
|
||||
.item .meta { color:var(--muted); font-size:12px; margin-top:2px; }
|
||||
#imagewrap { border:1px solid var(--line); border-radius:8px; background:#0b0d12; padding:6px;
|
||||
display:flex; justify-content:center; }
|
||||
#image { max-width:100%; max-height:56vh; cursor:zoom-in; }
|
||||
#image.actual { max-height:none; cursor:zoom-out; }
|
||||
.qualities { display:flex; gap:8px; margin:12px 0; }
|
||||
.qualities button { flex:1; padding:11px 12px; font-weight:600; }
|
||||
.hint { color:var(--muted); font-size:12px; }
|
||||
#status { min-height:1.2em; font-size:13px; }
|
||||
#banner { display:none; padding:8px 20px; background:#fef3c7; color:#92400e; font-size:13px; }
|
||||
.footer { color:var(--muted); font-size:12px; padding:0 20px 24px; max-width:110rem; margin:0 auto; }
|
||||
code { background:var(--bg); padding:1px 4px; border-radius:4px; font-size:12px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div>
|
||||
<h1>Разметка снимков DXA</h1>
|
||||
<div class="sub">Подтвердите или исправьте вердикт по каждому снимку. Оценка модели здесь не показана намеренно.</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label class="small">Разметчик
|
||||
<input type="text" id="reviewer" placeholder="ФИО" style="width:12rem">
|
||||
</label>
|
||||
<button id="export">Выгрузить CSV</button>
|
||||
<label class="small" style="cursor:pointer">Загрузить CSV
|
||||
<input type="file" id="import" accept=".csv,text/csv" style="display:none">
|
||||
<span class="badge" id="importLabel">выбрать файл</span>
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
<div id="banner"></div>
|
||||
<main>
|
||||
<aside class="card">
|
||||
<div class="row" style="justify-content:space-between">
|
||||
<strong id="progressText">…</strong>
|
||||
<span class="small muted" id="packId">пакет @@PACK_ID@@</span>
|
||||
</div>
|
||||
<div class="bar" style="margin:8px 0"><div id="progressBar"></div></div>
|
||||
<div class="row">
|
||||
<label class="small" style="flex:1">Область
|
||||
<select id="filterRegion"><option value="">все</option></select>
|
||||
</label>
|
||||
<label class="small"><input type="checkbox" id="filterConflicts"> только расхождения</label>
|
||||
<label class="small"><input type="checkbox" id="filterUnreviewed" checked> неразобранные</label>
|
||||
</div>
|
||||
<input type="search" id="filterQuery" placeholder="Поиск по имени файла…" style="margin-top:8px">
|
||||
<div id="list"></div>
|
||||
</aside>
|
||||
<section class="card" id="detail">
|
||||
<p class="muted">Выберите снимок из списка слева.</p>
|
||||
</section>
|
||||
</main>
|
||||
<div class="footer">
|
||||
Вердикты хранятся в этом браузере (<code>localStorage</code>) и никуда не отправляются:
|
||||
файл работает без сети. Периодически нажимайте «Выгрузить CSV» — если очистить данные
|
||||
браузера, разметка пропадёт. Выгруженный CSV принимается обучением как
|
||||
<code>--labels-csv</code>, а влить его в построенную разметку можно командой
|
||||
<code>python -m src.dxa.review_pack --merge</code>.
|
||||
</div>
|
||||
|
||||
<script id="payload" type="application/json">@@ITEMS@@</script>
|
||||
<script>
|
||||
(function () {
|
||||
'use strict';
|
||||
var DATA = JSON.parse(document.getElementById('payload').textContent);
|
||||
var STORE_KEY = 'dxa-review-pack:' + DATA.packId;
|
||||
var state = { verdicts: {}, reviewer: '', selected: -1, visible: [] };
|
||||
|
||||
function esc(value) {
|
||||
return String(value === null || value === undefined ? '' : value).replace(/[&<>"']/g, function (ch) {
|
||||
return ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[ch];
|
||||
});
|
||||
}
|
||||
function regionLabel(code) { return DATA.regionLabels[code] || code || DATA.regionLabels['']; }
|
||||
function itemByPath(path) {
|
||||
for (var i = 0; i < DATA.items.length; i++) if (DATA.items[i].path === path) return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* --- Хранилище ------------------------------------------------------- */
|
||||
var storageOk = true;
|
||||
try {
|
||||
localStorage.setItem(STORE_KEY + ':probe', '1');
|
||||
localStorage.removeItem(STORE_KEY + ':probe');
|
||||
} catch (err) {
|
||||
storageOk = false;
|
||||
var banner = document.getElementById('banner');
|
||||
banner.style.display = 'block';
|
||||
banner.textContent = 'Браузер запретил сохранение в этом файле: вердикты живут только до ' +
|
||||
'закрытия вкладки. Нажимайте «Выгрузить CSV» до того, как закроете страницу.';
|
||||
}
|
||||
function load() {
|
||||
if (!storageOk) return;
|
||||
try {
|
||||
var raw = localStorage.getItem(STORE_KEY);
|
||||
if (!raw) return;
|
||||
var saved = JSON.parse(raw);
|
||||
state.verdicts = saved.verdicts || {};
|
||||
state.reviewer = saved.reviewer || '';
|
||||
document.getElementById('reviewer').value = state.reviewer;
|
||||
} catch (err) { /* повреждённое хранилище не должно ломать страницу */ }
|
||||
}
|
||||
function save() {
|
||||
if (!storageOk) return;
|
||||
try {
|
||||
localStorage.setItem(STORE_KEY, JSON.stringify({ verdicts: state.verdicts, reviewer: state.reviewer }));
|
||||
} catch (err) { /* переполнение хранилища: разметка всё равно уйдёт в CSV */ }
|
||||
}
|
||||
|
||||
/* --- Фильтры и список ------------------------------------------------ */
|
||||
function visible() {
|
||||
var region = document.getElementById('filterRegion').value;
|
||||
var conflicts = document.getElementById('filterConflicts').checked;
|
||||
var unreviewed = document.getElementById('filterUnreviewed').checked;
|
||||
var query = document.getElementById('filterQuery').value.trim().toLowerCase();
|
||||
var out = [];
|
||||
DATA.items.forEach(function (item, index) {
|
||||
var verdict = state.verdicts[item.path];
|
||||
if (region && item.region !== region) return;
|
||||
if (conflicts && !item.conflict) return;
|
||||
if (unreviewed && verdict) return;
|
||||
if (query && item.file.toLowerCase().indexOf(query) < 0 &&
|
||||
item.study.toLowerCase().indexOf(query) < 0) return;
|
||||
out.push(index);
|
||||
});
|
||||
return out;
|
||||
}
|
||||
|
||||
function render() {
|
||||
var reviewed = Object.keys(state.verdicts).length;
|
||||
var total = DATA.items.length;
|
||||
var percent = total ? Math.round(reviewed / total * 100) : 0;
|
||||
document.getElementById('progressText').textContent = 'Разобрано ' + reviewed + ' из ' + total + ' (' + percent + '%)';
|
||||
document.getElementById('progressBar').style.width = percent + '%';
|
||||
|
||||
state.visible = visible();
|
||||
var list = document.getElementById('list');
|
||||
if (!state.visible.length) {
|
||||
list.innerHTML = '<p class="muted small">Под фильтр ничего не подошло.</p>';
|
||||
return;
|
||||
}
|
||||
list.innerHTML = state.visible.map(function (index) {
|
||||
var item = DATA.items[index];
|
||||
var verdict = state.verdicts[item.path];
|
||||
var label = verdict ? verdict.quality : item.label;
|
||||
var badge = Number(label) === 1
|
||||
? '<span class="badge bad">нарушение</span>'
|
||||
: '<span class="badge good">годное</span>';
|
||||
var marks = verdict ? '<span class="badge">разобрано</span>' : '';
|
||||
if (item.conflict) marks += ' <span class="badge warn">расхождение</span>';
|
||||
return '<button class="item ' + (index === state.selected ? 'active' : '') + '" data-index="' + index + '">' +
|
||||
'<div class="name">' + esc(item.file) + '</div>' +
|
||||
'<div class="meta">' + badge + ' ' + marks + '</div>' +
|
||||
'<div class="meta">' + esc(regionLabel(item.region)) + ' · ' + esc(item.study) + '</div>' +
|
||||
'</button>';
|
||||
}).join('');
|
||||
Array.prototype.forEach.call(list.querySelectorAll('.item'), function (node) {
|
||||
node.addEventListener('click', function () { select(Number(node.dataset.index)); });
|
||||
});
|
||||
}
|
||||
|
||||
/* --- Разбор снимка --------------------------------------------------- */
|
||||
function violationsFor(region) {
|
||||
var matches = DATA.violations.filter(function (v) {
|
||||
if (v.scope === 'any') return true;
|
||||
if (v.scope === 'hip') return region === 'hip_right' || region === 'hip_left';
|
||||
return v.scope === region;
|
||||
});
|
||||
return matches.filter(function (v) { return v.scope !== 'any'; })
|
||||
.concat(matches.filter(function (v) { return v.scope === 'any'; }));
|
||||
}
|
||||
|
||||
function select(index) {
|
||||
state.selected = index;
|
||||
render();
|
||||
renderDetail();
|
||||
}
|
||||
|
||||
function renderDetail() {
|
||||
var detail = document.getElementById('detail');
|
||||
if (state.selected < 0) { detail.innerHTML = '<p class="muted">Выберите снимок из списка слева.</p>'; return; }
|
||||
var item = DATA.items[state.selected];
|
||||
var verdict = state.verdicts[item.path] || null;
|
||||
var region = (verdict && verdict.region) || item.region || 'spine';
|
||||
var options = violationsFor(region).map(function (v) {
|
||||
var chosen = verdict && verdict.violation === v.code;
|
||||
return '<option value="' + esc(v.code) + '"' + (chosen ? ' selected' : '') + '>' + esc(v.label) + '</option>';
|
||||
}).join('');
|
||||
|
||||
var source = item.source === 'table' ? 'экспертная таблица' : 'пометка в имени файла';
|
||||
var built = (Number(item.label) === 1 ? '<span class="badge bad">нарушение</span>' : '<span class="badge good">годное</span>') +
|
||||
' <span class="small muted">источник: ' + esc(source) + '</span>' +
|
||||
(item.violation ? ' <span class="small muted">критерий: ' + esc(item.violation_label || item.violation) + '</span>' : '');
|
||||
var conflict = item.conflict
|
||||
? '<div class="small" style="color:var(--warn);margin-top:6px">Метка разметки не совпадает с пометкой в имени файла (' +
|
||||
esc(item.marker || '—') + '). Проверьте снимок и подтвердите верный вердикт.</div>' : '';
|
||||
var note = verdict
|
||||
? '<div class="small muted">Ваш вердикт: ' + esc(verdict.reviewer || 'без имени') + ', ' + esc(verdict.reviewed_at) +
|
||||
(verdict.comment ? ' — «' + esc(verdict.comment) + '»' : '') + '</div>' : '';
|
||||
|
||||
detail.innerHTML =
|
||||
'<div class="row" style="justify-content:space-between;align-items:flex-start">' +
|
||||
'<div style="min-width:0">' +
|
||||
'<strong>' + esc(item.file) + '</strong>' +
|
||||
'<div class="small muted">' + esc(item.study) + '</div>' +
|
||||
'<div class="small muted" style="word-break:break-all">' + esc(item.path) + '</div>' +
|
||||
'<div style="margin-top:6px">Построенная разметка: ' + built + '</div>' + conflict + note +
|
||||
'</div>' +
|
||||
'<button id="del" ' + (verdict ? '' : 'disabled') + '>Снять вердикт</button>' +
|
||||
'</div>' +
|
||||
'<div id="imagewrap" style="margin-top:10px"><img id="image" src="' + item.image + '" alt=""></div>' +
|
||||
'<div class="small muted" style="margin-top:4px">Щёлкните по снимку, чтобы показать его в натуральную величину.</div>' +
|
||||
'<div style="margin-top:12px"><label class="small">Анатомическая область' +
|
||||
'<select id="region" style="margin-top:4px">' + DATA.regions.map(function (code) {
|
||||
return '<option value="' + esc(code) + '"' + (code === region ? ' selected' : '') + '>' +
|
||||
esc(DATA.regionLabels[code]) + '</option>';
|
||||
}).join('') + '</select></label></div>' +
|
||||
'<div style="margin-top:10px"><label class="small">Тип нарушения (один критерий)' +
|
||||
'<select id="violation" style="margin-top:4px"><option value="">— нет нарушения —</option>' + options + '</select>' +
|
||||
'</label>' +
|
||||
'<div class="hint">В разметке тип хранится одним кодом. Если критериев несколько, выберите основной.</div>' +
|
||||
'</div>' +
|
||||
'<div class="qualities">' +
|
||||
'<button class="good" id="markGood">Годное (g)</button>' +
|
||||
'<button class="bad" id="markBad">Нарушение (b)</button>' +
|
||||
'</div>' +
|
||||
'<label class="small">Комментарий<input type="text" id="comment" value="' + esc(verdict ? verdict.comment : '') +
|
||||
'" placeholder="что именно не так" style="margin-top:4px"></label>' +
|
||||
'<div class="row" style="margin-top:12px">' +
|
||||
'<button class="primary" id="save">Сохранить и далее (Enter)</button>' +
|
||||
'<span id="status"></span>' +
|
||||
'</div>' +
|
||||
'<div class="hint" style="margin-top:8px">Горячие клавиши: g — годное, b — нарушение, ' +
|
||||
'Enter — сохранить и перейти дальше, d — снять вердикт, j/k — следующий/предыдущий.</div>';
|
||||
|
||||
document.getElementById('image').addEventListener('click', function () { this.classList.toggle('actual'); });
|
||||
document.getElementById('markGood').addEventListener('click', function () { mark(0); });
|
||||
document.getElementById('markBad').addEventListener('click', function () { mark(1); });
|
||||
document.getElementById('save').addEventListener('click', function () { commit(); });
|
||||
document.getElementById('del').addEventListener('click', function () { remove(); });
|
||||
document.getElementById('region').addEventListener('change', function () {
|
||||
if (verdict) { verdict.region = this.value; save(); }
|
||||
renderDetail();
|
||||
});
|
||||
document.getElementById('violation').addEventListener('change', function () {
|
||||
document.getElementById('status').textContent =
|
||||
this.value ? 'Отмечено: нарушение' : 'Отмечено: годное';
|
||||
});
|
||||
}
|
||||
|
||||
function mark(quality) {
|
||||
var violation = document.getElementById('violation');
|
||||
if (quality === 0) {
|
||||
violation.value = '';
|
||||
} else if (!violation.value) {
|
||||
var first = violationsFor(document.getElementById('region').value)[0];
|
||||
if (first) violation.value = first.code;
|
||||
}
|
||||
document.getElementById('status').textContent = quality === 1 ? 'Отмечено: нарушение' : 'Отмечено: годное';
|
||||
document.getElementById('detail').dataset.pending = String(quality);
|
||||
}
|
||||
|
||||
function pendingQuality() {
|
||||
var raw = document.getElementById('detail').dataset.pending;
|
||||
if (raw === '0' || raw === '1') return Number(raw);
|
||||
var violation = document.getElementById('violation').value;
|
||||
return violation ? 1 : 0;
|
||||
}
|
||||
|
||||
function commit() {
|
||||
if (state.selected < 0) return;
|
||||
var item = DATA.items[state.selected];
|
||||
var quality = pendingQuality();
|
||||
var violation = quality === 1 ? document.getElementById('violation').value : '';
|
||||
state.verdicts[item.path] = {
|
||||
region: document.getElementById('region').value,
|
||||
quality: quality,
|
||||
violation: violation,
|
||||
comment: document.getElementById('comment').value.trim(),
|
||||
reviewer: state.reviewer,
|
||||
reviewed_at: new Date().toISOString().replace(/\.\d+Z$/, '+00:00'),
|
||||
};
|
||||
delete document.getElementById('detail').dataset.pending;
|
||||
save();
|
||||
next(1);
|
||||
document.getElementById('status').textContent = 'Сохранено';
|
||||
}
|
||||
|
||||
function remove() {
|
||||
if (state.selected < 0) return;
|
||||
delete state.verdicts[DATA.items[state.selected].path];
|
||||
save();
|
||||
render();
|
||||
renderDetail();
|
||||
}
|
||||
|
||||
function next(step) {
|
||||
var list = state.visible.length ? state.visible : DATA.items.map(function (_, i) { return i; });
|
||||
var position = list.indexOf(state.selected);
|
||||
var target = list[position + step];
|
||||
if (target === undefined) target = list[list.length - 1];
|
||||
if (target !== undefined) select(target);
|
||||
else { render(); }
|
||||
var node = document.querySelector('.item.active');
|
||||
if (node) node.scrollIntoView({ block: 'nearest' });
|
||||
}
|
||||
|
||||
/* --- Выгрузка и загрузка CSV ---------------------------------------- */
|
||||
function csvCell(value) {
|
||||
var text = value === null || value === undefined ? '' : String(value);
|
||||
return /[",\n\r]/.test(text) ? '"' + text.replace(/"/g, '""') + '"' : text;
|
||||
}
|
||||
|
||||
function exportCsv() {
|
||||
var rows = [DATA.reviewFields.join(',')];
|
||||
Object.keys(state.verdicts).sort().forEach(function (path) {
|
||||
var v = state.verdicts[path];
|
||||
var index = itemByPath(path);
|
||||
var item = index >= 0 ? DATA.items[index] : { region: '', file: '' };
|
||||
rows.push([
|
||||
path, v.region || item.region, v.quality, v.violation || '', v.comment || '',
|
||||
v.reviewer || '', v.reviewed_at || '', DATA.packId,
|
||||
].map(csvCell).join(','));
|
||||
});
|
||||
if (rows.length === 1) {
|
||||
document.getElementById('status').textContent = 'Пока нечего выгружать: нет ни одного вердикта';
|
||||
return;
|
||||
}
|
||||
var blob = new Blob(['\ufeff' + rows.join('\r\n') + '\r\n'], { type: 'text/csv;charset=utf-8' });
|
||||
var link = document.createElement('a');
|
||||
link.href = URL.createObjectURL(blob);
|
||||
link.download = 'manual_labels_' + DATA.packId + '.csv';
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
URL.revokeObjectURL(link.href);
|
||||
var reviewed = Object.keys(state.verdicts).length;
|
||||
document.getElementById('status').textContent = 'Выгружено вердиктов: ' + reviewed +
|
||||
' — отправьте файл заказчику' + (reviewed < DATA.items.length ? ' (разобрано не всё)' : '');
|
||||
}
|
||||
|
||||
function parseCsv(text) {
|
||||
var rows = [], row = [], field = '', quoted = false, i = 0;
|
||||
text = text.replace(/^\ufeff/, '');
|
||||
while (i < text.length) {
|
||||
var ch = text[i];
|
||||
if (quoted) {
|
||||
if (ch === '"') {
|
||||
if (text[i + 1] === '"') { field += '"'; i += 2; continue; }
|
||||
quoted = false; i++; continue;
|
||||
}
|
||||
field += ch; i++; continue;
|
||||
}
|
||||
if (ch === '"') { quoted = true; i++; continue; }
|
||||
if (ch === ',') { row.push(field); field = ''; i++; continue; }
|
||||
if (ch === '\r') { i++; continue; }
|
||||
if (ch === '\n') { row.push(field); rows.push(row); row = []; field = ''; i++; continue; }
|
||||
field += ch; i++;
|
||||
}
|
||||
if (field.length || row.length) { row.push(field); rows.push(row); }
|
||||
return rows;
|
||||
}
|
||||
|
||||
function importCsv(file) {
|
||||
var reader = new FileReader();
|
||||
reader.onload = function () {
|
||||
var rows = parseCsv(String(reader.result));
|
||||
if (rows.length < 2) { document.getElementById('status').textContent = 'В файле нет строк с вердиктами'; return; }
|
||||
var head = rows[0].map(function (h) { return h.trim(); });
|
||||
var at = function (name) { return head.indexOf(name); };
|
||||
var iPath = at('path_to_image'), iRegion = at('anatomical_region'),
|
||||
iQuality = at('quality_class'), iViolation = at('violation_type'),
|
||||
iComment = at('comment'), iReviewer = at('reviewer'), iWhen = at('reviewed_at');
|
||||
if (iPath < 0 || iQuality < 0) { document.getElementById('status').textContent = 'Не тот файл: нет колонок path_to_image/quality_class'; return; }
|
||||
var added = 0, unmatched = 0;
|
||||
rows.slice(1).forEach(function (cells) {
|
||||
var path = (cells[iPath] || '').trim();
|
||||
if (!path) return;
|
||||
if (itemByPath(path) < 0) { unmatched++; return; }
|
||||
state.verdicts[path] = {
|
||||
region: iRegion >= 0 ? (cells[iRegion] || '').trim() : '',
|
||||
quality: Number(cells[iQuality]) === 1 ? 1 : 0,
|
||||
violation: iViolation >= 0 ? (cells[iViolation] || '').trim() : '',
|
||||
comment: iComment >= 0 ? (cells[iComment] || '').trim() : '',
|
||||
reviewer: iReviewer >= 0 ? (cells[iReviewer] || '').trim() : '',
|
||||
reviewed_at: iWhen >= 0 ? (cells[iWhen] || '').trim() : '',
|
||||
};
|
||||
added++;
|
||||
});
|
||||
save();
|
||||
render();
|
||||
renderDetail();
|
||||
document.getElementById('status').textContent = 'Загружено вердиктов: ' + added +
|
||||
(unmatched ? ', путей нет в этом пакете: ' + unmatched : '');
|
||||
};
|
||||
reader.readAsText(file, 'utf-8');
|
||||
}
|
||||
|
||||
/* --- Инициализация --------------------------------------------------- */
|
||||
function init() {
|
||||
var regionSelect = document.getElementById('filterRegion');
|
||||
DATA.regions.forEach(function (code) {
|
||||
var option = document.createElement('option');
|
||||
option.value = code;
|
||||
option.textContent = DATA.regionLabels[code];
|
||||
regionSelect.appendChild(option);
|
||||
});
|
||||
['filterRegion', 'filterConflicts', 'filterUnreviewed'].forEach(function (id) {
|
||||
document.getElementById(id).addEventListener('change', render);
|
||||
});
|
||||
document.getElementById('filterQuery').addEventListener('input', render);
|
||||
document.getElementById('reviewer').addEventListener('input', function () {
|
||||
state.reviewer = this.value; save();
|
||||
});
|
||||
document.getElementById('export').addEventListener('click', exportCsv);
|
||||
document.getElementById('import').addEventListener('change', function () {
|
||||
if (this.files && this.files[0]) importCsv(this.files[0]);
|
||||
});
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (/^(INPUT|SELECT|TEXTAREA)$/.test(event.target.tagName)) {
|
||||
if (event.key === 'Enter') { event.preventDefault(); commit(); }
|
||||
return;
|
||||
}
|
||||
if (state.selected < 0) return;
|
||||
if (event.key === 'g') { event.preventDefault(); mark(0); }
|
||||
else if (event.key === 'b') { event.preventDefault(); mark(1); }
|
||||
else if (event.key === 'Enter') { event.preventDefault(); commit(); }
|
||||
else if (event.key === 'd') { event.preventDefault(); remove(); }
|
||||
else if (event.key === 'j') { event.preventDefault(); next(1); }
|
||||
else if (event.key === 'k') { event.preventDefault(); next(-1); }
|
||||
});
|
||||
window.addEventListener('beforeunload', function (event) {
|
||||
var reviewed = Object.keys(state.verdicts).length;
|
||||
if (reviewed && reviewed < DATA.items.length) {
|
||||
event.preventDefault();
|
||||
event.returnValue = 'Разметка не выгружена. Нажмите «Выгрузить CSV», чтобы не потерять работу.';
|
||||
return event.returnValue;
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
load();
|
||||
render();
|
||||
if (DATA.items.length && state.selected < 0) select(0);
|
||||
}
|
||||
|
||||
init();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
266
src/main.py
266
src/main.py
|
|
@ -13,21 +13,29 @@ FastAPI сервер для оценки качества DXA исследова
|
|||
|
||||
Эндпоинты:
|
||||
- GET / - Главная страница (веб-интерфейс)
|
||||
- GET /label - Интерфейс ручной разметки (подтверждение вердиктов специалистом)
|
||||
- GET /api/v1/health - Проверка статуса
|
||||
- POST /api/v1/analyze - Базовый анализ
|
||||
- POST /api/v1/analyze/detailed - Детальный анализ
|
||||
- POST /api/v1/analyze/sr - DICOM SR отчет
|
||||
- POST /api/v1/batch - Пакетный анализ
|
||||
- POST /api/v1/export - Анализ и экспорт в XLSX
|
||||
- GET /api/v1/labeling/items - Снимки датасета для разбора
|
||||
- GET /api/v1/labeling/image - Рендер снимка для просмотра
|
||||
- POST /api/v1/labeling/verdict - Сохранить вердикт специалиста
|
||||
- DELETE /api/v1/labeling/verdict - Снять вердикт
|
||||
- GET /api/v1/labeling/export - Выгрузка разметки (CSV/XLSX)
|
||||
"""
|
||||
import base64
|
||||
import os
|
||||
import time
|
||||
from datetime import datetime
|
||||
from fastapi import FastAPI, File, UploadFile, Query
|
||||
from fastapi import Body, FastAPI, File, Query, Response, UploadFile
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from pathlib import Path
|
||||
from fastapi.responses import StreamingResponse
|
||||
from typing import Dict, Optional
|
||||
from typing import Dict, List, Optional
|
||||
from urllib.parse import quote
|
||||
import numpy as np
|
||||
import pydicom
|
||||
import pandas as pd
|
||||
|
|
@ -36,6 +44,8 @@ import torch
|
|||
|
||||
from starlette.responses import JSONResponse, FileResponse
|
||||
|
||||
from src.dxa.dataset import build_records
|
||||
from src.dxa.excel_labels import load_labels_csv
|
||||
from src.dxa.inference import (
|
||||
build_reasons,
|
||||
image_png_base64,
|
||||
|
|
@ -43,9 +53,21 @@ from src.dxa.inference import (
|
|||
mask_png_base64,
|
||||
predict_from_bytes,
|
||||
)
|
||||
from src.dxa.labels import QUALITY_BAD, QUALITY_GOOD, ImageRecord
|
||||
from src.dxa.manual_labels import (
|
||||
EXPORT_FIELDS,
|
||||
SELECTABLE_REGIONS,
|
||||
VerdictError,
|
||||
export_rows,
|
||||
load_verdicts,
|
||||
make_verdict,
|
||||
review_progress,
|
||||
upsert_verdict,
|
||||
remove_verdict,
|
||||
)
|
||||
from src.dxa.model_card import model_card
|
||||
from src.dxa.preprocess import load_array_from_bytes
|
||||
from src.dxa.violations import canon_type, label as violation_label, sr_code
|
||||
from src.dxa.preprocess import load_array_from_bytes, load_dicom_array
|
||||
from src.dxa.violations import canon_type, catalogue, label as violation_label, sr_code
|
||||
from src.utils.utils import get_device
|
||||
from src.quality.quality_scorer import convert_to_serializable
|
||||
|
||||
|
|
@ -72,6 +94,65 @@ dxa_threshold = 0.0
|
|||
dxa_metadata: Dict = {}
|
||||
device = None
|
||||
|
||||
# Пути ручной разметки. Каталог данных и разметки вынесены в переменные
|
||||
# окружения по той же причине, что и чекпоинт: в контейнере рабочий каталог
|
||||
# другой, а инструмент разметки должен работать и там.
|
||||
DATA_ROOT = os.environ.get("DXA_DATA_ROOT", "dataset_hack")
|
||||
ANNOTATION_PATH = os.environ.get(
|
||||
"DXA_ANNOTATION_PATH", "dataset_hack/НД_для_обучения/разметка.xlsx"
|
||||
)
|
||||
LABELS_CSV = os.environ.get("DXA_LABELS_CSV", "labels/labels_images.csv")
|
||||
MANUAL_LABELS_PATH = os.environ.get("DXA_MANUAL_LABELS", "labels/manual_labels.csv")
|
||||
|
||||
#: Кэш записей датасета: сканирование хеширует пиксели 482 файлов, а интерфейс
|
||||
#: ходит в /items на каждое действие. Датасет между запросами не меняется.
|
||||
_records_cache: Dict[str, List[ImageRecord]] = {}
|
||||
|
||||
|
||||
def base_records() -> List[ImageRecord]:
|
||||
"""Записи датасета с построенной разметкой (без ручных вердиктов)."""
|
||||
if "base" not in _records_cache:
|
||||
try:
|
||||
_records_cache["base"] = build_records(
|
||||
DATA_ROOT, ANNOTATION_PATH, dedup=True, labels_csv=LABELS_CSV
|
||||
)
|
||||
except Exception as exc:
|
||||
print(f"Dataset scan failed: {exc}")
|
||||
_records_cache["base"] = []
|
||||
return _records_cache["base"]
|
||||
|
||||
|
||||
def expert_paths() -> set:
|
||||
"""Пути, метка которых взята из экспертной таблицы, а не из имени файла."""
|
||||
try:
|
||||
return set(load_labels_csv(LABELS_CSV))
|
||||
except Exception as exc:
|
||||
print(f"Labels CSV unavailable ({LABELS_CSV}): {exc}")
|
||||
return set()
|
||||
|
||||
|
||||
def _dataset_path(raw: str) -> Path:
|
||||
"""
|
||||
Проверить, что запрошенный снимок лежит внутри каталога датасета.
|
||||
|
||||
Путь приходит от клиента (интерфейс ходит по путям из выгрузки), поэтому без
|
||||
проверки запрос вида `../../etc/passwd` или абсолютный путь отдал бы наружу
|
||||
любой файл на диске.
|
||||
"""
|
||||
root = Path(DATA_ROOT).resolve()
|
||||
candidate = Path(raw)
|
||||
if not candidate.is_absolute():
|
||||
candidate = Path.cwd() / candidate
|
||||
candidate = candidate.resolve()
|
||||
|
||||
if candidate != root and root not in candidate.parents:
|
||||
raise VerdictError("Путь вне каталога датасета")
|
||||
if candidate.suffix.lower() != ".dcm":
|
||||
raise VerdictError("Допустимы только файлы .dcm")
|
||||
if not candidate.is_file():
|
||||
raise VerdictError("Файл не найден")
|
||||
return candidate
|
||||
|
||||
|
||||
def load_model():
|
||||
"""
|
||||
|
|
@ -307,6 +388,183 @@ async def get_model_card():
|
|||
return convert_to_serializable(card)
|
||||
|
||||
|
||||
# --- Ручная разметка -------------------------------------------------------
|
||||
# Раздел 2.6 задания: «автоматическая коррекция разметки с возможностью
|
||||
# подтверждения специалистом». Поштучной экспертной оценки снимков в наборе нет
|
||||
# (в `разметка.xlsx` вердикт выставлен исследованию), поэтому вердикты,
|
||||
# проставленные в интерфейсе `/label`, хранятся отдельным файлом и
|
||||
# накладываются поверх построенной разметки.
|
||||
|
||||
|
||||
@app.get("/label")
|
||||
async def labeling_page():
|
||||
"""Интерфейс ручной разметки: подтверждение и правка вердиктов."""
|
||||
page = Path(__file__).parent / "api/static/label.html"
|
||||
if not page.exists():
|
||||
return JSONResponse({"error": "label.html не найден"}, status_code=404)
|
||||
return FileResponse(str(page))
|
||||
|
||||
|
||||
@app.get("/api/v1/labeling/items")
|
||||
async def labeling_items(
|
||||
offset: int = Query(0, ge=0),
|
||||
limit: int = Query(24, ge=1, le=200),
|
||||
region: Optional[str] = None,
|
||||
conflicts: bool = False,
|
||||
unreviewed: bool = False,
|
||||
q: Optional[str] = None,
|
||||
):
|
||||
"""
|
||||
Снимки датасета с текущей меткой и её происхождением.
|
||||
|
||||
Расхождения с пометкой в имени файла идут первыми: там ошибка возможна в
|
||||
любом из источников, поэтому такие снимки разбирать полезнее всего первыми.
|
||||
"""
|
||||
records = base_records()
|
||||
verdicts = load_verdicts(MANUAL_LABELS_PATH)
|
||||
expert = expert_paths()
|
||||
|
||||
items: List[Dict] = []
|
||||
for rec in records:
|
||||
key = rec.path.as_posix()
|
||||
verdict = verdicts.get(key)
|
||||
marker_label = QUALITY_BAD if rec.marker == "bad" else QUALITY_GOOD
|
||||
|
||||
item = {
|
||||
"path": key,
|
||||
"file": rec.path.name,
|
||||
"study": rec.study,
|
||||
"region": (verdict.region if verdict else rec.region) or "",
|
||||
"base_region": rec.region or "",
|
||||
"label": verdict.quality if verdict else rec.label,
|
||||
"base_label": rec.label,
|
||||
"violation": verdict.violation if verdict else "",
|
||||
"violation_label": violation_label(verdict.violation, empty="") if verdict else "",
|
||||
"marker": rec.marker or "",
|
||||
"filename_conflict": marker_label != rec.label,
|
||||
"reviewed": verdict is not None,
|
||||
"reviewer": verdict.reviewer if verdict else "",
|
||||
"comment": verdict.comment if verdict else "",
|
||||
"reviewed_at": verdict.reviewed_at if verdict else "",
|
||||
"label_source": "manual" if verdict else ("table" if key in expert else "filename"),
|
||||
"image_url": "/api/v1/labeling/image?path=" + quote(key),
|
||||
}
|
||||
|
||||
if region and item["region"] != region:
|
||||
continue
|
||||
if conflicts and not item["filename_conflict"]:
|
||||
continue
|
||||
if unreviewed and item["reviewed"]:
|
||||
continue
|
||||
if q and q.lower() not in key.lower():
|
||||
continue
|
||||
items.append(item)
|
||||
|
||||
items.sort(key=lambda i: (not i["filename_conflict"], i["reviewed"], i["path"]))
|
||||
return {
|
||||
"items": items[offset : offset + limit],
|
||||
"total": len(items),
|
||||
"offset": offset,
|
||||
"limit": limit,
|
||||
"progress": review_progress(records, verdicts),
|
||||
"regions": list(SELECTABLE_REGIONS),
|
||||
"violations": catalogue(),
|
||||
}
|
||||
|
||||
|
||||
@app.get("/api/v1/labeling/image")
|
||||
async def labeling_image(path: str = Query(..., description="Путь к снимку из датасета")):
|
||||
"""PNG снимка для просмотра специалистом (без разметки и наложений)."""
|
||||
try:
|
||||
target = _dataset_path(path)
|
||||
except VerdictError as exc:
|
||||
return JSONResponse({"error": str(exc)}, status_code=403)
|
||||
|
||||
try:
|
||||
array = load_dicom_array(target)
|
||||
except Exception as exc: # битый DICOM — ошибка формата, а не отказ доступа
|
||||
return JSONResponse({"error": f"Не удалось прочитать DICOM: {exc}"}, status_code=422)
|
||||
|
||||
return Response(content=base64.b64decode(image_png_base64(array)), media_type="image/png")
|
||||
|
||||
|
||||
@app.post("/api/v1/labeling/verdict")
|
||||
async def save_labeling_verdict(payload: dict = Body(...)):
|
||||
"""Сохранить вердикт специалиста по снимку."""
|
||||
try:
|
||||
verdict = make_verdict(
|
||||
path=payload.get("path", ""),
|
||||
region=payload.get("region", ""),
|
||||
quality=payload.get("quality", -1),
|
||||
violation=payload.get("violation", ""),
|
||||
comment=payload.get("comment", ""),
|
||||
reviewer=payload.get("reviewer", ""),
|
||||
)
|
||||
_dataset_path(verdict.path) # нельзя разметить снимок вне датасета
|
||||
except (VerdictError, ValueError, TypeError) as exc:
|
||||
return JSONResponse({"error": str(exc)}, status_code=400)
|
||||
|
||||
upsert_verdict(MANUAL_LABELS_PATH, verdict)
|
||||
return {
|
||||
"saved": verdict.as_row(),
|
||||
"progress": review_progress(base_records(), load_verdicts(MANUAL_LABELS_PATH)),
|
||||
}
|
||||
|
||||
|
||||
@app.delete("/api/v1/labeling/verdict")
|
||||
async def delete_labeling_verdict(path: str = Query(...)):
|
||||
"""Снять вердикт: снимок возвращается к построенной разметке."""
|
||||
try:
|
||||
verdicts = remove_verdict(MANUAL_LABELS_PATH, path)
|
||||
except VerdictError as exc:
|
||||
return JSONResponse({"error": str(exc)}, status_code=404)
|
||||
return {"progress": review_progress(base_records(), verdicts)}
|
||||
|
||||
|
||||
@app.get("/api/v1/labeling/export")
|
||||
async def labeling_export(scope: str = "all", fmt: str = "csv"):
|
||||
"""
|
||||
Выгрузить разметку.
|
||||
|
||||
`scope=all` — весь набор с наложенными ручными вердиктами: такой файл
|
||||
принимается обучением как `--labels-csv`. `scope=reviewed` — только
|
||||
разобранные специалистом снимки (для сверки с построенной разметкой).
|
||||
"""
|
||||
try:
|
||||
rows = export_rows(
|
||||
base_records(),
|
||||
load_verdicts(MANUAL_LABELS_PATH),
|
||||
scope=scope,
|
||||
expert_paths=expert_paths(),
|
||||
)
|
||||
except VerdictError as exc:
|
||||
return JSONResponse({"error": str(exc)}, status_code=400)
|
||||
|
||||
frame = pd.DataFrame(rows, columns=list(EXPORT_FIELDS))
|
||||
stamp = datetime.now().strftime("%Y%m%d_%H%M")
|
||||
|
||||
if fmt == "xlsx":
|
||||
buffer = io.BytesIO()
|
||||
frame.to_excel(buffer, index=False)
|
||||
buffer.seek(0)
|
||||
return StreamingResponse(
|
||||
buffer,
|
||||
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
headers={
|
||||
"Content-Disposition": f'attachment; filename="manual_labels_{stamp}.xlsx"'
|
||||
},
|
||||
)
|
||||
|
||||
text = io.StringIO()
|
||||
frame.to_csv(text, index=False)
|
||||
# BOM нужен, чтобы Excel открыл кириллицу в UTF-8, а не в cp1251.
|
||||
return StreamingResponse(
|
||||
io.BytesIO(text.getvalue().encode("utf-8-sig")),
|
||||
media_type="text/csv; charset=utf-8",
|
||||
headers={"Content-Disposition": f'attachment; filename="manual_labels_{stamp}.csv"'},
|
||||
)
|
||||
|
||||
|
||||
@app.post("/api/v1/analyze")
|
||||
async def analyze_dicom(file: UploadFile = File(...)):
|
||||
"""Analyze single DICOM file"""
|
||||
|
|
|
|||
|
|
@ -0,0 +1,153 @@
|
|||
/**
|
||||
* Проверка автономного HTML-пакета для ручной разметки (файл для врача).
|
||||
*
|
||||
* Пакет открывается напрямую с диска (`file://`), без сервера и без сети —
|
||||
* именно так его откроет врач. Сценарий повторяет его работу: выбрать снимок,
|
||||
* посмотреть, отметить вердикт, убедиться, что он пережил перезагрузку, выгрузить
|
||||
* CSV, а затем загрузить его обратно (восстановление прогресса на другой машине).
|
||||
*
|
||||
* Пакет нужно собрать заранее:
|
||||
* python -m src.dxa.review_pack --out /tmp/review_small.html --limit 8
|
||||
* PACK=/tmp/review_small.html node tests/browser/review_pack.js
|
||||
*
|
||||
* Переменные окружения:
|
||||
* PACK путь к HTML-пакету (обязателен)
|
||||
* PLAYWRIGHT путь к playwright-core (по умолчанию bundled Browser Use)
|
||||
*/
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
function resolvePlaywright() {
|
||||
if (process.env.PLAYWRIGHT) return process.env.PLAYWRIGHT;
|
||||
const base = path.join(os.homedir(), '.qwen', 'updates', 'npm');
|
||||
if (!fs.existsSync(base)) return 'playwright-core';
|
||||
const versions = fs.readdirSync(path.join(base, fs.readdirSync(base)[0], 'versions')).sort();
|
||||
for (const v of versions.reverse()) {
|
||||
const candidate = path.join(
|
||||
base, fs.readdirSync(base)[0], 'versions', v,
|
||||
'node_modules/@qwen-code/qwen-code/bundled/browser-use/runtime/node_modules/playwright-core'
|
||||
);
|
||||
if (fs.existsSync(candidate)) return candidate;
|
||||
}
|
||||
return 'playwright-core';
|
||||
}
|
||||
|
||||
const { chromium } = require(resolvePlaywright());
|
||||
|
||||
const PACK = process.env.PACK;
|
||||
if (!PACK || !fs.existsSync(PACK)) {
|
||||
console.error('FAILED: укажите PACK=путь/к/пакету.html (соберите его через src.dxa.review_pack)');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
function assert(condition, message) {
|
||||
if (!condition) throw new Error(message);
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'dxa-pack-'));
|
||||
const context = await chromium.launchPersistentContext(userDataDir, {
|
||||
channel: 'chrome',
|
||||
headless: true,
|
||||
acceptDownloads: true,
|
||||
});
|
||||
const page = context.pages()[0] || await context.newPage();
|
||||
await page.setViewportSize({ width: 1500, height: 1000 });
|
||||
// beforeunload предупреждает о невыгруженной разметке — для проверки это ожидаемо.
|
||||
page.on('dialog', (dialog) => dialog.accept());
|
||||
|
||||
const consoleErrors = [];
|
||||
const external = [];
|
||||
page.on('console', (m) => { if (m.type() === 'error') consoleErrors.push(m.text()); });
|
||||
page.on('pageerror', (e) => consoleErrors.push('PAGEERROR ' + e.message));
|
||||
page.on('request', (request) => {
|
||||
const url = request.url();
|
||||
if (!url.startsWith('file:') && !url.startsWith('data:') && !url.startsWith('blob:')) {
|
||||
external.push(url);
|
||||
}
|
||||
});
|
||||
|
||||
await page.goto('file://' + path.resolve(PACK), { waitUntil: 'domcontentloaded' });
|
||||
console.log('title:', await page.title());
|
||||
|
||||
await page.waitForFunction(() => document.querySelectorAll('.item').length > 0, { timeout: 30000 });
|
||||
const total = await page.evaluate(() => document.querySelectorAll('.item').length);
|
||||
console.log('снимков в списке:', total);
|
||||
console.log('прогресс:', (await page.locator('#progressText').innerText()).trim());
|
||||
console.log('отпечаток пакета:', (await page.locator('#packId').innerText()).trim());
|
||||
assert(total > 1, 'в пакете должно быть несколько снимков');
|
||||
|
||||
// Разбор первого снимка: изображение встроено как data-URI и рисуется.
|
||||
await page.locator('.item').first().click();
|
||||
await page.waitForFunction(() => {
|
||||
const img = document.getElementById('image');
|
||||
return img && img.naturalWidth > 0;
|
||||
}, { timeout: 20000 });
|
||||
const image = await page.evaluate(() => {
|
||||
const img = document.getElementById('image');
|
||||
return { w: img.naturalWidth, h: img.naturalHeight, data: img.getAttribute('src').startsWith('data:image/png;base64,') };
|
||||
});
|
||||
console.log('снимок:', image);
|
||||
assert(image.w > 50 && image.h > 50, 'снимок не отрисован');
|
||||
assert(image.data, 'снимок должен быть встроен как data-URI');
|
||||
|
||||
// Построенная разметка и её источник видны сразу (режим подтверждения).
|
||||
const detail = await page.locator('#detail').innerText();
|
||||
assert(/Построенная разметка/.test(detail), 'не показана построенная разметка');
|
||||
assert(/источник:/.test(detail), 'не показан источник метки');
|
||||
console.log('подсказка о расхождении:', /не совпадает с пометкой/.test(detail) ? 'есть' : 'нет в этом снимке');
|
||||
|
||||
// Нарушение: тип подставляется по области; годное — снимает тип.
|
||||
await page.locator('#markBad').click();
|
||||
const chosen = await page.locator('#violation').inputValue();
|
||||
console.log('тип при отметке «нарушение»:', chosen || '(пусто)');
|
||||
assert(chosen, 'тип нарушения не подставился');
|
||||
await page.locator('#markGood').click();
|
||||
assert((await page.locator('#violation').inputValue()) === '', 'тип должен сниматься при «годное»');
|
||||
|
||||
await page.locator('#reviewer').fill('Тестова А. А.');
|
||||
await page.locator('#save').click();
|
||||
await page.waitForFunction(() => /Разобрано 1 /.test(document.getElementById('progressText').innerText), { timeout: 15000 });
|
||||
console.log('после сохранения:', (await page.locator('#progressText').innerText()).trim());
|
||||
|
||||
// Вердикт должен пережить перезагрузку страницы (localStorage).
|
||||
await page.reload({ waitUntil: 'domcontentloaded' });
|
||||
await page.waitForFunction(() => /Разобрано 1 /.test(document.getElementById('progressText').innerText), { timeout: 20000 });
|
||||
console.log('после перезагрузки:', (await page.locator('#progressText').innerText()).trim());
|
||||
|
||||
// Выгрузка CSV.
|
||||
const [download] = await Promise.all([
|
||||
page.waitForEvent('download', { timeout: 20000 }),
|
||||
page.locator('#export').click(),
|
||||
]);
|
||||
const csvPath = path.join(userDataDir, 'export.csv');
|
||||
await download.saveAs(csvPath);
|
||||
const csvText = fs.readFileSync(csvPath, 'utf-8');
|
||||
const lines = csvText.replace(/^\ufeff/, '').trim().split(/\r?\n/);
|
||||
const header = lines[0].split(',');
|
||||
console.log('CSV: строк', lines.length - 1, '| колонки:', header.join(','));
|
||||
assert(/path_to_image/.test(header[0]), 'в CSV нет колонки path_to_image');
|
||||
assert(header.includes('quality_class') && header.includes('pack_id'), 'в CSV нет обязательных колонок');
|
||||
assert(lines.length === 2, `в CSV должна быть одна строка с вердиктом, получено ${lines.length - 1}`);
|
||||
assert(/,0,/.test(lines[1]), 'вердикт «годное» должен записаться как quality_class=0');
|
||||
|
||||
// Восстановление прогресса из файла: чистим хранилище и загружаем CSV обратно.
|
||||
await page.evaluate(() => window.localStorage.clear());
|
||||
await page.reload({ waitUntil: 'domcontentloaded' });
|
||||
await page.waitForFunction(() => /Разобрано 0 /.test(document.getElementById('progressText').innerText), { timeout: 20000 });
|
||||
await page.locator('#import').setInputFiles(csvPath);
|
||||
await page.waitForFunction(() => /Разобрано 1 /.test(document.getElementById('progressText').innerText), { timeout: 20000 });
|
||||
console.log('после загрузки CSV:', (await page.locator('#progressText').innerText()).trim());
|
||||
|
||||
console.log('внешние запросы:', external.length ? external : 'нет');
|
||||
assert(external.length === 0, `пакет обратился к сети: ${external.join(', ')}`);
|
||||
console.log('ошибки консоли:', consoleErrors.length ? consoleErrors : 'нет');
|
||||
assert(consoleErrors.length === 0, `ошибки в консоли: ${consoleErrors.join(' | ')}`);
|
||||
|
||||
await context.close();
|
||||
console.log('OK: пакет разметки работает автономно (вердикт, перезагрузка, выгрузка, загрузка)');
|
||||
})().catch((error) => {
|
||||
console.error('FAILED:', error.message);
|
||||
process.exit(1);
|
||||
});
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
/**
|
||||
* Проверка интерфейса ручной разметки в реальном браузере.
|
||||
*
|
||||
* Сценарий повторяет работу специалиста: открыть /label, выбрать снимок из
|
||||
* списка, посмотреть изображение, отметить вердикт и сохранить его. Проверяется,
|
||||
* что вердикт действительно дошёл до сервера (счётчик разобранных растёт и
|
||||
* остаётся после перезагрузки) и что страница не обращается к внешним хостам.
|
||||
*
|
||||
* Требуется запущенный сервер с временным файлом вердиктов, чтобы не портить
|
||||
* рабочий labels/manual_labels.csv:
|
||||
* DXA_MANUAL_LABELS=/tmp/manual_ui.csv python -m uvicorn src.main:app --port 8123
|
||||
* node tests/browser/ui_labeling.js
|
||||
*
|
||||
* Переменные окружения:
|
||||
* BASE_URL адрес сервера (по умолчанию http://127.0.0.1:8123)
|
||||
* PLAYWRIGHT путь к playwright-core (по умолчанию bundled Browser Use)
|
||||
*/
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
function resolvePlaywright() {
|
||||
if (process.env.PLAYWRIGHT) return process.env.PLAYWRIGHT;
|
||||
const base = path.join(os.homedir(), '.qwen', 'updates', 'npm');
|
||||
if (!fs.existsSync(base)) return 'playwright-core';
|
||||
const versions = fs.readdirSync(path.join(base, fs.readdirSync(base)[0], 'versions')).sort();
|
||||
for (const v of versions.reverse()) {
|
||||
const candidate = path.join(
|
||||
base, fs.readdirSync(base)[0], 'versions', v,
|
||||
'node_modules/@qwen-code/qwen-code/bundled/browser-use/runtime/node_modules/playwright-core'
|
||||
);
|
||||
if (fs.existsSync(candidate)) return candidate;
|
||||
}
|
||||
return 'playwright-core';
|
||||
}
|
||||
|
||||
const { chromium } = require(resolvePlaywright());
|
||||
|
||||
const BASE = process.env.BASE_URL || 'http://127.0.0.1:8123';
|
||||
|
||||
function assert(condition, message) {
|
||||
if (!condition) throw new Error(message);
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'dxa-label-'));
|
||||
const context = await chromium.launchPersistentContext(userDataDir, {
|
||||
channel: 'chrome',
|
||||
headless: true,
|
||||
});
|
||||
const page = context.pages()[0] || await context.newPage();
|
||||
await page.setViewportSize({ width: 1500, height: 1100 });
|
||||
|
||||
const consoleErrors = [];
|
||||
const external = [];
|
||||
page.on('console', (m) => { if (m.type() === 'error') consoleErrors.push(m.text()); });
|
||||
page.on('pageerror', (e) => consoleErrors.push('PAGEERROR ' + e.message));
|
||||
page.on('request', (request) => {
|
||||
const url = request.url();
|
||||
if (!url.startsWith(BASE) && !url.startsWith('data:')) external.push(url);
|
||||
});
|
||||
|
||||
await page.goto(`${BASE}/label`, { waitUntil: 'domcontentloaded' });
|
||||
console.log('title:', await page.title());
|
||||
|
||||
await page.waitForFunction(
|
||||
() => document.querySelectorAll('#list .item-card').length > 0,
|
||||
{ timeout: 90000 }
|
||||
);
|
||||
|
||||
const summary = await page.evaluate(() => ({
|
||||
progress: document.getElementById('progressText').innerText.trim(),
|
||||
conflicts: document.getElementById('conflictText').innerText.trim(),
|
||||
byRegion: document.getElementById('byRegion').innerText.trim(),
|
||||
items: document.querySelectorAll('#list .item-card').length,
|
||||
}));
|
||||
console.log('summary:', summary);
|
||||
assert(summary.items > 0, 'список снимков пуст');
|
||||
assert(/\d+ из \d+/.test(summary.progress), `счётчик разобранных не найден: ${summary.progress}`);
|
||||
|
||||
const total = Number(summary.progress.match(/из (\d+)/)[1]);
|
||||
assert(total > 100, `ожидался весь датасет, получено ${total}`);
|
||||
|
||||
// Первым идёт расхождение разметки с пометкой в имени файла.
|
||||
const first = await page.evaluate(() => ({
|
||||
file: document.querySelector('#list .item-card .truncate').innerText.trim(),
|
||||
conflict: /расхождение/.test(document.querySelector('#list .item-card').innerText),
|
||||
}));
|
||||
console.log('первый снимок:', first);
|
||||
assert(first.conflict, 'расхождения должны идти первыми');
|
||||
|
||||
// Разбор снимка: изображение должно реально загрузиться с сервера.
|
||||
await page.locator('#list .item-card').first().click();
|
||||
await page.waitForSelector('#detail #image', { timeout: 20000 });
|
||||
await page.waitForFunction(
|
||||
() => { const img = document.getElementById('image'); return img && img.naturalWidth > 0; },
|
||||
{ timeout: 30000 }
|
||||
);
|
||||
const image = await page.evaluate(() => {
|
||||
const img = document.getElementById('image');
|
||||
return { w: img.naturalWidth, h: img.naturalHeight, src: img.getAttribute('src').slice(0, 40) };
|
||||
});
|
||||
console.log('изображение:', image);
|
||||
assert(image.w > 50 && image.h > 50, `снимок не отрисован: ${JSON.stringify(image)}`);
|
||||
|
||||
// Вердикт: «нарушение» требует типа, «годное» его снимает.
|
||||
await page.locator('#markBad').click();
|
||||
const chosen = await page.locator('#violation').inputValue();
|
||||
console.log('выбранный тип нарушения при отметке «нарушение»:', chosen || '(пусто)');
|
||||
assert(chosen, 'при отметке «нарушение» тип не подставился');
|
||||
|
||||
await page.locator('#markGood').click();
|
||||
assert(
|
||||
(await page.locator('#violation').inputValue()) === '',
|
||||
'при отметке «годное» тип нарушения должен сниматься'
|
||||
);
|
||||
|
||||
await page.locator('#markGood').click();
|
||||
await page.locator('#saveVerdict').click();
|
||||
const reviewedBefore = Number(summary.progress.match(/Разобрано (\d+)/)[1]);
|
||||
const expected = reviewedBefore + 1;
|
||||
await page.waitForFunction(
|
||||
(want) => new RegExp(`Разобрано ${want} `).test(document.getElementById('progressText').innerText),
|
||||
expected,
|
||||
{ timeout: 20000 }
|
||||
);
|
||||
console.log('после сохранения:', (await page.locator('#progressText').innerText()).trim());
|
||||
|
||||
// Вердикт должен сохраниться на сервере, а не только в состоянии страницы.
|
||||
await page.reload({ waitUntil: 'domcontentloaded' });
|
||||
await page.waitForFunction(
|
||||
(want) => new RegExp(`Разобрано ${want} `).test(document.getElementById('progressText').innerText),
|
||||
expected,
|
||||
{ timeout: 90000 }
|
||||
);
|
||||
console.log('после перезагрузки:', (await page.locator('#progressText').innerText()).trim());
|
||||
|
||||
// Фильтр «только расхождения» должен оставлять только расхождения.
|
||||
await page.locator('#filterConflicts').check();
|
||||
await page.waitForFunction(
|
||||
() => document.querySelectorAll('#list .item-card').length > 0,
|
||||
{ timeout: 20000 }
|
||||
);
|
||||
const filtered = await page.evaluate(() => {
|
||||
const cards = Array.from(document.querySelectorAll('#list .item-card'));
|
||||
return {
|
||||
items: cards.length,
|
||||
withoutConflict: cards.filter((c) => !/расхождение/.test(c.innerText)).length,
|
||||
};
|
||||
});
|
||||
console.log('фильтр расхождений:', filtered);
|
||||
assert(filtered.withoutConflict === 0, 'в фильтре «только расхождения» есть лишние снимки');
|
||||
|
||||
console.log('внешние запросы:', external.length ? external : 'нет');
|
||||
assert(external.length === 0, `страница обратилась к внешним хостам: ${external.join(', ')}`);
|
||||
console.log('ошибки консоли:', consoleErrors.length ? consoleErrors : 'нет');
|
||||
assert(consoleErrors.length === 0, `ошибки в консоли: ${consoleErrors.join(' | ')}`);
|
||||
|
||||
await context.close();
|
||||
console.log('OK: интерфейс ручной разметки работает');
|
||||
})().catch((error) => {
|
||||
console.error('FAILED:', error.message);
|
||||
process.exit(1);
|
||||
});
|
||||
|
|
@ -26,6 +26,7 @@ from src.dxa.excel_labels import ( # noqa: E402
|
|||
apply_excel_labels,
|
||||
format_summary,
|
||||
label_dataset,
|
||||
load_labels_csv,
|
||||
load_study_criteria,
|
||||
resolve_region,
|
||||
)
|
||||
|
|
@ -38,6 +39,13 @@ EXCEL_PATH = DATASET_ROOT / "НД_для_обучения" / "разметка.x
|
|||
LABELS_CSV = Path("labels/labels_images.csv")
|
||||
HAVE_DATASET = (DATASET_ROOT / "НД_для_обучения" / "Исследования").is_dir()
|
||||
|
||||
# Текущее состояние набора после пересборки разметки 2026-09-27 и удаления
|
||||
# побайтных дубликатов. Числа ниже — якоря: если набор или правило снова
|
||||
# разойдутся, тесты должны упасть, а не молча согласиться с новыми значениями.
|
||||
TOTAL_IMAGES = 251 # уникальных снимков (252-й оказался дублем)
|
||||
TOTAL_VIOLATIONS = 76 # нарушений по правилу `table`
|
||||
DISPUTED = 20 # эксперт «годное», а имя файла — «нарушение»
|
||||
|
||||
needs_dataset = pytest.mark.skipif(not HAVE_DATASET, reason="dataset_hack is not available")
|
||||
|
||||
_WIDTH = 19
|
||||
|
|
@ -229,6 +237,19 @@ class TestApplyExcelLabels:
|
|||
out = apply_excel_labels([self._record("/s/a.dcm", region="spine")], csv)
|
||||
assert out[0].region is None
|
||||
|
||||
def test_reads_file_saved_by_excel_with_bom(self, tmp_path):
|
||||
"""
|
||||
Excel сохраняет CSV с BOM, после чего первый столбец перестаёт называться
|
||||
`path_to_image` и загрузка падает на несовпадении колонок. Разметку правят
|
||||
в Excel, поэтому такой файл обязан читаться.
|
||||
"""
|
||||
path = tmp_path / "labels.csv"
|
||||
path.write_bytes(
|
||||
"\ufeffpath_to_image,quality_class,anatomical_region\n/s/a.dcm,1,spine\n".encode("utf-8")
|
||||
)
|
||||
table = load_labels_csv(path)
|
||||
assert table["/s/a.dcm"]["quality_class"] == "1"
|
||||
|
||||
|
||||
class TestResolveLabelsCsv:
|
||||
"""Отсутствующий файл разметки не должен молча менять источник меток."""
|
||||
|
|
@ -265,8 +286,8 @@ class TestLabelRules:
|
|||
return label_dataset(DATASET_ROOT, EXCEL_PATH, label_rule="expert")
|
||||
|
||||
def test_union_uses_filename_evidence(self, union, table):
|
||||
assert sum(1 for l in union if l.quality == 1) == 92
|
||||
assert sum(1 for l in table if l.quality == 1) == 77
|
||||
assert sum(1 for l in union if l.quality == 1) == 96
|
||||
assert sum(1 for l in table if l.quality == 1) == TOTAL_VIOLATIONS
|
||||
|
||||
def test_table_rule_ignores_filename_marker(self, table):
|
||||
# Снимок, помеченный `_bad`, но признанный экспертом качественным,
|
||||
|
|
@ -281,7 +302,7 @@ class TestLabelRules:
|
|||
assert all(l.quality_excel is None for l in fallback)
|
||||
|
||||
def test_expert_rule_drops_unscored_images(self, expert):
|
||||
assert len(expert) == 249
|
||||
assert len(expert) == 248
|
||||
assert all(l.quality_excel is not None for l in expert)
|
||||
assert not any(l.used_filename_fallback for l in expert)
|
||||
|
||||
|
|
@ -295,8 +316,8 @@ class TestLabelRules:
|
|||
continue
|
||||
assert label.violations == reference.violations
|
||||
agreed += 1
|
||||
# Расходятся ровно 15 снимков (см. следующий тест), остальные совпадают.
|
||||
assert agreed == 252 - 15
|
||||
# Расходятся ровно спорные снимки (см. следующий тест), остальные совпадают.
|
||||
assert agreed == TOTAL_IMAGES - DISPUTED
|
||||
|
||||
def test_filename_only_violations_become_unspecified(self, union, table):
|
||||
"""
|
||||
|
|
@ -305,7 +326,7 @@ class TestLabelRules:
|
|||
"""
|
||||
by_uid = {l.dicom_image_uid: l for l in union}
|
||||
disputed = [l for l in table if l.quality_excel == 0 and l.quality_filename == 1]
|
||||
assert len(disputed) == 15
|
||||
assert len(disputed) == DISPUTED
|
||||
for label in disputed:
|
||||
assert label.quality == 0 and label.violations == ()
|
||||
assert by_uid[label.dicom_image_uid].quality == 1
|
||||
|
|
@ -350,7 +371,7 @@ class TestLabelDataset:
|
|||
return label_dataset(DATASET_ROOT, EXCEL_PATH)
|
||||
|
||||
def test_covers_every_unique_image(self, labels):
|
||||
assert len(labels) == 252
|
||||
assert len(labels) == TOTAL_IMAGES
|
||||
|
||||
def test_region_appears_once_per_study(self, labels):
|
||||
seen = {}
|
||||
|
|
@ -360,7 +381,7 @@ class TestLabelDataset:
|
|||
seen.setdefault((label.record.study, label.region), 0)
|
||||
seen[(label.record.study, label.region)] += 1
|
||||
assert all(count == 1 for count in seen.values())
|
||||
assert len(seen) == 251
|
||||
assert len(seen) == TOTAL_IMAGES - 1 # один снимок без определённой области
|
||||
|
||||
def test_union_rule_holds(self):
|
||||
"""Арифметика объединения источников (правило `union`, не по умолчанию)."""
|
||||
|
|
@ -369,13 +390,13 @@ class TestLabelDataset:
|
|||
filename = sum(1 for l in labels if l.quality_filename == 1)
|
||||
both = sum(1 for l in labels if l.quality_excel == 1 and l.quality_filename == 1)
|
||||
assert sum(1 for l in labels if l.quality == 1) == excel + filename - both
|
||||
assert (excel, filename, both) == (74, 37, 19)
|
||||
assert sum(1 for l in labels if l.quality == 1) == 92
|
||||
assert (excel, filename, both) == (73, 54, 31)
|
||||
assert sum(1 for l in labels if l.quality == 1) == 96
|
||||
|
||||
def test_default_rule_is_table(self, labels):
|
||||
"""По умолчанию в метке участвует только экспертная таблица."""
|
||||
assert {l.label_rule for l in labels} == {"table"}
|
||||
assert sum(1 for l in labels if l.quality == 1) == 77
|
||||
assert sum(1 for l in labels if l.quality == 1) == TOTAL_VIOLATIONS
|
||||
|
||||
def test_violations_match_excel_criteria(self, labels):
|
||||
criteria = load_study_criteria(EXCEL_PATH)
|
||||
|
|
@ -408,7 +429,7 @@ class TestLabelDataset:
|
|||
|
||||
def test_uids_are_populated(self, labels):
|
||||
assert all(l.dicom_image_uid and l.dicom_study_uid for l in labels)
|
||||
assert len({l.dicom_image_uid for l in labels}) == 252
|
||||
assert len({l.dicom_image_uid for l in labels}) == TOTAL_IMAGES
|
||||
assert len({l.dicom_study_uid for l in labels}) == 100
|
||||
|
||||
def test_summary_mentions_regions(self, labels):
|
||||
|
|
@ -427,10 +448,10 @@ class TestTrainingWiring:
|
|||
DATASET_ROOT, EXCEL_PATH, labels_csv=LABELS_CSV, seed=42
|
||||
)
|
||||
records = list(train_ds.records) + list(val_ds.records)
|
||||
assert len(records) == 252
|
||||
# Официальная разметка — правило `table`: 74 нарушения эксперта плюс 3 снимка,
|
||||
assert len(records) == TOTAL_IMAGES
|
||||
# Официальная разметка — правило `table`: 73 нарушения эксперта плюс 3 снимка,
|
||||
# для которых таблица область не оценивала.
|
||||
assert sum(r.label for r in records) == 77
|
||||
assert sum(r.label for r in records) == TOTAL_VIOLATIONS
|
||||
|
||||
def test_split_still_has_no_study_leak(self):
|
||||
train_ds, val_ds, _ = make_datasets(
|
||||
|
|
@ -442,7 +463,9 @@ class TestTrainingWiring:
|
|||
def test_fallback_to_filename_labels(self):
|
||||
train_ds, val_ds, _ = make_datasets(DATASET_ROOT, EXCEL_PATH, labels_csv=None, seed=42)
|
||||
records = list(train_ds.records) + list(val_ds.records)
|
||||
assert sum(r.label for r in records) == 37
|
||||
# Метки из имён файлов: 54 снимка помечены `_bad` (пометки проставлены
|
||||
# вручную и расходятся с вердиктом эксперта чаще, чем совпадают).
|
||||
assert sum(r.label for r in records) == 54
|
||||
|
||||
def test_region_head_sees_resolved_region(self):
|
||||
# Область одного конфликтного дубля решается голосованием имён и приходит из CSV.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,232 @@
|
|||
"""
|
||||
Контракт API ручной разметки (`/api/v1/labeling/*`).
|
||||
|
||||
Проверяется не только форма ответов, но и два свойства, которые легко потерять:
|
||||
вердикт нельзя сохранить для снимка вне датасета (интерфейс ходит по путям,
|
||||
приходящим от клиента), а выгрузка должна читаться тем же `load_labels_csv`, что
|
||||
и построенная разметка, иначе её нельзя передать в обучение как `--labels-csv`.
|
||||
"""
|
||||
import csv
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
DATASET = Path("dataset_hack")
|
||||
CHECKPOINT = Path("models/dxa_model.pth")
|
||||
|
||||
pytest.importorskip("fastapi")
|
||||
pytest.importorskip("httpx")
|
||||
|
||||
needs_dataset = pytest.mark.skipif(
|
||||
not DATASET.is_dir(),
|
||||
reason="датасет dataset_hack недоступен",
|
||||
)
|
||||
|
||||
VALID_VIOLATION = {
|
||||
"spine": "artifact",
|
||||
"hip_right": "rotation",
|
||||
"hip_left": "rotation",
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def client():
|
||||
os.environ.setdefault("DXA_MODEL_PATH", str(CHECKPOINT))
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from src.main import app
|
||||
|
||||
return TestClient(app)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def manual_store(tmp_path, monkeypatch):
|
||||
"""Вердикты пишутся в tmp, а не в боевой `labels/manual_labels.csv`."""
|
||||
path = tmp_path / "manual_labels.csv"
|
||||
monkeypatch.setattr("src.main.MANUAL_LABELS_PATH", str(path))
|
||||
return path
|
||||
|
||||
|
||||
def _first_item(client) -> dict:
|
||||
response = client.get("/api/v1/labeling/items", params={"limit": 1})
|
||||
assert response.status_code == 200
|
||||
items = response.json()["items"]
|
||||
assert items, "датасет должен содержать хотя бы один снимок"
|
||||
return items[0]
|
||||
|
||||
|
||||
@needs_dataset
|
||||
class TestItems:
|
||||
def test_reports_progress_and_dictionary(self, client, manual_store):
|
||||
payload = client.get("/api/v1/labeling/items", params={"limit": 1}).json()
|
||||
assert payload["total"] == payload["progress"]["total"]
|
||||
assert payload["progress"]["reviewed"] == 0
|
||||
assert set(payload["regions"]) == {"spine", "hip_right", "hip_left"}
|
||||
codes = {v["code"] for v in payload["violations"]}
|
||||
assert {"positioning", "axis_deviation", "artifact", "rotation", "roi_incorrect"} <= codes
|
||||
|
||||
def test_item_carries_provenance(self, client, manual_store):
|
||||
item = _first_item(client)
|
||||
for field in ("path", "file", "study", "region", "label", "base_label",
|
||||
"label_source", "filename_conflict", "reviewed", "image_url"):
|
||||
assert field in item, f"нет поля {field}"
|
||||
assert item["label_source"] in ("manual", "table", "filename")
|
||||
assert item["label"] in (0, 1)
|
||||
|
||||
def test_conflicts_come_first(self, client, manual_store):
|
||||
items = client.get("/api/v1/labeling/items", params={"limit": 200}).json()["items"]
|
||||
flags = [i["filename_conflict"] for i in items]
|
||||
assert any(flags), "в датасете есть расхождения разметки с именем файла"
|
||||
first_false = flags.index(False)
|
||||
assert not any(flags[first_false:]), "расхождения должны идти первыми"
|
||||
|
||||
def test_region_filter(self, client, manual_store):
|
||||
payload = client.get(
|
||||
"/api/v1/labeling/items", params={"limit": 200, "region": "spine"}
|
||||
).json()
|
||||
assert payload["items"]
|
||||
assert {i["region"] for i in payload["items"]} == {"spine"}
|
||||
assert payload["total"] == payload["progress"]["by_region"]["spine"]["total"]
|
||||
|
||||
|
||||
@needs_dataset
|
||||
class TestImage:
|
||||
def test_returns_png_for_dataset_image(self, client, manual_store):
|
||||
item = _first_item(client)
|
||||
response = client.get("/api/v1/labeling/image", params={"path": item["path"]})
|
||||
assert response.status_code == 200
|
||||
assert response.headers["content-type"] == "image/png"
|
||||
assert response.content.startswith(b"\x89PNG")
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"bad_path",
|
||||
["../../etc/passwd", "/etc/passwd", "README.md", "dataset_hack/нет_такого.dcm"],
|
||||
)
|
||||
def test_refuses_paths_outside_dataset(self, client, manual_store, bad_path):
|
||||
response = client.get("/api/v1/labeling/image", params={"path": bad_path})
|
||||
assert response.status_code == 403, f"{bad_path} не должен отдаваться"
|
||||
|
||||
|
||||
@needs_dataset
|
||||
class TestVerdict:
|
||||
def test_saves_and_shows_in_items(self, client, manual_store):
|
||||
item = _first_item(client)
|
||||
region = item["region"] or "spine"
|
||||
|
||||
response = client.post(
|
||||
"/api/v1/labeling/verdict",
|
||||
json={
|
||||
"path": item["path"],
|
||||
"region": region,
|
||||
"quality": 1,
|
||||
"violation": VALID_VIOLATION[region],
|
||||
"comment": "размытие контура",
|
||||
"reviewer": "специалист",
|
||||
},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json()["progress"]["reviewed"] == 1
|
||||
|
||||
stored = list(csv.DictReader(manual_store.open(newline="", encoding="utf-8")))
|
||||
assert stored[0]["quality_class"] == "1"
|
||||
assert stored[0]["reviewer"] == "специалист"
|
||||
|
||||
after = client.get("/api/v1/labeling/items", params={"limit": 200}).json()
|
||||
reviewed = [i for i in after["items"] if i["path"] == item["path"]]
|
||||
assert reviewed and reviewed[0]["reviewed"] is True
|
||||
assert reviewed[0]["label_source"] == "manual"
|
||||
assert reviewed[0]["label"] == 1
|
||||
|
||||
def test_good_image_rejects_violation_type(self, client, manual_store):
|
||||
item = _first_item(client)
|
||||
response = client.post(
|
||||
"/api/v1/labeling/verdict",
|
||||
json={"path": item["path"], "region": item["region"] or "spine",
|
||||
"quality": 0, "violation": "artifact"},
|
||||
)
|
||||
assert response.status_code == 400
|
||||
assert "не может быть типа нарушения" in response.json()["error"]
|
||||
|
||||
def test_unknown_violation_is_rejected(self, client, manual_store):
|
||||
item = _first_item(client)
|
||||
response = client.post(
|
||||
"/api/v1/labeling/verdict",
|
||||
json={"path": item["path"], "region": item["region"] or "spine",
|
||||
"quality": 1, "violation": "ukladka_plohaya"},
|
||||
)
|
||||
assert response.status_code == 400
|
||||
|
||||
def test_outside_dataset_path_is_rejected(self, client, manual_store):
|
||||
response = client.post(
|
||||
"/api/v1/labeling/verdict",
|
||||
json={"path": "/tmp/чужой.dcm", "region": "spine", "quality": 1, "violation": "artifact"},
|
||||
)
|
||||
assert response.status_code == 400
|
||||
|
||||
def test_delete_returns_image_to_built_labels(self, client, manual_store):
|
||||
item = _first_item(client)
|
||||
region = item["region"] or "spine"
|
||||
client.post(
|
||||
"/api/v1/labeling/verdict",
|
||||
json={"path": item["path"], "region": region, "quality": 1,
|
||||
"violation": VALID_VIOLATION[region]},
|
||||
)
|
||||
response = client.delete("/api/v1/labeling/verdict", params={"path": item["path"]})
|
||||
assert response.status_code == 200
|
||||
assert response.json()["progress"]["reviewed"] == 0
|
||||
|
||||
second = client.delete("/api/v1/labeling/verdict", params={"path": item["path"]})
|
||||
assert second.status_code == 404
|
||||
|
||||
|
||||
@needs_dataset
|
||||
class TestExport:
|
||||
def test_reviewed_export_is_loadable_by_training(self, client, manual_store):
|
||||
from src.dxa.excel_labels import load_labels_csv
|
||||
|
||||
item = _first_item(client)
|
||||
region = item["region"] or "spine"
|
||||
client.post(
|
||||
"/api/v1/labeling/verdict",
|
||||
json={"path": item["path"], "region": region, "quality": 1,
|
||||
"violation": VALID_VIOLATION[region], "reviewer": "специалист"},
|
||||
)
|
||||
|
||||
response = client.get("/api/v1/labeling/export", params={"scope": "reviewed"})
|
||||
assert response.status_code == 200
|
||||
assert "text/csv" in response.headers["content-type"]
|
||||
|
||||
path = manual_store.parent / "export.csv"
|
||||
path.write_bytes(response.content)
|
||||
table = load_labels_csv(path)
|
||||
assert table[item["path"]]["quality_class"] == "1"
|
||||
assert table[item["path"]]["anatomical_region"] == region
|
||||
|
||||
def test_all_export_covers_whole_dataset(self, client, manual_store):
|
||||
payload = client.get("/api/v1/labeling/items", params={"limit": 1}).json()
|
||||
response = client.get("/api/v1/labeling/export", params={"scope": "all"})
|
||||
rows = list(csv.DictReader(response.content.decode("utf-8-sig").splitlines()))
|
||||
assert len(rows) == payload["progress"]["total"]
|
||||
assert all(row["label_rule"] in ("table", "filename", "manual") for row in rows)
|
||||
|
||||
def test_bad_scope_rejected(self, client, manual_store):
|
||||
response = client.get("/api/v1/labeling/export", params={"scope": "everything"})
|
||||
assert response.status_code == 400
|
||||
|
||||
def test_xlsx_export(self, client, manual_store):
|
||||
response = client.get(
|
||||
"/api/v1/labeling/export", params={"scope": "reviewed", "fmt": "xlsx"}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert "spreadsheetml" in response.headers["content-type"]
|
||||
assert response.content.startswith(b"PK")
|
||||
|
||||
|
||||
def test_label_page_is_served(client):
|
||||
response = client.get("/label")
|
||||
assert response.status_code == 200
|
||||
assert "text/html" in response.headers["content-type"]
|
||||
|
|
@ -0,0 +1,229 @@
|
|||
"""
|
||||
Тесты ручной разметки: проверка вердикта, хранение, наложение и выгрузка.
|
||||
|
||||
Ключевое свойство, которое здесь фиксируется: файл ручных вердиктов должен
|
||||
читаться тем же загрузчиком, что и построенная разметка (`load_labels_csv`),
|
||||
иначе его нельзя передать в обучение как `--labels-csv` и вся затея с
|
||||
подтверждением специалистом теряет смысл.
|
||||
"""
|
||||
import csv
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from src.dxa.excel_labels import load_labels_csv
|
||||
from src.dxa.labels import QUALITY_BAD, QUALITY_GOOD, ImageRecord
|
||||
from src.dxa.manual_labels import (
|
||||
MANUAL_FIELDS,
|
||||
ManualVerdict,
|
||||
VerdictError,
|
||||
apply_manual,
|
||||
export_rows,
|
||||
load_verdicts,
|
||||
make_verdict,
|
||||
remove_verdict,
|
||||
review_progress,
|
||||
save_verdicts,
|
||||
upsert_verdict,
|
||||
validate_verdict,
|
||||
)
|
||||
|
||||
|
||||
def _record(path, region="spine", label=QUALITY_GOOD, marker=None, study="S1"):
|
||||
return ImageRecord(path=Path(path), study=study, region=region, label=label, marker=marker)
|
||||
|
||||
|
||||
class TestValidateVerdict:
|
||||
def test_accepts_good_and_bad(self):
|
||||
assert validate_verdict("spine", QUALITY_GOOD, "") == ("spine", 0, "")
|
||||
assert validate_verdict("hip_left", QUALITY_BAD, "rotation") == ("hip_left", 1, "rotation")
|
||||
|
||||
def test_legacy_alias_is_canonicalized(self):
|
||||
"""Устаревшие значения внешних источников приводятся к канону, а не отклоняются."""
|
||||
assert validate_verdict("spine", 1, "position_error")[2] == "positioning"
|
||||
assert validate_verdict("spine", 1, "roi_error")[2] == "roi_incorrect"
|
||||
|
||||
def test_rejects_unknown_violation_instead_of_silent_unspecified(self):
|
||||
with pytest.raises(VerdictError, match="Неизвестный тип нарушения"):
|
||||
validate_verdict("spine", 1, "ukladka_plohaya")
|
||||
|
||||
def test_rejects_region_outside_selectable(self):
|
||||
with pytest.raises(VerdictError, match="Область должна быть"):
|
||||
validate_verdict("unknown", 0, "")
|
||||
|
||||
def test_rejects_quality_outside_binary(self):
|
||||
with pytest.raises(VerdictError, match="0 или 1"):
|
||||
validate_verdict("spine", 2, "")
|
||||
|
||||
def test_rejects_violation_for_good_image(self):
|
||||
with pytest.raises(VerdictError, match="не может быть типа нарушения"):
|
||||
validate_verdict("spine", 0, "artifact")
|
||||
|
||||
def test_rejects_violation_from_other_region(self):
|
||||
"""Ротация — критерий бедра; на позвоночнике это признак ошибки ввода."""
|
||||
with pytest.raises(VerdictError, match="относится к области"):
|
||||
validate_verdict("spine", 1, "rotation")
|
||||
|
||||
def test_hip_scope_covers_both_hips(self):
|
||||
"""В словаре нарушений бедро — один код `hip`, а область всегда конкретная."""
|
||||
assert validate_verdict("hip_right", 1, "rotation")[2] == "rotation"
|
||||
assert validate_verdict("hip_left", 1, "rotation")[2] == "rotation"
|
||||
with pytest.raises(VerdictError, match="относится к области"):
|
||||
validate_verdict("hip_right", 1, "axis_deviation")
|
||||
|
||||
|
||||
class TestStore:
|
||||
def test_missing_file_is_empty(self, tmp_path):
|
||||
assert load_verdicts(tmp_path / "manual_labels.csv") == {}
|
||||
|
||||
def test_roundtrip_and_upsert(self, tmp_path):
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
upsert_verdict(store, make_verdict("/s/a.dcm", "spine", 1, "artifact", comment="мусор"))
|
||||
upsert_verdict(store, make_verdict("/s/a.dcm", "spine", 0, "", reviewer="Иванов"))
|
||||
|
||||
verdicts = load_verdicts(store)
|
||||
assert len(verdicts) == 1
|
||||
assert verdicts["/s/a.dcm"].quality == QUALITY_GOOD
|
||||
assert verdicts["/s/a.dcm"].reviewer == "Иванов"
|
||||
|
||||
def test_remove_verdict_returns_image_to_built_labels(self, tmp_path):
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
upsert_verdict(store, make_verdict("/s/a.dcm", "spine", 1, "artifact"))
|
||||
upsert_verdict(store, make_verdict("/s/b.dcm", "spine", 1, "artifact"))
|
||||
|
||||
assert set(remove_verdict(store, "/s/a.dcm")) == {"/s/b.dcm"}
|
||||
with pytest.raises(VerdictError, match="Нет ручного вердикта"):
|
||||
remove_verdict(store, "/s/a.dcm")
|
||||
|
||||
def test_file_has_declared_columns(self, tmp_path):
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
upsert_verdict(store, make_verdict("/s/a.dcm", "spine", 1, "artifact"))
|
||||
with store.open(newline="", encoding="utf-8") as fh:
|
||||
assert tuple(next(csv.reader(fh))) == MANUAL_FIELDS
|
||||
|
||||
def test_reads_file_saved_by_excel_with_bom(self, tmp_path):
|
||||
"""Excel сохраняет CSV с BOM; разметку после ручной правки надо читать."""
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
body = (
|
||||
"path_to_image,anatomical_region,quality_class,violation_type,comment,reviewer,reviewed_at\n"
|
||||
"/s/a.dcm,spine,1,artifact,,,\n"
|
||||
)
|
||||
store.write_bytes(b"\xef\xbb\xbf" + body.encode("utf-8"))
|
||||
assert set(load_verdicts(store)) == {"/s/a.dcm"}
|
||||
|
||||
def test_corrupt_row_is_skipped_not_fatal(self, tmp_path):
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
store.write_text(
|
||||
"path_to_image,anatomical_region,quality_class,violation_type,comment,reviewer,reviewed_at\n"
|
||||
"/s/ok.dcm,spine,1,artifact,,,\n"
|
||||
"/s/bad_region.dcm,hips,1,artifact,,,\n"
|
||||
"/s/bad_quality.dcm,spine,7,artifact,,,\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
assert set(load_verdicts(store)) == {"/s/ok.dcm"}
|
||||
|
||||
def test_readable_by_training_loader(self, tmp_path):
|
||||
"""Файл вердиктов должен приниматься обучением как `--labels-csv`."""
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
upsert_verdict(store, make_verdict("/s/a.dcm", "spine", 1, "artifact"))
|
||||
upsert_verdict(store, make_verdict("/s/b.dcm", "hip_left", 0, ""))
|
||||
|
||||
table = load_labels_csv(store)
|
||||
assert table["/s/a.dcm"]["quality_class"] == "1"
|
||||
assert table["/s/b.dcm"]["anatomical_region"] == "hip_left"
|
||||
|
||||
|
||||
class TestOverlay:
|
||||
def test_overrides_only_reviewed_images(self):
|
||||
records = [
|
||||
_record("/s/a.dcm", label=QUALITY_GOOD),
|
||||
_record("/s/b.dcm", label=QUALITY_BAD, marker="bad"),
|
||||
]
|
||||
verdicts = {"/s/a.dcm": make_verdict("/s/a.dcm", "hip_right", 1, "rotation")}
|
||||
|
||||
updated = apply_manual(records, verdicts)
|
||||
assert [(r.label, r.region) for r in updated] == [(1, "hip_right"), (1, "spine")]
|
||||
assert updated[1].region == "spine"
|
||||
assert updated[1].marker == "bad"
|
||||
|
||||
def test_partial_review_keeps_other_images_intact(self):
|
||||
records = [_record(f"/s/{i}.dcm") for i in range(5)]
|
||||
updated = apply_manual(records, {"/s/2.dcm": make_verdict("/s/2.dcm", "spine", 1, "artifact")})
|
||||
assert [r.label for r in updated] == [0, 0, 1, 0, 0]
|
||||
|
||||
|
||||
class TestProgress:
|
||||
def test_counts_reviewed_changed_and_conflicts(self):
|
||||
records = [
|
||||
_record("/s/a.dcm", region="spine", label=QUALITY_GOOD),
|
||||
_record("/s/b.dcm", region="spine", label=QUALITY_GOOD, marker="bad"),
|
||||
_record("/s/c.dcm", region="hip_left", label=QUALITY_BAD, marker="bad"),
|
||||
]
|
||||
verdicts = {"/s/a.dcm": make_verdict("/s/a.dcm", "spine", 0, "")}
|
||||
|
||||
progress = review_progress(records, verdicts)
|
||||
assert progress["total"] == 3
|
||||
assert progress["reviewed"] == 1
|
||||
assert progress["remaining"] == 2
|
||||
assert progress["confirmed"] == 1
|
||||
assert progress["changed"] == 0
|
||||
# /s/b.dcm: разметка «годное», пометка в имени «bad»
|
||||
assert progress["filename_conflict"] == 1
|
||||
assert progress["by_region"]["spine"] == {"total": 2, "reviewed": 1}
|
||||
assert progress["by_region"]["hip_left"] == {"total": 1, "reviewed": 0}
|
||||
|
||||
def test_changed_counts_label_corrections(self):
|
||||
records = [_record("/s/a.dcm", label=QUALITY_GOOD)]
|
||||
verdicts = {"/s/a.dcm": make_verdict("/s/a.dcm", "spine", 1, "artifact")}
|
||||
progress = review_progress(records, verdicts)
|
||||
assert progress["changed"] == 1
|
||||
assert progress["confirmed"] == 0
|
||||
|
||||
|
||||
class TestExport:
|
||||
def test_scope_reviewed_contains_only_reviewed(self):
|
||||
records = [_record("/s/a.dcm"), _record("/s/b.dcm", label=QUALITY_BAD)]
|
||||
verdicts = {"/s/a.dcm": make_verdict("/s/a.dcm", "spine", 1, "artifact", reviewer="Иванов")}
|
||||
|
||||
rows = export_rows(records, verdicts, scope="reviewed")
|
||||
assert len(rows) == 1
|
||||
assert rows[0]["label_rule"] == "manual"
|
||||
assert rows[0]["quality_class"] == "1"
|
||||
assert rows[0]["reviewer"] == "Иванов"
|
||||
|
||||
def test_scope_all_merges_and_marks_origin(self):
|
||||
records = [_record("/s/a.dcm", label=QUALITY_BAD), _record("/s/b.dcm")]
|
||||
verdicts = {}
|
||||
|
||||
rows = export_rows(records, verdicts, scope="all", expert_paths=["/s/a.dcm"])
|
||||
rules = {r["path_to_image"]: r["label_rule"] for r in rows}
|
||||
assert rules == {"/s/a.dcm": "table", "/s/b.dcm": "filename"}
|
||||
|
||||
def test_unknown_scope_rejected(self):
|
||||
with pytest.raises(VerdictError, match="scope должен быть"):
|
||||
export_rows([], {}, scope="everything")
|
||||
|
||||
def test_missing_dicom_does_not_break_export(self):
|
||||
"""Пути вне датасета (или битый DICOM) дают пустые UID, а не исключение."""
|
||||
rows = export_rows([_record("/no/such/file.dcm")], {}, scope="all")
|
||||
assert rows[0]["study_uid"] == ""
|
||||
assert rows[0]["image_uid"] == ""
|
||||
|
||||
def test_empty_verdict_is_not_confused_with_good(self):
|
||||
"""Словарь вердиктов пуст — строка всё равно описывает метку из разметки."""
|
||||
rows = export_rows([_record("/s/a.dcm", label=QUALITY_BAD)], {}, scope="all")
|
||||
assert rows[0]["quality_class"] == "1"
|
||||
assert rows[0]["violation_type"] == ""
|
||||
assert rows[0]["reviewed_at"] == ""
|
||||
|
||||
|
||||
def test_verdict_carries_timestamp():
|
||||
verdict: ManualVerdict = make_verdict("/s/a.dcm", "spine", 1, "artifact")
|
||||
assert verdict.reviewed_at.endswith("+00:00")
|
||||
|
||||
|
||||
def test_saving_empty_store_creates_header(tmp_path):
|
||||
store = tmp_path / "manual_labels.csv"
|
||||
save_verdicts(store, {})
|
||||
assert store.read_text(encoding="utf-8").startswith("path_to_image,")
|
||||
assert load_verdicts(store) == {}
|
||||
|
|
@ -0,0 +1,212 @@
|
|||
"""
|
||||
Тесты автономного HTML-пакета для ручной разметки (`src/dxa/review_pack.py`).
|
||||
|
||||
Проверяется то, от чего зависит работа врача без сервиса: страница не тянет
|
||||
ничего из сети, встроенные данные разбираются, выгрузка читается обучением, а
|
||||
вердикты из чужого пакета не подмешиваются молча.
|
||||
"""
|
||||
import csv
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from src.dxa.dataset import build_records
|
||||
from src.dxa.excel_labels import load_labels_csv
|
||||
from src.dxa.labels import QUALITY_BAD, QUALITY_GOOD, ImageRecord
|
||||
from src.dxa.review_pack import (
|
||||
REVIEW_FIELDS,
|
||||
collect_items,
|
||||
main,
|
||||
merge_review,
|
||||
pack_fingerprint,
|
||||
render_html,
|
||||
)
|
||||
|
||||
DATASET_ROOT = Path("dataset_hack")
|
||||
EXCEL_PATH = DATASET_ROOT / "НД_для_обучения" / "разметка.xlsx"
|
||||
LABELS_CSV = Path("labels/labels_images.csv")
|
||||
HAVE_DATASET = (DATASET_ROOT / "НД_для_обучения" / "Исследования").is_dir()
|
||||
|
||||
needs_dataset = pytest.mark.skipif(not HAVE_DATASET, reason="dataset_hack is not available")
|
||||
|
||||
|
||||
def _record(path, region="spine", label=QUALITY_GOOD, marker=None, study="S1"):
|
||||
return ImageRecord(path=Path(path), study=study, region=region, label=label, marker=marker)
|
||||
|
||||
|
||||
def _labels_table(**overrides):
|
||||
row = {"quality_class": "0", "anatomical_region": "spine", "violation_type": ""}
|
||||
row.update(overrides)
|
||||
return {"/s/a.dcm": row}
|
||||
|
||||
|
||||
class TestFingerprint:
|
||||
def test_is_order_independent(self):
|
||||
assert pack_fingerprint(["a", "b"]) == pack_fingerprint(["b", "a"])
|
||||
|
||||
def test_differs_for_different_sets(self):
|
||||
assert pack_fingerprint(["a", "b"]) != pack_fingerprint(["a", "c"])
|
||||
|
||||
def test_short_and_stable(self):
|
||||
value = pack_fingerprint(["a"])
|
||||
assert len(value) == 10 and value == pack_fingerprint(["a"])
|
||||
|
||||
|
||||
class TestCollectItems:
|
||||
def test_conflicts_come_first(self):
|
||||
records = [
|
||||
_record("/s/a.dcm", label=QUALITY_GOOD),
|
||||
_record("/s/b.dcm", label=QUALITY_BAD, marker="good"),
|
||||
_record("/s/c.dcm", label=QUALITY_GOOD, marker="bad"),
|
||||
]
|
||||
items = collect_items(records, _labels_table(), expert_paths=["/s/a.dcm"])
|
||||
assert [item["path"] for item in items] == ["/s/b.dcm", "/s/c.dcm", "/s/a.dcm"]
|
||||
assert all(item["conflict"] for item in items[:2])
|
||||
assert not items[2]["conflict"]
|
||||
|
||||
def test_marks_source_from_labels_table(self):
|
||||
records = [_record("/s/a.dcm"), _record("/s/b.dcm")]
|
||||
items = collect_items(records, _labels_table(), expert_paths=["/s/a.dcm"])
|
||||
sources = {item["path"]: item["source"] for item in items}
|
||||
assert sources == {"/s/a.dcm": "table", "/s/b.dcm": "filename"}
|
||||
|
||||
def test_carries_violation_from_built_labels(self):
|
||||
records = [_record("/s/a.dcm", label=QUALITY_BAD)]
|
||||
items = collect_items(records, _labels_table(violation_type="rotation;roi_incorrect"))
|
||||
assert items[0]["violation"] == "rotation;roi_incorrect"
|
||||
# Подпись берётся по первому критерию: в разметке их может быть два.
|
||||
assert items[0]["violation_label"] == "Ротация / позиционирование"
|
||||
|
||||
def test_limit_and_conflicts_only(self):
|
||||
records = [
|
||||
_record("/s/a.dcm", label=QUALITY_GOOD),
|
||||
_record("/s/b.dcm", label=QUALITY_BAD, marker="good"),
|
||||
_record("/s/c.dcm", label=QUALITY_GOOD, marker="bad"),
|
||||
]
|
||||
assert len(collect_items(records, {}, limit=2)) == 2
|
||||
only = collect_items(records, {}, only_conflicts=True)
|
||||
assert [item["path"] for item in only] == ["/s/b.dcm", "/s/c.dcm"]
|
||||
|
||||
|
||||
class TestRenderHtml:
|
||||
def _items(self):
|
||||
return [
|
||||
{"path": "/s/a.dcm", "file": "a.dcm", "study": "S1", "region": "spine",
|
||||
"label": 1, "violation": "artifact", "violation_label": "Артефакты",
|
||||
"conflict": True, "marker": "bad", "source": "table", "image": "data:image/png;base64,AA"},
|
||||
]
|
||||
|
||||
def test_all_placeholders_are_substituted(self):
|
||||
html = render_html(self._items(), "Пакет", "abcdef1234", [])
|
||||
assert "@@" not in html, "в странице остались неподставленные маркеры"
|
||||
|
||||
def test_does_not_reference_network(self):
|
||||
"""Пакет открывается с диска: внешних ресурсов быть не должно."""
|
||||
html = render_html(self._items(), "Пакет", "abcdef1234", [])
|
||||
assert "http://" not in html and "https://" not in html
|
||||
assert not re.search(r'(?:src|href)="/(?!/)', html), "есть ссылки на /static или CDN"
|
||||
|
||||
def test_payload_is_valid_json_with_items(self):
|
||||
html = render_html(self._items(), "Пакет", "abcdef1234", [{"code": "artifact", "label": "A", "scope": "any"}])
|
||||
raw = re.search(r'<script id="payload" type="application/json">(.*?)</script>', html, re.S)
|
||||
assert raw, "не найден блок с данными"
|
||||
payload = json.loads(raw.group(1))
|
||||
assert payload["packId"] == "abcdef1234"
|
||||
assert len(payload["items"]) == 1
|
||||
assert payload["items"][0]["conflict"] is True
|
||||
assert "image" in payload["items"][0]
|
||||
assert payload["reviewFields"] == list(REVIEW_FIELDS)
|
||||
|
||||
def test_embedded_image_uri_is_not_broken(self):
|
||||
"""`</` внутри JSON ломало бы разбор блока script."""
|
||||
item = {**self._items()[0], "comment": "закрывающий тег </script> в тексте"}
|
||||
html = render_html([item], "Пакет", "abcdef1234", [])
|
||||
payload = re.search(r'<script id="payload" type="application/json">(.*?)</script>', html, re.S)
|
||||
assert json.loads(payload.group(1))
|
||||
|
||||
|
||||
@needs_dataset
|
||||
class TestMergeReview:
|
||||
def _write_review(self, tmp_path, rows):
|
||||
path = tmp_path / "doctor.csv"
|
||||
with path.open("w", newline="", encoding="utf-8") as fh:
|
||||
writer = csv.DictWriter(fh, fieldnames=list(REVIEW_FIELDS))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
return path
|
||||
|
||||
def test_overrides_built_labels(self, tmp_path):
|
||||
records = build_records(
|
||||
str(DATASET_ROOT), str(EXCEL_PATH), dedup=True, labels_csv=str(LABELS_CSV)
|
||||
)
|
||||
first = records[0].path.as_posix()
|
||||
review = self._write_review(tmp_path, [{
|
||||
"path_to_image": first, "anatomical_region": "spine", "quality_class": "1",
|
||||
"violation_type": "artifact", "comment": "проверено врачом",
|
||||
"reviewer": "Тестова", "reviewed_at": "2026-09-27T00:00:00+00:00", "pack_id": "x",
|
||||
}])
|
||||
|
||||
out = tmp_path / "merged.csv"
|
||||
summary = merge_review(review, out, labels_csv=LABELS_CSV)
|
||||
|
||||
assert summary["reviewed"] == 1 and summary["overridden"] == 1
|
||||
assert not summary["unmatched"]
|
||||
table = load_labels_csv(out)
|
||||
assert len(table) == summary["rows"]
|
||||
assert table[first]["quality_class"] == "1"
|
||||
assert table[first]["label_rule"] == "manual"
|
||||
assert table[first]["reviewer"] == "Тестова"
|
||||
# Остальные снимки остаются с меткой построенной разметки.
|
||||
assert any(row["label_rule"] == "table" for row in table.values())
|
||||
|
||||
def test_reports_paths_absent_from_dataset(self, tmp_path):
|
||||
review = self._write_review(tmp_path, [{
|
||||
"path_to_image": "/чужой/снимок.dcm", "anatomical_region": "spine",
|
||||
"quality_class": "0", "violation_type": "", "comment": "", "reviewer": "",
|
||||
"reviewed_at": "", "pack_id": "x",
|
||||
}])
|
||||
out = tmp_path / "merged.csv"
|
||||
summary = merge_review(review, out, labels_csv=LABELS_CSV)
|
||||
assert summary["unmatched"] == ["/чужой/снимок.dcm"]
|
||||
assert summary["overridden"] == 0
|
||||
|
||||
def test_empty_review_is_rejected(self, tmp_path):
|
||||
path = tmp_path / "empty.csv"
|
||||
with path.open("w", newline="", encoding="utf-8") as fh:
|
||||
csv.DictWriter(fh, fieldnames=list(REVIEW_FIELDS)).writeheader()
|
||||
with pytest.raises(ValueError, match="нет ни одного разобранного вердикта"):
|
||||
merge_review(path, tmp_path / "out.csv", labels_csv=LABELS_CSV)
|
||||
|
||||
|
||||
@needs_dataset
|
||||
class TestCli:
|
||||
def test_build_writes_file_with_expected_shape(self, tmp_path, capsys):
|
||||
out = tmp_path / "pack.html"
|
||||
code = main(["--out", str(out), "--limit", "3"])
|
||||
assert code == 0
|
||||
assert out.exists() and out.stat().st_size > 10_000
|
||||
|
||||
html = out.read_text(encoding="utf-8")
|
||||
payload = re.search(r'<script id="payload" type="application/json">(.*?)</script>', html, re.S)
|
||||
data = json.loads(payload.group(1))
|
||||
assert len(data["items"]) == 3
|
||||
assert all(item["image"].startswith("data:image/png;base64,") for item in data["items"])
|
||||
|
||||
printed = capsys.readouterr().out
|
||||
assert "Снимков в пакете: 3" in printed
|
||||
assert "Отпечаток набора:" in printed
|
||||
|
||||
def test_only_conflicts_filter(self, tmp_path):
|
||||
out = tmp_path / "pack.html"
|
||||
main(["--out", str(out), "--only-conflicts", "--limit", "5"])
|
||||
html = out.read_text(encoding="utf-8")
|
||||
data = json.loads(
|
||||
re.search(r'<script id="payload" type="application/json">(.*?)</script>', html, re.S).group(1)
|
||||
)
|
||||
assert data["items"] and all(item["conflict"] for item in data["items"])
|
||||
|
||||
def test_merge_requires_out(self, tmp_path, capsys):
|
||||
with pytest.raises(SystemExit):
|
||||
main(["--merge", str(tmp_path / "x.csv")])
|
||||
Loading…
Reference in New Issue