From 7470a0f348c2aa08a37204fecb626041e65d0ed2 Mon Sep 17 00:00:00 2001 From: wasserth Date: Fri, 4 Oct 2024 10:06:56 +0200 Subject: [PATCH] update modality model --- setup.py | 2 +- totalsegmentator/bin/totalseg_get_modality.py | 16 ++++------------ ...kl => modality_classifiers_2024_10_04.pkl} | Bin 397124 -> 397122 bytes 3 files changed, 5 insertions(+), 13 deletions(-) rename totalsegmentator/resources/{modality_classifiers_2024_10_03.pkl => modality_classifiers_2024_10_04.pkl} (65%) diff --git a/setup.py b/setup.py index 897cc17bf..c0321a543 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ package_data={"totalsegmentator": ["resources/totalsegmentator_snomed_mapping.csv", "resources/contrast_phase_classifiers_2024_07_19.pkl", - "resources/modality_classifiers_2024_10_03.pkl"] + "resources/modality_classifiers_2024_10_04.pkl"] }, install_requires=[ 'torch>=2.1.2', diff --git a/totalsegmentator/bin/totalseg_get_modality.py b/totalsegmentator/bin/totalseg_get_modality.py index 24da148e0..124a258da 100644 --- a/totalsegmentator/bin/totalseg_get_modality.py +++ b/totalsegmentator/bin/totalseg_get_modality.py @@ -21,19 +21,11 @@ def get_features(nifti_img): data = nifti_img.get_fdata() mean = np.mean(data) - # mean = np.median(data) # slower than mean std = np.std(data) min = np.min(data) max = np.max(data) - # perc1 = np.percentile(data, 1) - # perc5 = np.percentile(data, 5) - # perc10 = np.percentile(data, 25) - # perc90 = np.percentile(data, 75) - # perc95 = np.percentile(data, 95) - # perc99 = np.percentile(data, 99) - # return [mean, median, std, min, max, perc1, perc5, perc10, perc90, perc95, perc99] # ~30s for big ct image - return [mean, std, min, max] # 5s for big ct image + return [mean, std, min, max] def get_modality(img: nib.Nifti1Image): @@ -45,10 +37,10 @@ def get_modality(img: nib.Nifti1Image): probability: float """ st = time.time() - features = get_features(img) - print(f"features took: {time.time() - st:.2f}s") + features = get_features(img) # 5s for big ct image + # print(f"features took: {time.time() - st:.2f}s") - classifier_path = pkg_resources.resource_filename('totalsegmentator', 'resources/modality_classifiers_2024_10_03.pkl') + classifier_path = pkg_resources.resource_filename('totalsegmentator', 'resources/modality_classifiers_2024_10_04.pkl') clfs = pickle.load(open(classifier_path, "rb")) # ensemble across folds diff --git a/totalsegmentator/resources/modality_classifiers_2024_10_03.pkl b/totalsegmentator/resources/modality_classifiers_2024_10_04.pkl similarity index 65% rename from totalsegmentator/resources/modality_classifiers_2024_10_03.pkl rename to totalsegmentator/resources/modality_classifiers_2024_10_04.pkl index 2dd6afea9862d522eabb03810012179ca4a39c62..db6d2f879b73ba719f51f81ff2bc73de7d9fc9d3 100644 GIT binary patch delta 29383 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