diff --git a/.ruff.toml b/.ruff.toml index fb5e992b..56aac6ef 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -36,7 +36,7 @@ extend-ignore = [ "D106", # missing docstring in public nested class "D107", # missing docstring in __init__ "N812", # lowercase imported as non lowercase - "TCH002", # move third-party into a type-checking block + "TC002", # move third-party into a type-checking block "F722", # jaxtyping ] diff --git a/README.md b/README.md index 5001a559..d39c05a4 100644 --- a/README.md +++ b/README.md @@ -1 +1,148 @@ -# Machine Learning Template +# Automated Grading of Ulcerative Colitis from H&E Whole Slide Images + +This repository contains the machine learning pipeline developed for automated histological grading of ulcerative colitis (UC) biopsies using the Nancy Histological Index (NHI). The approach frames NHI grading as a hierarchical classification problem: a binary neutrophil-detection task routes each whole-slide image through either a low-grade (NHI 0–2) or a high-grade (NHI 2–4) classifier. All models are based on pretrained pathology foundation models and use attention-based multiple instance learning (MIL) over tile embeddings, making them applicable to gigapixel slides without requiring tile-level annotations. Experiments evaluate multiple foundation models (prov-gigapath, UNI, UNI2, Virchow, Virchow2), MIL against tile-level approaches, ordered regression, and ensembling/confidence strategies over a multi-institution cohort (IKEM, FTN, KNL). + +> **Note: This code is not runnable as-is.** The underlying H&E whole-slide image data and derived embeddings are sensitive patient data from clinical institutions and are not included in this repository. The code is provided for reference and reproducibility of the methodology only. + +--- + +## Repository Structure + +``` +. +├── configs/ # Hydra configuration tree +│ ├── dataset/ # Dataset split URIs (embeddings, slides, tiles) +│ ├── checkpoints/ # Checkpoint paths for test/inference runs +│ ├── predictions/ # MLflow prediction artifact URIs (per institution/fold) +│ └── experiment/ +│ ├── ml/ # ML training & test experiment configs (Exp I–VI + final) +│ └── postprocessing/ # Postprocessing experiment configs (Exp VII–VIII + final) +├── ml/ # PyTorch Lightning modules & entry point +│ ├── __main__.py # Entry point: `python -m ml` +│ ├── base.py # BaseModule (tile-level training loop) +│ ├── classification.py # Tile-level softmax classification +│ ├── ordered_regression.py # Cumulative link ordered regression +│ ├── mil.py # Attention MIL (bag-level) +│ ├── neutrophils.py # Binary neutrophil detection (tile-level) +│ └── modeling/ # Building blocks (heads, normalization) +├── preprocessing/ # Data preparation pipeline +│ ├── tiling.py # Tile extraction from WSIs +│ ├── tissue_masks.py # Tissue segmentation +│ ├── quality_control.py # Tile quality filtering +│ ├── embeddings.py # Foundation model feature extraction +│ ├── neutrophils.py # Neutrophil pseudo-label extraction +│ ├── create_dataset.py # Assemble HuggingFace dataset +│ └── split_dataset.py # Train/val/test split assignment +├── postprocessing/ # Slide-level aggregation & confidence +│ ├── ensembling.py # Soft majority vote + hierarchical ensembling +│ ├── markov_chain_confidence.py # Markov chain absorption confidence scores +│ ├── ensembling_predict.py # Ensembling for unlabeled cohorts (no metrics) +│ └── markov_chain_confidence_predict.py # Confidence scores for unlabeled cohorts +├── scripts/ # Kubernetes job submission scripts +│ ├── ml/ # train.py, test.py, neutrophils.py +│ ├── preprocessing/ # Preprocessing job scripts +│ └── postprocessing/ # Postprocessing job scripts +├── pyproject.toml +└── thesis.pdf # Thesis manuscript +``` + +--- + +## Setup + +Requires Python 3.12 and [`uv`](https://github.com/astral-sh/uv). + +```bash +uv sync --frozen +``` + +--- + +## Pipeline Overview + +The full pipeline runs in four stages: + +### 1. Preprocessing + +Tiles are extracted from WSIs, tissue-masked, quality-filtered, and encoded by a foundation model into fixed-dimensional embeddings. Datasets are assembled as HuggingFace Datasets and registered in MLflow. + +```bash +# Tissue segmentation masks +uv run --active -m preprocessing.tissue_masks +dataset=processed/... + +# Tile extraction from WSIs +uv run --active -m preprocessing.tiling +dataset=processed_w_masks/... +experiment=preprocessing/tiling/... + +# Tile quality filtering +uv run -m preprocessing.quality_control +dataset=processed/... + +# Foundation model feature extraction +uv run --active -m preprocessing.embeddings +dataset=tiled/... + +# Assemble HuggingFace dataset +uv run -m preprocessing.create_dataset +dataset=raw/... + +# Train/val/test split assignment +uv run -m preprocessing.split_dataset +experiment=preprocessing/split_dataset/... +``` + +### 2. ML Training + +Models are trained via Hydra experiment configs. The entry point is `python -m ml` and an experiment config must be selected: + +```bash +# Example: train Experiment IV (MIL) fold 1 +uv run -m ml +experiment=ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_1 + +# Example: train final model (all institutions combined) +uv run -m ml +experiment=ml/final/nancy_high/train +``` + +### 3. ML Testing / Inference + +```bash +# Example: test Experiment IV fold 1 +uv run -m ml +experiment=ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_1 + +# Neutrophil detection (produces binary slide-level predictions) +uv run -m ml.neutrophils +experiment=ml/experiment_vi_neutrophil_detection/run +``` + +### 4. Postprocessing + +Slide-level predictions from the three hierarchical tasks are combined into final NHI grades and confidence scores: + +```bash +# Ensembling (soft majority vote + hierarchical routing) +uv run -m postprocessing.ensembling +postprocessing=ensembling + +# Markov chain absorption confidence +uv run -m postprocessing.markov_chain_confidence +postprocessing=markov_chain_confidence +``` + +For unlabeled cohorts (no ground-truth NHI grades, e.g. external validation), use the +`_predict` variants, which skip label loading and metric computation and only emit +predictions / confidence scores: + +```bash +uv run -m postprocessing.ensembling_predict +postprocessing=ensembling_predict +uv run -m postprocessing.markov_chain_confidence_predict +postprocessing=markov_chain_confidence_predict +``` + +--- + +## Experiments + +| # | Name | Config path | Description | +|---|------|-------------|-------------| +| I | Baseline Classification | `experiment/ml/experiment_i_baseline_classification` | VGG16 tile-level classifier trained on raw pixel tiles | +| II | Ordered Regression | `experiment/ml/experiment_ii_ordered_regression` | Cumulative link loss for NHI ordinal structure | +| III | Pathology Foundation Models | `experiment/ml/experiment_iii_pathology_foundation_model` | Linear probe on frozen prov-gigapath embeddings | +| IV | MIL & Hierarchical Modeling | `experiment/ml/experiment_iv_mil_and_hierarchical_modeling` | Attention MIL; three-task hierarchical decomposition | +| V | More Foundation Models | `experiment/ml/experiment_v_more_foundation_models` | MIL sweep over all foundation models | +| VI | Neutrophil Detection | `experiment/ml/experiment_vi_neutrophil_detection` | Binary tile-level neutrophil classifier | +| VII | Ensembling | `experiment/postprocessing/experiment_vii_ensembling` | Soft majority vote vs. hierarchical routing | +| VIII | Markov Chain Confidence | `experiment/postprocessing/experiment_viii_markov_chain_model_aggregation` | Absorption distribution confidence (entropy / herfindahl / std) | +| — | Final Model | `experiment/ml/final` | Attention MIL (virchow2) trained on all three institutions | + +All cross-validation experiments run 5 folds over the IKEM institution. Final evaluation uses the held-out test split across IKEM, FTN, and KNL. diff --git a/configs/base.yaml b/configs/base.yaml index 94c880e7..2bd21794 100644 --- a/configs/base.yaml +++ b/configs/base.yaml @@ -3,5 +3,7 @@ defaults: - logger: mlflow - _self_ +project_dir: /mnt/projects/inflammatory_bowel_disease/ulcerative_colitis + metadata: experiment_name: Ulcerative Colitis diff --git a/configs/checkpoints/experiment_i_baseline_classification/fold_1.yaml b/configs/checkpoints/experiment_i_baseline_classification/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_i_baseline_classification/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_i_baseline_classification/fold_2.yaml b/configs/checkpoints/experiment_i_baseline_classification/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_i_baseline_classification/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_i_baseline_classification/fold_3.yaml b/configs/checkpoints/experiment_i_baseline_classification/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_i_baseline_classification/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_i_baseline_classification/fold_4.yaml b/configs/checkpoints/experiment_i_baseline_classification/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_i_baseline_classification/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_i_baseline_classification/fold_5.yaml b/configs/checkpoints/experiment_i_baseline_classification/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_i_baseline_classification/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_ii_ordered_regression/fold_1.yaml b/configs/checkpoints/experiment_ii_ordered_regression/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_ii_ordered_regression/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_ii_ordered_regression/fold_2.yaml b/configs/checkpoints/experiment_ii_ordered_regression/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_ii_ordered_regression/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_ii_ordered_regression/fold_3.yaml b/configs/checkpoints/experiment_ii_ordered_regression/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_ii_ordered_regression/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_ii_ordered_regression/fold_4.yaml b/configs/checkpoints/experiment_ii_ordered_regression/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_ii_ordered_regression/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_ii_ordered_regression/fold_5.yaml b/configs/checkpoints/experiment_ii_ordered_regression/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_ii_ordered_regression/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_1.yaml b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_2.yaml b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_3.yaml b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_4.yaml b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_5.yaml b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iii_pathology_foundation_model/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_1.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_2.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_3.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_4.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_5.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_1.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_2.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_3.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_4.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_5.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_1.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_2.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_3.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_4.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_5.yaml b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_1.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_1.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_1.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_2.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_2.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_2.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_3.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_3.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_3.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_4.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_4.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_4.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_5.yaml b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_5.yaml new file mode 100644 index 00000000..d882745e --- /dev/null +++ b/configs/checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_5.yaml @@ -0,0 +1 @@ +checkpoint: ??? diff --git a/configs/checkpoints/final/nancy_high.yaml b/configs/checkpoints/final/nancy_high.yaml new file mode 100644 index 00000000..9a4bace2 --- /dev/null +++ b/configs/checkpoints/final/nancy_high.yaml @@ -0,0 +1,3 @@ +# @package _global_ + +checkpoint: mlflow-artifacts:/86/ac693e2ee17e4254a30786c0668e7af4/artifacts/checkpoints/epoch=299-step=176100/checkpoint.ckpt diff --git a/configs/checkpoints/final/nancy_low.yaml b/configs/checkpoints/final/nancy_low.yaml new file mode 100644 index 00000000..99697228 --- /dev/null +++ b/configs/checkpoints/final/nancy_low.yaml @@ -0,0 +1,3 @@ +# @package _global_ + +checkpoint: mlflow-artifacts:/86/452e6f1bf18c45d3bc1d2ae9b44154ae/artifacts/checkpoints/epoch=299-step=176100/checkpoint.ckpt diff --git a/configs/checkpoints/final/neutrophils.yaml b/configs/checkpoints/final/neutrophils.yaml new file mode 100644 index 00000000..318560df --- /dev/null +++ b/configs/checkpoints/final/neutrophils.yaml @@ -0,0 +1,3 @@ +# @package _global_ + +checkpoint: mlflow-artifacts:/86/5f9d50d8dccf45e6b8a80d8d3b0f773c/artifacts/checkpoints/epoch=70-step=41677/checkpoint.ckpt diff --git a/configs/dataset/embeddings/ftn/1_prov-gigapath.yaml b/configs/dataset/embeddings/ftn/1_prov-gigapath.yaml new file mode 100644 index 00000000..6d3950cf --- /dev/null +++ b/configs/dataset/embeddings/ftn/1_prov-gigapath.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ftn/1_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ftn/1_uni2.yaml b/configs/dataset/embeddings/ftn/1_uni2.yaml new file mode 100644 index 00000000..6d3950cf --- /dev/null +++ b/configs/dataset/embeddings/ftn/1_uni2.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ftn/1_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ftn/1_virchow2.yaml b/configs/dataset/embeddings/ftn/1_virchow2.yaml new file mode 100644 index 00000000..6d3950cf --- /dev/null +++ b/configs/dataset/embeddings/ftn/1_virchow2.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ftn/1_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ftn/2_virchow2.yaml b/configs/dataset/embeddings/ftn/2_virchow2.yaml new file mode 100644 index 00000000..63cf7354 --- /dev/null +++ b/configs/dataset/embeddings/ftn/2_virchow2.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ftn/2_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ikem/1_prov-gigapath.yaml b/configs/dataset/embeddings/ikem/1_prov-gigapath.yaml new file mode 100644 index 00000000..b44ca180 --- /dev/null +++ b/configs/dataset/embeddings/ikem/1_prov-gigapath.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ikem/1_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ikem/1_uni2.yaml b/configs/dataset/embeddings/ikem/1_uni2.yaml new file mode 100644 index 00000000..b44ca180 --- /dev/null +++ b/configs/dataset/embeddings/ikem/1_uni2.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ikem/1_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ikem/1_virchow2.yaml b/configs/dataset/embeddings/ikem/1_virchow2.yaml new file mode 100644 index 00000000..b44ca180 --- /dev/null +++ b/configs/dataset/embeddings/ikem/1_virchow2.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ikem/1_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ikem/2_virchow2.yaml b/configs/dataset/embeddings/ikem/2_virchow2.yaml new file mode 100644 index 00000000..37ca7c47 --- /dev/null +++ b/configs/dataset/embeddings/ikem/2_virchow2.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/tiled/ikem/2_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/ikem_validation.yaml b/configs/dataset/embeddings/ikem_validation.yaml new file mode 100644 index 00000000..e7481456 --- /dev/null +++ b/configs/dataset/embeddings/ikem_validation.yaml @@ -0,0 +1,7 @@ +defaults: + - /dataset/tiled/ikem_validation@_here_ + - _self_ + +mlflow_uris: + embeddings: + predict: mlflow-artifacts:/86/12b0609fdc36429f9b7a13e581ed4cd4/artifacts/predict - ikem_validation \ No newline at end of file diff --git a/configs/dataset/embeddings/knl_patos/1_prov-gigapath.yaml b/configs/dataset/embeddings/knl_patos/1_prov-gigapath.yaml new file mode 100644 index 00000000..7f8b7902 --- /dev/null +++ b/configs/dataset/embeddings/knl_patos/1_prov-gigapath.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/tiled/knl_patos/0_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/knl_patos/1_uni2.yaml b/configs/dataset/embeddings/knl_patos/1_uni2.yaml new file mode 100644 index 00000000..7f8b7902 --- /dev/null +++ b/configs/dataset/embeddings/knl_patos/1_uni2.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/tiled/knl_patos/0_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/knl_patos/1_virchow2.yaml b/configs/dataset/embeddings/knl_patos/1_virchow2.yaml new file mode 100644 index 00000000..7f8b7902 --- /dev/null +++ b/configs/dataset/embeddings/knl_patos/1_virchow2.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/tiled/knl_patos/0_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/embeddings/knl_patos/2_virchow2.yaml b/configs/dataset/embeddings/knl_patos/2_virchow2.yaml new file mode 100644 index 00000000..dfa15783 --- /dev/null +++ b/configs/dataset/embeddings/knl_patos/2_virchow2.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/tiled/knl_patos/2_224@_here_ + - _self_ + +mlflow_uris: + embeddings: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/neutrophils/all.yaml b/configs/dataset/neutrophils/all.yaml new file mode 100644 index 00000000..2790b9ae --- /dev/null +++ b/configs/dataset/neutrophils/all.yaml @@ -0,0 +1,5 @@ +defaults: + - /dataset/neutrophils@datasets.ftn: ftn + - /dataset/neutrophils@datasets.ikem: ikem + - /dataset/neutrophils@datasets.knl_patos: knl_patos + - _self_ diff --git a/configs/dataset/neutrophils/ftn.yaml b/configs/dataset/neutrophils/ftn.yaml new file mode 100644 index 00000000..d31d7380 --- /dev/null +++ b/configs/dataset/neutrophils/ftn.yaml @@ -0,0 +1,6 @@ +defaults: + - /dataset/tiled/ftn/0_320@_here_ + - _self_ + +mlflow_uris: + neutrophils: ??? diff --git a/configs/dataset/neutrophils/ikem.yaml b/configs/dataset/neutrophils/ikem.yaml new file mode 100644 index 00000000..819642e6 --- /dev/null +++ b/configs/dataset/neutrophils/ikem.yaml @@ -0,0 +1,6 @@ +defaults: + - /dataset/tiled/ikem/0_320@_here_ + - _self_ + +mlflow_uris: + neutrophils: ??? diff --git a/configs/dataset/neutrophils/knl_patos.yaml b/configs/dataset/neutrophils/knl_patos.yaml new file mode 100644 index 00000000..c98eb76f --- /dev/null +++ b/configs/dataset/neutrophils/knl_patos.yaml @@ -0,0 +1,6 @@ +defaults: + - /dataset/tiled/knl_patos/0_320@_here_ + - _self_ + +mlflow_uris: + neutrophils: ??? diff --git a/configs/dataset/processed/ftn.yaml b/configs/dataset/processed/ftn.yaml index c79fe2a7..a3d5297e 100644 --- a/configs/dataset/processed/ftn.yaml +++ b/configs/dataset/processed/ftn.yaml @@ -3,4 +3,4 @@ defaults: - _self_ mlflow_uris: - dataset: mlflow-artifacts:/86/d2b2f1835fc647e2ba3639ce606f4768/artifacts/dataset.csv + dataset: ??? diff --git a/configs/dataset/processed/ikem.yaml b/configs/dataset/processed/ikem.yaml index 79e84ad7..4d42bc91 100644 --- a/configs/dataset/processed/ikem.yaml +++ b/configs/dataset/processed/ikem.yaml @@ -3,4 +3,4 @@ defaults: - _self_ mlflow_uris: - dataset: mlflow-artifacts:/86/7c6e7cc142494d45b6513185318d4462/artifacts/dataset.csv + dataset: ??? diff --git a/configs/dataset/processed/ikem_validation.yaml b/configs/dataset/processed/ikem_validation.yaml new file mode 100644 index 00000000..1193d5db --- /dev/null +++ b/configs/dataset/processed/ikem_validation.yaml @@ -0,0 +1,6 @@ +defaults: + - /dataset/raw/ikem_validation@_here_ + - _self_ + +mlflow_uris: + dataset: mlflow-artifacts:/86/f91742d3b2d749deb7337ee8554fe8f0/artifacts/dataset.csv diff --git a/configs/dataset/processed/knl_patos.yaml b/configs/dataset/processed/knl_patos.yaml index 7c2c3dde..3315f48a 100644 --- a/configs/dataset/processed/knl_patos.yaml +++ b/configs/dataset/processed/knl_patos.yaml @@ -3,4 +3,4 @@ defaults: - _self_ mlflow_uris: - dataset: mlflow-artifacts:/86/f690f64ded624da9a7150a7a92385aec/artifacts/dataset.csv + dataset: ??? diff --git a/configs/dataset/processed_w_masks/ftn.yaml b/configs/dataset/processed_w_masks/ftn.yaml index bb163a7c..0a6ce921 100644 --- a/configs/dataset/processed_w_masks/ftn.yaml +++ b/configs/dataset/processed_w_masks/ftn.yaml @@ -3,9 +3,9 @@ defaults: - _self_ mlflow_uris: - tissue_mask: mlflow-artifacts:/86/17149d1de7014112aba3a252a76d10bc/artifacts/tissue_masks - qc_mask: mlflow-artifacts:/86/d2301fc279c94682a639583731c2fded/artifacts + tissue_mask: ??? + qc_mask: ??? splits: - train: mlflow-artifacts:/86/a0fa337bf26146dab42062237285737f/artifacts/train.csv - test_preliminary: mlflow-artifacts:/86/a0fa337bf26146dab42062237285737f/artifacts/test_preliminary.csv - test_final: mlflow-artifacts:/86/a0fa337bf26146dab42062237285737f/artifacts/test_final.csv + train: ??? + test_preliminary: ??? + test_final: ??? diff --git a/configs/dataset/processed_w_masks/ikem.yaml b/configs/dataset/processed_w_masks/ikem.yaml index 1ca391b8..a3f8ab89 100644 --- a/configs/dataset/processed_w_masks/ikem.yaml +++ b/configs/dataset/processed_w_masks/ikem.yaml @@ -3,9 +3,9 @@ defaults: - _self_ mlflow_uris: - tissue_mask: mlflow-artifacts:/86/94481ac59246471fb874bfb4dccb5e67/artifacts/tissue_masks - qc_mask: mlflow-artifacts:/86/65e794b652ab4369aad2e7dbe60eddca/artifacts + tissue_mask: ??? + qc_mask: ??? splits: - train: mlflow-artifacts:/86/9a2d8f975bc24dceb5271c5699560a8f/artifacts/train.csv - test_preliminary: mlflow-artifacts:/86/9a2d8f975bc24dceb5271c5699560a8f/artifacts/test_preliminary.csv - test_final: mlflow-artifacts:/86/9a2d8f975bc24dceb5271c5699560a8f/artifacts/test_final.csv + train: ??? + test_preliminary: ??? + test_final: ??? diff --git a/configs/dataset/processed_w_masks/ikem_validation.yaml b/configs/dataset/processed_w_masks/ikem_validation.yaml new file mode 100644 index 00000000..7bcbdc09 --- /dev/null +++ b/configs/dataset/processed_w_masks/ikem_validation.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed/ikem_validation@_here_ + - _self_ + +mlflow_uris: + tissue_mask: mlflow-artifacts:/86/bad4715238634f929f3787b4e757a683/artifacts/tissue_masks + qc_mask: mlflow-artifacts:/86/c54cdb4537fc4072a907899788133d0b/artifacts + splits: + predict: mlflow-artifacts:/86/f91742d3b2d749deb7337ee8554fe8f0/artifacts/dataset.csv \ No newline at end of file diff --git a/configs/dataset/processed_w_masks/knl_patos.yaml b/configs/dataset/processed_w_masks/knl_patos.yaml index 648fbec8..fc29e2e2 100644 --- a/configs/dataset/processed_w_masks/knl_patos.yaml +++ b/configs/dataset/processed_w_masks/knl_patos.yaml @@ -3,8 +3,8 @@ defaults: - _self_ mlflow_uris: - tissue_mask: mlflow-artifacts:/86/6cdfa5ce4f7242a9b2bb394bfd5ed705/artifacts/tissue_masks - qc_mask: mlflow-artifacts:/86/7cc5586efbca4ecd8f7ac2847b4ee199/artifacts + tissue_mask: ??? + qc_mask: ??? splits: - test_preliminary: mlflow-artifacts:/86/4d517fd564c741ec8e14679a340ebcb0/artifacts/test_preliminary.csv - test_final: mlflow-artifacts:/86/4d517fd564c741ec8e14679a340ebcb0/artifacts/test_final.csv + test_preliminary: ??? + test_final: ??? diff --git a/configs/dataset/raw/ikem_validation.yaml b/configs/dataset/raw/ikem_validation.yaml new file mode 100644 index 00000000..20565121 --- /dev/null +++ b/configs/dataset/raw/ikem_validation.yaml @@ -0,0 +1,15 @@ +institution: ikem_validation +folder: /mnt/data/IKEM/colon/IBD_AI/validation +# [0-9]{2,4} - case ID (2 to 4 digits) (in year scope) +# _ - underscore separator +# 23 - year (2023) +# _ - underscore separator +# HE - stain type +# _ - underscore separator +# [0AB] - slide block (A, B, or 0) +# .czi - file extension +regex_pattern: ^[0-9]{2,4}_23_HE_[0AB]\.czi$ +labels: + - NANAI_validace.xlsx + +drop_missing: false \ No newline at end of file diff --git a/configs/dataset/tiled/ftn.yaml b/configs/dataset/tiled/ftn.yaml deleted file mode 100644 index 3f9db69e..00000000 --- a/configs/dataset/tiled/ftn.yaml +++ /dev/null @@ -1,9 +0,0 @@ -defaults: - - /dataset/processed_w_masks/ftn@_here_ - - _self_ - -mlflow_uris: - tiling: - train: mlflow-artifacts:/86/b82e5dcc6bf840cf92bea0e0cfdc7603/artifacts/train - ftn - test_preliminary: mlflow-artifacts:/86/b82e5dcc6bf840cf92bea0e0cfdc7603/artifacts/test_preliminary - ftn - test_final: mlflow-artifacts:/86/b82e5dcc6bf840cf92bea0e0cfdc7603/artifacts/test_final - ftn \ No newline at end of file diff --git a/configs/dataset/tiled/ftn/0_320.yaml b/configs/dataset/tiled/ftn/0_320.yaml new file mode 100644 index 00000000..c6aba9b8 --- /dev/null +++ b/configs/dataset/tiled/ftn/0_320.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ftn@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ftn/0_512.yaml b/configs/dataset/tiled/ftn/0_512.yaml new file mode 100644 index 00000000..c6aba9b8 --- /dev/null +++ b/configs/dataset/tiled/ftn/0_512.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ftn@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ftn/1_224.yaml b/configs/dataset/tiled/ftn/1_224.yaml new file mode 100644 index 00000000..c6aba9b8 --- /dev/null +++ b/configs/dataset/tiled/ftn/1_224.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ftn@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ftn/2_224.yaml b/configs/dataset/tiled/ftn/2_224.yaml new file mode 100644 index 00000000..c6aba9b8 --- /dev/null +++ b/configs/dataset/tiled/ftn/2_224.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ftn@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ikem.yaml b/configs/dataset/tiled/ikem.yaml deleted file mode 100644 index c8f212ca..00000000 --- a/configs/dataset/tiled/ikem.yaml +++ /dev/null @@ -1,9 +0,0 @@ -defaults: - - /dataset/processed_w_masks/ikem@_here_ - - _self_ - -mlflow_uris: - tiling: - train: mlflow-artifacts:/86/854bd20a112f450cb31843e5c436854b/artifacts/train - ikem - test_preliminary: mlflow-artifacts:/86/854bd20a112f450cb31843e5c436854b/artifacts/test_preliminary - ikem - test_final: mlflow-artifacts:/86/854bd20a112f450cb31843e5c436854b/artifacts/test_final - ikem \ No newline at end of file diff --git a/configs/dataset/tiled/ikem/0_320.yaml b/configs/dataset/tiled/ikem/0_320.yaml new file mode 100644 index 00000000..ce2ee775 --- /dev/null +++ b/configs/dataset/tiled/ikem/0_320.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ikem@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ikem/0_512.yaml b/configs/dataset/tiled/ikem/0_512.yaml new file mode 100644 index 00000000..ce2ee775 --- /dev/null +++ b/configs/dataset/tiled/ikem/0_512.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ikem@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ikem/1_224.yaml b/configs/dataset/tiled/ikem/1_224.yaml new file mode 100644 index 00000000..ce2ee775 --- /dev/null +++ b/configs/dataset/tiled/ikem/1_224.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ikem@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ikem/2_224.yaml b/configs/dataset/tiled/ikem/2_224.yaml new file mode 100644 index 00000000..ce2ee775 --- /dev/null +++ b/configs/dataset/tiled/ikem/2_224.yaml @@ -0,0 +1,9 @@ +defaults: + - /dataset/processed_w_masks/ikem@_here_ + - _self_ + +mlflow_uris: + tiling: + train: ??? + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/ikem_validation.yaml b/configs/dataset/tiled/ikem_validation.yaml new file mode 100644 index 00000000..22cee58b --- /dev/null +++ b/configs/dataset/tiled/ikem_validation.yaml @@ -0,0 +1,7 @@ +defaults: + - /dataset/processed_w_masks/ikem_validation@_here_ + - _self_ + +mlflow_uris: + tiling: + predict: mlflow-artifacts:/86/ef20b95b9e9348de9e4ca81597b3447a/artifacts/predict - ikem_validation \ No newline at end of file diff --git a/configs/dataset/tiled/knl_patos.yaml b/configs/dataset/tiled/knl_patos.yaml deleted file mode 100644 index a8e44014..00000000 --- a/configs/dataset/tiled/knl_patos.yaml +++ /dev/null @@ -1,8 +0,0 @@ -defaults: - - /dataset/processed_w_masks/knl_patos@_here_ - - _self_ - -mlflow_uris: - tiling: - test_preliminary: mlflow-artifacts:/86/d57c09bc02914ff58ba659b91f34c469/artifacts/test_preliminary - knl_patos - test_final: mlflow-artifacts:/86/d57c09bc02914ff58ba659b91f34c469/artifacts/test_final - knl_patos \ No newline at end of file diff --git a/configs/dataset/tiled/knl_patos/0_320.yaml b/configs/dataset/tiled/knl_patos/0_320.yaml new file mode 100644 index 00000000..eceb9270 --- /dev/null +++ b/configs/dataset/tiled/knl_patos/0_320.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/processed_w_masks/knl_patos@_here_ + - _self_ + +mlflow_uris: + tiling: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/knl_patos/0_512.yaml b/configs/dataset/tiled/knl_patos/0_512.yaml new file mode 100644 index 00000000..eceb9270 --- /dev/null +++ b/configs/dataset/tiled/knl_patos/0_512.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/processed_w_masks/knl_patos@_here_ + - _self_ + +mlflow_uris: + tiling: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/knl_patos/1_224.yaml b/configs/dataset/tiled/knl_patos/1_224.yaml new file mode 100644 index 00000000..eceb9270 --- /dev/null +++ b/configs/dataset/tiled/knl_patos/1_224.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/processed_w_masks/knl_patos@_here_ + - _self_ + +mlflow_uris: + tiling: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/dataset/tiled/knl_patos/2_224.yaml b/configs/dataset/tiled/knl_patos/2_224.yaml new file mode 100644 index 00000000..eceb9270 --- /dev/null +++ b/configs/dataset/tiled/knl_patos/2_224.yaml @@ -0,0 +1,8 @@ +defaults: + - /dataset/processed_w_masks/knl_patos@_here_ + - _self_ + +mlflow_uris: + tiling: + test_preliminary: ??? + test_final: ??? \ No newline at end of file diff --git a/configs/experiment/ml/experiment_i_baseline_classification/test/fold_1.yaml b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_1.yaml new file mode 100644 index 00000000..2eab7354 --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_i_baseline_classification/train/fold_1 + - /ml/test + - /checkpoints/experiment_i_baseline_classification/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/test/fold_2.yaml b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_2.yaml new file mode 100644 index 00000000..49fb0ffa --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_i_baseline_classification/train/fold_2 + - /ml/test + - /checkpoints/experiment_i_baseline_classification/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/test/fold_3.yaml b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_3.yaml new file mode 100644 index 00000000..5bb8a52a --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_i_baseline_classification/train/fold_3 + - /ml/test + - /checkpoints/experiment_i_baseline_classification/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/test/fold_4.yaml b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_4.yaml new file mode 100644 index 00000000..82916c4a --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_i_baseline_classification/train/fold_4 + - /ml/test + - /checkpoints/experiment_i_baseline_classification/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/test/fold_5.yaml b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_5.yaml new file mode 100644 index 00000000..b218e3d0 --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_i_baseline_classification/train/fold_5 + - /ml/test + - /checkpoints/experiment_i_baseline_classification/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/train/fold_1.yaml b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_1.yaml new file mode 100644 index 00000000..3ab29e55 --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_1.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/train/fold_2.yaml b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_2.yaml new file mode 100644 index 00000000..157f86d9 --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_2.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/train/fold_3.yaml b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_3.yaml new file mode 100644 index 00000000..997bb42b --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_3.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/train/fold_4.yaml b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_4.yaml new file mode 100644 index 00000000..285e85f8 --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_4.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_i_baseline_classification/train/fold_5.yaml b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_5.yaml new file mode 100644 index 00000000..2b766dec --- /dev/null +++ b/configs/experiment/ml/experiment_i_baseline_classification/train/fold_5.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_1.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_1.yaml new file mode 100644 index 00000000..e847d65b --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_ii_ordered_regression/train/fold_1 + - /ml/test + - /checkpoints/experiment_ii_ordered_regression/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_2.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_2.yaml new file mode 100644 index 00000000..cc081ebd --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_ii_ordered_regression/train/fold_2 + - /ml/test + - /checkpoints/experiment_ii_ordered_regression/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_3.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_3.yaml new file mode 100644 index 00000000..3636567a --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_ii_ordered_regression/train/fold_3 + - /ml/test + - /checkpoints/experiment_ii_ordered_regression/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_4.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_4.yaml new file mode 100644 index 00000000..5337248f --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_ii_ordered_regression/train/fold_4 + - /ml/test + - /checkpoints/experiment_ii_ordered_regression/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_5.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_5.yaml new file mode 100644 index 00000000..b161c8ab --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_ii_ordered_regression/train/fold_5 + - /ml/test + - /checkpoints/experiment_ii_ordered_regression/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.tiling.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_1.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_1.yaml new file mode 100644 index 00000000..da80aeab --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_1.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/ordered_regression_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_2.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_2.yaml new file mode 100644 index 00000000..f8db0baf --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_2.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/ordered_regression_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_3.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_3.yaml new file mode 100644 index 00000000..70f37085 --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_3.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/ordered_regression_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_4.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_4.yaml new file mode 100644 index 00000000..f245424c --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_4.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/ordered_regression_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_5.yaml b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_5.yaml new file mode 100644 index 00000000..d1adc82c --- /dev/null +++ b/configs/experiment/ml/experiment_ii_ordered_regression/train/fold_5.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/ordered_regression_tiles + - /dataset/tiled/ikem/0_512@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all + val: + uris: ${ikem.mlflow_uris.tiling.train} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_1.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_1.yaml new file mode 100644 index 00000000..fcae733d --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iii_pathology_foundation_model/train/fold_1 + - /ml/test + - /checkpoints/experiment_iii_pathology_foundation_model/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_2.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_2.yaml new file mode 100644 index 00000000..8f2d4724 --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iii_pathology_foundation_model/train/fold_2 + - /ml/test + - /checkpoints/experiment_iii_pathology_foundation_model/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_3.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_3.yaml new file mode 100644 index 00000000..a05de431 --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iii_pathology_foundation_model/train/fold_3 + - /ml/test + - /checkpoints/experiment_iii_pathology_foundation_model/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_4.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_4.yaml new file mode 100644 index 00000000..4927f24b --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iii_pathology_foundation_model/train/fold_4 + - /ml/test + - /checkpoints/experiment_iii_pathology_foundation_model/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_5.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_5.yaml new file mode 100644 index 00000000..904b97e3 --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iii_pathology_foundation_model/train/fold_5 + - /ml/test + - /checkpoints/experiment_iii_pathology_foundation_model/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_1.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_1.yaml new file mode 100644 index 00000000..a2ceeabf --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_1.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_embeddings + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_2.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_2.yaml new file mode 100644 index 00000000..a87da1ca --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_2.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_embeddings + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_3.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_3.yaml new file mode 100644 index 00000000..01505142 --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_3.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_embeddings + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_4.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_4.yaml new file mode 100644 index 00000000..2cbd4d7b --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_4.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_embeddings + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all diff --git a/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_5.yaml b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_5.yaml new file mode 100644 index 00000000..609c1cd2 --- /dev/null +++ b/configs/experiment/ml/experiment_iii_pathology_foundation_model/train/fold_5.yaml @@ -0,0 +1,13 @@ +defaults: + - /experiment/ml/train/classification_embeddings + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: all diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_1.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_1.yaml new file mode 100644 index 00000000..016b7518 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_1 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_2.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_2.yaml new file mode 100644 index 00000000..7009ae6f --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_2 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_3.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_3.yaml new file mode 100644 index 00000000..d86f7b07 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_3 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_4.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_4.yaml new file mode 100644 index 00000000..a4479f05 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_4 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_5.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_5.yaml new file mode 100644 index 00000000..156b607b --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_5 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_high/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_1.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_1.yaml new file mode 100644 index 00000000..ed98687d --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_2.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_2.yaml new file mode 100644 index 00000000..3cbab67d --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_3.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_3.yaml new file mode 100644 index 00000000..760456ec --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_4.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_4.yaml new file mode 100644 index 00000000..a391e84c --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_5.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_5.yaml new file mode 100644 index 00000000..30e1eceb --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_high/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_1.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_1.yaml new file mode 100644 index 00000000..0af81430 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_1 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_2.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_2.yaml new file mode 100644 index 00000000..5f348c97 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_2 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_3.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_3.yaml new file mode 100644 index 00000000..25c9ba15 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_3 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_4.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_4.yaml new file mode 100644 index 00000000..a59bb3b2 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_4 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_5.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_5.yaml new file mode 100644 index 00000000..3390f33b --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_5 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/nancy_low/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_1.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_1.yaml new file mode 100644 index 00000000..76379b7a --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_2.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_2.yaml new file mode 100644 index 00000000..2104a63f --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_3.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_3.yaml new file mode 100644 index 00000000..25d11734 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_4.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_4.yaml new file mode 100644 index 00000000..ac00756c --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_5.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_5.yaml new file mode 100644 index 00000000..eb5bdaa7 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/nancy_low/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_1.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_1.yaml new file mode 100644 index 00000000..e611a14b --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_1 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_2.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_2.yaml new file mode 100644 index 00000000..4ecf6f07 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_2 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_3.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_3.yaml new file mode 100644 index 00000000..8462dade --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_3 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_4.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_4.yaml new file mode 100644 index 00000000..f1da2e93 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_4 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_5.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_5.yaml new file mode 100644 index 00000000..101d62c7 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_5 + - /ml/test + - /checkpoints/experiment_iv_mil_and_hierarchical_modeling/neutrophils/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_1.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_1.yaml new file mode 100644 index 00000000..1d53ca34 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_2.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_2.yaml new file mode 100644 index 00000000..cf16049a --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_3.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_3.yaml new file mode 100644 index 00000000..bb4a6b4a --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_4.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_4.yaml new file mode 100644 index 00000000..a5cedb87 --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_5.yaml b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_5.yaml new file mode 100644 index 00000000..58661ada --- /dev/null +++ b/configs/experiment/ml/experiment_iv_mil_and_hierarchical_modeling/neutrophils/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_1.yaml new file mode 100644 index 00000000..acee0218 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_2.yaml new file mode 100644 index 00000000..8f0a5934 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_3.yaml new file mode 100644 index 00000000..d2bc7827 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_4.yaml new file mode 100644 index 00000000..bdc8ce0d --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_5.yaml new file mode 100644 index 00000000..de30f7b4 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_1.yaml new file mode 100644 index 00000000..ed98687d --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_2.yaml new file mode 100644 index 00000000..3cbab67d --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_3.yaml new file mode 100644 index 00000000..760456ec --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_4.yaml new file mode 100644 index 00000000..a391e84c --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_5.yaml new file mode 100644 index 00000000..30e1eceb --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_prov-gigapath/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: prov-gigapath + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_1.yaml new file mode 100644 index 00000000..a8939b08 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_2.yaml new file mode 100644 index 00000000..0a49a298 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_3.yaml new file mode 100644 index 00000000..155a70e0 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_4.yaml new file mode 100644 index 00000000..d7babbb2 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_5.yaml new file mode 100644 index 00000000..61a389e9 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_uni2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_1.yaml new file mode 100644 index 00000000..b0e75b07 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: uni2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_2.yaml new file mode 100644 index 00000000..29825ed5 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: uni2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_3.yaml new file mode 100644 index 00000000..e64c0513 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: uni2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_4.yaml new file mode 100644 index 00000000..741e1a84 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: uni2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_5.yaml new file mode 100644 index 00000000..b3ea4260 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_uni2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: uni2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_1.yaml new file mode 100644 index 00000000..12c1dd24 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_2.yaml new file mode 100644 index 00000000..5ecaeb07 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_3.yaml new file mode 100644 index 00000000..c1cb4cc5 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_4.yaml new file mode 100644 index 00000000..af2c7338 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_5.yaml new file mode 100644 index 00000000..8e454438 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/1_virchow2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_1.yaml new file mode 100644 index 00000000..bfddec20 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_2.yaml new file mode 100644 index 00000000..96874281 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_3.yaml new file mode 100644 index 00000000..c23e3c98 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_4.yaml new file mode 100644 index 00000000..5249943f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_5.yaml new file mode 100644 index 00000000..687b8809 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/1_virchow2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_1.yaml new file mode 100644 index 00000000..6eb05f0f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_2.yaml new file mode 100644 index 00000000..98233ed5 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_3.yaml new file mode 100644 index 00000000..ff2900eb --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_4.yaml new file mode 100644 index 00000000..ea151f25 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_5.yaml new file mode 100644 index 00000000..3bdb6c40 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_high/2_virchow2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_1.yaml new file mode 100644 index 00000000..6afdd26b --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_2.yaml new file mode 100644 index 00000000..76fae366 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_3.yaml new file mode 100644 index 00000000..1f1ff3c1 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_4.yaml new file mode 100644 index 00000000..080d28cb --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_5.yaml new file mode 100644 index 00000000..dc7d16d8 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_high/2_virchow2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_1.yaml new file mode 100644 index 00000000..64c43919 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_2.yaml new file mode 100644 index 00000000..8e599d60 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_3.yaml new file mode 100644 index 00000000..40e110c1 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_4.yaml new file mode 100644 index 00000000..313b8969 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_5.yaml new file mode 100644 index 00000000..53f3fa15 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_1.yaml new file mode 100644 index 00000000..76379b7a --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_2.yaml new file mode 100644 index 00000000..2104a63f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_3.yaml new file mode 100644 index 00000000..25d11734 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_4.yaml new file mode 100644 index 00000000..ac00756c --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_5.yaml new file mode 100644 index 00000000..eb5bdaa7 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_prov-gigapath/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: prov-gigapath + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_1.yaml new file mode 100644 index 00000000..8802d60f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_2.yaml new file mode 100644 index 00000000..07318071 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_3.yaml new file mode 100644 index 00000000..537016ab --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_4.yaml new file mode 100644 index 00000000..996e32b1 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_5.yaml new file mode 100644 index 00000000..9055ea27 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_uni2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_1.yaml new file mode 100644 index 00000000..62a02942 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: uni2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_2.yaml new file mode 100644 index 00000000..1edbecf3 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: uni2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_3.yaml new file mode 100644 index 00000000..cd1286c7 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: uni2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_4.yaml new file mode 100644 index 00000000..2eebdf85 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: uni2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_5.yaml new file mode 100644 index 00000000..c09e7340 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_uni2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: uni2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_1.yaml new file mode 100644 index 00000000..178cf8cb --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_2.yaml new file mode 100644 index 00000000..9d24a791 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_3.yaml new file mode 100644 index 00000000..4c6d5919 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_4.yaml new file mode 100644 index 00000000..ed62dc9b --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_5.yaml new file mode 100644 index 00000000..e860bbca --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/1_virchow2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_1.yaml new file mode 100644 index 00000000..addbf5ad --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_2.yaml new file mode 100644 index 00000000..354f674a --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_3.yaml new file mode 100644 index 00000000..68da8479 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_4.yaml new file mode 100644 index 00000000..5437530f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_5.yaml new file mode 100644 index 00000000..d1b64025 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/1_virchow2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_1.yaml new file mode 100644 index 00000000..dd0bf5ae --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_2.yaml new file mode 100644 index 00000000..4c0bd9b8 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_3.yaml new file mode 100644 index 00000000..5cd4ee19 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_4.yaml new file mode 100644 index 00000000..5ce6d7db --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_5.yaml new file mode 100644 index 00000000..0e4da89c --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/nancy_low/2_virchow2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_1.yaml new file mode 100644 index 00000000..32d54fae --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_2.yaml new file mode 100644 index 00000000..19612282 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_3.yaml new file mode 100644 index 00000000..93194b0f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_4.yaml new file mode 100644 index 00000000..a3c725bd --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_5.yaml new file mode 100644 index 00000000..3a582b95 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/nancy_low/2_virchow2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_1.yaml new file mode 100644 index 00000000..0cc42185 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_2.yaml new file mode 100644 index 00000000..332842cc --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_3.yaml new file mode 100644 index 00000000..abd9c2d4 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_4.yaml new file mode 100644 index 00000000..39a794c9 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_5.yaml new file mode 100644 index 00000000..b8675745 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_1.yaml new file mode 100644 index 00000000..1d53ca34 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_2.yaml new file mode 100644 index 00000000..cf16049a --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_3.yaml new file mode 100644 index 00000000..bb4a6b4a --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_4.yaml new file mode 100644 index 00000000..a5cedb87 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_5.yaml new file mode 100644 index 00000000..58661ada --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_prov-gigapath/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_prov-gigapath@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: prov-gigapath + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_1.yaml new file mode 100644 index 00000000..3d1369b9 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_2.yaml new file mode 100644 index 00000000..b87b8d78 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_3.yaml new file mode 100644 index 00000000..25896de4 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_4.yaml new file mode 100644 index 00000000..09e1e795 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_5.yaml new file mode 100644 index 00000000..5153fed0 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_uni2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_1.yaml new file mode 100644 index 00000000..2fd9c134 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: uni2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_2.yaml new file mode 100644 index 00000000..8d627d9f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: uni2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_3.yaml new file mode 100644 index 00000000..942eb99c --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: uni2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_4.yaml new file mode 100644 index 00000000..ba22dba0 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: uni2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_5.yaml new file mode 100644 index 00000000..5829e156 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_uni2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_uni2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: uni2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_1.yaml new file mode 100644 index 00000000..162a3d5f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_2.yaml new file mode 100644 index 00000000..82cc5348 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_3.yaml new file mode 100644 index 00000000..66c95807 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_4.yaml new file mode 100644 index 00000000..a1614738 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_5.yaml new file mode 100644 index 00000000..80f2ec59 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/1_virchow2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_1.yaml new file mode 100644 index 00000000..610be2d4 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_2.yaml new file mode 100644 index 00000000..d292bdfe --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_3.yaml new file mode 100644 index 00000000..a6661f4e --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_4.yaml new file mode 100644 index 00000000..b4ad3ab8 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_5.yaml new file mode 100644 index 00000000..7ccdfb33 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/1_virchow2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/1_virchow2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_1.yaml new file mode 100644 index 00000000..b6fd710f --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_1.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_1 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_1 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_2.yaml new file mode 100644 index 00000000..2e852739 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_2.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_2 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_2 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_3.yaml new file mode 100644 index 00000000..40fb19f9 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_3.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_3 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_3 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_4.yaml new file mode 100644 index 00000000..fb6b4631 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_4.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_4 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_4 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_5.yaml new file mode 100644 index 00000000..ccbabacc --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/test/fold_5.yaml @@ -0,0 +1,10 @@ +defaults: + - /experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_5 + - /ml/test + - /checkpoints/experiment_v_more_foundation_models/neutrophils/2_virchow2/fold_5 + - _self_ + +data: + test: + uris: ${ikem.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_1.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_1.yaml new file mode 100644 index 00000000..8d16f29c --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_1.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 1 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_2.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_2.yaml new file mode 100644 index 00000000..c5d241b9 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_2.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 2 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_3.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_3.yaml new file mode 100644 index 00000000..5f80a3cc --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_3.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 3 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_4.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_4.yaml new file mode 100644 index 00000000..0309748a --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_4.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 4 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_5.yaml b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_5.yaml new file mode 100644 index 00000000..10c548a3 --- /dev/null +++ b/configs/experiment/ml/experiment_v_more_foundation_models/neutrophils/2_virchow2/train/fold_5.yaml @@ -0,0 +1,16 @@ +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - _self_ + +val_fold: 5 +data: + train: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: ${ikem.mlflow_uris.embeddings.train} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 diff --git a/configs/experiment/ml/experiment_vi_neutrophil_detection/run.yaml b/configs/experiment/ml/experiment_vi_neutrophil_detection/run.yaml new file mode 100644 index 00000000..a446016d --- /dev/null +++ b/configs/experiment/ml/experiment_vi_neutrophil_detection/run.yaml @@ -0,0 +1,4 @@ +defaults: + - /ml/neutrophils + - /dataset/neutrophils@dataset: ikem + - _self_ diff --git a/configs/experiment/ml/final/nancy_high/test.yaml b/configs/experiment/ml/final/nancy_high/test.yaml new file mode 100644 index 00000000..1b3f8b58 --- /dev/null +++ b/configs/experiment/ml/final/nancy_high/test.yaml @@ -0,0 +1,19 @@ +# @package _global_ + +defaults: + - /experiment/ml/final/nancy_high/train + - /ml/test + - /checkpoints/final/nancy_high + - _self_ + +data: + test: + uris: + - ${ikem.mlflow_uris.embeddings.test_final} + - ${ftn.mlflow_uris.embeddings.test_final} + - ${knl_patos.mlflow_uris.embeddings.test_final} + mode: nancy_high + +metadata: + run_name: '📏 Testing: MIL Bags - nancy_high - final' + diff --git a/configs/experiment/ml/final/nancy_high/train.yaml b/configs/experiment/ml/final/nancy_high/train.yaml new file mode 100644 index 00000000..97f60bec --- /dev/null +++ b/configs/experiment/ml/final/nancy_high/train.yaml @@ -0,0 +1,29 @@ +# @package _global_ + +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - /dataset/embeddings/ftn/2_virchow2@ftn + - /dataset/embeddings/knl_patos/2_virchow2@knl_patos + - _self_ + +val_fold: null +data: + train: + uris: + - ${ikem.mlflow_uris.embeddings.train} + - ${ftn.mlflow_uris.embeddings.train} + - ${knl_patos.mlflow_uris.embeddings.train} + mode: nancy_high + val: + uris: + - ${ikem.mlflow_uris.embeddings.test_preliminary} + - ${ftn.mlflow_uris.embeddings.test_preliminary} + - ${knl_patos.mlflow_uris.embeddings.test_preliminary} + mode: nancy_high +model: + foundation: virchow2 + num_classes: 4 + +metadata: + run_name: '🏋️‍♂️ Training: MIL Bags - nancy_high - final' diff --git a/configs/experiment/ml/final/nancy_low/test.yaml b/configs/experiment/ml/final/nancy_low/test.yaml new file mode 100644 index 00000000..1ead379a --- /dev/null +++ b/configs/experiment/ml/final/nancy_low/test.yaml @@ -0,0 +1,19 @@ +# @package _global_ + +defaults: + - /experiment/ml/final/nancy_low/train + - /ml/test + - /checkpoints/final/nancy_low + - _self_ + +data: + test: + uris: + - ${ikem.mlflow_uris.embeddings.test_final} + - ${ftn.mlflow_uris.embeddings.test_final} + - ${knl_patos.mlflow_uris.embeddings.test_final} + mode: nancy_low + +metadata: + run_name: '📏 Testing: MIL Bags - nancy_low - final' + diff --git a/configs/experiment/ml/final/nancy_low/train.yaml b/configs/experiment/ml/final/nancy_low/train.yaml new file mode 100644 index 00000000..d74bba36 --- /dev/null +++ b/configs/experiment/ml/final/nancy_low/train.yaml @@ -0,0 +1,29 @@ +# @package _global_ + +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - /dataset/embeddings/ftn/2_virchow2@ftn + - /dataset/embeddings/knl_patos/2_virchow2@knl_patos + - _self_ + +val_fold: null +data: + train: + uris: + - ${ikem.mlflow_uris.embeddings.train} + - ${ftn.mlflow_uris.embeddings.train} + - ${knl_patos.mlflow_uris.embeddings.train} + mode: nancy_low + val: + uris: + - ${ikem.mlflow_uris.embeddings.test_preliminary} + - ${ftn.mlflow_uris.embeddings.test_preliminary} + - ${knl_patos.mlflow_uris.embeddings.test_preliminary} + mode: nancy_low +model: + foundation: virchow2 + num_classes: 3 + +metadata: + run_name: '🏋️‍♂️ Training: MIL Bags - nancy_low - final' diff --git a/configs/experiment/ml/final/neutrophils/test.yaml b/configs/experiment/ml/final/neutrophils/test.yaml new file mode 100644 index 00000000..22e2b8b6 --- /dev/null +++ b/configs/experiment/ml/final/neutrophils/test.yaml @@ -0,0 +1,18 @@ +# @package _global_ + +defaults: + - /experiment/ml/final/neutrophils/train + - /ml/test + - /checkpoints/final/neutrophils + - _self_ + +data: + test: + uris: + - ${ikem.mlflow_uris.embeddings.test_final} + - ${ftn.mlflow_uris.embeddings.test_final} + - ${knl_patos.mlflow_uris.embeddings.test_final} + mode: neutrophils + +metadata: + run_name: '📏 Testing: MIL Bags - neutrophils - final' diff --git a/configs/experiment/ml/final/neutrophils/train.yaml b/configs/experiment/ml/final/neutrophils/train.yaml new file mode 100644 index 00000000..78ad709f --- /dev/null +++ b/configs/experiment/ml/final/neutrophils/train.yaml @@ -0,0 +1,29 @@ +# @package _global_ + +defaults: + - /experiment/ml/train/mil_bags + - /dataset/embeddings/ikem/2_virchow2@ikem + - /dataset/embeddings/ftn/2_virchow2@ftn + - /dataset/embeddings/knl_patos/2_virchow2@knl_patos + - _self_ + +val_fold: null +data: + train: + uris: + - ${ikem.mlflow_uris.embeddings.train} + - ${ftn.mlflow_uris.embeddings.train} + - ${knl_patos.mlflow_uris.embeddings.train} + mode: neutrophils + val: + uris: + - ${ikem.mlflow_uris.embeddings.test_preliminary} + - ${ftn.mlflow_uris.embeddings.test_preliminary} + - ${knl_patos.mlflow_uris.embeddings.test_preliminary} + mode: neutrophils +model: + foundation: virchow2 + num_classes: 1 + +metadata: + run_name: '🏋️‍♂️ Training: MIL Bags - neutrophils - final' diff --git a/configs/experiment/ml/ikem_validation/nancy_high.yaml b/configs/experiment/ml/ikem_validation/nancy_high.yaml new file mode 100644 index 00000000..aefab005 --- /dev/null +++ b/configs/experiment/ml/ikem_validation/nancy_high.yaml @@ -0,0 +1,22 @@ +# @package _global_ + +defaults: + - /experiment/ml/predict/mil_bags + - /checkpoints/final/nancy_high + - /dataset/embeddings/ikem_validation@ikem_validation + - _self_ + +data: + predict: + uris: + - ${ikem_validation.mlflow_uris.embeddings.predict} + mode: null + +model: + foundation: virchow2 + num_classes: 4 + +metadata: + run_name: '🎯 Predicting: MIL Bags - nancy_high - ikem validation' + description: 'Predict nancy_high MIL bag scores on the IKEM validation cohort' + diff --git a/configs/experiment/ml/ikem_validation/nancy_low.yaml b/configs/experiment/ml/ikem_validation/nancy_low.yaml new file mode 100644 index 00000000..1f11c164 --- /dev/null +++ b/configs/experiment/ml/ikem_validation/nancy_low.yaml @@ -0,0 +1,22 @@ +# @package _global_ + +defaults: + - /experiment/ml/predict/mil_bags + - /checkpoints/final/nancy_low + - /dataset/embeddings/ikem_validation@ikem_validation + - _self_ + +data: + predict: + uris: + - ${ikem_validation.mlflow_uris.embeddings.predict} + mode: null + +model: + foundation: virchow2 + num_classes: 3 + +metadata: + run_name: '🎯 Predicting: MIL Bags - nancy_low - ikem validation' + description: 'Predict nancy_low MIL bag scores on the IKEM validation cohort' + diff --git a/configs/experiment/ml/ikem_validation/neutrophils.yaml b/configs/experiment/ml/ikem_validation/neutrophils.yaml new file mode 100644 index 00000000..032b7ab5 --- /dev/null +++ b/configs/experiment/ml/ikem_validation/neutrophils.yaml @@ -0,0 +1,22 @@ +# @package _global_ + +defaults: + - /experiment/ml/predict/mil_bags + - /checkpoints/final/neutrophils + - /dataset/embeddings/ikem_validation@ikem_validation + - _self_ + +data: + predict: + uris: + - ${ikem_validation.mlflow_uris.embeddings.predict} + mode: null + +model: + foundation: virchow2 + num_classes: 1 + +metadata: + run_name: '🎯 Predicting: MIL Bags - neutrophils - ikem validation' + description: 'Predict neutrophil MIL bag scores on the IKEM validation cohort' + diff --git a/configs/experiment/ml/predict/mil_bags.yaml b/configs/experiment/ml/predict/mil_bags.yaml new file mode 100644 index 00000000..8278b661 --- /dev/null +++ b/configs/experiment/ml/predict/mil_bags.yaml @@ -0,0 +1,10 @@ +# @package _global_ + +defaults: + - /ml/predict + - /ml/model@model: mil + - /ml/data@data: bags + - _self_ + +metadata: + run_name: '🎯 Predicting: MIL Bags - ${data.test.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/test/classification_embeddings.yaml b/configs/experiment/ml/test/classification_embeddings.yaml new file mode 100644 index 00000000..43e62e41 --- /dev/null +++ b/configs/experiment/ml/test/classification_embeddings.yaml @@ -0,0 +1,15 @@ +# @package _global_ + +defaults: + - /ml/test + - /ml/model@model: classification + - /ml/data@data: embeddings + - /ml/backbone@model.backbone: identity + - _self_ + +model: + decode_head: + _target_: ml.modeling.LinearProbe + +metadata: + run_name: '📏 Testing: Classification Embeddings - ${data.test.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/test/classification_tiles.yaml b/configs/experiment/ml/test/classification_tiles.yaml new file mode 100644 index 00000000..6ca786e4 --- /dev/null +++ b/configs/experiment/ml/test/classification_tiles.yaml @@ -0,0 +1,15 @@ +# @package _global_ + +defaults: + - /ml/test + - /ml/model@model: classification + - /ml/data@data: tiles + - /ml/backbone@model.backbone: vgg16 + - _self_ + +model: + decode_head: + _target_: ml.modeling.ClassificationHead + +metadata: + run_name: '📏 Testing: Classification Tiles - ${data.test.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/test/mil_bags.yaml b/configs/experiment/ml/test/mil_bags.yaml new file mode 100644 index 00000000..d8414fd6 --- /dev/null +++ b/configs/experiment/ml/test/mil_bags.yaml @@ -0,0 +1,10 @@ +# @package _global_ + +defaults: + - /ml/test + - /ml/model@model: mil + - /ml/data@data: bags + - _self_ + +metadata: + run_name: '📏 Testing: MIL Bags - ${data.test.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/test/ordered_regression_tiles.yaml b/configs/experiment/ml/test/ordered_regression_tiles.yaml new file mode 100644 index 00000000..e66379f2 --- /dev/null +++ b/configs/experiment/ml/test/ordered_regression_tiles.yaml @@ -0,0 +1,11 @@ +# @package _global_ + +defaults: + - /ml/test + - /ml/model@model: ordered_regression + - /ml/data@data: tiles + - /ml/backbone@model.backbone: vgg16 + - _self_ + +metadata: + run_name: '📏 Testing: Ordered Regression Tiles - ${data.test.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/train/classification_embeddings.yaml b/configs/experiment/ml/train/classification_embeddings.yaml new file mode 100644 index 00000000..84bf924e --- /dev/null +++ b/configs/experiment/ml/train/classification_embeddings.yaml @@ -0,0 +1,15 @@ +# @package _global_ + +defaults: + - /ml/train + - /ml/model@model: classification + - /ml/data@data: embeddings + - /ml/backbone@model.backbone: identity + - _self_ + +model: + decode_head: + _target_: ml.modeling.LinearProbe + +metadata: + run_name: '🏋️‍♂️ Training: Classification Embeddings - ${data.train.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/train/classification_tiles.yaml b/configs/experiment/ml/train/classification_tiles.yaml new file mode 100644 index 00000000..6ee7f624 --- /dev/null +++ b/configs/experiment/ml/train/classification_tiles.yaml @@ -0,0 +1,15 @@ +# @package _global_ + +defaults: + - /ml/train + - /ml/model@model: classification + - /ml/data@data: tiles + - /ml/backbone@model.backbone: vgg16 + - _self_ + +model: + decode_head: + _target_: ml.modeling.ClassificationHead + +metadata: + run_name: '🏋️‍♂️ Training: Classification Tiles - ${data.train.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/train/mil_bags.yaml b/configs/experiment/ml/train/mil_bags.yaml new file mode 100644 index 00000000..e01d0519 --- /dev/null +++ b/configs/experiment/ml/train/mil_bags.yaml @@ -0,0 +1,10 @@ +# @package _global_ + +defaults: + - /ml/train + - /ml/model@model: mil + - /ml/data@data: bags + - _self_ + +metadata: + run_name: '🏋️‍♂️ Training: MIL Bags - ${data.train.mode} - fold ${val_fold}' diff --git a/configs/experiment/ml/train/ordered_regression_tiles.yaml b/configs/experiment/ml/train/ordered_regression_tiles.yaml new file mode 100644 index 00000000..d7ec12f0 --- /dev/null +++ b/configs/experiment/ml/train/ordered_regression_tiles.yaml @@ -0,0 +1,11 @@ +# @package _global_ + +defaults: + - /ml/train + - /ml/model@model: ordered_regression + - /ml/data@data: tiles + - /ml/backbone@model.backbone: vgg16 + - _self_ + +metadata: + run_name: '🏋️‍♂️ Training: Ordered Regression Tiles - ${data.train.mode} - fold ${val_fold}' diff --git a/configs/experiment/postprocessing/experiment_vii_ensembling/fold_1.yaml b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_1.yaml new file mode 100644 index 00000000..ebb28ded --- /dev/null +++ b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_1.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_1@predictions + - _self_ diff --git a/configs/experiment/postprocessing/experiment_vii_ensembling/fold_2.yaml b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_2.yaml new file mode 100644 index 00000000..4f3f2605 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_2.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_2@predictions + - _self_ diff --git a/configs/experiment/postprocessing/experiment_vii_ensembling/fold_3.yaml b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_3.yaml new file mode 100644 index 00000000..861f8485 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_3.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_3@predictions + - _self_ diff --git a/configs/experiment/postprocessing/experiment_vii_ensembling/fold_4.yaml b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_4.yaml new file mode 100644 index 00000000..d75e1a7a --- /dev/null +++ b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_4.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_4@predictions + - _self_ diff --git a/configs/experiment/postprocessing/experiment_vii_ensembling/fold_5.yaml b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_5.yaml new file mode 100644 index 00000000..6b066c89 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_vii_ensembling/fold_5.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_5@predictions + - _self_ diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_1.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_1.yaml new file mode 100644 index 00000000..bba8cd5d --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_1.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_1@predictions + - _self_ + +confidence: entropy diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_2.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_2.yaml new file mode 100644 index 00000000..b2713d41 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_2.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_2@predictions + - _self_ + +confidence: entropy diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_3.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_3.yaml new file mode 100644 index 00000000..333f2ad8 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_3.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_3@predictions + - _self_ + +confidence: entropy diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_4.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_4.yaml new file mode 100644 index 00000000..94bd4c5d --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_4.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_4@predictions + - _self_ + +confidence: entropy diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_5.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_5.yaml new file mode 100644 index 00000000..1bdaffd9 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/entropy/fold_5.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_5@predictions + - _self_ + +confidence: entropy diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_1.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_1.yaml new file mode 100644 index 00000000..439642e7 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_1.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_1@predictions + - _self_ + +confidence: herfindahl diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_2.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_2.yaml new file mode 100644 index 00000000..5fa57a8c --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_2.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_2@predictions + - _self_ + +confidence: herfindahl diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_3.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_3.yaml new file mode 100644 index 00000000..fd3111e5 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_3.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_3@predictions + - _self_ + +confidence: herfindahl diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_4.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_4.yaml new file mode 100644 index 00000000..02d6f770 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_4.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_4@predictions + - _self_ + +confidence: herfindahl diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_5.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_5.yaml new file mode 100644 index 00000000..c9ca4e6f --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/herfindahl/fold_5.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_5@predictions + - _self_ + +confidence: herfindahl diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_1.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_1.yaml new file mode 100644 index 00000000..012765e3 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_1.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_1@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_2.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_2.yaml new file mode 100644 index 00000000..613f8594 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_2.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_2@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_3.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_3.yaml new file mode 100644 index 00000000..d7d2ec96 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_3.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_3@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_4.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_4.yaml new file mode 100644 index 00000000..cd94cbae --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_4.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_4@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_5.yaml b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_5.yaml new file mode 100644 index 00000000..b69ad598 --- /dev/null +++ b/configs/experiment/postprocessing/experiment_viii_markov_chain_model_aggregation/std/fold_5.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/fold_5@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/final_ensembling/ftn.yaml b/configs/experiment/postprocessing/final_ensembling/ftn.yaml new file mode 100644 index 00000000..611cf7aa --- /dev/null +++ b/configs/experiment/postprocessing/final_ensembling/ftn.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ftn@dataset + - /predictions/ftn/final@predictions + - _self_ diff --git a/configs/experiment/postprocessing/final_ensembling/ikem.yaml b/configs/experiment/postprocessing/final_ensembling/ikem.yaml new file mode 100644 index 00000000..83e24537 --- /dev/null +++ b/configs/experiment/postprocessing/final_ensembling/ikem.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/final@predictions + - _self_ diff --git a/configs/experiment/postprocessing/final_ensembling/knl_patos.yaml b/configs/experiment/postprocessing/final_ensembling/knl_patos.yaml new file mode 100644 index 00000000..49daa063 --- /dev/null +++ b/configs/experiment/postprocessing/final_ensembling/knl_patos.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/knl_patos@dataset + - /predictions/knl_patos/final@predictions + - _self_ diff --git a/configs/experiment/postprocessing/final_markov_chain_confidence/ftn.yaml b/configs/experiment/postprocessing/final_markov_chain_confidence/ftn.yaml new file mode 100644 index 00000000..2da5b203 --- /dev/null +++ b/configs/experiment/postprocessing/final_markov_chain_confidence/ftn.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ftn@dataset + - /predictions/ftn/final@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/final_markov_chain_confidence/ikem.yaml b/configs/experiment/postprocessing/final_markov_chain_confidence/ikem.yaml new file mode 100644 index 00000000..f5cf823b --- /dev/null +++ b/configs/experiment/postprocessing/final_markov_chain_confidence/ikem.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem@dataset + - /predictions/ikem/final@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/final_markov_chain_confidence/knl_patos.yaml b/configs/experiment/postprocessing/final_markov_chain_confidence/knl_patos.yaml new file mode 100644 index 00000000..b5b0ac84 --- /dev/null +++ b/configs/experiment/postprocessing/final_markov_chain_confidence/knl_patos.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/knl_patos@dataset + - /predictions/knl_patos/final@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/postprocessing/predict_ensembling/ikem_validation.yaml b/configs/experiment/postprocessing/predict_ensembling/ikem_validation.yaml new file mode 100644 index 00000000..6ba8ad74 --- /dev/null +++ b/configs/experiment/postprocessing/predict_ensembling/ikem_validation.yaml @@ -0,0 +1,6 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem_validation@dataset + - /predictions/ikem_validation@predictions + - _self_ diff --git a/configs/experiment/postprocessing/predict_markov_chain_confidence/ikem_validation.yaml b/configs/experiment/postprocessing/predict_markov_chain_confidence/ikem_validation.yaml new file mode 100644 index 00000000..b03f84fd --- /dev/null +++ b/configs/experiment/postprocessing/predict_markov_chain_confidence/ikem_validation.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - /dataset/processed/ikem_validation@dataset + - /predictions/ikem_validation@predictions + - _self_ + +confidence: std diff --git a/configs/experiment/preprocessing/embeddings/1_prov-gigapath/ftn.yaml b/configs/experiment/preprocessing/embeddings/1_prov-gigapath/ftn.yaml new file mode 100644 index 00000000..f7f80531 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_prov-gigapath/ftn.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ftn/1_224@_here_ + - _self_ + +model: prov-gigapath \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/1_prov-gigapath/ikem.yaml b/configs/experiment/preprocessing/embeddings/1_prov-gigapath/ikem.yaml new file mode 100644 index 00000000..dcd9d566 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_prov-gigapath/ikem.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ikem/1_224@_here_ + - _self_ + +model: prov-gigapath diff --git a/configs/experiment/preprocessing/embeddings/1_prov-gigapath/knl_patos.yaml b/configs/experiment/preprocessing/embeddings/1_prov-gigapath/knl_patos.yaml new file mode 100644 index 00000000..b81d5adf --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_prov-gigapath/knl_patos.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/knl_patos/1_224@_here_ + - _self_ + +model: prov-gigapath \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/1_uni2/ftn.yaml b/configs/experiment/preprocessing/embeddings/1_uni2/ftn.yaml new file mode 100644 index 00000000..1c05032a --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_uni2/ftn.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ftn/1_224@_here_ + - _self_ + +model: uni2 \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/1_uni2/ikem.yaml b/configs/experiment/preprocessing/embeddings/1_uni2/ikem.yaml new file mode 100644 index 00000000..03435b59 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_uni2/ikem.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ikem/1_224@_here_ + - _self_ + +model: uni2 diff --git a/configs/experiment/preprocessing/embeddings/1_uni2/knl_patos.yaml b/configs/experiment/preprocessing/embeddings/1_uni2/knl_patos.yaml new file mode 100644 index 00000000..cd5fa8a5 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_uni2/knl_patos.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/knl_patos/1_224@_here_ + - _self_ + +model: uni2 \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/1_virchow2/ftn.yaml b/configs/experiment/preprocessing/embeddings/1_virchow2/ftn.yaml new file mode 100644 index 00000000..9fcbd7e9 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_virchow2/ftn.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ftn/1_224@_here_ + - _self_ + +model: virchow2 \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/1_virchow2/ikem.yaml b/configs/experiment/preprocessing/embeddings/1_virchow2/ikem.yaml new file mode 100644 index 00000000..9ce441f1 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_virchow2/ikem.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ikem/1_224@_here_ + - _self_ + +model: virchow2 diff --git a/configs/experiment/preprocessing/embeddings/1_virchow2/knl_patos.yaml b/configs/experiment/preprocessing/embeddings/1_virchow2/knl_patos.yaml new file mode 100644 index 00000000..0fcc7bfe --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/1_virchow2/knl_patos.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/knl_patos/1_224@_here_ + - _self_ + +model: virchow2 \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/2_virchow2/ftn.yaml b/configs/experiment/preprocessing/embeddings/2_virchow2/ftn.yaml new file mode 100644 index 00000000..45f7a6bd --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/2_virchow2/ftn.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ftn/2_224@_here_ + - _self_ + +model: virchow2 \ No newline at end of file diff --git a/configs/experiment/preprocessing/embeddings/2_virchow2/ikem.yaml b/configs/experiment/preprocessing/embeddings/2_virchow2/ikem.yaml new file mode 100644 index 00000000..b8dea0f3 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/2_virchow2/ikem.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/ikem/2_224@_here_ + - _self_ + +model: virchow2 diff --git a/configs/experiment/preprocessing/embeddings/2_virchow2/knl_patos.yaml b/configs/experiment/preprocessing/embeddings/2_virchow2/knl_patos.yaml new file mode 100644 index 00000000..a489b2a6 --- /dev/null +++ b/configs/experiment/preprocessing/embeddings/2_virchow2/knl_patos.yaml @@ -0,0 +1,7 @@ +# @package _global_ + +defaults: + - /dataset/tiled/knl_patos/2_224@_here_ + - _self_ + +model: virchow2 \ No newline at end of file diff --git a/configs/experiment/preprocessing/tiling/0_320.yaml b/configs/experiment/preprocessing/tiling/0_320.yaml new file mode 100644 index 00000000..1aa21c16 --- /dev/null +++ b/configs/experiment/preprocessing/tiling/0_320.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +mpp: 0.17 # level 0 +tile_extent: 320 +stride: 160 \ No newline at end of file diff --git a/configs/experiment/preprocessing/tiling/0_512.yaml b/configs/experiment/preprocessing/tiling/0_512.yaml new file mode 100644 index 00000000..b1fbc047 --- /dev/null +++ b/configs/experiment/preprocessing/tiling/0_512.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +mpp: 0.17 # level 0 +tile_extent: 512 +stride: 256 \ No newline at end of file diff --git a/configs/experiment/preprocessing/tiling/1_224.yaml b/configs/experiment/preprocessing/tiling/1_224.yaml new file mode 100644 index 00000000..4c67413c --- /dev/null +++ b/configs/experiment/preprocessing/tiling/1_224.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +mpp: 0.51 # level 1 +tile_extent: 224 +stride: 112 \ No newline at end of file diff --git a/configs/experiment/preprocessing/tiling/2_224.yaml b/configs/experiment/preprocessing/tiling/2_224.yaml new file mode 100644 index 00000000..ca84f780 --- /dev/null +++ b/configs/experiment/preprocessing/tiling/2_224.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +mpp: 1.54 # level 2 +tile_extent: 224 +stride: 112 \ No newline at end of file diff --git a/configs/ml.yaml b/configs/ml.yaml new file mode 100644 index 00000000..9f7e2336 --- /dev/null +++ b/configs/ml.yaml @@ -0,0 +1,9 @@ +defaults: + - base + - _self_ + +seed: ${random_seed:} +checkpoint: null + +metadata: + user: AdamK diff --git a/configs/ml/backbone/identity.yaml b/configs/ml/backbone/identity.yaml new file mode 100644 index 00000000..d8bfafa3 --- /dev/null +++ b/configs/ml/backbone/identity.yaml @@ -0,0 +1 @@ +_target_: torch.nn.Identity diff --git a/configs/ml/backbone/vgg16.yaml b/configs/ml/backbone/vgg16.yaml new file mode 100644 index 00000000..55898012 --- /dev/null +++ b/configs/ml/backbone/vgg16.yaml @@ -0,0 +1,2 @@ +_target_: ml.modeling.backbone.vgg16 +weights: DEFAULT diff --git a/configs/ml/data/bags.yaml b/configs/ml/data/bags.yaml new file mode 100644 index 00000000..c1dbdf41 --- /dev/null +++ b/configs/ml/data/bags.yaml @@ -0,0 +1,36 @@ +_target_: ml.data.BagsDataModule +batch_size: 8 +num_workers: 4 +weighted_sampling: true +train: + _target_: ml.data.datasets.Bags + uris: ??? + mode: ??? + val_fold: ${val_fold} + is_val: false + thresholds: + blur: 0.25 + artifacts: 0.25 +val: + _target_: ml.data.datasets.Bags + uris: ??? + mode: ??? + val_fold: ${val_fold} + is_val: true + thresholds: + blur: 0.25 + artifacts: 0.25 +test: + _target_: ml.data.datasets.Bags + uris: ??? + mode: ??? + thresholds: + blur: 0.25 + artifacts: 0.25 +predict: + _target_: ml.data.datasets.BagsPredict + uris: ??? + mode: ??? + thresholds: + blur: 0.25 + artifacts: 0.25 diff --git a/configs/ml/data/embeddings.yaml b/configs/ml/data/embeddings.yaml new file mode 100644 index 00000000..71275b2a --- /dev/null +++ b/configs/ml/data/embeddings.yaml @@ -0,0 +1,29 @@ +_target_: ml.data.DataModule +batch_size: 32 +num_workers: 4 +weighted_sampling: true +train: + _target_: ml.data.datasets.Embeddings + uris: ??? + mode: ??? + val_fold: ${val_fold} + is_val: false + thresholds: + blur: 0.25 + artifacts: 0.25 +val: + _target_: ml.data.datasets.Embeddings + uris: ??? + mode: ??? + val_fold: ${val_fold} + is_val: true + thresholds: + blur: 0.25 + artifacts: 0.25 +test: + _target_: ml.data.datasets.Embeddings + uris: ??? + mode: ??? + thresholds: + blur: 0.25 + artifacts: 0.25 diff --git a/configs/ml/data/tiles.yaml b/configs/ml/data/tiles.yaml new file mode 100644 index 00000000..24a48b8a --- /dev/null +++ b/configs/ml/data/tiles.yaml @@ -0,0 +1,29 @@ +_target_: ml.data.DataModule +batch_size: 32 +num_workers: 4 +weighted_sampling: true +train: + _target_: ml.data.datasets.Tiles + uris: ??? + mode: ??? + val_fold: ${val_fold} + is_val: false + thresholds: + blur: 0.25 + artifacts: 0.25 +val: + _target_: ml.data.datasets.Tiles + uris: ??? + mode: ??? + val_fold: ${val_fold} + is_val: true + thresholds: + blur: 0.25 + artifacts: 0.25 +test: + _target_: ml.data.datasets.Tiles + uris: ??? + mode: ??? + thresholds: + blur: 0.25 + artifacts: 0.25 diff --git a/configs/ml/model/classification.yaml b/configs/ml/model/classification.yaml new file mode 100644 index 00000000..ac1b9035 --- /dev/null +++ b/configs/ml/model/classification.yaml @@ -0,0 +1,4 @@ +_target_: ml.classification.Classification +backbone: ??? +decode_head: ??? +lr: 1e-4 diff --git a/configs/ml/model/mil.yaml b/configs/ml/model/mil.yaml new file mode 100644 index 00000000..fdfbcc6b --- /dev/null +++ b/configs/ml/model/mil.yaml @@ -0,0 +1,4 @@ +_target_: ml.mil.MIL +foundation: ??? +num_classes: ??? +lr: 1e-5 diff --git a/configs/ml/model/ordered_regression.yaml b/configs/ml/model/ordered_regression.yaml new file mode 100644 index 00000000..e66c22fd --- /dev/null +++ b/configs/ml/model/ordered_regression.yaml @@ -0,0 +1,3 @@ +_target_: ml.ordered_regression.OrderedRegression +backbone: ??? +lr: 1e-4 diff --git a/configs/ml/neutrophils.yaml b/configs/ml/neutrophils.yaml new file mode 100644 index 00000000..6711ca92 --- /dev/null +++ b/configs/ml/neutrophils.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +metadata: + run_name: "🏋️‍♂️📏🎯 Neutrophils" + description: "Train and evaluate neutrophil detection model" \ No newline at end of file diff --git a/configs/ml/predict.yaml b/configs/ml/predict.yaml new file mode 100644 index 00000000..a20a4868 --- /dev/null +++ b/configs/ml/predict.yaml @@ -0,0 +1,12 @@ +# @package _global_ + +defaults: + - _self_ + +mode: predict +checkpoint: ??? +val_fold: null + +trainer: + callbacks: + - _target_: ml.callbacks.MLFlowPredictionCallback diff --git a/configs/ml/test.yaml b/configs/ml/test.yaml new file mode 100644 index 00000000..66a65552 --- /dev/null +++ b/configs/ml/test.yaml @@ -0,0 +1,12 @@ +# @package _global_ + +defaults: + - _self_ + +mode: test +checkpoint: ??? +val_fold: null + +trainer: + callbacks: + - _target_: ml.callbacks.MLFlowPredictionCallback diff --git a/configs/ml/train.yaml b/configs/ml/train.yaml new file mode 100644 index 00000000..7cd8f4af --- /dev/null +++ b/configs/ml/train.yaml @@ -0,0 +1,21 @@ +# @package _global_ + +defaults: + - _self_ + +mode: fit +val_fold: ??? + +trainer: + enable_checkpointing: true + max_epochs: 300 + log_every_n_steps: 5 + callbacks: + - _target_: lightning.pytorch.callbacks.ModelCheckpoint + save_top_k: 1 + monitor: validation/kappa + mode: max + - _target_: lightning.pytorch.callbacks.EarlyStopping + monitor: validation/kappa + mode: max + patience: 20 diff --git a/configs/postprocessing.yaml b/configs/postprocessing.yaml new file mode 100644 index 00000000..5c12b052 --- /dev/null +++ b/configs/postprocessing.yaml @@ -0,0 +1,8 @@ +# @package _global_ + +defaults: + - base + - _self_ + +dataset: ??? +predictions: ??? diff --git a/configs/postprocessing/ensembling.yaml b/configs/postprocessing/ensembling.yaml new file mode 100644 index 00000000..838a596c --- /dev/null +++ b/configs/postprocessing/ensembling.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +metadata: + run_name: "🔀 Ensembling: ${dataset.institution}" + description: Slide-level ensembling for ${dataset.institution} diff --git a/configs/postprocessing/ensembling_predict.yaml b/configs/postprocessing/ensembling_predict.yaml new file mode 100644 index 00000000..99d75eb8 --- /dev/null +++ b/configs/postprocessing/ensembling_predict.yaml @@ -0,0 +1,5 @@ +# @package _global_ + +metadata: + run_name: "🔀 Ensembling (predict): ${dataset.institution}" + description: Slide-level ensembling predictions for ${dataset.institution} (no ground truth) diff --git a/configs/postprocessing/markov_chain_confidence.yaml b/configs/postprocessing/markov_chain_confidence.yaml new file mode 100644 index 00000000..76dd59ca --- /dev/null +++ b/configs/postprocessing/markov_chain_confidence.yaml @@ -0,0 +1,9 @@ +# @package _global_ + +confidence: ??? # options: entropy, herfindahl, std + +metadata: + run_name: "🔗 Markov Chain Confidence (${confidence}): ${dataset.institution}" + description: Markov chain absorption confidence scores for ${dataset.institution} + hyperparams: + confidence: ${confidence} diff --git a/configs/postprocessing/markov_chain_confidence_predict.yaml b/configs/postprocessing/markov_chain_confidence_predict.yaml new file mode 100644 index 00000000..51e43488 --- /dev/null +++ b/configs/postprocessing/markov_chain_confidence_predict.yaml @@ -0,0 +1,9 @@ +# @package _global_ + +confidence: ??? # options: entropy, herfindahl, std + +metadata: + run_name: "🔗 Markov Chain Confidence (${confidence}, predict): ${dataset.institution}" + description: Markov chain absorption confidence scores for ${dataset.institution} (no ground truth) + hyperparams: + confidence: ${confidence} diff --git a/configs/predictions/ftn/final.yaml b/configs/predictions/ftn/final.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ftn/final.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem/final.yaml b/configs/predictions/ikem/final.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ikem/final.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem/fold_1.yaml b/configs/predictions/ikem/fold_1.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ikem/fold_1.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem/fold_2.yaml b/configs/predictions/ikem/fold_2.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ikem/fold_2.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem/fold_3.yaml b/configs/predictions/ikem/fold_3.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ikem/fold_3.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem/fold_4.yaml b/configs/predictions/ikem/fold_4.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ikem/fold_4.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem/fold_5.yaml b/configs/predictions/ikem/fold_5.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/ikem/fold_5.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/predictions/ikem_validation.yaml b/configs/predictions/ikem_validation.yaml new file mode 100644 index 00000000..615cbe53 --- /dev/null +++ b/configs/predictions/ikem_validation.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: mlflow-artifacts:/86/83d0ea0be81941978007d61ab541f5e0/artifacts/predictions.json + nancy_low: mlflow-artifacts:/86/acb168543a5d4816b27efb7846c2df6b/artifacts/predictions.json + neutrophils: mlflow-artifacts:/86/9045d4feda9a4a3a9bca71ce6ba7a0f8/artifacts/predictions.json \ No newline at end of file diff --git a/configs/predictions/knl_patos/final.yaml b/configs/predictions/knl_patos/final.yaml new file mode 100644 index 00000000..a9b9fd7f --- /dev/null +++ b/configs/predictions/knl_patos/final.yaml @@ -0,0 +1,4 @@ +mlflow_uris: + nancy_high: ??? + nancy_low: ??? + neutrophils: ??? \ No newline at end of file diff --git a/configs/preprocessing.yaml b/configs/preprocessing.yaml index 08a03723..33a4ddf4 100644 --- a/configs/preprocessing.yaml +++ b/configs/preprocessing.yaml @@ -5,5 +5,3 @@ defaults: - _self_ dataset: ??? - -project_dir: /mnt/projects/inflammatory_bowel_disease/ulcerative_colitis diff --git a/configs/preprocessing/embeddings.yaml b/configs/preprocessing/embeddings.yaml index b9c46c31..08b9b204 100644 --- a/configs/preprocessing/embeddings.yaml +++ b/configs/preprocessing/embeddings.yaml @@ -1,6 +1,6 @@ # @package _global_ -model: virchow2 +model: ??? output_dir: ${project_dir}/embeddings/${dataset.institution} concurrency: 512 block_size: 128 diff --git a/configs/preprocessing/neutrophils.yaml b/configs/preprocessing/neutrophils.yaml new file mode 100644 index 00000000..e98cfc18 --- /dev/null +++ b/configs/preprocessing/neutrophils.yaml @@ -0,0 +1,16 @@ +# @package _global_ + +output_dir: ${project_dir}/neutrophils/${dataset.institution} + +model: + weights_url: https://github.com/junfrankohara/neutrophils_detection/releases/download/model/detection_model.pt + confidence: 0.1 + +dataloader: + batch_size: 256 + num_workers: 8 + persistent_workers: True + +metadata: + run_name: '📂 Neutrophils: ${dataset.institution}' + description: Neutrophils detection preprocessing for ${dataset.institution} institution \ No newline at end of file diff --git a/configs/preprocessing/quality_control.yaml b/configs/preprocessing/quality_control.yaml index ffd08cea..493b9a1c 100644 --- a/configs/preprocessing/quality_control.yaml +++ b/configs/preprocessing/quality_control.yaml @@ -2,6 +2,12 @@ output_dir: ${project_dir}/quality_control/${dataset.institution} +# Optional MLflow artifact URI to a previous run's qc_errors.log, e.g. +# mlflow-artifacts:/86/433c941b3706450aa499f9bee4b17701/artifacts/qc_errors.log +# When set, the dataset is filtered down to only the slides that failed QC +# in that run. Leave as null to use the whole dataset. +qc_errors_uri: null + request_timeout: 18000 max_concurrent: 5 diff --git a/configs/preprocessing/tiling.yaml b/configs/preprocessing/tiling.yaml index ab4b48fd..f2883fbe 100644 --- a/configs/preprocessing/tiling.yaml +++ b/configs/preprocessing/tiling.yaml @@ -1,8 +1,8 @@ # @package _global_ -mpp: 1.55 # level 2 -tile_extent: 224 -stride: 112 +mpp: ??? +tile_extent: ??? +stride: ??? tissue_threshold: 0.5 metadata: diff --git a/project_name/__init__.py b/ml/__init__.py similarity index 100% rename from project_name/__init__.py rename to ml/__init__.py diff --git a/project_name/__main__.py b/ml/__main__.py similarity index 73% rename from project_name/__main__.py rename to ml/__main__.py index 035ecc30..5456e65d 100644 --- a/project_name/__main__.py +++ b/ml/__main__.py @@ -6,16 +6,13 @@ from omegaconf import DictConfig, OmegaConf from rationai.mlkit import Trainer, autolog -from project_name.data import DataModule -from project_name.project_name_model import ProjectNameModel - OmegaConf.register_new_resolver( "random_seed", lambda: randint(0, 2**31), use_cache=True ) -@hydra.main(config_path="../configs", config_name="default", version_base=None) +@hydra.main(config_path="../configs", config_name="ml", version_base=None) @autolog def main(config: DictConfig, logger: Logger | None) -> None: seed_everything(config.seed, workers=True) @@ -23,9 +20,8 @@ def main(config: DictConfig, logger: Logger | None) -> None: data = hydra.utils.instantiate( config.data, _recursive_=False, # to avoid instantiating all the datasets - _target_=DataModule, ) - model = hydra.utils.instantiate(config.model, _target_=ProjectNameModel) + model = hydra.utils.instantiate(config.model) trainer = hydra.utils.instantiate(config.trainer, _target_=Trainer, logger=logger) getattr(trainer, config.mode)(model, datamodule=data, ckpt_path=config.checkpoint) diff --git a/ml/base.py b/ml/base.py new file mode 100644 index 00000000..044b97cc --- /dev/null +++ b/ml/base.py @@ -0,0 +1,136 @@ +from abc import abstractmethod +from collections.abc import Mapping +from typing import Any, cast + +from lightning import LightningModule +from rationai.mlkit.metrics import ( + AggregatedMetricCollection, + MaxAggregator, + MeanAggregator, +) +from torch import Tensor +from torch.nn import Module, ModuleDict, Softmax +from torch.optim.adam import Adam +from torch.optim.optimizer import Optimizer +from torchmetrics import Metric, MetricCollection +from torchmetrics.classification import ( + MulticlassAccuracy, + MulticlassAUROC, + MulticlassCohenKappa, + MulticlassPrecision, + MulticlassRecall, + MulticlassSpecificity, +) + +from ml.typing import MetadataTilesBatch, Output, TilesInput, TilesPredictInput + + +class BaseModule(LightningModule): + criterion: Module + + def __init__(self, backbone: Module, lr: float) -> None: + super().__init__() + self.backbone = backbone + self.lr = lr + self.activation: Module = Softmax(dim=-1) + + N_CLASSES = 5 + + def _build_metrics(self) -> None: + metrics = { + "AUC": MulticlassAUROC(num_classes=self.N_CLASSES, average=None), + "accuracy": MulticlassAccuracy(num_classes=self.N_CLASSES), + "precision": MulticlassPrecision(num_classes=self.N_CLASSES, average=None), + "recall": MulticlassRecall(num_classes=self.N_CLASSES, average=None), + "specificity": MulticlassSpecificity( + num_classes=self.N_CLASSES, average=None + ), + "kappa": MulticlassCohenKappa(num_classes=self.N_CLASSES), + } + val_metrics: dict[str, MetricCollection] = { + "tiles_all": MetricCollection( + cast("dict[str, Metric | MetricCollection]", metrics), + prefix="validation/tiles/", + ), + "slide_max": AggregatedMetricCollection( + metrics, + aggregator=MaxAggregator(), + prefix="validation/scenes/max/", + ), + "slide_mean": AggregatedMetricCollection( + metrics, + aggregator=MeanAggregator(), + prefix="validation/slides/mean/", + ), + } + test_metrics = { + name: metric.clone( + prefix=cast("str", metric.prefix).replace("validation", "test") + ) + for name, metric in val_metrics.items() + } + self.val_metrics = cast("dict[str, MetricCollection]", ModuleDict(val_metrics)) + self.test_metrics = cast( + "dict[str, MetricCollection]", ModuleDict(test_metrics) + ) + + @abstractmethod + def forward(self, x: Tensor) -> Output: ... + + def training_step(self, batch: TilesInput) -> Tensor: + inputs, targets, _ = batch + outputs = self(inputs) + loss = self.criterion(outputs, targets) + self.log("train/loss", loss, on_step=True, prog_bar=True) + return loss + + def validation_step(self, batch: TilesInput) -> None: + inputs, targets, metadata = batch + outputs = self(inputs) + loss = self.criterion(outputs, targets) + self.log("validation/loss", loss, on_epoch=True, prog_bar=True) + targets = targets.reshape(-1) + probabilities = self.activation(outputs) + self.update_metrics(self.val_metrics, probabilities, targets, metadata) + self.log_metrics(self.val_metrics) + + def test_step(self, batch: TilesInput) -> Output: + inputs, targets, metadata = batch + outputs = self(inputs) + targets = targets.reshape(-1) + probabilities = self.activation(outputs) + self.update_metrics(self.test_metrics, probabilities, targets, metadata) + self.log_metrics(self.test_metrics) + return probabilities + + def predict_step(self, batch: TilesPredictInput) -> Output: + return self(batch[0]) + + def configure_optimizers(self) -> Optimizer: + return Adam(self.parameters(), lr=self.lr) + + def log_dict(self, dictionary: MetricCollection, *args: Any, **kwargs: Any) -> None: # type: ignore[override] + for name, metric in dictionary.items(): + result = cast("Tensor", metric.compute()) + if result.shape: + for i, value in enumerate(result): + self.log(f"{name}/{i}", value, *args, **kwargs) + else: + self.log(name, result, *args, **kwargs) + + def update_metrics( + self, + metrics: Mapping[str, MetricCollection], + outputs: Tensor, + targets: Tensor, + metadata: MetadataTilesBatch, + ) -> None: + for name, metric in metrics.items(): + if "slide" in name: + metric.update(outputs, targets, key=metadata["slide_name"]) + else: + metric.update(outputs, targets) + + def log_metrics(self, metrics: dict[str, MetricCollection]) -> None: + for metric in metrics.values(): + self.log_dict(metric, on_epoch=True) diff --git a/ml/callbacks/__init__.py b/ml/callbacks/__init__.py new file mode 100644 index 00000000..81ad8769 --- /dev/null +++ b/ml/callbacks/__init__.py @@ -0,0 +1,4 @@ +from ml.callbacks.mlflow_prediction_callback import MLFlowPredictionCallback + + +__all__ = ["MLFlowPredictionCallback"] diff --git a/ml/callbacks/mlflow_prediction_callback.py b/ml/callbacks/mlflow_prediction_callback.py new file mode 100644 index 00000000..a47e70c2 --- /dev/null +++ b/ml/callbacks/mlflow_prediction_callback.py @@ -0,0 +1,53 @@ +from typing import cast + +from lightning import Callback, LightningModule, Trainer +from lightning.pytorch.utilities.types import STEP_OUTPUT +from rationai.mlkit.lightning.loggers.mlflow import MLFlowLogger + +from ml.typing import Input, MetadataBags, MetadataBatch, Output + + +def _slide_names(metadata: list[MetadataBags] | MetadataBatch) -> list[str]: + if isinstance(metadata, dict): + return metadata["slide_name"] + return [m["slide_name"] for m in metadata] + + +class MLFlowPredictionCallback(Callback): + def _on_batch_end( + self, + trainer: Trainer, + outputs: Output, + batch: Input, + ) -> None: + assert isinstance(trainer.logger, MLFlowLogger) + trainer.logger.log_table( + { + "slide": _slide_names(batch[-1]), + "prediction": outputs.tolist(), + }, + artifact_file="predictions.json", + ) + + def on_predict_batch_end( + self, + trainer: Trainer, + pl_module: LightningModule, + outputs: Output, + batch: Input, + batch_idx: int, + dataloader_idx: int = 0, + ) -> None: + self._on_batch_end(trainer, outputs, batch) + assert isinstance(trainer.logger, MLFlowLogger) + + def on_test_batch_end( + self, + trainer: Trainer, + pl_module: LightningModule, + outputs: STEP_OUTPUT, + batch: Input, + batch_idx: int, + dataloader_idx: int = 0, + ) -> None: + self._on_batch_end(trainer, cast("Output", outputs), batch) diff --git a/ml/classification.py b/ml/classification.py new file mode 100644 index 00000000..bea47958 --- /dev/null +++ b/ml/classification.py @@ -0,0 +1,16 @@ +from torch import Tensor, nn +from torch.nn import Module + +from ml.base import BaseModule +from ml.typing import Output + + +class Classification(BaseModule): + def __init__(self, backbone: Module, decode_head: Module, lr: float = 1e-4) -> None: + super().__init__(backbone, lr) + self.decode_head = decode_head + self.criterion = nn.CrossEntropyLoss() + self._build_metrics() + + def forward(self, x: Tensor) -> Output: + return self.decode_head(self.backbone(x)) diff --git a/project_name/data/README.md b/ml/data/README.md similarity index 100% rename from project_name/data/README.md rename to ml/data/README.md diff --git a/ml/data/__init__.py b/ml/data/__init__.py new file mode 100644 index 00000000..46e5b068 --- /dev/null +++ b/ml/data/__init__.py @@ -0,0 +1,4 @@ +from ml.data.data_module import BagsDataModule, DataModule + + +__all__ = ["BagsDataModule", "DataModule"] diff --git a/ml/data/data_module.py b/ml/data/data_module.py new file mode 100644 index 00000000..4e47d1dd --- /dev/null +++ b/ml/data/data_module.py @@ -0,0 +1,118 @@ +from typing import Any + +import torch +from hydra.utils import instantiate +from lightning import LightningDataModule +from omegaconf import DictConfig +from torch.utils.data import DataLoader +from torch.utils.data.dataloader import _collate_fn_t + +from ml.data.samplers import AutoWeightedRandomSampler +from ml.typing import ( + BagsInput, + BagsPredictInput, + EmbeddingsInput, + EmbeddingsPredictInput, + Input, + PredictInput, + PredictSample, + Sample, + TilesInput, + TilesPredictInput, +) + + +class DataModule(LightningDataModule): + def __init__( + self, + batch_size: int, + num_workers: int = 0, + weighted_sampling: bool = True, + collate_fn: _collate_fn_t[Sample] | None = None, + collate_fn_predict: _collate_fn_t[PredictSample] | None = None, + **datasets: DictConfig, + ) -> None: + super().__init__() + self.batch_size = batch_size + self.num_workers = num_workers + self.weighted_sampling = weighted_sampling + self.collate_fn = collate_fn + self.collate_fn_predict = collate_fn_predict + self.datasets = datasets + + def setup(self, stage: str) -> None: + match stage: + case "fit": + self.train = instantiate(self.datasets["train"]) + self.val = instantiate(self.datasets["val"]) + case "validate": + self.val = instantiate(self.datasets["val"]) + case "test": + self.test = instantiate(self.datasets["test"]) + case "predict": + self.predict = instantiate(self.datasets["predict"]) + + def train_dataloader(self) -> DataLoader[TilesInput | EmbeddingsInput | BagsInput]: + sampler = ( + AutoWeightedRandomSampler(self.train) if self.weighted_sampling else None + ) + return DataLoader( + self.train, + batch_size=self.batch_size, + sampler=sampler, + shuffle=sampler is None, + drop_last=True, + num_workers=self.num_workers, + collate_fn=self.collate_fn, + persistent_workers=self.num_workers > 0, + ) + + def val_dataloader(self) -> DataLoader[TilesInput | EmbeddingsInput | BagsInput]: + return DataLoader( + self.val, + batch_size=self.batch_size, + num_workers=self.num_workers, + collate_fn=self.collate_fn, + persistent_workers=self.num_workers > 0, + ) + + def test_dataloader(self) -> DataLoader[TilesInput | EmbeddingsInput | BagsInput]: + return DataLoader( + self.test, + batch_size=self.batch_size, + num_workers=self.num_workers, + collate_fn=self.collate_fn, + ) + + def predict_dataloader( + self, + ) -> DataLoader[TilesPredictInput | EmbeddingsPredictInput | BagsPredictInput]: + return DataLoader( + self.predict, + batch_size=self.batch_size, + num_workers=self.num_workers, + collate_fn=self.collate_fn_predict, + ) + + +class BagsDataModule(DataModule): + def __init__(self, **kwargs: Any) -> None: + super().__init__( + collate_fn=collate_fn, + collate_fn_predict=collate_fn_predict, + **kwargs, + ) + + +def collate_fn( + batch: list[Sample], +) -> Input: + inputs, labels, metadatas = zip(*batch, strict=True) + return torch.stack(list(inputs)), torch.stack(list(labels)), list(metadatas) + + +def collate_fn_predict( + batch: list[PredictSample], +) -> PredictInput: + inputs, metadatas = zip(*batch, strict=True) + return torch.stack(list(inputs)), list(metadatas) diff --git a/ml/data/datasets/__init__.py b/ml/data/datasets/__init__.py new file mode 100644 index 00000000..5301996b --- /dev/null +++ b/ml/data/datasets/__init__.py @@ -0,0 +1,13 @@ +from ml.data.datasets.bags import Bags, BagsPredict +from ml.data.datasets.embeddings import Embeddings, EmbeddingsPredict +from ml.data.datasets.tiles import Tiles, TilesPredict + + +__all__ = [ + "Bags", + "BagsPredict", + "Embeddings", + "EmbeddingsPredict", + "Tiles", + "TilesPredict", +] diff --git a/ml/data/datasets/bags.py b/ml/data/datasets/bags.py new file mode 100644 index 00000000..61916965 --- /dev/null +++ b/ml/data/datasets/bags.py @@ -0,0 +1,121 @@ +from collections import Counter +from collections.abc import Iterable +from pathlib import Path +from typing import Generic, TypeVar, cast + +import torch +import torch.nn.functional as F +from rationai.mlkit.data.datasets import SlidesTilesLoader +from torch.utils.data import Dataset + +from ml.data.datasets.labels import LabelMode, get_label, process_slides +from ml.data.datasets.utils import filter_tiles +from ml.typing import BagsPredictSample, BagsSample, MetadataBags + + +T = TypeVar("T", bound=BagsSample | BagsPredictSample) + + +class _Bags(Dataset[T], Generic[T]): + def __init__( + self, + uris: Iterable[str] | str, + mode: LabelMode | str | None = None, + padding: bool = True, + include_labels: bool = True, + thresholds: dict[str, float] | None = None, + val_fold: int | None = None, + is_val: bool = False, + ) -> None: + self.mode = LabelMode(mode) if mode is not None else None + self.include_labels = include_labels + self.thresholds = thresholds or {} + + if self.include_labels and self.mode is None: + raise ValueError("Mode must be specified when including labels.") + + self._meta = SlidesTilesLoader(uris=uris) + self.tiles = filter_tiles(self._meta.tiles, self.thresholds) + self._meta.tiles = self.tiles + self._meta._slide_id_to_indices = self._meta._build_tile_index(self.tiles) + self.slides = process_slides( + self._meta.slides, self.mode, val_fold=val_fold, is_val=is_val + ) + + self.padding = padding + self.max_embeddings = max(Counter(self.tiles["slide_id"]).values()) + + def __len__(self) -> int: + return len(self.slides) + + def __getitem__(self, idx: int) -> T: + slide_metadata = self.slides[idx] + tiles = self._meta.filter_tiles_by_slide(slide_metadata["id"]) + slide_name = str(slide_metadata["name"]) + embeddings = torch.tensor(tiles["embedding"]) + + pad_amount = self.max_embeddings - embeddings.shape[0] + if self.padding: + embeddings = F.pad(embeddings, (0, 0, 0, pad_amount), value=0.0) + + metadata = MetadataBags( + slide_name=slide_name, + slide_path=Path(slide_metadata["path"]), + level=slide_metadata["level"], + tile_extent_x=slide_metadata["tile_extent_x"], + tile_extent_y=slide_metadata["tile_extent_y"], + tiles=tiles, + x=torch.tensor(tiles["x"]), + y=torch.tensor(tiles["y"]), + ) + + if not self.include_labels: + return cast("T", (embeddings, metadata)) + + assert self.mode is not None + label = get_label(slide_metadata, self.mode) + + return cast("T", (embeddings, label, metadata)) + + +class Bags(_Bags[BagsSample]): + @property + def labels(self) -> list[int]: + assert self.mode is not None + return [int(get_label(dict(slide), self.mode).item()) for slide in self.slides] + + def __init__( + self, + uris: Iterable[str] | str, + mode: LabelMode | str, + padding: bool = True, + thresholds: dict[str, float] | None = None, + val_fold: int | None = None, + is_val: bool = False, + ) -> None: + super().__init__( + uris=uris, + mode=mode, + padding=padding, + include_labels=True, + thresholds=thresholds, + val_fold=val_fold, + is_val=is_val, + ) + + +class BagsPredict(_Bags[BagsPredictSample]): + def __init__( + self, + uris: Iterable[str] | str, + mode: LabelMode | str | None = None, + padding: bool = True, + thresholds: dict[str, float] | None = None, + ) -> None: + super().__init__( + uris=uris, + mode=mode, + padding=padding, + include_labels=False, + thresholds=thresholds, + ) diff --git a/ml/data/datasets/embeddings.py b/ml/data/datasets/embeddings.py new file mode 100644 index 00000000..517a0c32 --- /dev/null +++ b/ml/data/datasets/embeddings.py @@ -0,0 +1,116 @@ +from collections.abc import Iterable +from typing import Any, Generic, TypeVar, cast + +import torch +from datasets import Dataset as HFDataset +from rationai.mlkit.data.datasets import MetaTiledSlides +from torch.utils.data import Dataset + +from ml.data.datasets.labels import LabelMode, get_label, process_slides +from ml.data.datasets.utils import filter_tiles +from ml.typing import EmbeddingsPredictSample, EmbeddingsSample, MetadataEmbeddings + + +T = TypeVar("T", bound=EmbeddingsSample | EmbeddingsPredictSample) + + +class _Embeddings(Generic[T], Dataset[T]): + def __init__( + self, + slide_metadata: dict[str, Any], + tiles: HFDataset, + mode: LabelMode | str | None, + include_labels: bool = True, + ) -> None: + self.slide_metadata = slide_metadata + self.tiles = tiles + self.mode = LabelMode(mode) if mode is not None else None + self.include_labels = include_labels + + if self.include_labels and self.mode is None: + raise ValueError("Mode must be specified if labels are included.") + + def __len__(self) -> int: + return len(self.tiles) + + def __getitem__(self, idx: int) -> T: + tile = self.tiles[idx] + metadata = MetadataEmbeddings( + slide_name=self.slide_metadata["name"], + x=tile["x"], + y=tile["y"], + ) + + embedding = torch.tensor(tile["embedding"]) + if not self.include_labels: + return cast("T", (embedding, metadata)) + + assert self.mode is not None, "Mode must be specified for labels." + label = get_label(tile, self.mode) + return cast("T", (embedding, label, metadata)) + + +class Embeddings(MetaTiledSlides[EmbeddingsSample]): + @property + def labels(self) -> list[int]: + return [ + int(get_label(ds.slide_metadata, self.mode).item()) + for ds in cast("list[_Embeddings[EmbeddingsSample]]", self.datasets) + for _ in range(len(ds)) + ] + + def __init__( + self, + uris: Iterable[str] | str, + mode: LabelMode | str, + thresholds: dict[str, float] | None = None, + val_fold: int | None = None, + is_val: bool = False, + ) -> None: + self.mode = LabelMode(mode) + self.thresholds = thresholds or {} + self.val_fold = val_fold + self.is_val = is_val + super().__init__(uris=(uris,) if isinstance(uris, str) else uris) + + def generate_datasets(self) -> Iterable[_Embeddings[EmbeddingsSample]]: + self.slides = process_slides( + self.slides, self.mode, val_fold=self.val_fold, is_val=self.is_val + ) + return ( + _Embeddings( + slide_metadata=dict(slide), + tiles=filter_tiles( + self.filter_tiles_by_slide(dict(slide)["id"]), self.thresholds + ), + mode=self.mode, + include_labels=True, + ) + for slide in self.slides + ) + + +class EmbeddingsPredict(MetaTiledSlides[EmbeddingsPredictSample]): + def __init__( + self, + uris: Iterable[str] | str, + mode: LabelMode | str, + thresholds: dict[str, float] | None = None, + ) -> None: + self.mode = LabelMode(mode) + self.thresholds = thresholds or {} + super().__init__(uris=(uris,) if isinstance(uris, str) else uris) + + def generate_datasets(self) -> Iterable[_Embeddings[EmbeddingsPredictSample]]: + self.slides = process_slides(self.slides, self.mode) + return ( + _Embeddings( + slide_metadata=dict(slide), + tiles=filter_tiles( + self.filter_tiles_by_slide(dict(slide)["id"]), self.thresholds + ), + mode=self.mode, + include_labels=False, + ) + for slide in self.slides + ) diff --git a/ml/data/datasets/labels.py b/ml/data/datasets/labels.py new file mode 100644 index 00000000..faa7894b --- /dev/null +++ b/ml/data/datasets/labels.py @@ -0,0 +1,54 @@ +from enum import Enum +from pathlib import Path +from typing import Any + +import torch +from datasets import Dataset as HFDataset + + +class LabelMode(Enum): + NEUTROPHILS = "neutrophils" + NANCY_HIGH = "nancy_high" + NANCY_LOW = "nancy_low" + ALL = "all" + + +def process_slides( + slides: HFDataset, + mode: LabelMode | None = None, + val_fold: int | None = None, + is_val: bool = False, +) -> HFDataset: + match mode: + case LabelMode.NEUTROPHILS: + slides = slides.map(lambda x: {"neutrophils": x["nancy_index"] >= 2}) + case LabelMode.NANCY_HIGH: + # new labels: 0,1 -> 0; 2,3,4 -> 1,2,3 + slides = slides.map(lambda x: {"nancy_index": max(0, x["nancy_index"] - 1)}) + case LabelMode.NANCY_LOW: + # new labels: 0,1 -> 0,1; 2,3,4 -> 2 + slides = slides.map(lambda x: {"nancy_index": min(x["nancy_index"], 2)}) + case LabelMode.ALL: + # Keep all labels + pass + + if val_fold is not None: + if is_val: + slides = slides.filter(lambda x: x["fold"] == val_fold) + else: + slides = slides.filter(lambda x: x["fold"] != val_fold) + + slides = slides.map(lambda x: {"name": Path(x["path"]).stem}) + return slides + + +def get_label(slide_metadata: dict[str, Any], mode: LabelMode) -> torch.Tensor: + match mode: + case LabelMode.NEUTROPHILS: + return torch.tensor(slide_metadata["neutrophils"]).float() + case LabelMode.NANCY_HIGH | LabelMode.NANCY_LOW | LabelMode.ALL: + return torch.tensor(slide_metadata["nancy_index"]).long() + + +def get_target_column(mode: LabelMode) -> str: + return "neutrophils" if mode == LabelMode.NEUTROPHILS else "nancy_index" diff --git a/ml/data/datasets/tiles.py b/ml/data/datasets/tiles.py new file mode 100644 index 00000000..26b67fd2 --- /dev/null +++ b/ml/data/datasets/tiles.py @@ -0,0 +1,143 @@ +from collections.abc import Iterable +from typing import Any, Generic, TypeVar, cast + +from albumentations.core.composition import TransformType +from albumentations.pytorch import ToTensorV2 +from datasets import Dataset as HFDataset +from rationai.mlkit.data.datasets import MetaTiledSlides, OpenSlideTilesDataset +from torch.utils.data import Dataset + +from ml.data.datasets.labels import LabelMode, get_label, process_slides +from ml.data.datasets.utils import filter_tiles +from ml.typing import MetadataTiles, TilesPredictSample, TilesSample + + +T = TypeVar("T", bound=TilesSample | TilesPredictSample) + + +class _Tiles(Dataset[T], Generic[T]): + def __init__( + self, + slide_metadata: dict[str, Any], + tiles: HFDataset, + mode: LabelMode | str | None, + include_labels: bool = True, + transforms: TransformType | None = None, + to_tensor: bool = True, + ) -> None: + super().__init__() + self.slide_tiles = OpenSlideTilesDataset( + slide_path=slide_metadata["path"], + level=slide_metadata["level"], + tile_extent_x=slide_metadata["tile_extent_x"], + tile_extent_y=slide_metadata["tile_extent_y"], + tiles=tiles, + ) + self.slide_metadata = slide_metadata + self.mode = LabelMode(mode) if mode is not None else None + self.include_labels = include_labels + self.transforms = transforms + self.to_tensor = ToTensorV2() if to_tensor else None + + if self.include_labels and self.mode is None: + raise ValueError("Mode must be specified if labels are included.") + + def __len__(self) -> int: + return len(self.slide_tiles) + + def __getitem__(self, idx: int) -> T: + image = self.slide_tiles[idx] + metadata = MetadataTiles( + slide_name=self.slide_tiles.slide_path.stem, + x=self.slide_tiles.tiles[idx]["x"], + y=self.slide_tiles.tiles[idx]["y"], + ) + + if self.transforms is not None: + image = self.transforms(image=image)["image"] + + if self.to_tensor is not None: + image = self.to_tensor(image=image)["image"] + + if not self.include_labels: + return cast("T", (image, metadata)) + + assert self.mode is not None, "Mode must be specified for labels." + label = get_label(self.slide_metadata, self.mode) + return cast("T", (image, label, metadata)) + + +class Tiles(MetaTiledSlides[TilesSample]): + @property + def labels(self) -> list[int]: + return [ + int(get_label(ds.slide_metadata, self.mode).item()) + for ds in cast("list[_Tiles[TilesSample]]", self.datasets) + for _ in range(len(ds)) + ] + + def __init__( + self, + uris: Iterable[str] | str, + mode: LabelMode | str, + transforms: TransformType | None = None, + to_tensor: bool = True, + thresholds: dict[str, float] | None = None, + val_fold: int | None = None, + is_val: bool = False, + ) -> None: + self.transforms = transforms + self.mode = LabelMode(mode) + self.to_tensor = to_tensor + self.thresholds = thresholds or {} + self.val_fold = val_fold + self.is_val = is_val + super().__init__(uris=(uris,) if isinstance(uris, str) else uris) + + def generate_datasets(self) -> Iterable[_Tiles[TilesSample]]: + self.slides = process_slides( + self.slides, self.mode, val_fold=self.val_fold, is_val=self.is_val + ) + return ( + _Tiles( + slide_metadata=dict(slide), + tiles=filter_tiles( + self.filter_tiles_by_slide(dict(slide)["id"]), self.thresholds + ), + mode=self.mode, + include_labels=True, + transforms=self.transforms, + to_tensor=self.to_tensor, + ) + for slide in self.slides + ) + + +class TilesPredict(MetaTiledSlides[TilesPredictSample]): + def __init__( + self, + uris: Iterable[str] | str, + transforms: TransformType | None = None, + to_tensor: bool = True, + thresholds: dict[str, float] | None = None, + ) -> None: + self.transforms = transforms + self.to_tensor = to_tensor + self.thresholds = thresholds or {} + super().__init__(uris=(uris,) if isinstance(uris, str) else uris) + + def generate_datasets(self) -> Iterable[_Tiles[TilesPredictSample]]: + self.slides = process_slides(self.slides) + return ( + _Tiles( + slide_metadata=dict(slide), + tiles=filter_tiles( + self.filter_tiles_by_slide(dict(slide)["id"]), self.thresholds + ), + mode=None, + include_labels=False, + transforms=self.transforms, + to_tensor=self.to_tensor, + ) + for slide in self.slides + ) diff --git a/ml/data/datasets/utils.py b/ml/data/datasets/utils.py new file mode 100644 index 00000000..90f6cc85 --- /dev/null +++ b/ml/data/datasets/utils.py @@ -0,0 +1,7 @@ +from datasets import Dataset as HFDataset + + +def filter_tiles(tiles: HFDataset, thresholds: dict[str, float]) -> HFDataset: + return tiles.filter( + lambda tile: all(tile[col] <= thr for col, thr in thresholds.items()) + ) diff --git a/ml/data/samplers/__init__.py b/ml/data/samplers/__init__.py new file mode 100644 index 00000000..f982fa8b --- /dev/null +++ b/ml/data/samplers/__init__.py @@ -0,0 +1,6 @@ +from ml.data.samplers.auto_weighted_random_sampler import ( + AutoWeightedRandomSampler, +) + + +__all__ = ["AutoWeightedRandomSampler"] diff --git a/ml/data/samplers/auto_weighted_random_sampler.py b/ml/data/samplers/auto_weighted_random_sampler.py new file mode 100644 index 00000000..cdabe4f3 --- /dev/null +++ b/ml/data/samplers/auto_weighted_random_sampler.py @@ -0,0 +1,18 @@ +from collections import Counter +from typing import Protocol + +from torch.utils.data import WeightedRandomSampler + + +class LabeledDataset(Protocol): + def __len__(self) -> int: ... + @property + def labels(self) -> list[int]: ... + + +class AutoWeightedRandomSampler(WeightedRandomSampler): + def __init__(self, dataset: LabeledDataset, replacement: bool = True) -> None: + labels = dataset.labels + counts = Counter(labels) + weights = [1.0 / counts[label] for label in labels] + super().__init__(weights, len(dataset), replacement) diff --git a/ml/loss/__init__.py b/ml/loss/__init__.py new file mode 100644 index 00000000..44986ce2 --- /dev/null +++ b/ml/loss/__init__.py @@ -0,0 +1,4 @@ +from ml.loss.cumulative_link_loss import CumulativeLinkLoss + + +__all__ = ["CumulativeLinkLoss"] diff --git a/ml/loss/cumulative_link_loss.py b/ml/loss/cumulative_link_loss.py new file mode 100644 index 00000000..44e2c8e9 --- /dev/null +++ b/ml/loss/cumulative_link_loss.py @@ -0,0 +1,100 @@ +import torch +from torch import nn + + +# credit: +# https://github.com/EthanRosenthal/spacecutter/blob/master/spacecutter/losses.py + + +def _reduction(loss: torch.Tensor, reduction: str) -> torch.Tensor: + """Reduce loss. + + Parameters + ---------- + loss : torch.Tensor, [batch_size, num_classes] + Batch losses. + reduction : str + Method for reducing the loss. Options include 'mean', 'none', and 'sum'. + + Returns: + ------- + loss : torch.Tensor + Reduced loss. + + """ + if reduction == "mean": + return loss.mean() + elif reduction == "none": + return loss + elif reduction == "sum": + return loss.sum() + else: + raise ValueError(f"{reduction} is not a valid reduction") + + +def cumulative_link_loss( + y_pred: torch.Tensor, + y_true: torch.Tensor, + reduction: str = "mean", + class_weights: torch.Tensor | None = None, +) -> torch.Tensor: + """Calculates the negative log likelihood using the logistic cumulative link function. + + See "On the consistency of ordinal regression methods", Pedregosa et. al. for more + details. While this paper is not the first to introduce this, it is the only one + that I could find that was easily readable outside of paywalls. + + Parameters + ---------- + y_pred : torch.Tensor, [batch_size, num_classes] + Predicted target class probabilities. float dtype. + y_true : torch.Tensor, [batch_size, 1] + True target classes. long dtype. + reduction : str + Method for reducing the loss. Options include 'mean', 'none', and 'sum'. + class_weights : torch.Tensor, [num_classes] optional (default=None) + An array of weights for each class. If included, then for each sample, look up + the true class and multiply that sample's loss by the weight in this array. + + Returns: + ------- + loss: torch.Tensor + + """ + eps = 1e-15 + likelihoods = torch.clamp(torch.gather(y_pred, 1, y_true), eps, 1 - eps) + neg_log_likelihood = -torch.log(likelihoods) + + if class_weights is not None: + neg_log_likelihood *= class_weights[y_true] + + loss = _reduction(neg_log_likelihood, reduction) + return loss + + +class CumulativeLinkLoss(nn.Module): + """Module form of cumulative_link_loss() loss function. + + Parameters + ---------- + reduction : str + Method for reducing the loss. Options include 'mean', 'none', and 'sum'. + class_weights : np.ndarray, [num_classes] optional (default=None) + An array of weights for each class. If included, then for each sample, look up + the true class and multiply that sample's loss by the weight in this array. + + """ + + def __init__( + self, + reduction: str = "mean", + class_weights: torch.Tensor | None = None, + ) -> None: + super().__init__() + self.class_weights = class_weights + self.reduction = reduction + + def forward(self, y_pred: torch.Tensor, y_true: torch.Tensor) -> torch.Tensor: + return cumulative_link_loss( + y_pred, y_true, reduction=self.reduction, class_weights=self.class_weights + ) diff --git a/ml/mil.py b/ml/mil.py new file mode 100644 index 00000000..7cf92b8a --- /dev/null +++ b/ml/mil.py @@ -0,0 +1,137 @@ +from copy import deepcopy +from typing import Any, Literal, cast + +import torch +from lightning import LightningModule +from torch import Tensor, nn +from torch.optim.adam import Adam +from torch.optim.optimizer import Optimizer +from torchmetrics import Metric, MetricCollection +from torchmetrics.classification import ( + AUROC, + Accuracy, + CohenKappa, + Precision, + Recall, + Specificity, +) + +from ml.modeling import sigmoid_normalization +from ml.typing import BagsInput, BagsPredictInput, Output + + +class MIL(LightningModule): + def __init__( + self, foundation: str, num_classes: int, lr: float | None = None + ) -> None: + super().__init__() + match foundation: + case "prov-gigapath" | "uni2": + input_dim = 1536 + case "uni": + input_dim = 1024 + case "virchow" | "virchow2": + input_dim = 2560 + case _: + raise ValueError(f"Unknown foundation model: {foundation}") + + self.encoder = nn.Identity() + self.attention = nn.Sequential( + nn.Linear(input_dim, 512), + nn.Tanh(), + nn.Linear(512, 1), + ) + self.classifier = nn.Linear(input_dim, num_classes) + self.criterion = ( + nn.CrossEntropyLoss() if num_classes > 1 else nn.BCEWithLogitsLoss() + ) + self.activation = nn.Sigmoid() if num_classes == 1 else nn.Softmax(dim=-1) + self.lr = lr + + task: Literal["binary", "multiclass"] = ( + "binary" if num_classes == 1 else "multiclass" + ) + metrics: dict[str, Metric | MetricCollection] = { + "AUC": AUROC(task=task, num_classes=num_classes, average="none"), + "accuracy": Accuracy(task=task, num_classes=num_classes), + "precision": Precision(task=task, num_classes=num_classes, average="none"), + "recall": Recall(task=task, num_classes=num_classes, average="none"), + "specificity": Specificity( + task=task, num_classes=num_classes, average="none" + ), + "kappa": CohenKappa(task=task, num_classes=num_classes), + } + + self.train_metrics = MetricCollection(deepcopy(metrics), prefix="train/") + self.val_metrics = MetricCollection(deepcopy(metrics), prefix="validation/") + self.test_metrics = MetricCollection(deepcopy(metrics), prefix="test/") + + def forward(self, x: Tensor) -> Output: + # x has shape (batch_size, num_tiles_padded, embedding_dim) + x = self.encoder(x) + attention_weights = sigmoid_normalization(self.attention(x)) + mask = (x.abs() > 1e-6).any(dim=-1, keepdim=True).float() + attention_weights = attention_weights * mask + attention_weights = attention_weights / attention_weights.sum( + dim=1, keepdim=True + ) + x = self.classifier(x) + x = torch.sum(attention_weights * x, dim=1) + + return x.squeeze(-1) + + def training_step(self, batch: BagsInput) -> Tensor: + bags, labels, _ = batch + + outputs = self(bags) + loss = self.criterion(outputs, labels) + self.log("train/loss", loss, on_step=True, prog_bar=True, batch_size=len(bags)) + + self.train_metrics.update(self.activation(outputs), labels) + self.log_dict( + self.train_metrics, on_epoch=True, on_step=False, batch_size=len(bags) + ) + + return loss + + def validation_step(self, batch: BagsInput) -> None: + bags, labels, _ = batch + + outputs = self(bags) + loss = self.criterion(outputs, labels) + self.log("validation/loss", loss, prog_bar=True, batch_size=len(bags)) + + self.val_metrics.update(self.activation(outputs), labels) + self.log_dict( + self.val_metrics, on_epoch=True, on_step=False, batch_size=len(bags) + ) + + def test_step(self, batch: BagsInput) -> Tensor: + bags, labels, _ = batch + + outputs = self(bags) + + probabilities = self.activation(outputs) + self.test_metrics.update(probabilities, labels) + self.log_dict( + self.test_metrics, on_epoch=True, on_step=False, batch_size=len(bags) + ) + + return probabilities + + def predict_step(self, batch: BagsPredictInput) -> Output: + return self.activation(self(batch[0])) + + def configure_optimizers(self) -> Optimizer: + if self.lr is None: + raise ValueError("Learning rate must be set for training.") + return Adam(self.parameters(), lr=self.lr) + + def log_dict(self, dictionary: MetricCollection, *args: Any, **kwargs: Any) -> None: # type: ignore[override] + for name, result in dictionary.compute().items(): + result = cast("Tensor", result) + if result.shape: + for i, value in enumerate(result): + self.log(f"{name}/{i}", value, *args, **kwargs) + else: + self.log(name, result, *args, **kwargs) diff --git a/ml/modeling/__init__.py b/ml/modeling/__init__.py new file mode 100644 index 00000000..a7425cc9 --- /dev/null +++ b/ml/modeling/__init__.py @@ -0,0 +1,14 @@ +from ml.modeling.classification_head import ClassificationHead +from ml.modeling.linear_probe import LinearProbe +from ml.modeling.normalization import sigmoid_normalization +from ml.modeling.ordinal_regression_head import LogisticCumulativeLink +from ml.modeling.regression_head import RegressionHead + + +__all__ = [ + "ClassificationHead", + "LinearProbe", + "LogisticCumulativeLink", + "RegressionHead", + "sigmoid_normalization", +] diff --git a/ml/modeling/backbone/__init__.py b/ml/modeling/backbone/__init__.py new file mode 100644 index 00000000..c7b33cab --- /dev/null +++ b/ml/modeling/backbone/__init__.py @@ -0,0 +1,4 @@ +from ml.modeling.backbone.vgg16 import vgg16 + + +__all__ = ["vgg16"] diff --git a/ml/modeling/backbone/vgg16.py b/ml/modeling/backbone/vgg16.py new file mode 100644 index 00000000..60639c35 --- /dev/null +++ b/ml/modeling/backbone/vgg16.py @@ -0,0 +1,6 @@ +import torchvision +from torch import nn + + +def vgg16(weights: str | None = None) -> nn.Module: + return torchvision.models.vgg16(weights=weights).features diff --git a/ml/modeling/classification_head.py b/ml/modeling/classification_head.py new file mode 100644 index 00000000..31dd6356 --- /dev/null +++ b/ml/modeling/classification_head.py @@ -0,0 +1,13 @@ +from torch import Tensor, nn + + +class ClassificationHead(nn.Module): + def __init__(self) -> None: + super().__init__() + self.global_pool = nn.AdaptiveAvgPool2d(1) + self.proj = nn.Linear(512, 5) + + def forward(self, x: Tensor) -> Tensor: + x = self.global_pool(x) # (B, C, 1, 1) + x = x.flatten(start_dim=-3, end_dim=-1) # (B, C) + return self.proj(x) diff --git a/ml/modeling/linear_probe.py b/ml/modeling/linear_probe.py new file mode 100644 index 00000000..51c4041b --- /dev/null +++ b/ml/modeling/linear_probe.py @@ -0,0 +1,10 @@ +from torch import Tensor, nn + + +class LinearProbe(nn.Module): + def __init__(self) -> None: + super().__init__() + self.proj = nn.Linear(1536, 5) + + def forward(self, x: Tensor) -> Tensor: + return self.proj(x) diff --git a/ml/modeling/normalization.py b/ml/modeling/normalization.py new file mode 100644 index 00000000..424441dd --- /dev/null +++ b/ml/modeling/normalization.py @@ -0,0 +1,6 @@ +import torch +from torch import Tensor + + +def sigmoid_normalization(x: Tensor) -> Tensor: + return torch.softmax(x.sigmoid(), dim=1) diff --git a/ml/modeling/ordinal_regression_head.py b/ml/modeling/ordinal_regression_head.py new file mode 100644 index 00000000..a86327a8 --- /dev/null +++ b/ml/modeling/ordinal_regression_head.py @@ -0,0 +1,61 @@ +from typing import Literal + +import torch +from torch import nn + + +# credit: +# https://github.com/EthanRosenthal/spacecutter/blob/master/spacecutter/models.py + + +class LogisticCumulativeLink(nn.Module): + """Converts a single number to probabilities of belonging to each class. + + Parameters + ---------- + num_classes : int + Number of ordered classes to partition the odds into. + init_cutpoints : Literal["ordered", "random"], default="ordered" + How to initialize the cutpoints of the model. Valid values are + - ordered : cutpoints are initialized to halfway between each class. + - random : cutpoints are initialized with random values. + step_cutpoints : int, default=4 + The step size between cutpoints when `init_cutpoints` is "ordered". + """ + + def __init__( + self, + num_classes: int, + init_cutpoints: Literal["ordered", "random"] = "ordered", + step_cutpoints: int = 4, + ) -> None: + assert num_classes > 2, "Only use this model if you have 3 or more classes" + super().__init__() + + self.num_classes = num_classes + self.init_cutpoints = init_cutpoints + match init_cutpoints: + case "ordered": + num_cutpoints = self.num_classes - 1 + cutpoints = torch.arange(num_cutpoints).float() * step_cutpoints + cutpoints -= (num_cutpoints - 1) * step_cutpoints / 2 + self.cutpoints = nn.Parameter(cutpoints) + case "random": + cutpoints = torch.rand(self.num_classes - 1).sort()[0] + self.cutpoints = nn.Parameter(cutpoints) + case _: + raise ValueError(f"{init_cutpoints} is not a valid init_cutpoints type") + + def forward(self, x: torch.Tensor) -> torch.Tensor: + """Converts a single number to probabilities of belonging to each class. + + Equation (11) from + "On the consistency of ordinal regression methods", Pedregosa et. al. + """ + sigmoids = torch.sigmoid(self.cutpoints - x) + link_mat = sigmoids[:, 1:] - sigmoids[:, :-1] + link_mat = torch.cat( + (sigmoids[:, [0]], link_mat, (1 - sigmoids[:, [-1]])), + dim=1, + ) + return link_mat diff --git a/ml/modeling/regression_head.py b/ml/modeling/regression_head.py new file mode 100644 index 00000000..61ecbca6 --- /dev/null +++ b/ml/modeling/regression_head.py @@ -0,0 +1,14 @@ +from torch import Tensor, nn + + +class RegressionHead(nn.Module): + def __init__(self) -> None: + super().__init__() + self.global_pool = nn.AdaptiveAvgPool2d(1) + self.proj = nn.Linear(512, 1) + + def forward(self, x: Tensor) -> Tensor: + x = self.global_pool(x) # (B, C, 1, 1) + x = x.flatten(start_dim=-3, end_dim=-1) # (B, C) + x = self.proj(x) + return x diff --git a/ml/neutrophils.py b/ml/neutrophils.py new file mode 100644 index 00000000..5a3dbe68 --- /dev/null +++ b/ml/neutrophils.py @@ -0,0 +1,134 @@ +from functools import partial +from pathlib import Path +from typing import cast + +import hydra +import mlflow.artifacts +import numpy as np +import pandas as pd +import pyvips +from omegaconf import DictConfig, ListConfig +from rationai.mlkit import with_cli_args +from rationai.mlkit.autolog import autolog +from rationai.mlkit.lightning.loggers import MLFlowLogger +from sklearn.metrics import ( + cohen_kappa_score, + confusion_matrix, + roc_auc_score, + roc_curve, +) + + +def add_path(path: str, folder: Path, suffix: str) -> Path: + return folder / Path(path).with_suffix(suffix).name + + +def download_data(datasets: ListConfig) -> tuple[pd.DataFrame, pd.DataFrame]: + train_dfs: list[pd.DataFrame] = [] + test_dfs: list[pd.DataFrame] = [] + for dataset in datasets: + uris = dataset.mlflow_uris + neutrophils = Path(mlflow.artifacts.download_artifacts(uris.neutrophils)) + tissue_masks = Path(mlflow.artifacts.download_artifacts(uris.tissue_masks)) + + add_tissue_mask = partial(add_path, folder=tissue_masks, suffix=".tiff") + add_neutrophils = partial(add_path, folder=neutrophils, suffix=".parquet") + + for split, df in zip( + ["train", "test_preliminary"], [train_dfs, test_dfs], strict=False + ): + if split in uris.tiling: + df.append( + pd.read_parquet( + Path(mlflow.artifacts.download_artifacts(uris.tiling[split])) + / "slides.parquet", + ) + .set_index("id") + .assign( + tissue_mask=lambda df, f=add_tissue_mask: df["path"].map(f), + ) + .assign(neutrophils=lambda df, f=add_neutrophils: df["path"].map(f)) + ) + + return pd.concat(train_dfs), pd.concat(test_dfs) + + +def get_tissue_size(tissue_mask_path: Path) -> float: + """Calculate tissue size in mm^2.""" + image = cast("pyvips.Image", pyvips.Image.new_from_file(tissue_mask_path)) + mpp_x = 1000 / image.get("Xres") # pyright: ignore[reportOperatorIssue] + mpp_y = 1000 / image.get("Yres") # pyright: ignore[reportOperatorIssue] + return image.avg() * image.width * image.height / 255 * mpp_x * mpp_y * 1e-6 # pyright: ignore[reportOperatorIssue, reportCallIssue, reportOptionalCall] + + +def create_dataset(df: pd.DataFrame) -> tuple[np.ndarray, np.ndarray]: + x, y = [], [] + for _, row in df.iterrows(): + expected_num_neutrophils = pd.read_parquet(row["neutrophils"])[ + "probability" + ].sum() + tissue_size = get_tissue_size(row["tissue_mask"]) + + # expected number of neutrophils per mm^2 + x.append(expected_num_neutrophils / tissue_size) + y.append(row["nancy_index"] >= 2) + + return np.array(x, dtype=np.float32), np.array(y, dtype=np.int8) + + +def train(x_train: np.ndarray, y_train: np.ndarray) -> float: + fpr, tpr, thresholds = roc_curve(y_train, x_train) + accuracy = (tpr * np.sum(y_train) + (1 - fpr) * np.sum(1 - y_train)) / len(y_train) + return thresholds[np.argmax(accuracy)] + + +def test( + x_test: np.ndarray, + y_test: np.ndarray, + test_df: pd.DataFrame, + threshold: float, + logger: MLFlowLogger, +) -> None: + y_pred = x_test >= threshold + + tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel() + + logger.log_metrics( + { + "test/accuracy": (tp + tn) / (tp + tn + fp + fn), + "test/AUC": float(roc_auc_score(y_test, x_test)), + "test/precision": (tp / (tp + fp)) if tp + fp > 0 else 0.0, + "test/recall": (tp / (tp + fn)) if tp + fn > 0 else 0.0, + "test/specificity": (tn / (tn + fp)) if tn + fp > 0 else 0.0, + "test/kappa": float(cohen_kappa_score(y_test, y_pred)), + "threshold": threshold, + } + ) + + logger.log_table( + { + "slide": test_df["path"].apply(lambda p: Path(p).stem), + "prediction": x_test.tolist(), + "prediction_class": y_pred.tolist(), + }, + artifact_file="predictions.json", + ) + + +@with_cli_args(["+ml=neutrophils"]) +@hydra.main(config_path="../configs", config_name="ml", version_base=None) +@autolog +def main(config: DictConfig, logger: MLFlowLogger) -> None: + train_df, test_df = download_data( + config.dataset.get("datasets", {"": config.dataset}).values() + ) + + x_train, y_train = create_dataset(train_df) + x_test, y_test = create_dataset(test_df) + + threshold = train(x_train, y_train) + test(x_test, y_test, test_df, threshold, logger) + + +if __name__ == "__main__": + main() diff --git a/ml/ordered_regression.py b/ml/ordered_regression.py new file mode 100644 index 00000000..eb549958 --- /dev/null +++ b/ml/ordered_regression.py @@ -0,0 +1,23 @@ +from torch import Tensor +from torch.nn import Identity, Module + +from ml.base import BaseModule +from ml.loss import CumulativeLinkLoss +from ml.modeling import LogisticCumulativeLink +from ml.modeling.regression_head import RegressionHead +from ml.typing import Output + + +class OrderedRegression(BaseModule): + def __init__(self, backbone: Module, lr: float) -> None: + super().__init__(backbone, lr) + self.decode_head = RegressionHead() + self.cumulative_link = LogisticCumulativeLink(num_classes=self.N_CLASSES) + self.criterion = CumulativeLinkLoss() + self.activation = Identity() + self._build_metrics() + + def forward(self, x: Tensor) -> Output: + x = self.backbone(x) + x = self.decode_head(x) + return self.cumulative_link(x) diff --git a/ml/typing.py b/ml/typing.py new file mode 100644 index 00000000..10af5664 --- /dev/null +++ b/ml/typing.py @@ -0,0 +1,67 @@ +from pathlib import Path +from typing import TypeAlias, TypedDict + +from datasets import Dataset as HFDataset +from torch import Tensor + + +class Metadata(TypedDict): + slide_name: str + + +Sample: TypeAlias = tuple[Tensor, Tensor, Metadata] +PredictSample: TypeAlias = tuple[Tensor, Metadata] + +# Input: TypeAlias = tuple[Tensor, Tensor, list[Metadata]] +# PredictInput: TypeAlias = tuple[Tensor, list[Metadata]] + + +class MetadataBatch(TypedDict): + slide_name: list[str] + + +class MetadataTiles(Metadata): + x: int + y: int + + +class MetadataTilesBatch(MetadataBatch): + x: Tensor + y: Tensor + + +TilesSample: TypeAlias = tuple[Tensor, Tensor, MetadataTiles] +TilesPredictSample: TypeAlias = tuple[Tensor, MetadataTiles] + +TilesInput: TypeAlias = tuple[Tensor, Tensor, MetadataTilesBatch] +TilesPredictInput: TypeAlias = tuple[Tensor, MetadataTilesBatch] + +MetadataEmbeddings: TypeAlias = MetadataTiles +MetadataEmbeddingsBatch: TypeAlias = MetadataTilesBatch + +EmbeddingsSample: TypeAlias = tuple[Tensor, Tensor, MetadataEmbeddings] +EmbeddingsPredictSample: TypeAlias = tuple[Tensor, MetadataEmbeddings] + +EmbeddingsInput: TypeAlias = tuple[Tensor, Tensor, MetadataEmbeddingsBatch] +EmbeddingsPredictInput: TypeAlias = tuple[Tensor, MetadataEmbeddingsBatch] + + +class MetadataBags(Metadata): + slide_path: Path + level: int + tile_extent_x: int + tile_extent_y: int + tiles: HFDataset + x: Tensor # Tensor[int] + y: Tensor # Tensor[int] + + +BagsSample: TypeAlias = tuple[Tensor, Tensor, MetadataBags] +BagsPredictSample: TypeAlias = tuple[Tensor, MetadataBags] + +BagsInput: TypeAlias = tuple[Tensor, Tensor, list[MetadataBags]] +BagsPredictInput: TypeAlias = tuple[Tensor, list[MetadataBags]] + +Input: TypeAlias = BagsInput | TilesInput | EmbeddingsInput +PredictInput: TypeAlias = BagsPredictInput | TilesPredictInput | EmbeddingsPredictInput +Output: TypeAlias = Tensor diff --git a/project_name/modeling/__init__.py b/postprocessing/__init__.py similarity index 100% rename from project_name/modeling/__init__.py rename to postprocessing/__init__.py diff --git a/postprocessing/ensembling.py b/postprocessing/ensembling.py new file mode 100644 index 00000000..e1bd9c51 --- /dev/null +++ b/postprocessing/ensembling.py @@ -0,0 +1,110 @@ +from pathlib import Path +from tempfile import TemporaryDirectory + +import hydra +import numpy as np +import pandas as pd +from omegaconf import DictConfig +from rationai.mlkit import autolog, with_cli_args +from rationai.mlkit.lightning.loggers import MLFlowLogger +from sklearn.metrics import ( + accuracy_score, + cohen_kappa_score, + confusion_matrix, + precision_score, + recall_score, +) + +from postprocessing.utils import load_label_map, load_predictions + + +def macro_specificity(y_true: np.ndarray, y_pred: np.ndarray) -> float: + cm = confusion_matrix(y_true, y_pred) + total = cm.sum() + specs = [] + for i in range(len(cm)): + tp = cm[i, i] + fp = cm[:, i].sum() - tp + fn = cm[i, :].sum() - tp + tn = total - tp - fp - fn + specs.append(tn / (tn + fp) if (tn + fp) > 0 else 0.0) + return float(np.mean(specs)) + + +def compute_metrics(y_true: np.ndarray, y_pred: np.ndarray) -> dict[str, float]: + return { + "accuracy": accuracy_score(y_true, y_pred), + "precision": precision_score(y_true, y_pred, average="macro", zero_division=0), + "recall": recall_score(y_true, y_pred, average="macro", zero_division=0), + "specificity": macro_specificity(y_true, y_pred), + "cohen_kappa": cohen_kappa_score(y_true, y_pred), + } + + +PredictionData = dict[str, pd.DataFrame] + + +def run_ensembling( + data: PredictionData, +) -> tuple[dict[str, float], dict[str, float], pd.DataFrame]: + neut_df = data["neutrophils"] + nlow_df = data["nancy_low"] + nhigh_df = data["nancy_high"] + + neut_prob = np.array(neut_df["prediction"]) + low_probs = np.array(nlow_df["prediction"].tolist()) + high_probs = np.array(nhigh_df["prediction"].tolist()) + + y_true = neut_df["nancy"].values + low_branch = low_probs[:, :2].argmax(axis=1) + high_branch = high_probs[:, 1:].argmax(axis=1) + 2 + + # Ensembling: soft majority vote across three tasks + route_high_ens = ( + neut_prob + low_probs[:, 2] + high_probs[:, 1:].sum(axis=1) + ) >= 1.5 + ens_pred = np.where(route_high_ens, high_branch, low_branch) + ens_metrics = compute_metrics(y_true, ens_pred) + + # Hierarchical: neutrophils task alone routes + hier_pred = np.where(neut_prob >= 0.5, high_branch, low_branch) + hier_metrics = compute_metrics(y_true, hier_pred) + + results = [ + { + "slide": slide, + "nancy": int(yt), + "pred_ensembling": int(ens_yp), + "pred_hierarchical": int(hier_yp), + } + for slide, yt, ens_yp, hier_yp in zip( + neut_df.index, y_true, ens_pred, hier_pred, strict=True + ) + ] + + return ens_metrics, hier_metrics, pd.DataFrame(results) + + +@with_cli_args(["+postprocessing=ensembling"]) +@hydra.main(config_path="../configs", config_name="postprocessing", version_base=None) +@autolog +def main(config: DictConfig, logger: MLFlowLogger) -> None: + label_map = load_label_map(config.dataset.mlflow_uris.dataset) + uris = { + task: config.predictions.mlflow_uris[task] + for task in ["neutrophils", "nancy_low", "nancy_high"] + } + data = load_predictions(uris, label_map) + ens_metrics, hier_metrics, results = run_ensembling(data) + + logger.log_metrics({f"ensembling/{k}": v for k, v in ens_metrics.items()}) + logger.log_metrics({f"hierarchical/{k}": v for k, v in hier_metrics.items()}) + + with TemporaryDirectory() as tmpdir: + output_path = Path(tmpdir) / "results.csv" + results.to_csv(output_path, index=False) + logger.log_artifact(str(output_path)) + + +if __name__ == "__main__": + main() diff --git a/postprocessing/ensembling_predict.py b/postprocessing/ensembling_predict.py new file mode 100644 index 00000000..b5c2c6e3 --- /dev/null +++ b/postprocessing/ensembling_predict.py @@ -0,0 +1,64 @@ +from pathlib import Path +from tempfile import TemporaryDirectory + +import hydra +import numpy as np +import pandas as pd +from omegaconf import DictConfig +from rationai.mlkit import autolog, with_cli_args +from rationai.mlkit.lightning.loggers import MLFlowLogger + +from postprocessing.utils import load_predictions + +PredictionData = dict[str, pd.DataFrame] + + +def run_ensembling_predict(data: PredictionData) -> pd.DataFrame: + neut_df = data["neutrophils"] + nlow_df = data["nancy_low"] + nhigh_df = data["nancy_high"] + + neut_prob = np.array(neut_df["prediction"]) + low_probs = np.array(nlow_df["prediction"].tolist()) + high_probs = np.array(nhigh_df["prediction"].tolist()) + + low_branch = low_probs[:, :2].argmax(axis=1) + high_branch = high_probs[:, 1:].argmax(axis=1) + 2 + + # Ensembling: soft majority vote across three tasks + route_high_ens = ( + neut_prob + low_probs[:, 2] + high_probs[:, 1:].sum(axis=1) + ) >= 1.5 + ens_pred = np.where(route_high_ens, high_branch, low_branch) + + # Hierarchical: neutrophils task alone routes + hier_pred = np.where(neut_prob >= 0.5, high_branch, low_branch) + + return pd.DataFrame( + { + "slide": neut_df.index, + "pred_ensembling": ens_pred.astype(int), + "pred_hierarchical": hier_pred.astype(int), + } + ) + + +@with_cli_args(["+postprocessing=ensembling_predict"]) +@hydra.main(config_path="../configs", config_name="postprocessing", version_base=None) +@autolog +def main(config: DictConfig, logger: MLFlowLogger) -> None: + uris = { + task: config.predictions.mlflow_uris[task] + for task in ["neutrophils", "nancy_low", "nancy_high"] + } + data = load_predictions(uris) + results = run_ensembling_predict(data) + + with TemporaryDirectory() as tmpdir: + output_path = Path(tmpdir) / "results.csv" + results.to_csv(output_path, index=False) + logger.log_artifact(str(output_path)) + + +if __name__ == "__main__": + main() diff --git a/postprocessing/markov_chain_confidence.py b/postprocessing/markov_chain_confidence.py new file mode 100644 index 00000000..fc9cac56 --- /dev/null +++ b/postprocessing/markov_chain_confidence.py @@ -0,0 +1,97 @@ +from enum import Enum + +import hydra +import numpy as np +import pandas as pd +from omegaconf import DictConfig +from rationai.mlkit import autolog, with_cli_args +from rationai.mlkit.lightning.loggers import MLFlowLogger + +from postprocessing.utils import load_label_map, load_predictions + + +class Confidence(Enum): + ENTROPY = "entropy" + HERFINDAHL = "herfindahl" + STD = "std" + + +def absorption_distribution( + neut_df: pd.DataFrame, nlow_df: pd.DataFrame, nhigh_df: pd.DataFrame +) -> np.ndarray: + low = np.array(nlow_df["prediction"].tolist()) # (n, 3) + high = np.array(nhigh_df["prediction"].tolist()) # (n, 4) + + a = 1.0 - np.array(neut_df["prediction"]) # P(neut -> nancy_low) + b = low[:, 2] # P(nancy_low -> nancy_high) + c = low[:, 0] # P(nancy_low -> NHI-0) + d = high[:, 0] # P(nancy_high -> nancy_low) + e = high[:, 1] # P(nancy_high -> NHI-2) + f = high[:, 2] # P(nancy_high -> NHI-3) + + denom = 1.0 - b * d + flow_low = a + d - a * d # absorption flow factor for NHI 0/1 + flow_high = 1.0 - a * (1.0 - b) # absorption flow factor for NHI 2/3/4 + + return np.column_stack( + [ + c * flow_low / denom, # P(NHI-0) + low[:, 1] * flow_low / denom, # P(NHI-1) + e * flow_high / denom, # P(NHI-2) + f * flow_high / denom, # P(NHI-3) + high[:, 3] * flow_high / denom, # P(NHI-4) + ] + ) + + +def compute_confidence(pi: np.ndarray, mode: Confidence) -> np.ndarray: + match mode: + case Confidence.ENTROPY: + safe = np.where(pi > 0, pi, 1.0) + return 1.0 - (-(pi * np.log(safe) / np.log(5)).sum(axis=1)) + case Confidence.HERFINDAHL: + return (np.square(pi).sum(axis=1) - 0.2) / 0.8 + case Confidence.STD: + classes = np.array([0, 1, 2, 3, 4], dtype=float) + mu = (pi * classes).sum(axis=1, keepdims=True) + var = (pi * (classes - mu) ** 2).sum(axis=1) + return np.maximum(0.0, 1.0 - np.sqrt(var)) + + +@with_cli_args(["+postprocessing=markov_chain_confidence"]) +@hydra.main(config_path="../configs", config_name="postprocessing", version_base=None) +@autolog +def main(config: DictConfig, logger: MLFlowLogger) -> None: + confidence_mode = Confidence(config.confidence) + label_map = load_label_map(config.dataset.mlflow_uris.dataset) + uris = { + task: config.predictions.mlflow_uris[task] + for task in ["neutrophils", "nancy_low", "nancy_high"] + } + data = load_predictions(uris, label_map) + + pi = absorption_distribution( + data["neutrophils"], data["nancy_low"], data["nancy_high"] + ) + confidence = compute_confidence(pi, confidence_mode) + + rows = [ + { + "slide": slide, + "pi_0": pi_row[0], + "pi_1": pi_row[1], + "pi_2": pi_row[2], + "pi_3": pi_row[3], + "pi_4": pi_row[4], + "confidence": conf, + } + for slide, pi_row, conf in zip( + data["neutrophils"].index, pi, confidence, strict=True + ) + ] + + logger.log_table(pd.DataFrame(rows), artifact_file="confidence.json") + + +if __name__ == "__main__": + main() diff --git a/postprocessing/markov_chain_confidence_predict.py b/postprocessing/markov_chain_confidence_predict.py new file mode 100644 index 00000000..025adac3 --- /dev/null +++ b/postprocessing/markov_chain_confidence_predict.py @@ -0,0 +1,50 @@ +import hydra +import pandas as pd +from omegaconf import DictConfig +from rationai.mlkit import autolog, with_cli_args +from rationai.mlkit.lightning.loggers import MLFlowLogger + +from postprocessing.markov_chain_confidence import ( + Confidence, + absorption_distribution, + compute_confidence, +) +from postprocessing.utils import load_predictions + + +@with_cli_args(["+postprocessing=markov_chain_confidence_predict"]) +@hydra.main(config_path="../configs", config_name="postprocessing", version_base=None) +@autolog +def main(config: DictConfig, logger: MLFlowLogger) -> None: + confidence_mode = Confidence(config.confidence) + uris = { + task: config.predictions.mlflow_uris[task] + for task in ["neutrophils", "nancy_low", "nancy_high"] + } + data = load_predictions(uris) + + pi = absorption_distribution( + data["neutrophils"], data["nancy_low"], data["nancy_high"] + ) + confidence = compute_confidence(pi, confidence_mode) + + rows = [ + { + "slide": slide, + "pi_0": pi_row[0], + "pi_1": pi_row[1], + "pi_2": pi_row[2], + "pi_3": pi_row[3], + "pi_4": pi_row[4], + "confidence": conf, + } + for slide, pi_row, conf in zip( + data["neutrophils"].index, pi, confidence, strict=True + ) + ] + + logger.log_table(pd.DataFrame(rows), artifact_file="confidence.json") + + +if __name__ == "__main__": + main() diff --git a/postprocessing/utils.py b/postprocessing/utils.py new file mode 100644 index 00000000..1a637556 --- /dev/null +++ b/postprocessing/utils.py @@ -0,0 +1,43 @@ +import json +from collections.abc import Mapping +from pathlib import Path + +import mlflow +import mlflow.artifacts +import pandas as pd + + +TASKS = ["neutrophils", "nancy_low", "nancy_high"] + + +def load_label_map(dataset_uri: str) -> dict[str, int]: + dataset = pd.read_csv(mlflow.artifacts.download_artifacts(dataset_uri), index_col=0) + return {str(k): int(v) for k, v in dataset["nancy"].items()} + + +def load_task_predictions( + uri: str, label_map: dict[str, int] | None = None +) -> pd.DataFrame: + artifact_path = Path(mlflow.artifacts.download_artifacts(uri)) + if artifact_path.is_dir(): + (artifact_path,) = artifact_path.glob("*.json") + with open(artifact_path) as f: + d = json.load(f) + df = pd.DataFrame(d["data"], columns=d["columns"]) + if label_map is None: + return df.set_index("slide") + df["nancy"] = df["slide"].map(label_map) + df = df[df["nancy"].notna()].copy() + df["nancy"] = df["nancy"].astype(int) + return df.set_index("slide") + + +def load_predictions( + uris: Mapping[str, str], + label_map: dict[str, int] | None = None, +) -> dict[str, pd.DataFrame]: + task_dfs = {task: load_task_predictions(uris[task], label_map) for task in TASKS} + common = task_dfs[TASKS[0]].index + for df in task_dfs.values(): + common = common.intersection(df.index) + return {k: v.loc[common] for k, v in task_dfs.items()} diff --git a/preprocessing/create_dataset.py b/preprocessing/create_dataset.py index 551dd39d..695b86d1 100644 --- a/preprocessing/create_dataset.py +++ b/preprocessing/create_dataset.py @@ -48,14 +48,18 @@ def get_slides(folder_path: Path, pattern: re.Pattern[str]) -> pd.DataFrame: def create_dataset( - folder: str, labels: list[str], institution: str, pattern: re.Pattern[str] + folder: str, + labels: list[str], + institution: str, + pattern: re.Pattern[str], + drop_missing: bool = True, ) -> tuple[pd.DataFrame, list[str], list[str]]: folder_path = Path(folder) labels_df = get_labels(folder_path, labels) slides_df = get_slides(folder_path, pattern) # IKEM has only case-level labels (FTN has one slide per case) - on = "case_id" if institution == "ikem" else "slide_id" + on = "case_id" if institution.startswith("ikem") else "slide_id" dataset_df = slides_df.join(labels_df, on=on, how="outer") dataset_df.index.name = "slide_id" @@ -69,8 +73,9 @@ def create_dataset( missing_slides = dataset_df[dataset_df["path"].isna()][on].to_list() dataset_df = dataset_df[["case_id", "path", "nancy"]] - dataset_df = dataset_df.dropna() - dataset_df["nancy"] = dataset_df["nancy"].astype(int) + if drop_missing: + dataset_df = dataset_df.dropna() + dataset_df["nancy"] = dataset_df["nancy"].astype(int) return dataset_df, missing_slides, missing_labels @@ -84,6 +89,7 @@ def main(config: DictConfig, logger: MLFlowLogger) -> None: config.dataset.labels, config.dataset.institution, re.compile(config.dataset.regex_pattern), + config.dataset.drop_missing ) with tempfile.TemporaryDirectory() as tmpdir: diff --git a/preprocessing/neutrophils.py b/preprocessing/neutrophils.py new file mode 100644 index 00000000..c7d07b06 --- /dev/null +++ b/preprocessing/neutrophils.py @@ -0,0 +1,124 @@ +import tempfile +from pathlib import Path +from typing import cast + +import hydra +import pandas as pd +import torch +from omegaconf import DictConfig +from rationai.mlkit import autolog, with_cli_args +from rationai.mlkit.lightning.loggers import MLFlowLogger +from torch.utils.data import DataLoader +from tqdm import tqdm + +from ml.data.datasets import TilesPredict + + +class NeutrophilDetector(torch.nn.Module): + def __init__(self, confidence: float, weights_url: str) -> None: + super().__init__() + with tempfile.NamedTemporaryFile(suffix=".pt") as temp_file: + torch.hub.download_url_to_file(weights_url, temp_file.name) + self.model = cast( + "torch.nn.Module", + torch.hub.load("ultralytics/yolov5", "custom", path=temp_file.name), + ) + self.model.conf = torch.tensor(confidence) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.model(x) + + +def save_neutrophils( + x0: torch.Tensor, + y0: torch.Tensor, + x1: torch.Tensor, + y1: torch.Tensor, + probability: torch.Tensor, + neutrophils_path: Path, +) -> None: + neutrophils_path.parent.mkdir(parents=True, exist_ok=True) + + df = pd.DataFrame( + { + "x0": x0.numpy(), + "y0": y0.numpy(), + "x1": x1.numpy(), + "y1": y1.numpy(), + "probability": probability.numpy(), + } + ) + + df.to_parquet(neutrophils_path, index=False, engine="pyarrow") + + +@with_cli_args(["+preprocessing=neutrophils"]) +@hydra.main(config_path="../configs", config_name="preprocessing", version_base=None) +@autolog +def main(config: DictConfig, logger: MLFlowLogger) -> None: + dest = Path(config.output_dir) + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + neutrophil_detector = NeutrophilDetector(**config.model) + neutrophil_detector = neutrophil_detector.to(device) + + with torch.no_grad(): + dataset = TilesPredict( + config.dataset.mlflow_uris.tiling.values(), to_tensor=False + ) + + for slide_dataset in tqdm(dataset.generate_datasets()): + slide_name = str(slide_dataset.slide_metadata["name"]) + neutrophils_path = (dest / slide_name).with_suffix(".parquet") + + try: + slide_tiles_dataloader = DataLoader( + slide_dataset, + batch_size=config.dataloader.batch_size, + num_workers=config.dataloader.num_workers, + persistent_workers=config.dataloader.persistent_workers, + collate_fn=lambda batch: ( + [x for x, _ in batch], + [m for _, m in batch], + ), + ) + + x0, y0, x1, y1, probability = [], [], [], [], [] + + for x, metadata in slide_tiles_dataloader: + result = neutrophil_detector(x) + + result.xyxy = cast("list[torch.Tensor]", result.xyxy) + for m, xyxy in zip(metadata, result.xyxy, strict=True): + if xyxy.numel() == 0: + continue + xyxy = xyxy.cpu() + x0.append(xyxy[:, 0] + m["x"]) + y0.append(xyxy[:, 1] + m["y"]) + x1.append(xyxy[:, 2] + m["x"]) + y1.append(xyxy[:, 3] + m["y"]) + probability.append(xyxy[:, 4]) + + if len(x0) == 0: + empty = torch.empty((0,), dtype=torch.float32) + save_neutrophils( + empty, empty, empty, empty, empty, neutrophils_path + ) + continue + + save_neutrophils( + torch.concat(x0), + torch.concat(y0), + torch.concat(x1), + torch.concat(y1), + torch.concat(probability), + neutrophils_path, + ) + + except Exception as e: + print(f"Error processing slide {slide_name}: {e}") + + logger.log_artifacts(local_dir=str(dest), artifact_path="neutrophils") + + +if __name__ == "__main__": + main() diff --git a/preprocessing/quality_control.py b/preprocessing/quality_control.py index 8f657366..f29e9dd6 100644 --- a/preprocessing/quality_control.py +++ b/preprocessing/quality_control.py @@ -49,6 +49,34 @@ def organize_masks(output_path: Path, subdir: str, mask_prefix: str) -> None: file.rename(destination) +def filter_dataset_by_qc_errors( + dataset: pd.DataFrame, qc_errors_uri: str | None +) -> pd.DataFrame: + """Keep only the rows of `dataset` whose slide failed QC. + + `qc_errors_uri` is an MLflow artifact URI pointing to a `qc_errors.log` + file produced by `qc_main` (lines formatted as + "Failed to process {wsi_path}: {error}"), e.g. + "mlflow-artifacts:/86/433c941b3706450aa499f9bee4b17701/artifacts/qc_errors.log". + If `qc_errors_uri` is None, no QC run is available to filter by and the + whole dataset is returned unchanged. + """ + if qc_errors_uri is None: + return dataset + + prefix = "Failed to process " + failed_paths: set[str] = set() + with open(download_artifacts(qc_errors_uri)) as log_file: + for line in log_file: + line = line.rstrip("\n") + if not line.startswith(prefix): + continue + wsi_path, _, _error = line[len(prefix) :].partition(":") + failed_paths.add(wsi_path.strip()) + + return dataset[dataset["path"].isin(failed_paths)].reset_index(drop=True) + + async def qc_main( output_path: Path, slides: list[str], @@ -57,6 +85,10 @@ async def qc_main( max_concurrent: int, qc_parameters: QCParameters, ) -> None: + qc_errors_path = output_path / "qc_errors.log" + if qc_errors_path.exists(): + qc_errors_path.unlink() + async with rationai.AsyncClient() as client: # type: ignore[attr-defined] async for result in tqdm( client.qc.check_slides( @@ -69,7 +101,7 @@ async def qc_main( total=len(slides), ): if not result.success: - with open(output_path / "qc_errors.log", "a") as log_file: + with open(qc_errors_path, "a") as log_file: log_file.write( f"Failed to process {result.wsi_path}: {result.error}\n" ) @@ -78,11 +110,13 @@ async def qc_main( for prefix, artifact_name in get_qc_masks(qc_parameters): organize_masks(Path(output_path), artifact_name, prefix) - # Merge generated csv files - csvs = list(Path(output_path).glob("*.csv")) - pd.concat([pd.read_csv(f) for f in csvs]).to_csv( - Path(output_path, "qc_metrics.csv"), index=False - ) + # Merge generated csv files, appending to any pre-existing qc_metrics.csv + metrics_path = Path(output_path, "qc_metrics.csv") + csvs = [f for f in Path(output_path).glob("*.csv") if f != metrics_path] + new_metrics = [pd.read_csv(f) for f in csvs] + if metrics_path.exists(): + new_metrics.insert(0, pd.read_csv(metrics_path)) + pd.concat(new_metrics).to_csv(metrics_path, index=False) # Remove individual csv files for f in csvs: @@ -96,6 +130,7 @@ async def qc_main( @autolog def main(config: DictConfig, logger: MLFlowLogger) -> None: dataset = pd.read_csv(download_artifacts(config.dataset.mlflow_uris.dataset)) + dataset = filter_dataset_by_qc_errors(dataset, config.get("qc_errors_uri")) output_path = Path(config.output_dir) output_path.mkdir(parents=True, exist_ok=True) diff --git a/preprocessing/tiling.py b/preprocessing/tiling.py index 9318876a..b404c4ba 100644 --- a/preprocessing/tiling.py +++ b/preprocessing/tiling.py @@ -42,7 +42,15 @@ def add_nancy_index(row: dict[str, Any], df: pd.DataFrame) -> dict[str, Any]: def qc_agg(row: dict[str, Any], df: pd.DataFrame) -> dict[str, Any]: - qc_df = cast("pd.Series", df.loc[Path(row["path"]).stem]) + stem = Path(row["path"]).stem + + if stem not in df.index: + print(f"[tiling] WARNING: no QC row for slide '{stem}', filling NaN") + row["blur_mean"] = float("nan") + row["artifacts_mean"] = float("nan") + return row + + qc_df = cast("pd.Series", df.loc[stem]) row["blur_mean"] = qc_df[QC_BLUR_MEAN_COLUMN] row["artifacts_mean"] = qc_df[QC_ARTIFACTS_MEAN_COLUMN] @@ -62,6 +70,17 @@ def add_mask_paths( row["tissue_mask_path"] = str(tissue_folder / f"{stem}.tiff") for key, subfolder in QC_SUBFOLDERS.items(): row[f"{key}_mask_path"] = str(qc_folder / subfolder / f"{stem}.tiff") + + # The tissue mask is always expected to exist; the QC masks (blur and + # artifacts) come from the same QC run and are either both present or + # both missing, e.g. when QC hasn't run on a slide yet. + missing = [ + key for key in QC_SUBFOLDERS if not Path(row[f"{key}_mask_path"]).exists() + ] + if missing: + print(f"[tiling] WARNING: missing QC mask(s) {missing} for slide '{stem}'") + row["qc_masks_available"] = not missing + return row @@ -90,6 +109,7 @@ def tile(row: dict[str, Any]) -> list[dict[str, Any]]: "tissue_mask_path": row["tissue_mask_path"], "blur_mask_path": row["blur_mask_path"], "artifacts_mask_path": row["artifacts_mask_path"], + "qc_masks_available": row["qc_masks_available"], } for x, y in grid_tiles( slide_extent=(row["extent_x"], row["extent_y"]), @@ -110,10 +130,30 @@ def extract_coverages(row: dict[str, Any], *cols: str) -> dict[str, Any]: return row +def fill_nan_coverages(row: dict[str, Any], *cols: str) -> dict[str, Any]: + for c in cols: + row[c] = float("nan") + return row + + +def drop_columns(row: dict[str, Any], *cols: str) -> dict[str, Any]: + for c in cols: + row.pop(c, None) + return row + + def filter_tissue(row: dict[str, Any], threshold: float) -> bool: return row["tissue"] >= threshold +def filter_mask_available(row: dict[str, Any], key: str) -> bool: + return row[key] + + +def filter_mask_missing(row: dict[str, Any], key: str) -> bool: + return not row[key] + + def select(row: dict[str, Any]) -> dict[str, Any]: return { "slide_id": row["slide_id"], @@ -150,7 +190,7 @@ def tiling( tissue_roi = create_tissue_roi(tile_extent) qc_roi = create_qc_roi(tile_extent) - tiles = ( + all_tiles = ( slides.map( add_mask_paths, # pyright: ignore[reportArgumentType] fn_args=(qc_folder, tissue_folder), @@ -173,7 +213,22 @@ def tiling( **HI_MEM, ) .map(extract_coverages, fn_args=("tissue",), **LO_CPU, **LO_MEM) # pyright: ignore[reportArgumentType] + .map(drop_columns, fn_args=("tissue_overlap",), **LO_CPU, **LO_MEM) # pyright: ignore[reportArgumentType] .filter(filter_tissue, fn_args=(tissue_threshold,), **LO_CPU, **LO_MEM) # pyright: ignore[reportArgumentType] + ) + + # blur and artifacts QC masks come from the same QC run, so they're + # either both present or both missing for a slide (e.g. QC hasn't run on + # it yet). Split off the tiles whose QC masks exist and compute the real + # coverages, fill NaN for the rest, then recombine so no tile is dropped + # just because QC hasn't run on its slide. + qc_tiles_available = ( + all_tiles.filter( + filter_mask_available, # pyright: ignore[reportArgumentType] + fn_args=("qc_masks_available",), + **LO_CPU, + **LO_MEM, + ) .with_column( "blur_overlap", tile_overlay_overlap( @@ -201,7 +256,23 @@ def tiling( **HI_MEM, ) .map(extract_coverages, fn_args=("blur", "artifacts"), **LO_CPU, **LO_MEM) # pyright: ignore[reportArgumentType] - .map(select, **LO_CPU, **LO_MEM) + .map( + drop_columns, + fn_args=("blur_overlap", "artifacts_overlap"), + **LO_CPU, + **LO_MEM, + ) # pyright: ignore[reportArgumentType] + ) + + qc_tiles_missing = all_tiles.filter( + filter_mask_missing, # pyright: ignore[reportArgumentType] + fn_args=("qc_masks_available",), + **LO_CPU, + **LO_MEM, + ).map(fill_nan_coverages, fn_args=("blur", "artifacts"), **LO_CPU, **LO_MEM) # pyright: ignore[reportArgumentType] + + tiles = qc_tiles_available.union(qc_tiles_missing).map( + select, **LO_CPU, **LO_MEM ) return slides.to_pandas(), tiles.to_pandas() diff --git a/project_name/data/__init__.py b/project_name/data/__init__.py deleted file mode 100644 index cee3ad5d..00000000 --- a/project_name/data/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from project_name.data.data_module import DataModule - - -__all__ = ["DataModule"] diff --git a/project_name/data/data_module.py b/project_name/data/data_module.py deleted file mode 100644 index d3b8e06b..00000000 --- a/project_name/data/data_module.py +++ /dev/null @@ -1,51 +0,0 @@ -from collections.abc import Iterable - -from hydra.utils import instantiate -from lightning import LightningDataModule -from omegaconf import DictConfig -from torch.utils.data import DataLoader - -from project_name.typing import Input - - -class DataModule(LightningDataModule): - def __init__( - self, batch_size: int, num_workers: int = 0, **datasets: DictConfig - ) -> None: - super().__init__() - self.batch_size = batch_size - self.num_workers = num_workers - self.datasets = datasets - - def setup(self, stage: str) -> None: - match stage: - case "fit": - self.train = instantiate(self.datasets["train"]) - self.val = instantiate(self.datasets["val"]) - case "validate": - self.val = instantiate(self.datasets["val"]) - case "test": - self.test = instantiate(self.datasets["test"]) - - def train_dataloader(self) -> Iterable[Input]: - return DataLoader( - self.train, - batch_size=self.batch_size, - shuffle=True, - drop_last=True, - num_workers=self.num_workers, - persistent_workers=self.num_workers > 0, - ) - - def val_dataloader(self) -> Iterable[Input]: - return DataLoader( - self.val, - batch_size=self.batch_size, - num_workers=self.num_workers, - persistent_workers=self.num_workers > 0, - ) - - def test_dataloader(self) -> Iterable[Input]: - return DataLoader( - self.test, batch_size=self.batch_size, num_workers=self.num_workers - ) diff --git a/project_name/modeling/README.md b/project_name/modeling/README.md deleted file mode 100644 index 5456c5a2..00000000 --- a/project_name/modeling/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Modeling - -In this folder you should put all your model and loss components. Common structure is as follows: - -``` -modeling -├── backbone -│ ├── vgg16.py -│ ├── resnet.py -│ └── __init__.py -├── criterion.py -├── decode_head.py -├── metrics -│ ├── vgg16.py -│ ├── resnet.py -│ └── __init__.py -└── __init__.py -``` - - -### Structure Explanation - -- **backbone**: Contains the backbone network architectures like VGG16, ResNet, etc. -- **criterion.py**: Contains the loss functions. -- **decode_head.py**: Contains the decoding heads for the models. -- **metrics**: Contains the metric components for model evaluation, such as accuracy, precision, etc. - -### Note - -You can add a `metrics` folder to store all your metric components. However, if your evaluation logic becomes too complex, it is recommended to move it to an `evaluation` folder at the project level. diff --git a/project_name/project_name_model.py b/project_name/project_name_model.py deleted file mode 100644 index 85e50bcb..00000000 --- a/project_name/project_name_model.py +++ /dev/null @@ -1,54 +0,0 @@ -from lightning import LightningModule -from torch import Tensor, nn -from torch.optim.optimizer import Optimizer -from torchmetrics import MetricCollection - -from project_name.typing import Input, Outputs - - -class ProjectNameModel(LightningModule): - def __init__(self, backbone: nn.Module, decode_head: nn.Module) -> None: - super().__init__() - self.backbone = backbone - self.decode_head = decode_head - self.criterion = ... # TODO add your loss function - - self.val_metrics = MetricCollection( - {...}, # TODO add metrics you want to compute - prefix="validation/", - ) - - self.test_mterics = self.val_metrics.clone(prefix="test/") - - def forward(self, x: Input) -> Outputs: - features = self.backbone(x) - return self.decode_head(features) - - def training_step(self, batch: Input) -> Tensor: - inputs, targets = batch - outputs = self(inputs) - - loss = self.criterion(outputs, targets) - self.log("train/loss", loss, on_step=True, prog_bar=True) - - return loss - - def validation_step(self, batch: Input) -> None: - inputs, targets = batch - outputs = self(inputs) - - loss = self.criterion(outputs, targets) - self.log("validation/loss", loss, on_epoch=True, prog_bar=True) - - self.val_metrics.update(outputs, targets) - self.log_dict(self.val_metrics, on_epoch=True) - - def test_step(self, batch: Input) -> None: - inputs, targets = batch - outputs = self(inputs) - self.test_metrics.update(outputs, targets) - self.log_dict(self.test_metrics, on_epoch=True) - - def configure_optimizers(self) -> Optimizer: - # TODO add your optimizer - ... diff --git a/project_name/typing.py b/project_name/typing.py deleted file mode 100644 index af3f90aa..00000000 --- a/project_name/typing.py +++ /dev/null @@ -1,8 +0,0 @@ -from typing import TypeAlias - - -Sample: TypeAlias = ... # TODO define the type returned by Dataset - -Input: TypeAlias = ... # TODO define the model input type - -Outputs: TypeAlias = ... # TODO define the model output type diff --git a/pyproject.toml b/pyproject.toml index b8b57a84..57a09c60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ license = { file = "LICENSE" } dependencies = [ "aiohttp>=3.13.2", "lightning>=2.5.6", - "mlflow<3.0.0", + "mlflow", "omegaconf>=2.3.0", "openpyxl>=3.1.5", "pandas>=2.3.3", @@ -29,7 +29,7 @@ dev = ["mypy", "ruff", "ipykernel"] job = ["rationai-kube-jobs"] [tool.uv.sources] -rationai-mlkit = { git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/mlkit.git" } +rationai-mlkit = { git = "https://github.com/RationAI/mlkit.git" } rationai-masks = { git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/masks.git" } rationai-tiling = { git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/tiling.git" } rationai-kube-jobs = { git = "ssh://git@gitlab.ics.muni.cz/rationai/infrastructure/kube-jobs" } diff --git a/scripts/ml/neutrophils.py b/scripts/ml/neutrophils.py new file mode 100644 index 00000000..cd5727a6 --- /dev/null +++ b/scripts/ml/neutrophils.py @@ -0,0 +1,16 @@ +from kube_jobs import submit_job + + +submit_job( + job_name="ulcerative-colitis-ml-neutrophils-...", + username=..., + public=False, + cpu=4, + memory="8Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m ml.neutrophils +experiment=ml/experiment_vi_neutrophil_detection/run", + ], +) diff --git a/scripts/ml/test.py b/scripts/ml/test.py new file mode 100644 index 00000000..fbdbc099 --- /dev/null +++ b/scripts/ml/test.py @@ -0,0 +1,18 @@ +from kube_jobs import storage, submit_job + + +submit_job( + job_name="ulcerative-colitis-ml-test-...", + username=..., + public=False, + gpu="mig-1g.10gb", + cpu=10, + memory="64Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m ml +experiment=ml/.../...", + ], + storage=[storage.secure.DATA], +) diff --git a/scripts/ml/train.py b/scripts/ml/train.py new file mode 100644 index 00000000..12571e2d --- /dev/null +++ b/scripts/ml/train.py @@ -0,0 +1,18 @@ +from kube_jobs import storage, submit_job + + +submit_job( + job_name="ulcerative-colitis-ml-train-...", + username=..., + public=False, + gpu="mig-1g.10gb", + cpu=10, + memory="64Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m ml +experiment=ml/.../...", + ], + storage=[storage.secure.DATA], +) diff --git a/scripts/postprocessing/ensembling.py b/scripts/postprocessing/ensembling.py new file mode 100644 index 00000000..a474cf69 --- /dev/null +++ b/scripts/postprocessing/ensembling.py @@ -0,0 +1,16 @@ +from kube_jobs import submit_job + + +submit_job( + job_name="ulcerative-colitis-ensembling-...", + username=..., + public=False, + cpu=2, + memory="4Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m postprocessing.ensembling +experiment=postprocessing/..._ensembling/...", + ], +) diff --git a/scripts/postprocessing/ensembling_predict.py b/scripts/postprocessing/ensembling_predict.py new file mode 100644 index 00000000..ac8678e2 --- /dev/null +++ b/scripts/postprocessing/ensembling_predict.py @@ -0,0 +1,16 @@ +from kube_jobs import submit_job + + +submit_job( + job_name="ulcerative-colitis-ensembling-predict-...", + username=..., + public=False, + cpu=2, + memory="4Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m postprocessing.ensembling_predict +experiment=postprocessing/predict_ensembling/ikem_validation", + ], +) diff --git a/scripts/postprocessing/markov_chain_confidence.py b/scripts/postprocessing/markov_chain_confidence.py new file mode 100644 index 00000000..6c221778 --- /dev/null +++ b/scripts/postprocessing/markov_chain_confidence.py @@ -0,0 +1,16 @@ +from kube_jobs import submit_job + + +submit_job( + job_name="ulcerative-colitis-markov-chain-confidence-...", + username=..., + public=False, + cpu=2, + memory="4Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m postprocessing.markov_chain_confidence +experiment=postprocessing/..._markov_chain_.../...", + ], +) diff --git a/scripts/postprocessing/markov_chain_confidence_predict.py b/scripts/postprocessing/markov_chain_confidence_predict.py new file mode 100644 index 00000000..71c2709b --- /dev/null +++ b/scripts/postprocessing/markov_chain_confidence_predict.py @@ -0,0 +1,16 @@ +from kube_jobs import submit_job + + +submit_job( + job_name="ulcerative-colitis-markov-chain-confidence-predict-...", + username=..., + public=False, + cpu=2, + memory="4Gi", + script=[ + "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", + "cd workdir", + "uv sync --frozen", + "uv run -m postprocessing.markov_chain_confidence_predict +experiment=postprocessing/predict_markov_chain_confidence/ikem_validation", + ], +) diff --git a/scripts/preprocessing/quality_control.py b/scripts/preprocessing/quality_control.py index dcb56b62..06dfb8c0 100644 --- a/scripts/preprocessing/quality_control.py +++ b/scripts/preprocessing/quality_control.py @@ -13,5 +13,5 @@ "uv sync --frozen", "uv run -m preprocessing.quality_control +dataset=processed/...", ], - storage=[storage.secure.DATA], + storage=[storage.secure.DATA, storage.secure.PROJECTS], ) diff --git a/scripts/preprocessing/tiling.py b/scripts/preprocessing/tiling.py index 61bea4d2..6226fb77 100644 --- a/scripts/preprocessing/tiling.py +++ b/scripts/preprocessing/tiling.py @@ -12,7 +12,7 @@ "git clone https://github.com/RationAI/ulcerative-colitis.git workdir", "cd workdir", "uv sync --frozen", - "uv run --active -m preprocessing.tiling +dataset=processed_w_masks/...", + "uv run --active -m preprocessing.tiling +dataset=processed_w_masks/... +experiment=preprocessing/tiling/...", ], storage=[storage.secure.DATA], ) diff --git a/uv.lock b/uv.lock index dd32999a..1a8d7ec6 100644 --- a/uv.lock +++ b/uv.lock @@ -329,6 +329,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, ] +[[package]] +name = "cryptography" +version = "46.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz", hash = "sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size = 750652, upload-time = "2026-04-08T01:57:54.692Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/5d/4a8f770695d73be252331e60e526291e3df0c9b27556a90a6b47bccca4c2/cryptography-46.0.7-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4", size = 7179869, upload-time = "2026-04-08T01:56:17.157Z" }, + { url = "https://files.pythonhosted.org/packages/5f/45/6d80dc379b0bbc1f9d1e429f42e4cb9e1d319c7a8201beffd967c516ea01/cryptography-46.0.7-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325", size = 4275492, upload-time = "2026-04-08T01:56:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9a/1765afe9f572e239c3469f2cb429f3ba7b31878c893b246b4b2994ffe2fe/cryptography-46.0.7-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308", size = 4426670, upload-time = "2026-04-08T01:56:21.415Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3e/af9246aaf23cd4ee060699adab1e47ced3f5f7e7a8ffdd339f817b446462/cryptography-46.0.7-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77", size = 4280275, upload-time = "2026-04-08T01:56:23.539Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/6bbbfc5efe86f9d71041827b793c24811a017c6ac0fd12883e4caa86b8ed/cryptography-46.0.7-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1", size = 4928402, upload-time = "2026-04-08T01:56:25.624Z" }, + { url = "https://files.pythonhosted.org/packages/2d/cf/054b9d8220f81509939599c8bdbc0c408dbd2bdd41688616a20731371fe0/cryptography-46.0.7-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef", size = 4459985, upload-time = "2026-04-08T01:56:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/f9/46/4e4e9c6040fb01c7467d47217d2f882daddeb8828f7df800cb806d8a2288/cryptography-46.0.7-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de", size = 3990652, upload-time = "2026-04-08T01:56:29.095Z" }, + { url = "https://files.pythonhosted.org/packages/36/5f/313586c3be5a2fbe87e4c9a254207b860155a8e1f3cca99f9910008e7d08/cryptography-46.0.7-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83", size = 4279805, upload-time = "2026-04-08T01:56:30.928Z" }, + { url = "https://files.pythonhosted.org/packages/69/33/60dfc4595f334a2082749673386a4d05e4f0cf4df8248e63b2c3437585f2/cryptography-46.0.7-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb", size = 4892883, upload-time = "2026-04-08T01:56:32.614Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0b/333ddab4270c4f5b972f980adef4faa66951a4aaf646ca067af597f15563/cryptography-46.0.7-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b", size = 4459756, upload-time = "2026-04-08T01:56:34.306Z" }, + { url = "https://files.pythonhosted.org/packages/d2/14/633913398b43b75f1234834170947957c6b623d1701ffc7a9600da907e89/cryptography-46.0.7-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85", size = 4410244, upload-time = "2026-04-08T01:56:35.977Z" }, + { url = "https://files.pythonhosted.org/packages/10/f2/19ceb3b3dc14009373432af0c13f46aa08e3ce334ec6eff13492e1812ccd/cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e", size = 4674868, upload-time = "2026-04-08T01:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bb/a5c213c19ee94b15dfccc48f363738633a493812687f5567addbcbba9f6f/cryptography-46.0.7-cp311-abi3-win32.whl", hash = "sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457", size = 3026504, upload-time = "2026-04-08T01:56:39.666Z" }, + { url = "https://files.pythonhosted.org/packages/2b/02/7788f9fefa1d060ca68717c3901ae7fffa21ee087a90b7f23c7a603c32ae/cryptography-46.0.7-cp311-abi3-win_amd64.whl", hash = "sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b", size = 3488363, upload-time = "2026-04-08T01:56:41.893Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7f/cd42fc3614386bc0c12f0cb3c4ae1fc2bbca5c9662dfed031514911d513d/cryptography-46.0.7-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4", size = 7165618, upload-time = "2026-04-08T01:57:10.645Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d0/36a49f0262d2319139d2829f773f1b97ef8aef7f97e6e5bd21455e5a8fb5/cryptography-46.0.7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7", size = 4270628, upload-time = "2026-04-08T01:57:12.885Z" }, + { url = "https://files.pythonhosted.org/packages/8a/6c/1a42450f464dda6ffbe578a911f773e54dd48c10f9895a23a7e88b3e7db5/cryptography-46.0.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832", size = 4415405, upload-time = "2026-04-08T01:57:14.923Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/4ed714dbe93a066dc1f4b4581a464d2d7dbec9046f7c8b7016f5286329e2/cryptography-46.0.7-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163", size = 4272715, upload-time = "2026-04-08T01:57:16.638Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e6/a26b84096eddd51494bba19111f8fffe976f6a09f132706f8f1bf03f51f7/cryptography-46.0.7-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2", size = 4918400, upload-time = "2026-04-08T01:57:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/c7/08/ffd537b605568a148543ac3c2b239708ae0bd635064bab41359252ef88ed/cryptography-46.0.7-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067", size = 4450634, upload-time = "2026-04-08T01:57:21.185Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/0cd51dd86ab5b9befe0d031e276510491976c3a80e9f6e31810cce46c4ad/cryptography-46.0.7-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0", size = 3985233, upload-time = "2026-04-08T01:57:22.862Z" }, + { url = "https://files.pythonhosted.org/packages/92/49/819d6ed3a7d9349c2939f81b500a738cb733ab62fbecdbc1e38e83d45e12/cryptography-46.0.7-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba", size = 4271955, upload-time = "2026-04-08T01:57:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/ad9b3c56ebb95ed2473d46df0847357e01583f4c52a85754d1a55e29e4d0/cryptography-46.0.7-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006", size = 4879888, upload-time = "2026-04-08T01:57:26.88Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c7/201d3d58f30c4c2bdbe9b03844c291feb77c20511cc3586daf7edc12a47b/cryptography-46.0.7-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0", size = 4449961, upload-time = "2026-04-08T01:57:29.068Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ef/649750cbf96f3033c3c976e112265c33906f8e462291a33d77f90356548c/cryptography-46.0.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85", size = 4401696, upload-time = "2026-04-08T01:57:31.029Z" }, + { url = "https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size = 4664256, upload-time = "2026-04-08T01:57:33.144Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/f0ab06238e899cc3fb332623f337a7364f36f4bb3f2534c2bb95a35b132c/cryptography-46.0.7-cp38-abi3-win32.whl", hash = "sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246", size = 3013001, upload-time = "2026-04-08T01:57:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f1/00ce3bde3ca542d1acd8f8cfa38e446840945aa6363f9b74746394b14127/cryptography-46.0.7-cp38-abi3-win_amd64.whl", hash = "sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3", size = 3472985, upload-time = "2026-04-08T01:57:36.714Z" }, +] + [[package]] name = "cuda-bindings" version = "12.9.4" @@ -371,6 +410,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/08/71/ac3a16e620e4de7cea10695d7e926a6b00d7790208a932d81dd0b3136772/databricks_sdk-0.80.0-py3-none-any.whl", hash = "sha256:e654b08b945b4fc9651cfe65389035382c0885d74435123a0e4860d007fc963b", size = 788323, upload-time = "2026-01-22T20:30:49.372Z" }, ] +[[package]] +name = "datasets" +version = "4.8.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, + { name = "filelock" }, + { name = "fsspec", extra = ["http"] }, + { name = "httpx" }, + { name = "huggingface-hub" }, + { name = "multiprocess" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/34/14cd8e76f907f7d4dca2334cfeec9f81d30fd15c25a015f99aaea694eaed/datasets-4.8.5.tar.gz", hash = "sha256:0f0c1c3d56ffff2c93b2f4c63c95bac94f3d7e8621aea2a2a576275233bba772", size = 605649, upload-time = "2026-04-27T15:43:57.384Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/99/00f3196036501b53032c4b1ab8337a0b978dee832ed276dae3815df4e8b5/datasets-4.8.5-py3-none-any.whl", hash = "sha256:5079900781719c0e063a8efdd2cd95a31ad0c63209178669cd23cf1b926149ff", size = 528973, upload-time = "2026-04-27T15:43:53.702Z" }, +] + [[package]] name = "debugpy" version = "1.8.19" @@ -393,6 +457,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, ] +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315, upload-time = "2026-01-19T02:36:56.85Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019, upload-time = "2026-01-19T02:36:55.663Z" }, +] + [[package]] name = "docker" version = "7.1.0" @@ -487,6 +560,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/f9/7f9263c5695f4bd0023734af91bedb2ff8209e8de6ead162f35d8dc762fd/flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c", size = 103308, upload-time = "2025-08-19T21:03:19.499Z" }, ] +[[package]] +name = "flask-cors" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/74/0fc0fa68d62f21daef41017dafab19ef4b36551521260987eb3a5394c7ba/flask_cors-6.0.2.tar.gz", hash = "sha256:6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423", size = 13472, upload-time = "2025-12-12T20:31:42.861Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl", hash = "sha256:e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a", size = 13257, upload-time = "2025-12-12T20:31:41.3Z" }, +] + [[package]] name = "fonttools" version = "4.61.1" @@ -684,6 +770,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] +[[package]] +name = "hf-xet" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/92/ec9ad04d0b5728dca387a45af7bc98fbb0d73b2118759f5f6038b61a57e8/hf_xet-1.4.3.tar.gz", hash = "sha256:8ddedb73c8c08928c793df2f3401ec26f95be7f7e516a7bee2fbb546f6676113", size = 670477, upload-time = "2026-03-31T22:40:07.874Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/9f/9c23e4a447b8f83120798f9279d0297a4d1360bdbf59ef49ebec78fe2545/hf_xet-1.4.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d0da85329eaf196e03e90b84c2d0aca53bd4573d097a75f99609e80775f98025", size = 3805048, upload-time = "2026-03-31T22:39:53.105Z" }, + { url = "https://files.pythonhosted.org/packages/0b/f8/7aacb8e5f4a7899d39c787b5984e912e6c18b11be136ef13947d7a66d265/hf_xet-1.4.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:e23717ce4186b265f69afa66e6f0069fe7efbf331546f5c313d00e123dc84583", size = 3562178, upload-time = "2026-03-31T22:39:51.295Z" }, + { url = "https://files.pythonhosted.org/packages/df/9a/a24b26dc8a65f0ecc0fe5be981a19e61e7ca963b85e062c083f3a9100529/hf_xet-1.4.3-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc360b70c815bf340ed56c7b8c63aacf11762a4b099b2fe2c9bd6d6068668c08", size = 4212320, upload-time = "2026-03-31T22:39:42.922Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/46d493db155d2ee2801b71fb1b0fd67696359047fdd8caee2c914cc50c79/hf_xet-1.4.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:39f2d2e9654cd9b4319885733993807aab6de9dfbd34c42f0b78338d6617421f", size = 3991546, upload-time = "2026-03-31T22:39:41.335Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f5/067363e1c96c6b17256910830d1b54099d06287e10f4ec6ec4e7e08371fc/hf_xet-1.4.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:49ad8a8cead2b56051aa84d7fce3e1335efe68df3cf6c058f22a65513885baac", size = 4193200, upload-time = "2026-03-31T22:40:01.936Z" }, + { url = "https://files.pythonhosted.org/packages/42/4b/53951592882d9c23080c7644542fda34a3813104e9e11fa1a7d82d419cb8/hf_xet-1.4.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7716d62015477a70ea272d2d68cd7cad140f61c52ee452e133e139abfe2c17ba", size = 4429392, upload-time = "2026-03-31T22:40:03.492Z" }, + { url = "https://files.pythonhosted.org/packages/8a/21/75a6c175b4e79662ad8e62f46a40ce341d8d6b206b06b4320d07d55b188c/hf_xet-1.4.3-cp37-abi3-win_amd64.whl", hash = "sha256:6b591fcad34e272a5b02607485e4f2a1334aebf1bc6d16ce8eb1eb8978ac2021", size = 3677359, upload-time = "2026-03-31T22:40:13.619Z" }, + { url = "https://files.pythonhosted.org/packages/8a/7c/44314ecd0e89f8b2b51c9d9e5e7a60a9c1c82024ac471d415860557d3cd8/hf_xet-1.4.3-cp37-abi3-win_arm64.whl", hash = "sha256:7c2c7e20bcfcc946dc67187c203463f5e932e395845d098cc2a93f5b67ca0b47", size = 3533664, upload-time = "2026-03-31T22:40:12.152Z" }, +] + [[package]] name = "httpcore" version = "1.0.9" @@ -712,6 +814,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, ] +[[package]] +name = "huey" +version = "2.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/29/3428d52eb8e85025e264a291641a9f9d6407cc1e51d1b630f6ac5815999a/huey-2.6.0.tar.gz", hash = "sha256:8d11f8688999d65266af1425b831f6e3773e99415027177b8734b0ffd5e251f6", size = 221068, upload-time = "2026-01-06T03:01:02.055Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/34/fae9ac8f1c3a552fd3f7ff652b94c78d219dedc5fce0c0a4232457760a00/huey-2.6.0-py3-none-any.whl", hash = "sha256:1b9df9d370b49c6d5721ba8a01ac9a787cf86b3bdc584e4679de27b920395c3f", size = 76951, upload-time = "2026-01-06T03:01:00.808Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typer" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/ff/ec7ed2eb43bd7ce8bb2233d109cc235c3e807ffe5e469dc09db261fac05e/huggingface_hub-1.13.0.tar.gz", hash = "sha256:f6df2dac5abe82ce2fe05873d10d5ff47bc677d616a2f521f4ee26db9415d9d0", size = 781788, upload-time = "2026-04-30T11:57:33.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/db/4b1cdae9460ae1f3ca020cd767f013430ce23eb1d9c890ae3a0609b38d26/huggingface_hub-1.13.0-py3-none-any.whl", hash = "sha256:e942cb50d6a08dd5306688b1ac05bda157fd2fcc88b63dae405f7bd0d3234005", size = 660643, upload-time = "2026-04-30T11:57:31.802Z" }, +] + [[package]] name = "hydra-core" version = "1.3.2" @@ -1067,15 +1198,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59", size = 78509, upload-time = "2025-04-10T12:50:53.297Z" }, ] -[[package]] -name = "markdown" -version = "3.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/b1/af95bcae8549f1f3fd70faacb29075826a0d689a27f232e8cee315efa053/markdown-3.10.1.tar.gz", hash = "sha256:1c19c10bd5c14ac948c53d0d762a04e2fa35a6d58a6b7b1e6bfcbe6fefc0001a", size = 365402, upload-time = "2026-01-21T18:09:28.206Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/1b/6ef961f543593969d25b2afe57a3564200280528caa9bd1082eecdd7b3bc/markdown-3.10.1-py3-none-any.whl", hash = "sha256:867d788939fe33e4b736426f5b9f651ad0c0ae0ecf89df0ca5d1176c70812fe3", size = 107684, upload-time = "2026-01-21T18:09:27.203Z" }, -] - [[package]] name = "markdown-it-py" version = "4.0.0" @@ -1156,34 +1278,38 @@ wheels = [ [[package]] name = "mlflow" -version = "2.22.4" +version = "3.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "aiohttp" }, { name = "alembic" }, + { name = "cryptography" }, { name = "docker" }, { name = "flask" }, + { name = "flask-cors" }, { name = "graphene" }, { name = "gunicorn", marker = "sys_platform != 'win32'" }, - { name = "jinja2" }, - { name = "markdown" }, + { name = "huey" }, { name = "matplotlib" }, { name = "mlflow-skinny" }, + { name = "mlflow-tracing" }, { name = "numpy" }, { name = "pandas" }, { name = "pyarrow" }, { name = "scikit-learn" }, { name = "scipy" }, + { name = "skops" }, { name = "sqlalchemy" }, { name = "waitress", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cd/56/4aaea65472c25dd463ed0855c1d673749cd9050e5c8214642d17434b441a/mlflow-2.22.4.tar.gz", hash = "sha256:cb8cb3b82ec696dc613bcc347b023c20fc0ed6a82170b36d0ded01d3ba06da97", size = 28377569, upload-time = "2025-12-05T13:20:56.105Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/e3/b2148a6d6f38731d3dda49a7e46cf6932a458aa0aa5414b80e6e7251fa1d/mlflow-3.12.0.tar.gz", hash = "sha256:227ee31c6abf7ae3b3c38d4ca87c356e107578740c1efee89da43f2a5b9e3b47", size = 9939137, upload-time = "2026-05-05T10:28:58.312Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/0b/bf491b0604f2608e97b53b8cc33220fd20855ac4762d18d0ddf0d3ae3a6c/mlflow-2.22.4-py3-none-any.whl", hash = "sha256:c37b312060737cc9197c4a956c730fa6c292580787fe464efe736c339e87649a", size = 29004180, upload-time = "2025-12-05T13:20:52.703Z" }, + { url = "https://files.pythonhosted.org/packages/7e/f8/47f28975c1c1b70d351fa19c5aef21cef5ae1e1aca36bd1858798384bdbb/mlflow-3.12.0-py3-none-any.whl", hash = "sha256:e1c28ed4c48557cc52c766f17f1ca5826753ddf241d43f30f99c45f7ea6b3ce0", size = 10625639, upload-time = "2026-05-05T10:28:55.777Z" }, ] [[package]] name = "mlflow-skinny" -version = "2.22.4" +version = "3.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cachetools" }, @@ -1194,19 +1320,41 @@ dependencies = [ { name = "gitpython" }, { name = "importlib-metadata" }, { name = "opentelemetry-api" }, + { name = "opentelemetry-proto" }, { name = "opentelemetry-sdk" }, { name = "packaging" }, { name = "protobuf" }, { name = "pydantic" }, + { name = "python-dotenv" }, { name = "pyyaml" }, { name = "requests" }, { name = "sqlparse" }, + { name = "starlette" }, { name = "typing-extensions" }, { name = "uvicorn" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/73/de6cfdd1bd48fd896c33844b863931bf7215f9401e01e4554019aca0fa94/mlflow_skinny-2.22.4.tar.gz", hash = "sha256:d75ef4c6f38b745d84aef4d6dcb26331c8a3c784ee5a284ec89186398c8d927b", size = 5892192, upload-time = "2025-12-05T12:50:03.045Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/c0/9cbe24b4abcbadb3a3cdab65bfd552b6b75de64374b477abac89190d25d0/mlflow_skinny-3.12.0.tar.gz", hash = "sha256:74d27066bc9553d281e0c31d25f07deb39dbe99d190e4f7c257703e5c8ee6d10", size = 2723866, upload-time = "2026-05-05T10:28:46.388Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/05/2df60fab37881c490e9364ea697a6c3a78d3b593fde2d9332a75f8cdf1f8/mlflow_skinny-3.12.0-py3-none-any.whl", hash = "sha256:0498f3697abcabcc6204c432ef179840f6a7a34ce123837c98c1913064fda6dd", size = 3261903, upload-time = "2026-05-05T10:28:44.24Z" }, +] + +[[package]] +name = "mlflow-tracing" +version = "3.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cachetools" }, + { name = "databricks-sdk" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "packaging" }, + { name = "protobuf" }, + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/13/d32fe4cca53dde68f09fd38c545ea709e8565fd7c2ffd7c5eff99e504aaf/mlflow_tracing-3.12.0.tar.gz", hash = "sha256:8702a34a1d4f1517ba904d716f5a8fca4675e6526f7d164d02bdaabececa2d80", size = 1352412, upload-time = "2026-05-05T10:28:51.115Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/d1/549a995e261ca708c60fe0b63dfa4d1842fc58b04eb9c78cd678aebe1e7e/mlflow_skinny-2.22.4-py3-none-any.whl", hash = "sha256:3622115f53806d99fc42b0c2e45f225b16948584feeec7f233e484f08fe6c7f2", size = 6270862, upload-time = "2025-12-05T12:50:00.406Z" }, + { url = "https://files.pythonhosted.org/packages/a5/bf/e22b778addbe19a7a912400c37a197ee9cdebc1641e3b0a3882c30da6ee4/mlflow_tracing-3.12.0-py3-none-any.whl", hash = "sha256:c6072553f47b42505dc7ee62946688a4a0dde8f06b78fbc60e946397b20e1518", size = 1618720, upload-time = "2026-05-05T10:28:48.999Z" }, ] [[package]] @@ -1262,6 +1410,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, ] +[[package]] +name = "multiprocess" +version = "0.70.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dill" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/f2/e783ac7f2aeeed14e9e12801f22529cc7e6b7ab80928d6dcce4e9f00922d/multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897", size = 2079989, upload-time = "2026-01-19T06:47:39.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/45/8004d1e6b9185c1a444d6b55ac5682acf9d98035e54386d967366035a03a/multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87", size = 134948, upload-time = "2026-01-19T06:47:32.325Z" }, + { url = "https://files.pythonhosted.org/packages/86/c2/dec9722dc3474c164a0b6bcd9a7ed7da542c98af8cabce05374abab35edd/multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c", size = 144457, upload-time = "2026-01-19T06:47:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/71/70/38998b950a97ea279e6bd657575d22d1a2047256caf707d9a10fbce4f065/multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28", size = 150281, upload-time = "2026-01-19T06:47:35.037Z" }, + { url = "https://files.pythonhosted.org/packages/7e/82/69e539c4c2027f1e1697e09aaa2449243085a0edf81ae2c6341e84d769b6/multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5", size = 133477, upload-time = "2026-01-19T06:47:38.619Z" }, +] + [[package]] name = "mypy" version = "1.19.1" @@ -1560,6 +1723,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/df/d3f1ddf4bb4cb50ed9b1139cc7b1c54c34a1e7ce8fd1b9a37c0d1551a6bd/opentelemetry_api-1.39.1-py3-none-any.whl", hash = "sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950", size = 66356, upload-time = "2025-12-11T13:32:17.304Z" }, ] +[[package]] +name = "opentelemetry-proto" +version = "1.41.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/e8/633c6d8a9c8840338b105907e55c32d3da1983abab5e52f899f72a82c3d1/opentelemetry_proto-1.41.1.tar.gz", hash = "sha256:4b9d2eb631237ea43b80e16c073af438554e32bc7e9e3f8ca4a9582f900020e5", size = 45670, upload-time = "2026-04-24T13:15:49.768Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/1e/5cd77035e3e82070e2265a63a760f715aacd3cb16dddc7efee913f297fcc/opentelemetry_proto-1.41.1-py3-none-any.whl", hash = "sha256:0496713b804d127a4147e32849fbaf5683fac8ee98550e8e7679cd706c289720", size = 72076, upload-time = "2026-04-24T13:15:32.542Z" }, +] + [[package]] name = "opentelemetry-sdk" version = "1.39.1" @@ -1675,6 +1850,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, ] +[[package]] +name = "prettytable" +version = "3.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/45/b0847d88d6cfeb4413566738c8bbf1e1995fad3d42515327ff32cc1eb578/prettytable-3.17.0.tar.gz", hash = "sha256:59f2590776527f3c9e8cf9fe7b66dd215837cca96a9c39567414cbc632e8ddb0", size = 67892, upload-time = "2025-11-14T17:33:20.212Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/8c/83087ebc47ab0396ce092363001fa37c17153119ee282700c0713a195853/prettytable-3.17.0-py3-none-any.whl", hash = "sha256:aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287", size = 34433, upload-time = "2025-11-14T17:33:19.093Z" }, +] + [[package]] name = "prompt-toolkit" version = "3.0.52" @@ -1762,17 +1949,17 @@ wheels = [ [[package]] name = "pyarrow" -version = "19.0.1" +version = "23.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7f/09/a9046344212690f0632b9c709f9bf18506522feb333c894d0de81d62341a/pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e", size = 1129437, upload-time = "2025-02-18T18:55:57.027Z" } +sdist = { url = "https://files.pythonhosted.org/packages/88/22/134986a4cc224d593c1afde5494d18ff629393d74cc2eddb176669f234a4/pyarrow-23.0.1.tar.gz", hash = "sha256:b8c5873e33440b2bc2f4a79d2b47017a89c5a24116c055625e6f2ee50523f019", size = 1167336, upload-time = "2026-02-16T10:14:12.39Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b4/94e828704b050e723f67d67c3535cf7076c7432cd4cf046e4bb3b96a9c9d/pyarrow-19.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:80b2ad2b193e7d19e81008a96e313fbd53157945c7be9ac65f44f8937a55427b", size = 30670749, upload-time = "2025-02-18T18:53:00.062Z" }, - { url = "https://files.pythonhosted.org/packages/7e/3b/4692965e04bb1df55e2c314c4296f1eb12b4f3052d4cf43d29e076aedf66/pyarrow-19.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee8dec072569f43835932a3b10c55973593abc00936c202707a4ad06af7cb294", size = 32128007, upload-time = "2025-02-18T18:53:06.581Z" }, - { url = "https://files.pythonhosted.org/packages/22/f7/2239af706252c6582a5635c35caa17cb4d401cd74a87821ef702e3888957/pyarrow-19.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5d1ec7ec5324b98887bdc006f4d2ce534e10e60f7ad995e7875ffa0ff9cb14", size = 41144566, upload-time = "2025-02-18T18:53:11.958Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e3/c9661b2b2849cfefddd9fd65b64e093594b231b472de08ff658f76c732b2/pyarrow-19.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ad4c0eb4e2a9aeb990af6c09e6fa0b195c8c0e7b272ecc8d4d2b6574809d34", size = 42202991, upload-time = "2025-02-18T18:53:17.678Z" }, - { url = "https://files.pythonhosted.org/packages/fe/4f/a2c0ed309167ef436674782dfee4a124570ba64299c551e38d3fdaf0a17b/pyarrow-19.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d383591f3dcbe545f6cc62daaef9c7cdfe0dff0fb9e1c8121101cabe9098cfa6", size = 40507986, upload-time = "2025-02-18T18:53:26.263Z" }, - { url = "https://files.pythonhosted.org/packages/27/2e/29bb28a7102a6f71026a9d70d1d61df926887e36ec797f2e6acfd2dd3867/pyarrow-19.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b4c4156a625f1e35d6c0b2132635a237708944eb41df5fbe7d50f20d20c17832", size = 42087026, upload-time = "2025-02-18T18:53:33.063Z" }, - { url = "https://files.pythonhosted.org/packages/16/33/2a67c0f783251106aeeee516f4806161e7b481f7d744d0d643d2f30230a5/pyarrow-19.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bd1618ae5e5476b7654c7b55a6364ae87686d4724538c24185bbb2952679960", size = 25250108, upload-time = "2025-02-18T18:53:38.462Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4b/4166bb5abbfe6f750fc60ad337c43ecf61340fa52ab386da6e8dbf9e63c4/pyarrow-23.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f4b0dbfa124c0bb161f8b5ebb40f1a680b70279aa0c9901d44a2b5a20806039f", size = 34214575, upload-time = "2026-02-16T10:09:56.225Z" }, + { url = "https://files.pythonhosted.org/packages/e1/da/3f941e3734ac8088ea588b53e860baeddac8323ea40ce22e3d0baa865cc9/pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7", size = 35832540, upload-time = "2026-02-16T10:10:03.428Z" }, + { url = "https://files.pythonhosted.org/packages/88/7c/3d841c366620e906d54430817531b877ba646310296df42ef697308c2705/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86ff03fb9f1a320266e0de855dee4b17da6794c595d207f89bba40d16b5c78b9", size = 44470940, upload-time = "2026-02-16T10:10:10.704Z" }, + { url = "https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05", size = 47586063, upload-time = "2026-02-16T10:10:17.95Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/b7d2ebcff47a514f47f9da1e74b7949138c58cfeb108cdd4ee62f43f0cf3/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bf5842f960cddd2ef757d486041d57c96483efc295a8c4a0e20e704cbbf39c67", size = 48173045, upload-time = "2026-02-16T10:10:25.363Z" }, + { url = "https://files.pythonhosted.org/packages/43/b2/b40961262213beaba6acfc88698eb773dfce32ecdf34d19291db94c2bd73/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564baf97c858ecc03ec01a41062e8f4698abc3e6e2acd79c01c2e97880a19730", size = 50621741, upload-time = "2026-02-16T10:10:33.477Z" }, + { url = "https://files.pythonhosted.org/packages/f6/70/1fdda42d65b28b078e93d75d371b2185a61da89dda4def8ba6ba41ebdeb4/pyarrow-23.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07deae7783782ac7250989a7b2ecde9b3c343a643f82e8a4df03d93b633006f0", size = 27620678, upload-time = "2026-02-16T10:10:39.31Z" }, ] [[package]] @@ -1918,6 +2105,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + [[package]] name = "pytorch-lightning" version = "2.6.0" @@ -2053,15 +2249,18 @@ dependencies = [ [[package]] name = "rationai-mlkit" -version = "0.3.1" -source = { git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/mlkit.git#06989b33e7313b898df86e93a212e9d15c20104f" } +version = "0.4.1" +source = { git = "https://github.com/RationAI/mlkit.git#51d1b52cdf4800962cf6f97a1cba1f72d78b8aa4" } dependencies = [ + { name = "datasets" }, { name = "gitpython" }, { name = "hydra-core" }, { name = "lightning" }, { name = "mlflow" }, { name = "openslide-python" }, + { name = "pyarrow" }, { name = "rationai-masks" }, + { name = "ratiopath" }, { name = "torch" }, ] @@ -2094,7 +2293,7 @@ dependencies = [ [[package]] name = "ratiopath" -version = "1.1.2" +version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "albumentations" }, @@ -2114,9 +2313,9 @@ dependencies = [ { name = "torch" }, { name = "zarr" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/14/72b3dd3441d269bb0dd26339331246c350bb526fd8980ec4677869d8a4a8/ratiopath-1.1.2.tar.gz", hash = "sha256:1dd40c120a8621318a0ab64fcff5f34cffed24382c0a383ba9812546d395aee1", size = 30236, upload-time = "2026-03-04T14:36:26.233Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/7d/8c558909df8ea0076d9652f429f96c585ba44e5b35d2a6ecfac1a65b42db/ratiopath-1.4.0.tar.gz", hash = "sha256:f0f70d24803a2710ff799c33d5da1afc6411b22e971cc9f39f9ef688763c32f8", size = 44897, upload-time = "2026-04-23T08:47:57.719Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/16/c92047625c3f850542fe7e0d194aa188ae1e51446b8dde969758e8df55d4/ratiopath-1.1.2-py3-none-any.whl", hash = "sha256:8a9973c7450ee6fba106d976cd465ac6e77bd0c169eef03f04f813a9ad4966a0", size = 37247, upload-time = "2026-03-04T14:36:27.177Z" }, + { url = "https://files.pythonhosted.org/packages/5b/66/ad97cec2f91a9d595bb92c8f8b15da449bc4295581c4fcedac0fe1be2c98/ratiopath-1.4.0-py3-none-any.whl", hash = "sha256:11ea0de7bab5749922911b4f89a33c25905b5a641e9990efcffaea44ebded0cc", size = 51037, upload-time = "2026-04-23T08:47:58.469Z" }, ] [[package]] @@ -2359,6 +2558,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/bf/cb6c1c505cb31e818e900b9312d514f381fbfa5c4363edfce0fcc4f8c1a4/shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179", size = 1722861, upload-time = "2025-09-24T13:50:43.35Z" }, ] +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + [[package]] name = "simsimd" version = "6.5.13" @@ -2390,6 +2598,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "skops" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "prettytable" }, + { name = "scikit-learn" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/9f/46448c4e41a4c5ee4bdb74b3758af48e5ff0faeffe40f4e301bfc7594894/skops-0.14.0.tar.gz", hash = "sha256:6c8c0e047f691a3a582c3258943eecafcbfd79c8c7eef66260f3703e363254f0", size = 608084, upload-time = "2026-04-20T18:23:55.336Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/0e/3ae19fa941522cd98e119762e7181d371c8dba0b2d72bfaf9522692e329c/skops-0.14.0-py3-none-any.whl", hash = "sha256:60a5db78a9db46ccee2139a0ba13ab5afb1c96f4749b382e75a371291bbe3e36", size = 132198, upload-time = "2026-04-20T18:23:54.018Z" }, +] + [[package]] name = "smmap" version = "5.0.2" @@ -2623,6 +2847,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/a8/cdf8b3e4c98132f965f88c2313a4b493266832ad47fb52f23d14d4f86bb5/triton-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74caf5e34b66d9f3a429af689c1c7128daba1d8208df60e81106b115c00d6fca", size = 188266850, upload-time = "2026-01-20T16:00:43.041Z" }, ] +[[package]] +name = "typer" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "click" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/51/9aed62104cea109b820bbd6c14245af756112017d309da813ef107d42e7e/typer-0.25.1.tar.gz", hash = "sha256:9616eb8853a09ffeabab1698952f33c6f29ffdbceb4eaeecf571880e8d7664cc", size = 122276, upload-time = "2026-04-30T19:32:16.964Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/f9/2b3ff4e56e5fa7debfaf9eb135d0da96f3e9a1d5b27222223c7296336e5f/typer-0.25.1-py3-none-any.whl", hash = "sha256:75caa44ed46a03fb2dab8808753ffacdbfea88495e74c85a28c5eefcf5f39c89", size = 58409, upload-time = "2026-04-30T19:32:18.271Z" }, +] + [[package]] name = "typing-extensions" version = "4.15.0" @@ -2690,13 +2929,13 @@ job = [ requires-dist = [ { name = "aiohttp", specifier = ">=3.13.2" }, { name = "lightning", specifier = ">=2.5.6" }, - { name = "mlflow", specifier = "<3.0.0" }, + { name = "mlflow" }, { name = "omegaconf", specifier = ">=2.3.0" }, { name = "openpyxl", specifier = ">=3.1.5" }, { name = "pandas", specifier = ">=2.3.3" }, { name = "pyvips", specifier = "<3.1" }, { name = "rationai-masks", git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/masks.git" }, - { name = "rationai-mlkit", git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/mlkit.git" }, + { name = "rationai-mlkit", git = "https://github.com/RationAI/mlkit.git" }, { name = "rationai-sdk", git = "https://github.com/RationAI/rationai-sdk-python.git" }, { name = "rationai-tiling", git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/tiling.git" }, { name = "ratiopath", specifier = ">=1.1.2" }, @@ -2775,6 +3014,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ad/e4/8d97cca767bcc1be76d16fb76951608305561c6e056811587f36cb1316a8/werkzeug-3.1.5-py3-none-any.whl", hash = "sha256:5111e36e91086ece91f93268bb39b4a35c1e6f1feac762c9c822ded0a4e322dc", size = 225025, upload-time = "2026-01-08T17:49:21.859Z" }, ] +[[package]] +name = "xxhash" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/8a/51a14cdef4728c6c2337db8a7d8704422cc65676d9199d77215464c880af/xxhash-3.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:082c87bfdd2b9f457606c7a4a53457f4c4b48b0cdc48de0277f4349d79bb3d7a", size = 33357, upload-time = "2026-04-25T11:06:20.44Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1b/0c2c933809421ffd9bf42b59315552c143c755db5d9a816b2f1ae273e884/xxhash-3.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5e7ce913b61f35b0c1c839a49ac9c8e75dd8d860150688aed353b0ce1bf409d8", size = 30869, upload-time = "2026-04-25T11:06:21.989Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/89d5fdd6ee12d70ba99451de46dd0e8010167468dcd913ec855653f4dd50/xxhash-3.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3beb1de3b1e9694fcdd853e570ee64c631c7062435d2f8c69c1adf809bc086f0", size = 194100, upload-time = "2026-04-25T11:06:23.586Z" }, + { url = "https://files.pythonhosted.org/packages/87/ee/2f9f2ed993e77206d1e66991290a1ebe22e843351ca3ebec8e49e01ba186/xxhash-3.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3e7b689c3bce16699efcf736066f5c6cc4472c3840fe4b22bd8279daf4abdac", size = 212977, upload-time = "2026-04-25T11:06:25.019Z" }, + { url = "https://files.pythonhosted.org/packages/de/60/5a91644615a9e9d4e42c2e9925f1908e3a24e4e691d9de7340d565bea024/xxhash-3.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a6545e6b409e3d5cbafc850fb84c55a1ca26ed15a6b11e3bf07a0e0cd84517c8", size = 236373, upload-time = "2026-04-25T11:06:26.482Z" }, + { url = "https://files.pythonhosted.org/packages/22/c0/f3a9384eaaed9d14d4d062a5d953aa0da489bfe9747877aa994caa87cd0b/xxhash-3.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:31ab1461c77a11461d703c88eb949e132a1c6515933cf675d97ec680f4bd18de", size = 212229, upload-time = "2026-04-25T11:06:28.065Z" }, + { url = "https://files.pythonhosted.org/packages/2e/67/02f07a9fd79726804190f2172c4894c3ed9a4ebccaca05653c84beb58025/xxhash-3.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c4d596b7676f811172687ec567cbafb9e4dea2f9be1bbb4f622410cb7f40f40", size = 445462, upload-time = "2026-04-25T11:06:30.048Z" }, + { url = "https://files.pythonhosted.org/packages/40/37/558f5a90c0672fc9b4402dc25d87ac5b7406616e8969430c9ca4e52ee74d/xxhash-3.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13805f0461cba0a857924e70ff91ae6d52d2598f79a884e788db80532614a4a1", size = 193932, upload-time = "2026-04-25T11:06:31.857Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/aaa09cd58661d32044dbbad7df55bbe22a623032b810e7ed3b8c569a2a6f/xxhash-3.7.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d398f372496152f1c6933a33566373f8d1b37b98b8c9d608fa6edc0976f23b2", size = 284807, upload-time = "2026-04-25T11:06:33.697Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f3/53df3719ab127a02c174f0c1c74924fcd110866e89c966bc7909cfa8fa84/xxhash-3.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d610aa62cdb7d4d497740741772a24a794903bf3e79eaa51d2e800082abe11e5", size = 210445, upload-time = "2026-04-25T11:06:35.488Z" }, + { url = "https://files.pythonhosted.org/packages/72/33/d219975c0e8b6fa2eb9ccd486fe47e21bf1847985b878dd2fbc3126e0d5c/xxhash-3.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:073c23900a9fbf3d26616c17c830db28af9803677cd5b33aea3224d824111514", size = 241273, upload-time = "2026-04-25T11:06:37.24Z" }, + { url = "https://files.pythonhosted.org/packages/3e/50/49b1afe610eb3964cedcb90a4d4c3d46a261ee8669cbd4f060652619ae3c/xxhash-3.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:418a463c3e6a590c0cdc890f8be19adb44a8c8acd175ca5b2a6de77e61d0b386", size = 197950, upload-time = "2026-04-25T11:06:39.148Z" }, + { url = "https://files.pythonhosted.org/packages/c6/75/5f42a1a4c78717d906a4b6a140c6dbf837ab1f547a54d23c4e2903310936/xxhash-3.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:03f8ff4474ee61c845758ce00711d7087a770d77efb36f7e74a6e867301000b8", size = 210709, upload-time = "2026-04-25T11:06:40.958Z" }, + { url = "https://files.pythonhosted.org/packages/8a/85/237e446c25abced71e9c53d269f2cef5bab8a82b3f88a12e00c5368e7368/xxhash-3.7.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:44fba4a5f1d179b7ddc7b3dc40f56f9209046421679b57025d4d8821b376fd8d", size = 275345, upload-time = "2026-04-25T11:06:42.525Z" }, + { url = "https://files.pythonhosted.org/packages/62/34/c2c26c0a6a9cc739bc2a5f0ae03ba8b87deb12b8bce35f7ac495e790dc6d/xxhash-3.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31e3516a0f829d06ded4a2c0f3c7c5561993256bfa1c493975fb9dc7bfa828a1", size = 414056, upload-time = "2026-04-25T11:06:44.343Z" }, + { url = "https://files.pythonhosted.org/packages/a0/aa/5c58e9bc8071b8afd8dcf297ff362f723c4892168faba149f19904132bf4/xxhash-3.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b59ee2ac81de57771a09ecad09191e840a1d2fae1ef684208320591055768f83", size = 191485, upload-time = "2026-04-25T11:06:46.262Z" }, + { url = "https://files.pythonhosted.org/packages/d4/69/a929cf9d1e2e65a48b818cdce72cb6b69eab2e6877f21436d0a1942aff43/xxhash-3.7.0-cp312-cp312-win32.whl", hash = "sha256:74bbd92f8c7fcc397ba0a11bfdc106bc72ad7f11e3a60277753f87e7532b4d81", size = 30671, upload-time = "2026-04-25T11:06:48.039Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1b/104b41a8947f4e1d4a66ce1e628eea752f37d1890bfd7453559ca7a3d950/xxhash-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:7bd7bc82dd4f185f28f35193c2e968ef46131628e3cac62f639dadf321cba4d1", size = 31514, upload-time = "2026-04-25T11:06:49.279Z" }, + { url = "https://files.pythonhosted.org/packages/98/a0/1fd0ea1f1b886d9e7c73f0397571e22333a7d79e31da6d7127c2a4a71d75/xxhash-3.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:7d7148180ec99ba36585b42c8c5de25e9b40191613bc4be68909b4d25a77a852", size = 27761, upload-time = "2026-04-25T11:06:50.448Z" }, +] + [[package]] name = "yarl" version = "1.22.0"