NEUROPEOPLE · Система автоматического контроля качества DXA-денситометрииDensitoAI
Автоматический контроль качества DXA-снимков денситометра GE Lunar Prodigy
Сервис читает DICOM-изображения поясничного отдела позвоночника и проксимальный отдел бедра, проверяет пять критериев качества укладки и области интереса и формирует карточку решения для врача и лаборанта. Работает полностью локально, на CPU, в изолированном контейнере.

Реальный вывод сервиса 2.5.0 на контрольном снимке. Оранжевая линия — измеренная ось (наклон 3.1° к вертикали), зелёный контур — костная область, красные рамки — плотные объекты (188 мм², контраст к кости 4.2 сигмы). Порог превысил один критерий — посторонние предметы 0.955 при пороге 0.624 (из 188 мм² плотных участков 135 мм² — в зоне измерения L1–L4); ось 0.651 при 0.777 и укладка 0.223 при 0.861 — в норме. Эксперт на этом снимке отметил ровно посторонние предметы: совпадение полное.
Второй взгляд на снимок до того, как пациент ушёл
Некачественная укладка или неправильно выставленная область интереса обесценивают денситометрию: измеренная минеральная плотность кости не соответствует реальной, а пациента приходится вызывать повторно. DensitoAI автоматизирует первичный контроль качества прямо на потоке.
Сразу после сканирования
Загружает снимки исследования или отправляет их с аппарата по сети и через несколько секунд видит крупную карточку: какой снимок нужно переснять или проверить по малому вертелу и почему — измеренный угол, расстояние до края поля, найденные предметы.
Очередь по риску и карточка решения
Партия снимков отсортирована по вероятности нарушения. По каждому исследованию — главное действие на визит, критерии со скорами и порогами, измерения в миллиметрах и градусах, оверлей, маска сегментации и предложение коррекции области интереса.
Закрытый контур и DICOM C-STORE
Приём исследований напрямую с денситометра или PACS по DICOM C-STORE (порт 11112), работа полностью офлайн на обычном CPU без видеокарты, структурированные отчёты DICOM SR, серии Secondary Capture, сводка по отделению и выгрузки CSV/XLSX.
Два независимых контура и честный порог
Один контур измеряет анатомическую геометрию в миллиметрах и градусах, второй оценивает снимок целиком. Решение по каждому критерию — их согласование, а пороги зафиксированы на перекрёстной проверке (out-of-fold) по исследованиям.
DICOM на входе
Папка, zip-архив, файл или поток DICOM C-STORE. Сбой одного снимка не останавливает партию.
Область
Позвоночник или бедро — по размеру кадра и тегам, для нестандартных — классификатором по содержимому.
Два контура
Контур A — геометрические измерения, Контур B — эмбеддинги EfficientNet-B0. Обучены отдельно на каждый критерий.
Ранговый стэкинг
Итоговый скор — среднее рангов двух контуров. Порог взят на OOF с группировкой по исследованию.
Отчёт и карточка
Карточка врача и лаборанта, DICOM SR, DICOM SEG, Secondary Capture, сводка отделения, CSV и XLSX.
Как устроены оба контура и откуда берётся порог — признаки, модели, стэкинг
Контур A — геометрия
Сегментация кости, измерение наклона оси позвоночника, смещения от центра кадра, ширины костной области, угла диафиза бедра, расстояния до бокового края, площади плотных включений в верхних 70 % зоны измерения. Логистическая регрессия на отобранных признаках.
Контур B — эмбеддинги
Нейросеть EfficientNet-B0 извлекает вектор из 1280 признаков, затем выполняется стандартизация, сжатие PCA до 32 компонент и логистическая регрессия с регуляризацией. Для оси и укладки позвоночника используется специализированный инвариантный бэкбон.
Стэкинг и порог
score = 0.5·rank(геометрия) + 0.5·rank(эмбеддинги). Пороги для каждого критерия зафиксированы по out-of-fold предсказаниям с группировкой по исследованию; вблизи порога выделена зона «не уверен» для обязательного просмотра врачом.
Что именно проверяется
Формулировки нарушений соответствуют клиническим стандартам лучевой диагностики. Ниже — что они значат для лаборанта и какие объективные измерения стоят за каждым решением.
Укладка пациента
Поле смещено или позвоночник не по средней линии стола: проверьте, видны ли края подвздошных костей и половина Th12.
Ось позвоночника
Ось позвоночника наклонена относительно вертикали кадра. Прослеживаем центр кости по строкам и измеряем глобальный угол наклона.
Посторонние предметы
В поле сканирования попали пуговицы, молнии, элементы одежды или контрастные объекты в зоне измерения L1–L4.
Укладка пациента
Бедро недостаточно ротировано внутрь или отведено: диафиз наклонён, малый вертел избыточно выступает.
Область интереса
Проверьте, вся ли зона интереса вошла в кадр: проксимальный отдел бедра с участком диафиза ниже вертелов. Сервис строит предложение коррекции ROI.
Почему нужны оба контура
Два клинических критерия, на которых наглядно видно разделение труда между точной геометрией и нейросетевыми признаками. Полный интерактивный разбор 10 снимков — в блоке демо-примера выше.


