-
Notifications
You must be signed in to change notification settings - Fork 1.5k
LoadImage PILReader with converter #5251
Copy link
Copy link
Closed
Description
I am trying to load a PNG image. I want to ensure that at load time, the image should be single channel. I am using something like:
transforms = Compose([
LoadImaged(keys="image", image_only=True, reader=PILReader(converter=lambda image: image.convert("L"))),
# LoadImaged(keys="image", image_only=True, ),
EnsureChannelFirstd(keys="image"),
Resized(keys="image", spatial_size = (IMG_X, IMG_Y)),
ScaleIntensityd(keys="image")])Unfortunately, I am getting the problem:
> collate dict key "image" out of 2 keys
>> collate/stack a list of tensors
> collate dict key "label" out of 2 keys
Traceback (most recent call last):
File "C:\Users\3201\AppData\Local\miniforge3\lib\site-packages\torch\utils\data\_utils\collate.py", line 160, in default_collate
return elem_type({key: default_collate([d[key] for d in batch]) for key in elem})
File "C:\Users\3201\AppData\Local\miniforge3\lib\site-packages\torch\utils\data\_utils\collate.py", line 160, in <dictcomp>
return elem_type({key: default_collate([d[key] for d in batch]) for key in elem})
File "C:\Users\3201\AppData\Local\miniforge3\lib\site-packages\torch\utils\data\_utils\collate.py", line 183, in default_collate
raise TypeError(default_collate_err_msg_format.format(elem_type))
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
I am using the option image_only=True above, so as to avoid the problem with metadata.
However, if I do not explicitly specify the reader, then the transform works without a hitch. In other words,
LoadImaged(keys="image", image_only=True, reader=PILReader(converter=lambda image: image.convert("L"))), does not work while
LoadImaged(keys="image", image_only=True), works in the above transform.
Monai version is 0.9.1.
Any help/suggestion appreciated.
Originally posted by @vsk-phi in #5249
I'm able to reproduce the issue:
import monai
from monai.apps.utils import download_url
from monai.transforms import LoadImageD
url_name = "https://monai.io/assets/img/MONAI-logo_color.png"
download_url(url_name)
image_name = "MONAI-logo_color.png"
xform = LoadImageD("image", image_only=True, converter=lambda im: im.convert("L"))
d = monai.data.Dataset([{"image": image_name}, {"image": image_name}], transform=xform)
for x in monai.data.DataLoader(d, batch_size=2):
print(x["image"])the root cause is that the metadict contains None:
{'format': None, 'mode': 'L', 'width': 100, 'height': 31, spatial_shape: array([100, 31]), original_channel_dim: 'no_channel'}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels