Files

48 KiB
Raw Permalink Blame History

Детализированный план эксперимента E01

1. Назначение документа

Этот документ является рабочим планом первого экспериментального проекта по итогам обзорной статьи о текстурных признаках. Его задача — перевести обзорные выводы статьи в последовательность конкретных программных шагов, артефактов и проверяемых гипотез.

План специально разделен на две части:

  • часть A — то, что можно и нужно делать на доступном локальном наборе данных;
  • часть B — то, что сохраняется в общем исследовательском замысле, но требует дополнительных данных или дополнительной экспертной разметки.

2. Связь с исходным планом статьи

Исходный общий план сохранен в plan/source_article_plan/experiment_plan.md. После анализа реального корпуса данных и структуры разметки уточняется следующая матрица соответствия.

Направление исходного плана Статус на текущих данных Что именно можно делать сейчас Что переносится на будущее
Интерпретируемый morpho-texture baseline Полностью применимо blast / non-blast, сравнение bbox и mask, patient-level оценка, интерпретация признаков lymphoblast / myeloblast
Гибридная модель для малого объема данных и доменного сдвига Частично применимо внутреннее сравнение признаковых и легких deep-моделей, low-data режимы внутри одного корпуса полноценный cross-dataset transfer и внешняя валидация
Интерпретируемые deep и transformer-подобные модели Частично применимо ограниченные object-level deep baselines на текущем корпусе подтипизация бластов, MIL с case-level метками, сильная интерпретация по экспертным ROI
Анализаторно-ориентированная slide-level схема Частично применимо image-level агрегирование как приближение к задаче анализатора истинный slide-level и case-level workflow

3. Главная научная цель текущего этапа

На текущем корпусе нужно строго проверить следующую гипотезу:

Компактный и интерпретируемый набор морфометрических, цветовых и текстурных признаков, извлеченных из объектов detection-разметки и сегментационных масок, способен обеспечить устойчивое различение blast / non-blast на данных разных пациентов и дать практически полезный уровень image-level агрегирования для задач автоматического анализатора.

4. Ограничения текущих данных

Перед реализацией кода нужно принять следующие ограничения как часть постановки, а не как технические мелочи:

  1. В разметке отсутствует разделение lymphoblast и myeloblast; следовательно, текущий эксперимент не может служить доказательством для подтипизации бластов.
  2. Основной надежный уровень оценки — пациент, а не объект и не изображение.
  3. В разметке присутствуют классы качества и артефактов (Bad cells, artifacts, gumpricht shadows), которые нельзя механически смешивать с морфологически корректными клетками без отдельного протокола.
  4. Маски покрывают почти весь корпус, но не полностью; нужна двухветочная логика mask-aware и bbox-only fallback.
  5. Часть label-файлов содержит class id в формате float, следовательно, парсер должен явно использовать преобразование int(float(raw_class_id)).
  6. В сыром каталоге присутствует специальная директория part-1, не соответствующая формату patient id; до уточнения ее происхождения она должна быть исключена из основного patient-level протокола и рассматриваться только как возможный вспомогательный корпус.

5. Рабочая схема проекта

Рекомендуется реализовать эксперимент не как один скрипт, а как последовательность самостоятельных этапов с фиксированными артефактами:

  1. Индексация и аудит данных.
  2. Формирование канонических разбиений по пациентам.
  3. Извлечение объектов и ROI.
  4. Вычисление признаков.
  5. Обучение признаковых моделей.
  6. Ограниченные deep baselines.
  7. Image-level агрегирование.
  8. Подготовка таблиц, графиков и воспроизводимых отчетов.

6. Часть A. Эксперименты, которые можно сделать на текущих данных

A0. Подготовка проектного контракта данных

Цель

Зафиксировать единый источник истины по пациентам, изображениям, объектам, маскам и классам.

Входы

  • data
  • data_masks

