# Аудит данных для E01 Документ фиксирует фактическое состояние данных, доступных на 9 апреля 2026 года, и определяет, какие постановки уже можно реализовывать программно без привлечения новых наборов данных. ## 1. Источники данных - `data` — исходные изображения и object detection-разметка. - `data_masks` — те же данные с дополнительными масками объектов в `images_results/masks_sam`. ## 2. Структура одного пациентского каталога Для большинства пациентов в `data` используется одинаковая структура: - `images/` — исходные изображения; - `images_labels/` — текстовые файлы разметки объектов; - `predefined_classes.txt` — словарь классов. В `data_masks` для тех же пациентов дополнительно присутствует каталог: - `images_results/masks_sam/` — маски отдельных объектов в формате `stem_class__obj_.png`. Отдельно нужно зафиксировать специальный случай: - в корне обоих наборов присутствует каталог `part-1`, который не соответствует формату пациентского идентификатора; - в нем находится `33` изображения, `33` label-файла и `477` размеченных объектов; - в `data_masks` для него есть `475` масок; - до уточнения происхождения этого каталога его не следует включать в основной patient-level протокол. ## 3. Проверенные количественные характеристики ### 3.1. Общий объем Для воспроизводимости нужно различать: - полный сырой объем каталога; - основной patient-level корпус, который используется в эксперименте. Полный сырой объем: - число каталогов верхнего уровня в `data`: `123`; - число каталогов верхнего уровня в `data_masks`: `123`; - среди них `122` пациент-идентифицированных каталогов и один специальный каталог `part-1`; - число изображений: `12 521`; - число файлов разметки: `12 489`; - число объектов по detection-разметке: `86 873`. Основной patient-level корпус, рекомендуемый для первой фазы эксперимента: - число пациентских каталогов: `122`; - число изображений: `12 488`; - число файлов разметки: `12 456`; - число объектов по detection-разметке: `86 396`. ### 3.2. Наблюдения по разметке - пустых файлов разметки: `26`; - изображений без `.txt`-разметки: `32`; - такие изображения встречаются только у пациентов `P190315.002` и `P190408.001`; - файлов разметки без соответствующего изображения не обнаружено; - в `4 991` строках файлов разметки идентификатор класса записан в формате с плавающей точкой, например `7.0`; при загрузке нужно использовать нормализацию `int(float(class_id))`. ### 3.3. Наблюдения по маскам - всего масок объектов в основном patient-level корпусе: `86 360`; - изображений, для которых есть хотя бы одна маска: `12 428`; - изображений без масок: `60`; - пациентов, у которых есть изображения без масок: `15`. Из этих `60` изображений: - `32` совпадают с изображениями без detection-разметки; - остальные `28` изображений имеют разметку, но не имеют полного покрытия масками. ### 3.4. Проверка соответствия labels и masks Для изображений, у которых число строк в `images_labels/*.txt` совпадает с числом файлов `*_obj_XXXX.png`, было проверено соответствие классов и порядка объектов. Результат: - проверено изображений: `12 395`; - изображений с полным совпадением порядка объектов: `12 395`; - изображений с нарушением последовательности `obj_0000, obj_0001, ...`: `0`; - изображений с несовпадением классов между строкой label-файла и именем маски: `0`. Это позволяет принять следующий контракт данных: индекс `obj_XXXX` соответствует порядку строки в detection-разметке. ## 4. Словарь классов Основной словарь классов совпадает у `122` пациентов: | id | Класс | |---:|---| | 0 | Lymphocyte | | 1 | Metamyelocyte | | 2 | Monocyte | | 3 | Myelocyte | | 4 | Normoblasts | | 5 | Rod neutrophil | | 6 | Segmentonuclear neutrophil | | 7 | blast | | 8 | Promyelocyte | | 9 | Eosinophil | | 10 | Basophil | | 11 | Magakariocyte | | 12 | Bad cells | | 13 | plasma cells | | 14 | artifacts | | 15 | gumpricht shadows | | 16 | methoses | | 17 | normoblasts: oxyfilny | | 18 | macrophages | | 19 | normoblasts: erythroblasts | | 20 | normoblasts: basophilic | | 21 | normoblasts: polychromatophilic | У пациента `240612.007` в `predefined_classes.txt` есть дополнительный класс `22 mast cells`, однако фактических объектов этого класса в текущем корпусе не обнаружено. ## 5. Распределение объектов по классам Наиболее представленные классы: | id | Класс | Число объектов | |---:|---|---:| | 7 | blast | 61 861 | | 12 | Bad cells | 7 825 | | 0 | Lymphocyte | 5 660 | | 15 | gumpricht shadows | 3 600 | | 6 | Segmentonuclear neutrophil | 1 715 | | 3 | Myelocyte | 1 052 | | 2 | Monocyte | 1 038 | | 17 | normoblasts: oxyfilny | 1 035 | | 5 | Rod neutrophil | 545 | | 21 | normoblasts: polychromatophilic | 416 | | 1 | Metamyelocyte | 414 | | 9 | Eosinophil | 333 | Редкие классы присутствуют, но для самостоятельной устойчивой оценки их объема недостаточно: - `Promyelocyte`: `5`; - `Magakariocyte`: `7`; - `macrophages`: `7`; - `plasma cells`: `24`; - `Basophil`: `28`; - `artifacts`: `54`. ## 6. Распределение по пациентам и изображениям - пациентов, у которых встречается хотя бы один `blast`: `100`; - пациентов без `blast`: `22`; - изображений с хотя бы одним `blast`: `8 618`; - изображений только с `blast`: `3 508`; - изображений со смешанным составом `blast + other`: `5 110`; - изображений без `blast`: `3 812`. Это означает, что текущий набор подходит не только для object-level классификации, но и для image-level агрегирования, когда нужно оценивать вероятность наличия бластов на изображении по совокупности обнаруженных объектов. ## 7. Недопокрытие масками Найдено `35` изображений, у которых число строк в detection-разметке не совпадает с числом масок объектов. Всего недостающих масок объектов: `36`. Недостающие маски по классам: | id | Класс | Число недостающих масок | |---:|---|---:| | 7 | blast | 13 | | 15 | gumpricht shadows | 9 | | 12 | Bad cells | 5 | | 2 | Monocyte | 3 | | 6 | Segmentonuclear neutrophil | 2 | | 0 | Lymphocyte | 1 | | 20 | normoblasts: basophilic | 1 | | 5 | Rod neutrophil | 1 | | 3 | Myelocyte | 1 | Практический вывод: маски покрывают практически весь корпус, поэтому mask-based признаки можно считать основной, а не вспомогательной веткой текущего эксперимента. При этом для воспроизводимости необходимо зафиксировать правило fallback: если маски для объекта нет, данный объект либо исключается из mask-only ветки, либо используется только в bbox-only ветке. ## 8. Что текущие данные позволяют исследовать Текущий корпус уже позволяет: - строить основной протокол на `122` пациент-идентифицированных каталогах; - строить patient-level разбиения; - извлекать object-level кропы по detection-разметке; - использовать mask-restricted ROI для признаков; - сравнивать `bbox-only` и `mask-based` признаки; - решать бинарную задачу `blast / non-blast`; - оценивать image-level наличие бластов через агрегирование объектных предсказаний; - изучать влияние классов качества, артефактов и сложных отрицательных примеров. ## 9. Что текущие данные не позволяют доказательно исследовать На текущем корпусе нельзя считать полноценно подтвержденными следующие постановки: - включение каталога `part-1` в основной patient-level корпус без дополнительного уточнения его происхождения; - различение `lymphoblast / myeloblast`, так как в разметке есть только общий класс `blast`; - внешнюю межлабораторную валидацию и устойчивость к доменному сдвигу; - case-level и slide-level клиническую постановку с подтвержденными диагнозами; - сопоставление результатов модели с экспертной разметкой нуклеол, палочек Ауэра и других специализированных структур. ## 10. Прямое следствие для плана эксперимента Первый этап эксперимента должен быть построен вокруг следующей последовательности: 1. аудит и нормализация данных; 2. выделение основного patient-level корпуса и исключение `part-1` из базового протокола до уточнения его статуса; 3. формирование индексных таблиц на уровне пациента, изображения и объекта; 4. извлечение кропов и mask-aware областей интереса; 5. object-level `blast / non-blast` baseline; 6. сравнение признаков по режимам `bbox`, `mask`, `bbox+mask`; 7. image-level агрегирование как приближение к задаче автоматического анализатора; 8. только после этого — расширение постановки на новые данные и более сложные модели.