Слева метка эксперта «не выравнена ось», справа норма
Геометрический контур измеряет глобальный наклон оси в градусах (AUC 0.839). Врач-эксперт учитывает также S-образные локальные изгибы, поэтому часть сложных случаев добирает второй контур (итоговый AUC стека — 0.889).


Слева предметы в поле сканирования, справа чистый снимок
Контур A выделяет плотные включения непосредственно в зоне измерения L1–L4 (AUC 0.804), а Контур B ловит слабоконтрастные элементы одежды и артефакты (AUC 0.897). Совместный стек даёт ROC-AUC 0.899.
Каждый снимок — с доказательной карточкой решения
В карточке показаны скоры и пороги каждого критерия, вклад геометрии и нейросети, таблица измерений в миллиметрах и градусах, переключатель слоёв визуализации и конструктор коррекции ROI.
Оценки out-of-fold и точность по критериям
Все оценки получены на строгой перекрёстной проверке (out-of-fold) с группировкой по исследованию: модель никогда не видела снимки того исследования, на котором проверяется. Доверительные интервалы 95 % рассчитаны бутстрапом по исследованиям.
| Критерий | Область | n / позит. | AUC геом. | AUC эмб. | AUC стек | AUC nested | AUC на шкале 0.5–1.0 | F1 OOF [95 % ДИ] | Надёжность |
|---|---|---|---|---|---|---|---|---|---|
Укладка пациента sp_pos · порог по доле позитивов, порог 0.861 | позвоночник | 166 / 10 | 0.915 | 0.790 | 0.893 | 0.878 | 0.50 [0.12; 1.00] | мало позитивов (10): интервал широкий, читать по AUC; сильнее контур A | |
Ось позвоночника sp_axis · prevalence_x1.4, порог 0.777 | позвоночник | 166 / 17 | 0.839 | 0.797 | 0.889 | 0.860 | 0.60 [0.29; 0.82] | сильнее геометрия | |
Посторонние предметы sp_art · prevalence_x1.4, порог 0.624 | позвоночник | 166 / 35 | 0.804 | 0.897 | 0.899 | 0.884 | 0.67 [0.39; 0.83] | сильнее контур B (эмбеддинги) + зона 70 % | |
Укладка пациента hip_pos · порог по доле позитивов, порог 0.658 | бедро, обе стороны | 329 / 79 | 0.710 | 0.635 | 0.725 | 0.709 | 0.43 [0.22; 0.60] | сильнее геометрия | |
Область интереса hip_roi · порог по доле позитивов, порог 0.918 | бедро, обе стороны | 329 / 16 | 0.902 | 0.877 | 0.917 | 0.873 | 0.51 [0.00; 0.91] | сильнее геометрия |
Бинарная задача «есть нарушение» по областям, OOF
| Область | ROC-AUC [95 % ДИ] | F1 [95 % ДИ] | Macro-F1 по типам нарушений [95 % ДИ] |
|---|---|---|---|
| Поясничный отдел позвоночника | 0.846 [0.73; 0.94] | 0.737 [0.57; 0.85] | 0.590 [0.44; 0.74] |
| Проксимальный отдел бедра | 0.760 [0.63; 0.86] | 0.516 [0.31; 0.68] | 0.473 [0.20; 0.68] |
Полные таблицы сравнения с бейзлайнами, калибровка вероятностей и протокол вложенной кросс-валидации приведены в инженерном разделе «Под капотом».
Что происходит с решением при нестандартном входе
Каждый вид искажения прогнан на выборке из 81 размеченного снимка (27 позвоночник, 54 бедро). К изменениям формата контейнера, удалению тегов и инверсии шкалы система устойчива на 100 % (0.0 % смены класса и 0.0 % отказов).
Ошибок обработки (Failure) ни в одном варианте не было (0.0 %), анатомическая область снимка не менялась ни разу (0.0 %). Время на снимок в исходном прогоне: медиана 0.05 с, 95-й перцентиль 0.09 с.
Границы применимости модели
Малое число примеров нарушения укладки позвоночника
В обучающей выборке нарушение укладки позвоночника встретилось в 6 исследованиях из 99 (10 кадров из 166). Доверительный интервал F1 по этому критерию широкий (0.50 [0.12; 1.00]), поэтому при пограничных значениях смещения решение выносится в зону внимания врача.
Калибровка под денситометр GE Lunar Prodigy
Все 499 снимков получены на аппарате GE Lunar Prodigy. Снимки других областей (предплечье, всё тело, боковые проекции) и других модальностей автоматически отсекаются фильтром области применения (region_supported: false).
Контроль широкого поля бедра
При боковом запасе поля бедра более 51 мм вместо категоричной команды «Переснять» лаборанту выдаётся рекомендация «Проверить укладку по малому вертелу», чтобы исключить лишнее повторное сканирование пациента.
Автономное развёртывание без внешних вызовов
Сервис поставляется в виде самодостаточного Docker-образа: веб-кабинет, HTTP API, DICOM C-STORE приёмник и веса моделей работают на обычном процессоре с полностью отключённой внешней сетью (--network none).
Команды запуска, приём по DICOM C-STORE и состав контейнера — для ИТ-службы клиники
Docker: сборка, пакетный прогон, API
# сборка образа и самопроверка из 18 пунктов ./build_and_run.sh build # пакетная обработка папки с DICOM или zip -> outputs/results.csv (+ .xlsx) ./build_and_run.sh run /path/to/dicom_folder ./outputs # HTTP API на порту 8000, Swagger: http://localhost:8000/docs ./build_and_run.sh api 8000 /path/to/dicom_folder ./outputs
Автоматический приём с аппарата по DICOM C-STORE
Контейнер принимает исследования напрямую с денситометра или из PACS по протоколу DICOM C-STORE (AE Title DENSITOAI, порт 11112; CR, DX, Secondary Capture). Принятое исследование автоматически проходит контроль качества и поступает в журнал отделения.
Документация и спецификации
Раздел «Под капотом»полные таблицы метрик, бейзлайны, калибровка и устройство двух контуровSwagger UI (/docs)интерактивная спецификация HTTP API (OpenAPI 3.0)docs/MEASUREMENT_CHECK.mdакт поверки измерительного контура на фантомах (MAE угла оси 0.35°, диафиза 0.04°)docs/VERIFICATION.mdпротокол самопроверки из 18 пунктов и стресс-тест на 24 нестандартных файлах
Что внутри контейнера
Python 3.12, PyTorch CPU, scikit-learn, pydicom, pynetdicom. Ошибки отдельных повреждённых файлов не останавливают партию: снимок получает статус Failure и передаётся на ручной контроль.
Попробуйте демо-пример или запросите доступ к кабинету
Интерактивный разбор 10 контрольных снимков открыт прямо на этой странице без пароля. Доступ в рабочий кабинет для загрузки собственных DICOM-исследований предоставляется по запросу.