Для первой фазы основным корпусом считаются только 122 каталогов, которые имеют формат patient id. Директория part-1 должна индексироваться отдельно и не должна автоматически попадать в основное разбиение.

Что нужно реализовать

  1. Парсер patient-каталогов.
  2. Парсер predefined_classes.txt.
  3. Парсер detection-разметки с нормализацией int(float(class_id)).
  4. Парсер масок *_class_<id>_obj_<index>.png.
  5. Проверку, что obj_<index> совпадает с порядком строк в label-файле.

Выходные артефакты

  • outputs/dataset_index/patient_inventory.csv
  • outputs/dataset_index/image_index.parquet
  • outputs/dataset_index/object_index.parquet
  • outputs/dataset_index/class_mapping.json
  • outputs/dataset_index/mask_coverage_report.csv
  • outputs/reports/data_audit_runtime.md

Требования к object_index

Каждая строка должна содержать как минимум:

  • patient_id
  • image_id
  • image_path
  • label_path
  • mask_path или null
  • object_id_within_image
  • class_id
  • class_name
  • x_center_norm
  • y_center_norm
  • width_norm
  • height_norm
  • has_mask
  • is_blast
  • is_quality_or_artifact

Критерий завершения этапа

Артефакт object_index.parquet воспроизводимо пересобирается и полностью описывает весь текущий корпус.

Проверяемые результаты этапа

  • построен единый индекс пациентов, изображений и объектов для основного patient-level корпуса;
  • для каждого объекта однозначно определены class_id, class_name, координаты bbox, признак is_blast и наличие маски;
  • построен отчет о покрытии масками и обо всех найденных несоответствиях между data и data_masks;
  • зафиксирована отдельная запись о специальном каталоге part-1, который не смешивается с основным patient-level корпусом.

Как оценить качество результата

  • число пациентских каталогов, изображений, label-файлов и объектов совпадает с зафиксированными значениями из docs/data_audit.md;
  • доля объектов без class_name, bbox-координат или patient_id равна 0;
  • все пути image_path, label_path, mask_path валидны на файловой системе;
  • нет дубликатов по ключу patient_id + image_id + object_id_within_image;
  • отчет mask_coverage_report.csv позволяет отдельно проверить случаи без масок, пустые label-файлы и исключенный каталог part-1.

Предлагаемые модули кода

  • src/dataset/build_index.py
  • src/dataset/parse_detection_labels.py
  • src/dataset/parse_masks.py
  • src/dataset/class_mapping.py
  • tests/test_dataset_index.py

A1. Формирование аналитических подмножеств

Цель

Развести разные исследовательские режимы, чтобы не смешивать клинически осмысленную задачу распознавания клеток и задачу устойчивости к плохому качеству и артефактам.

Подмножества, которые нужно сформировать

  1. full_realistic_set Используются все объекты, включая Bad cells, artifacts и gumpricht shadows.

  2. clean_cell_set Исключаются только Bad cells и artifacts. Объем по текущей оценке для основного patient-level корпуса: 78 517 объектов.

  3. strict_morphology_set Исключаются Bad cells, artifacts и gumpricht shadows. Объем по текущей оценке для основного patient-level корпуса: 74 917 объектов.

  4. mask_ready_set Объекты, у которых есть валидная маска.

Почему это важно

  • full_realistic_set нужен для анализаторно-ориентированной постановки.
  • clean_cell_set нужен для более честной оценки распознавания клеток.
  • strict_morphology_set нужен для сравнения текстурных и морфометрических признаков без сильного влияния шумовых классов.

Выходные артефакты

  • outputs/dataset_index/subset_full_realistic.parquet
  • outputs/dataset_index/subset_clean_cell.parquet
  • outputs/dataset_index/subset_strict_morphology.parquet
  • outputs/dataset_index/subset_mask_ready.parquet

Критерий завершения этапа

Для каждого подмножества автоматически строится таблица распределения классов по пациентам и объектам.

