Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI Metrics #522

Open
wants to merge 13 commits into
base: dev
Choose a base branch
from
16 changes: 10 additions & 6 deletions clinicadl/prepare_data/prepare_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,18 +154,22 @@ def prepare_roi(file):
parameters["masks_location"],
parameters["roi_list"],
parameters["roi_mask_pattern"],
None
if parameters["use_uncropped_image"] is None
else not parameters["use_uncropped_image"],
(
None
if parameters["use_uncropped_image"] is None
else not parameters["use_uncropped_image"]
),
)

output_mode = extract_roi(
Path(file),
masks_location=parameters["masks_location"],
mask_pattern=parameters["roi_mask_pattern"],
cropped_input=None
if parameters["use_uncropped_image"] is None
else not parameters["use_uncropped_image"],
cropped_input=(
None
if parameters["use_uncropped_image"] is None
else not parameters["use_uncropped_image"]
),
roi_names=parameters["roi_list"],
uncrop_output=parameters["uncropped_roi"],
)
Expand Down
1 change: 1 addition & 0 deletions clinicadl/quality_check/t1_linear/quality_check.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
This file contains all methods needed to perform the quality check procedure after t1-linear preprocessing.
"""

from logging import getLogger
from pathlib import Path

Expand Down
1 change: 1 addition & 0 deletions clinicadl/quality_check/t1_volume/quality_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
2) percentage of non zero values < 15 % or > 50 %
3) frontal similarity of T1 volume with the template < 0.40
"""

from logging import getLogger
from pathlib import Path

Expand Down
1 change: 1 addition & 0 deletions clinicadl/random_search/random_search.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Launch a random network training.
"""

from pathlib import Path

from clinicadl.random_search.random_search_utils import get_space_dict, random_sampling
Expand Down
1 change: 1 addition & 0 deletions clinicadl/utils/cli_param/argument.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Common CLI arguments used by ClinicaDL pipelines."""

from pathlib import Path

import click
Expand Down
77 changes: 47 additions & 30 deletions clinicadl/utils/maps_manager/maps_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,16 +304,16 @@ def predict(
multi_cohort=group_parameters["multi_cohort"],
label_presence=use_labels,
label=self.label if label is None else label,
label_code=self.label_code
if label_code == "default"
else label_code,
label_code=(
self.label_code if label_code == "default" else label_code
),
cnn_index=network,
)
test_loader = DataLoader(
data_test,
batch_size=batch_size
if batch_size is not None
else self.batch_size,
batch_size=(
batch_size if batch_size is not None else self.batch_size
),
shuffle=False,
sampler=DistributedSampler(
data_test,
Expand Down Expand Up @@ -371,16 +371,16 @@ def predict(
multi_cohort=group_parameters["multi_cohort"],
label_presence=use_labels,
label=self.label if label is None else label,
label_code=self.label_code
if label_code == "default"
else label_code,
label_code=(
self.label_code if label_code == "default" else label_code
),
)

test_loader = DataLoader(
data_test,
batch_size=batch_size
if batch_size is not None
else self.batch_size,
batch_size=(
batch_size if batch_size is not None else self.batch_size
),
shuffle=False,
sampler=DistributedSampler(
data_test,
Expand Down Expand Up @@ -1718,6 +1718,7 @@ def _test_loader(
gpu=None,
amp=False,
network=None,
report_ci=True,
):
"""
Launches the testing task on a dataset wrapped by a DataLoader and writes prediction TSV files.
Expand Down Expand Up @@ -1759,13 +1760,23 @@ def _test_loader(
model = DDP(model)

prediction_df, metrics = self.task_manager.test(
model, dataloader, criterion, use_labels=use_labels, amp=amp
model,
dataloader,
criterion,
use_labels=use_labels,
amp=amp,
report_ci=report_ci,
)
if use_labels:
if network is not None:
metrics[f"{self.mode}_id"] = network

loss_to_log = (
metrics["Metric_values"][-1] if report_ci else metrics["loss"]
)

logger.info(
f"{self.mode} level {data_group} loss is {metrics['loss']} for model selected on {selection_metric}"
f"{self.mode} level {data_group} loss is {loss_to_log} for model selected on {selection_metric}"
)

if cluster.master:
Expand All @@ -1790,6 +1801,7 @@ def _test_loader_ssda(
gpu=None,
network=None,
target=False,
report_ci=True,
):
"""
Launches the testing task on a dataset wrapped by a DataLoader and writes prediction TSV files.
Expand Down Expand Up @@ -1827,16 +1839,19 @@ def _test_loader_ssda(
network=network,
)
prediction_df, metrics = self.task_manager.test_da(
model,
dataloader,
criterion,
target=target,
model, dataloader, criterion, target=target, report_ci=report_ci
)
if use_labels:
if network is not None:
metrics[f"{self.mode}_id"] = network

if report_ci:
loss_to_log = metrics["Metric_values"][-1]
else:
loss_to_log = metrics["loss"]

logger.info(
f"{self.mode} level {data_group} loss is {metrics['loss']} for model selected on {selection_metric}"
f"{self.mode} level {data_group} loss is {loss_to_log} for model selected on {selection_metric}"
)

# Replace here
Expand Down Expand Up @@ -2408,12 +2423,14 @@ def _write_data_group(
self.write_parameters(
group_path,
{
"caps_directory": caps_directory
if caps_directory is not None
else self.caps_directory,
"multi_cohort": multi_cohort
if multi_cohort is not None
else self.multi_cohort,
"caps_directory": (
caps_directory
if caps_directory is not None
else self.caps_directory
),
"multi_cohort": (
multi_cohort if multi_cohort is not None else self.multi_cohort
),
},
)

Expand Down Expand Up @@ -2582,7 +2599,7 @@ def _mode_level_to_tsv(
performance_path = (
performance_dir / f"{data_group}_{self.mode}_level_prediction.tsv"
)
if not performance_path.is_file():
if not performance_path.is_dir():
results_df.to_csv(performance_path, index=False, sep="\t")
else:
results_df.to_csv(
Expand All @@ -2591,12 +2608,12 @@ def _mode_level_to_tsv(

metrics_path = performance_dir / f"{data_group}_{self.mode}_level_metrics.tsv"
if metrics is not None:
pd_metrics = pd.DataFrame(metrics).T

if not metrics_path.is_file():
pd.DataFrame(metrics, index=[0]).to_csv(
metrics_path, index=False, sep="\t"
)
pd_metrics.to_csv(metrics_path, index=False, sep="\t", header=False)
else:
pd.DataFrame(metrics, index=[0]).to_csv(
pd_metrics.to_csv(
metrics_path, index=False, sep="\t", mode="a", header=False
)

Expand Down
1 change: 1 addition & 0 deletions clinicadl/utils/meta_maps/getter.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""
Produces a tsv file to analyze the performance of one launch of the random search.
"""

from pathlib import Path

import pandas as pd
Expand Down
Loading