transform.Invertd raise error #4657
Unanswered
YingdiZhang
asked this question in
Q&A
Replies: 1 comment
-
Hi @YingdiZhang , I think you can try to run this tutorial example: Thanks. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
thanks for the great job.
I am using monai in a 3d segmentation task. In my test code, When I want to save the network prediction result in original data spacing and orientation, an error occured. And I have no idea how it comes:
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/transform.py", line 89, in apply_transform
return _apply_transform(transform, data, unpack_items)
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/transform.py", line 53, in _apply_transform
return transform(parameters)
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/post/dictionary.py", line 648, in call
inverted = self.transform.inverse(input_dict)
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/compose.py", line 183, in inverse
data = apply_transform(t.inverse, data, self.map_items, self.unpack_items, self.log_stats)
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/transform.py", line 113, in apply_transform
raise RuntimeError(f"applying transform {transform}") from e
RuntimeError: applying transform <bound method Spacingd.inverse of <monai.transforms.spatial.dictionary.Spacingd object at 0x7f3f0c138bb0>>
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/data/zyd/beifen_xinsuoqu_/MedSeg/MedSeg/test/Task906Tester.py", line 804, in
t906_tester.test(
File "/data/zyd/beifen_xinsuoqu_/MedSeg/MedSeg/test/Task906Tester.py", line 193, in test
test_data = [self.post_trans_save(i) for i in decollate_batch(test_data)] # 保存原尺度
File "/data/zyd/beifen_xinsuoqu_/MedSeg/MedSeg/test/Task906Tester.py", line 193, in
test_data = [self.post_trans_save(i) for i in decollate_batch(test_data)] # 保存原尺度
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/compose.py", line 173, in call
input_ = apply_transform(transform, input, self.map_items, self.unpack_items, self.log_stats)
File "/home/zyd/anaconda3/envs/med/lib/python3.9/site-packages/monai/transforms/transform.py", line 113, in apply_transform
raise RuntimeError(f"applying transform {transform}") from e
RuntimeError: applying transform <monai.transforms.post.dictionary.Invertd object at 0x7f3f0c1488b0>
And my test code is like this:
test_transform = Compose([
LoadImaged(keys=["image", "label"]),
EnsureChannelFirstd(keys=["image", "label"]),
Spacingd(
keys=["image", "label"],
pixdim=(1.0, 1.0, 1.0),
mode=("bilinear", "nearest")
),
Orientationd(keys=["image", "label"], axcodes="RAS"),
ScaleIntensityRanged(keys=["image"], a_min=-324, a_max=1453,
b_min=0.0, b_max=1.0, clip=True),
CastToTyped(
keys=["image", "label"],
dtype=(np.float32, np.uint8)
),
EnsureTyped(keys=["image", "label"])
]
)
post_trans_save = Compose(
[
EnsureTyped(keys="pred"), #
Invertd(
keys="pred", # invert the
pred
data field, also support multiple fieldstransform=transform, # self.transform,
orig_keys="image", # "label", # # get the previously applied self.transforms information on the
image
data field,# then invert
pred
based on this information. we can use same info# for multiple fields, also support different orig_keys for different fields
meta_keys="pred_meta_dict", # key field to save inverted meta data, every item maps to
keys
orig_meta_keys="image_meta_dict", # "label_meta_dict", # # get the meta data from
image_meta_dict
field when inverting,# for example, may need the
affine
to invertSpacingd
transform,# multiple fields can use the same meta data to invert
meta_key_postfix="meta_dict", # if
meta_keys=None
, use "{keys}{meta_key_postfix}" as the meta key,# if
orig_meta_keys=None
, use "{orig_keys}{meta_key_postfix}",# otherwise, no need this arg during inverting
nearest_interp=False, # don't change the interpolation mode to "nearest" when inverting transforms
# to ensure a smooth output, then execute
AsDiscreted
transformto_tensor=True # convert to PyTorch Tensor after inverting
),
AsDiscreted(keys="pred", argmax=True, to_onehot=None),
SaveImaged(keys="pred", meta_keys="pred_meta_dict", output_dir=self.pred_output_folder,
output_postfix="seg", resample=False, output_ext='.nii.gz',
separate_folder=False)
]
)
with torch.no_grad():
for (idx, test_data) in enumerate(tqdm(self.test_loader)):
inputs = test_data["image"].to(device)
test_data["pred"] = sliding_window_inference(
inputs, roi_size, sw_batch_size, self.model, overlap=overlap,
mode='gaussian',
device='cpu'
)
test_outputs = [self.post_trans_pred(i) for i in decollate_batch(pred_for_dice)]
test_labels = [self.post_trans_label(i) for i in decollate_batch(label_for_dice)]
test_data = [self.post_trans_save(i) for i in decollate_batch(test_data)] # 保存原尺度
Beta Was this translation helpful? Give feedback.
All reactions