Проверяемые результаты этапа

  • сформированы четыре формальные версии корпуса с прозрачными правилами включения и исключения объектов;
  • для каждого подмножества рассчитаны размеры, class distribution и patient coverage;
  • зафиксировано, какие именно классы и в каком объеме исключаются при переходе от full_realistic_set к clean_cell_set и strict_morphology_set.

Как оценить качество результата

  • в clean_cell_set отсутствуют классы Bad cells и artifacts;
  • в strict_morphology_set дополнительно отсутствует класс gumpricht shadows;
  • число объектов в подмножествах строго совпадает с фильтрационными правилами;
  • построенная таблица распределения позволяет проверить, что ни одно подмножество не потеряло пациентов или изображения неожиданным образом;
  • для mask_ready_set отдельно оценивается доля покрытия масками и список исключенных объектов.

A2. Построение patient-level разбиений

Цель

Исключить утечку информации между выборками и подготовить единый протокол оценки для всех моделей.

Основные правила

  1. Один пациент может входить только в один из наборов train, validation, test.
  2. Все модели должны использовать одни и те же финальные разбиения.
  3. Внутренняя настройка гиперпараметров должна происходить только внутри train-части.
  4. В базовом протоколе участвуют только 122 patient-идентифицированных каталога; part-1 в это разбиение не входит.

Рекомендуемый протокол

  1. Финальный внешний hold-out по пациентам:

    • 70% пациентов — train;
    • 15% пациентов — validation;
    • 15% пациентов — test.
  2. Внутри train:

    • StratifiedGroupKFold или собственная стратификация по доле blast у пациента;
    • минимум 5 повторов для признаковых моделей.

Дополнительные таблицы для стратификации

Нужно посчитать для каждого пациента:

  • число объектов;
  • число blast;
  • долю blast;
  • число изображений;
  • число изображений с blast;
  • долю объектов без масок.

Выходные артефакты

  • outputs/splits/patient_summary.csv
  • outputs/splits/split_v1.json
  • outputs/splits/split_v1_train_patients.txt
  • outputs/splits/split_v1_val_patients.txt
  • outputs/splits/split_v1_test_patients.txt
  • outputs/tables/class_distribution_by_split.csv

Критерий завершения этапа

Разбиение стабильно, воспроизводимо и используется далее без ручных корректировок.

Проверяемые результаты этапа

  • сформирован единый split_v1, используемый всеми последующими моделями;
  • для каждого пациента определена принадлежность к train, validation или test;
  • рассчитана таблица стратификации по числу объектов, числу blast, доле blast и числу изображений;
  • сохранены текстовые списки пациентов и JSON-описание разбиения.

Как оценить качество результата

  • пересечение множеств пациентов между train, validation и test равно 0;
  • распределение класса blast и размера выборки между частями разбиения не содержит грубых перекосов;
  • при повторной сборке с тем же random_state получается идентичный split_v1;
  • part-1 отсутствует во всех split-файлах;
  • таблица class_distribution_by_split.csv позволяет отдельно проверить баланс по объектам и по пациентам.

Предлагаемые модули кода

  • src/dataset/build_patient_summary.py
  • src/dataset/make_group_splits.py
  • tests/test_group_split_no_leakage.py

A3. Извлечение object-level кропов и областей интереса

Цель

Подготовить единое представление объекта для разных семейств признаков и моделей.

Нужно реализовать три режима ROI

  1. bbox_crop Прямоугольный кроп по YOLO-рамке.

  2. mask_crop Кроп по bounding box объекта, внутри которого пиксели вне маски зануляются или заменяются фоном.

  3. mask_tight_crop Плотный кроп по минимальному прямоугольнику маски.

Дополнительные решения

  1. Зафиксировать размер выходного изображения для deep baselines, например 224x224.
  2. Для признаковых моделей хранить и исходный масштаб, и нормализованную версию.
  3. Сохранять метаданные о масштабировании и паддинге.

Выходные артефакты

  • outputs/crops/bbox/<subset>/<patient_id>/<image_id>__obj_<id>.png
  • outputs/crops/mask/<subset>/<patient_id>/<image_id>__obj_<id>.png
  • outputs/crops/mask_tight/<subset>/<patient_id>/<image_id>__obj_<id>.png
  • outputs/crops/roi_manifest.parquet

Контроль качества

Нужно автоматически проверять:

  • что число экспортированных объектов совпадает с ожидаемым числом строк индекса;
  • что геометрия кропа не выходит за пределы исходного изображения;
  • что объект с маской действительно имеет ненулевую площадь маски.

Проверяемые результаты этапа

  • экспортированы три согласованные версии ROI: bbox_crop, mask_crop, mask_tight_crop;
  • построен единый roi_manifest.parquet, связывающий исходный объект, пути к кропам, размеры ROI и режим подготовки;
  • сформирован отчет о неэкспортированных или проблемных ROI.

Как оценить качество результата

  • число bbox_crop совпадает с числом объектов выбранного подмножества;
  • число mask_crop и mask_tight_crop совпадает с числом объектов, у которых есть валидная маска;
  • доля кропов с выходом за границы, нулевой площадью маски или битыми изображениями равна 0;
  • по визуальной выборке можно проверить, что bbox- и mask-кропы действительно содержат нужный объект, а не соседние клетки;
  • roi_manifest.parquet позволяет автоматически сравнивать количество исходных объектов и количество реально экспортированных ROI.

Предлагаемые модули кода

  • src/preprocessing/extract_bbox_crops.py
  • src/preprocessing/extract_mask_crops.py
  • src/preprocessing/image_io.py
  • tests/test_crop_extraction.py

A4. Базовая объектная постановка blast / non-blast

Цель

Получить строгий и воспроизводимый baseline, который напрямую отвечает на главный вопрос статьи: полезны ли текстурные признаки в условиях реальных данных и patient-level оценки.

Основная целевая переменная

  • target_binary = 1, если class_id == 7;
  • target_binary = 0 для остальных объектов выбранного подмножества.

Какие версии задачи нужно решить

  1. Task A4.1 blast / non-blast на clean_cell_set.

  2. Task A4.2 blast / non-blast на strict_morphology_set.

  3. Task A4.3 blast / everything_else на full_realistic_set.

Последняя постановка особенно важна для автоматического анализатора, потому что она показывает устойчивость модели к артефактам и классам плохого качества.

Артефакты

  • outputs/dataset_index/task_a41_clean_binary.parquet
  • outputs/dataset_index/task_a42_strict_binary.parquet
  • outputs/dataset_index/task_a43_full_realistic_binary.parquet
  • outputs/tables/task_prevalence_summary.csv
  • outputs/reports/task_definition_report.md

Проверяемые результаты этапа

  • подготовлены три бинарные постановки с явно определенной целевой переменной;
  • для каждой постановки рассчитаны числа blast, non-blast, доля положительного класса и список hard-negative классов;
  • зафиксировано, какие именно задачи используются для дальнейшего сравнения моделей.

Как оценить качество результата

  • во всех трех файлах задача blast / non-blast формируется строго по правилу class_id == 7;
  • task_prevalence_summary.csv позволяет проверить дисбаланс классов и сложность каждой постановки;
  • во всех постановках сохраняется patient-level совместимость со split_v1;
  • по отчету task_definition_report.md можно проверить, какие классы формируют трудные отрицательные примеры и насколько различаются режимы clean, strict и full_realistic.

A5. Вычисление признаков

Семейства признаков, которые нужно реализовать

  1. Морфометрические признаки:

    • площадь bbox;
    • площадь маски;
    • периметр маски;
    • круглотность;
    • эксцентриситет;
    • отношение площади маски к площади bbox;
    • характеристики контура.
  2. Цветовые признаки:

    • средние и стандартные отклонения по каналам RGB;
    • признаки в HSV и Lab;
    • цветовые квантили;
    • показатели цветовой неоднородности.
  3. Текстурные признаки:

    • GLCM и признаки Харалика;
    • LBP;
    • статистики градиента;
    • признаки Лапласиана;
    • фрактальные или мульти-масштабные показатели;
    • вейвлет-признаки;
    • спектральные признаки Фурье при необходимости.

