From 7f7ba90bdb38c98838e1b54c0645fe404323da03 Mon Sep 17 00:00:00 2001 From: melisande-c Date: Mon, 18 Nov 2024 18:10:52 +0100 Subject: [PATCH 1/4] fix(bmz export): use relaxed absolute and relative tolerance in model description config --- src/careamics/model_io/bioimage/model_description.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/careamics/model_io/bioimage/model_description.py b/src/careamics/model_io/bioimage/model_description.py index 21ed50b8f..b0ca69c5e 100644 --- a/src/careamics/model_io/bioimage/model_description.py +++ b/src/careamics/model_io/bioimage/model_description.py @@ -280,6 +280,16 @@ def create_model_description( "https://careamics.github.io/latest/", ], license="BSD-3-Clause", + config={ + "bioimageio": { + "test_kwargs": { + "pytorch_state_dict": { + "absolute_tolerance": 10e-2, + "relative_tolerance": 10e-2, + } + } + } + }, version="0.1.0", weights=weights_descr, attachments=[FileDescr(source=config_path)], From 77f8d0ac5a17f46a947e96676f02bfb85608ba42 Mon Sep 17 00:00:00 2001 From: melisande-c Date: Mon, 18 Nov 2024 18:12:07 +0100 Subject: [PATCH 2/4] fix(bmz export): use test_kwargs in model description when testing during export --- src/careamics/model_io/bmz_io.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/careamics/model_io/bmz_io.py b/src/careamics/model_io/bmz_io.py index dc4564ecc..401b7c66a 100644 --- a/src/careamics/model_io/bmz_io.py +++ b/src/careamics/model_io/bmz_io.py @@ -185,7 +185,12 @@ def export_to_bmz( ) # test model description - summary: ValidationSummary = test_model(model_description) + test_kwargs = ( + model_description.config.get("bioimageio", {}) + .get("test_kwargs", {}) + .get("pytorch_state_dict", {}) + ) + summary: ValidationSummary = test_model(model_description, **test_kwargs) if summary.status == "failed": raise ValueError(f"Model description test failed: {summary}") From e126cb2569a0c14a9dceb6b08ab00cfe7f76447b Mon Sep 17 00:00:00 2001 From: melisande-c Date: Mon, 18 Nov 2024 18:37:22 +0100 Subject: [PATCH 3/4] fix: factor of 10 out --- src/careamics/model_io/bioimage/model_description.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/careamics/model_io/bioimage/model_description.py b/src/careamics/model_io/bioimage/model_description.py index b0ca69c5e..c4f4d1511 100644 --- a/src/careamics/model_io/bioimage/model_description.py +++ b/src/careamics/model_io/bioimage/model_description.py @@ -284,8 +284,8 @@ def create_model_description( "bioimageio": { "test_kwargs": { "pytorch_state_dict": { - "absolute_tolerance": 10e-2, - "relative_tolerance": 10e-2, + "absolute_tolerance": 1e-2, + "relative_tolerance": 1e-2, } } } From 3a9be81aa7715442d2bb390c75436fd2fe2697df Mon Sep 17 00:00:00 2001 From: melisande-c Date: Tue, 19 Nov 2024 17:11:31 +0100 Subject: [PATCH 4/4] fix(load_bmz): extract weights and config from zip since spec release 5.3.5 load_model_description no longer extracts every file from zip, only streams rdf --- src/careamics/model_io/bioimage/model_description.py | 7 +++++-- src/careamics/model_io/bmz_io.py | 8 +------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/careamics/model_io/bioimage/model_description.py b/src/careamics/model_io/bioimage/model_description.py index c4f4d1511..dbd1dfe08 100644 --- a/src/careamics/model_io/bioimage/model_description.py +++ b/src/careamics/model_io/bioimage/model_description.py @@ -4,6 +4,7 @@ from typing import List, Optional, Tuple, Union import numpy as np +from bioimageio.spec._internal.io import resolve_and_extract from bioimageio.spec.model.v0_5 import ( ArchitectureFromLibraryDescr, Author, @@ -314,7 +315,9 @@ def extract_model_path(model_desc: ModelDescr) -> tuple[Path, Path]: """ if model_desc.weights.pytorch_state_dict is None: raise ValueError("No model weights found in model description.") - weights_path = model_desc.weights.pytorch_state_dict.download().path + weights_path = resolve_and_extract( + model_desc.weights.pytorch_state_dict.source + ).path for file in model_desc.attachments: file_path = file.source if isinstance(file.source, Path) else file.source.path @@ -322,7 +325,7 @@ def extract_model_path(model_desc: ModelDescr) -> tuple[Path, Path]: continue file_path = Path(file_path) if file_path.name == "careamics.yaml": - config_path = file.download().path + config_path = resolve_and_extract(file.source).path break else: raise ValueError("Configuration file not found.") diff --git a/src/careamics/model_io/bmz_io.py b/src/careamics/model_io/bmz_io.py index 401b7c66a..65a3ea99c 100644 --- a/src/careamics/model_io/bmz_io.py +++ b/src/careamics/model_io/bmz_io.py @@ -21,7 +21,6 @@ create_env_text, create_model_description, extract_model_path, - get_unzip_path, ) @@ -224,14 +223,9 @@ def load_from_bmz( # load description, this creates an unzipped folder next to the archive model_desc = load_model_description(path) - # extract relative paths + # extract paths weights_path, config_path = extract_model_path(model_desc) - # create folder path and absolute paths - unzip_path = get_unzip_path(path) - weights_path = unzip_path / weights_path - config_path = unzip_path / config_path - # load configuration config = load_configuration(config_path)