Режимы расчета признаков

  1. по bbox_crop;
  2. по mask_crop;
  3. комбинированно bbox + mask features.

Выходные артефакты

  • outputs/features/features_bbox.parquet
  • outputs/features/features_mask.parquet
  • outputs/features/features_combined.parquet
  • outputs/features/feature_dictionary.md
  • outputs/tables/feature_missingness.csv
  • outputs/reports/feature_extraction_qc.md

Проверяемые результаты этапа

  • для каждого объекта вычислены формальные морфометрические, цветовые и текстурные признаки;
  • построены три согласованные матрицы признаков: bbox, mask, combined;
  • сформирован словарь признаков с их определениями и зоной вычисления;
  • построен отчет о пропусках, константных признаках и аномальных значениях.

Как оценить качество результата

  • число строк в матрицах признаков совпадает с числом объектов соответствующего режима;
  • доля пропусков по каждому признаку рассчитана и явно зафиксирована;
  • константные и вырожденные признаки отделены от рабочих признаков;
  • можно проверить диапазоны значений, число признаков каждого семейства и различия между bbox, mask и combined;
  • feature_extraction_qc.md должен позволять быстро увидеть, какие признаки нужно удалить или стандартизовать до обучения моделей.

Предлагаемые модули кода

  • src/features/extract_morphology.py
  • src/features/extract_color.py
  • src/features/extract_texture_glcm.py
  • src/features/extract_texture_lbp.py
  • src/features/extract_texture_wavelet.py
  • src/features/feature_registry.py
  • tests/test_feature_shapes.py

A6. Признаковые baseline-модели

Цель

Сравнить информативность разных наборов признаков до подключения сложных нейросетевых архитектур.

Последовательность моделей

  1. Logistic Regression
  2. Linear SVM
  3. RBF SVM
  4. Random Forest
  5. XGBoost или LightGBM

Для каждой модели нужно сравнить

  1. только морфометрию;
  2. только цвет;
  3. только текстуру;
  4. морфометрия + цвет;
  5. морфометрия + текстура;
  6. цвет + текстура;
  7. полный набор признаков.

Метрики

Основные:

  • PR-AUC;
  • ROC-AUC;
  • balanced accuracy;
  • macro-F1;
  • recall для класса blast;
  • specificity;
  • Matthews correlation coefficient.

Дополнительные:

  • calibration error;
  • Brier score;
  • доверительные интервалы по повторам разбиения.

Артефакты

  • outputs/tables/object_level_metrics_baselines.csv
  • outputs/tables/feature_group_ablation.csv
  • outputs/predictions/object_level_baseline_predictions.parquet
  • outputs/figures/pr_curves_baselines.png
  • outputs/figures/roc_curves_baselines.png
  • outputs/tables/baseline_model_leaderboard.csv
  • outputs/figures/confusion_matrix_best_baseline.png

Проверяемые результаты этапа

  • обучены все запланированные признаковые baseline-модели на одинаковом split_v1;
  • получена таблица метрик по каждой модели и каждому режиму признаков;
  • построен лидерборд лучших моделей и лучший baseline для дальнейших абляций;
  • сохранены object-level вероятности и классовые предсказания для последующего image-level агрегирования.

Как оценить качество результата

  • в object_level_metrics_baselines.csv присутствуют все основные метрики и доверительные интервалы;
  • baseline_model_leaderboard.csv позволяет проверить, какая комбинация модель + режим признаков + subset действительно лучшая;
  • по confusion matrix и PR/ROC-кривым можно проверить не только среднее качество, но и характер ошибок;
  • отдельно оценивается recall класса blast, так как именно он является клинически критичным.

A7. Отбор признаков и интерпретация

Цель

Показать не только качество, но и морфологический смысл решения.

Что нужно проверить

  1. Устойчивость ranking признаков между разными фолдами.
  2. Согласованность ranking между моделями.
  3. Какие именно признаки стабильно усиливают разделение blast / non-blast.

Рекомендуемые методы

  • permutation importance;
  • SHAP для деревьев и бустинга;
  • регуляризованные линейные модели;
  • повторяемый отбор признаков с подсчетом частоты выбора.

Артефакты

  • outputs/tables/top_features_stability.csv
  • outputs/figures/shap_summary_top_model.png
  • outputs/figures/feature_importance_stability.png
  • reports/feature_interpretation_notes.md

Проверяемые результаты этапа

  • получен устойчивый ranking наиболее информативных признаков;
  • зафиксирована повторяемость top-признаков между фолдами и между моделями;
  • для лучшей модели построены интерпретационные диаграммы и текстовые пояснения.

Как оценить качество результата

  • top_features_stability.csv позволяет проверить частоту появления признака в top-N списках разных запусков;
  • по SHAP и permutation importance можно сравнить, совпадает ли ранжирование между разными методами интерпретации;
  • в feature_interpretation_notes.md должно быть указано, какие признаки имеют ясный морфологический смысл и какие остаются только статистически значимыми;
  • результат считается сильным, если ключевые признаки не меняются хаотично от фолда к фолду.

Практический результат

Этот этап должен дать содержательные формулировки для статьи и диссертации: какие текстурные и морфометрические свойства чаще всего ассоциированы с бластными объектами в данном корпусе.

A8. Абляции по роли маски и шумовых классов

Цель

Отдельно проверить, дают ли маски и разные режимы очистки корпуса заметный прирост качества.

Обязательные абляции

  1. bbox-only против mask-only.
  2. mask-only против bbox + mask.
  3. clean_cell_set против strict_morphology_set.
  4. strict_morphology_set против full_realistic_set.
  5. обучение на полном дисбалансном наборе против обучения с class weights.
  6. обучение на полном признаковом наборе против отбора признаков.

Артефакты

  • outputs/tables/ablation_mask_usage.csv
  • outputs/tables/ablation_dataset_regimes.csv
  • outputs/figures/ablation_summary.png

Проверяемые результаты этапа

  • измерен вклад масок в качество модели;
  • измерено влияние очистки корпуса и включения шумовых классов;
  • зафиксированы различия между полным набором признаков и урезанными вариантами;
  • отдельно проверено влияние class weights и feature selection.

Как оценить качество результата

  • ablation_mask_usage.csv должен показывать прирост или потерю качества при переходе между bbox, mask и bbox+mask;
  • ablation_dataset_regimes.csv должен показывать, насколько ухудшается качество в более реалистичном full_realistic_set;
  • итоговая фигура ablation_summary.png должна позволять быстро увидеть самые важные факторы изменения качества;
  • результат считается убедительным, если различия интерпретируемы и воспроизводимы, а не случайны в пределах погрешности.

A9. Ограниченные deep baselines на текущем корпусе

Цель

Не строить сразу сложную нейросетевую историю, а получить честную точку сравнения для признаковых моделей на том же split и тех же данных.

Что можно делать уже сейчас

  1. Легкая CNN на bbox_crop.
  2. Та же CNN на mask_crop.
  3. CNN + tabular late fusion на объединенных признаках.

Что нельзя обещать на этом этапе

  • убедительное сравнение с сильными трансформерными моделями из литературы;
  • выводы о подтипизации бластов;
  • выводы о переносимости на другие лаборатории.

Артефакты

  • outputs/tables/deep_vs_handcrafted.csv
  • outputs/predictions/object_level_deep_predictions.parquet
  • outputs/checkpoints/cnn_bbox_best.pt
  • outputs/checkpoints/cnn_mask_best.pt
  • outputs/logs/cnn_training_history.json
  • outputs/figures/deep_training_curves.png

Проверяемые результаты этапа

  • обучены ограниченные deep baselines на тех же patient-level split, что и признаковые модели;
  • получено прямое сравнение handcrafted, deep и late fusion;
  • сохранены лучшие checkpoint-файлы и история обучения.

Как оценить качество результата

  • deep_vs_handcrafted.csv позволяет сравнить качество deep-подходов с лучшим признаковым baseline на одних и тех же данных;
  • по deep_training_curves.png можно проверить переобучение, недообучение и устойчивость обучения;
  • по cnn_training_history.json можно оценить число эпох до сходимости, лучшую эпоху и разрыв между train и validation;
  • deep-этап считается полезным, если он дает либо измеримый прирост качества, либо честно показывает, что в текущем low-complexity режиме интерпретируемые признаки не уступают легкой CNN.

A10. Анализаторно-ориентированное image-level агрегирование

Цель

Сделать переход от классификации отдельного объекта к постановке, более близкой к автоматическому анализатору: содержит ли изображение хотя бы один вероятный бласт и насколько высоко модель ранжирует такие изображения.

Доступные сейчас постановки

  1. image_contains_blast Изображение считается положительным, если среди его объектов есть хотя бы один blast.

  2. top_k_image_ranking Изображения сортируются по максимальному или агрегированному blast-score объектов.

  3. patient_risk_score Для пациента агрегируется статистика по всем изображениям:

    • максимум blast-score;
    • доля изображений с blast-score выше порога;
    • средний score по top-K объектам.

Способы агрегирования, которые нужно сравнить

  1. max object score;
  2. mean top-3 scores;
  3. count of objects above threshold;
  4. soft noisy-or.

Метрики

  • image-level PR-AUC;
  • image-level recall при фиксированной доле ложных тревог;
  • patient-level sensitivity;
  • top-K recall для изображений с бластами.

Почему это важно

Этот этап лучше всего связывает текущие данные со статьей и будущей диссертацией: даже не имея настоящих slide-level меток, мы уже можем проверить, насколько object-level модель пригодна как подсистема отбора подозрительных изображений для анализатора.

Артефакты

  • outputs/tables/image_level_metrics.csv
  • outputs/tables/patient_level_ranking_metrics.csv
  • outputs/predictions/image_level_scores.parquet
  • outputs/predictions/patient_level_scores.parquet
  • outputs/figures/image_ranking_recall_curve.png
  • outputs/figures/patient_ranking_curve.png

Проверяемые результаты этапа

  • object-level модель переведена в image-level и patient-level постановку;
  • рассчитаны image-level и patient-level score для всех объектов наблюдения;
  • определен лучший способ агрегирования object scores для анализаторно-ориентированного сценария.

Как оценить качество результата

  • image_level_metrics.csv позволяет сравнить разные способы агрегирования по PR-AUC и recall при ограниченной ложной тревоге;
  • patient_level_ranking_metrics.csv позволяет оценить, насколько хорошо пациент с бластами поднимается в верх ранжированного списка;
  • image_ranking_recall_curve.png и patient_ranking_curve.png позволяют визуально проверить пригодность модели для предварительного отбора подозрительных изображений и пациентов;
  • этап считается особенно успешным, если даже простой object-level baseline обеспечивает высокое top-K покрытие изображений и пациентов с бластами.

A11. Минимальный набор визуализаций для статьи и диссертации

Нужно подготовить

  1. Схему пайплайна обработки данных.
  2. Таблицу классов и объема корпуса.
  3. Примеры bbox_crop и mask_crop.
  4. График покрытия масками.
  5. Таблицы baseline-метрик.
  6. График устойчивости top-признаков.
  7. Схему image-level агрегирования.

Артефакты

  • outputs/figures/pipeline_overview.png
  • outputs/figures/example_rois.png
  • outputs/figures/mask_coverage.png
  • outputs/tables/dataset_summary.csv
  • outputs/tables/figure_manifest.csv
  • outputs/tables/table_manifest.csv

Проверяемые результаты этапа

  • подготовлен минимально достаточный комплект иллюстраций и таблиц для статьи и диссертации;
  • каждая фигура и таблица привязана к конкретному этапу эксперимента и конкретному исходному файлу;
  • оформлен список всех визуальных артефактов, которые можно использовать при написании текста работы.

Как оценить качество результата

  • по figure_manifest.csv и table_manifest.csv можно проверить полноту пакета визуализаций;
  • каждая таблица должна совпадать по числам с соответствующими CSV-артефактами модели и данных;
  • каждая фигура должна строиться воспроизводимо из проектных данных, а не вручную;
  • итоговый комплект считается достаточным, если по нему уже можно собирать разделы статьи, главы диссертации и презентационные материалы без дополнительного пересчета результатов.

7. Часть B. Эксперименты, требующие дополнительных данных

B1. Разделение лимфобластов и миелобластов

Для этой постановки обязательно нужен новый корпус или доразметка текущего корпуса, где класс blast будет разделен минимум на:

  • lymphoblast;
  • myeloblast;
  • при необходимости ambiguous blast-like.

Только после этого можно переносить на практику исходную гипотезу статьи о class-specific текстурных различиях лимфобластов и миелобластов.

B2. Полноценный эксперимент по доменному сдвигу

Нужны данные хотя бы из еще одного источника:

  • другая лаборатория;
  • другой сканер;
  • другая методика окраски;
  • другой режим подготовки препаратов.

Тогда можно сравнивать:

  • handcrafted only;
  • deep only;
  • hybrid.

И только в этом случае будет корректно обсуждать устойчивость к междоменному переносу.

B3. Slide-level и case-level постановка

Чтобы реализовать сильную анализаторно-ориентированную схему, требуются:

  • полноценные slide-level метки;
  • case-level клинические метки;
  • желательно информация о конечном диагнозе или наличии резидуальных бластов на уровне случая.

Без этого текущий этап может дать только image-level приближение.

B4. Экспертная клиническая интерпретация

Для глубоких моделей и усиленной интерпретации нужны:

  • ручные контуры ядра и цитоплазмы;
  • выделение нуклеол;
  • при AML — специальные признаки типа палочек Ауэра;
  • экспертная blinded-оценка областей, на которые опирается модель.

B5. Продвинутые deep и MIL-схемы

Полноценные transformer-подобные модели, MIL, weak supervision и причинно-структурные архитектуры имеет смысл выносить в отдельный этап только после того, как будет завершен и воспроизводимо оформлен этап A.

8. Приоритеты реализации

Код следует писать именно в таком порядке:

  1. A0 — индексация и аудит.
  2. A1 — аналитические подмножества.
  3. A2 — patient-level split.
  4. A3 — извлечение ROI.
  5. A5 — вычисление признаков.
  6. A6 — признаки и baseline-модели.
  7. A7 — интерпретация признаков.
  8. A8 — абляции.
  9. A10 — image-level агрегирование.
  10. A9 — ограниченные deep baselines.

Такой порядок выбран специально: сначала нужно получить строго воспроизводимый, интерпретируемый и диссертационно полезный baseline, а уже потом усложнять модельную часть.

9. Минимальный первый кодовый спринт

Чтобы начать реализацию немедленно, первым спринтом нужно закрыть следующие задачи:

  1. Написать сборщик object_index.
  2. Зафиксировать patient-level split.
  3. Реализовать экспорт bbox_crop и mask_crop.
  4. Реализовать первый набор признаков:
    • площадь;
    • периметр;
    • компактность;
    • RGB-статистики;
    • GLCM;
    • LBP.
  5. Обучить Logistic Regression и Random Forest на clean_cell_set.
  6. Построить первые object-level и image-level метрики.