“图像”对象没有属性“形状”

问题描述 投票:0回答:1

我正在尝试在我的数据集上实现素数增强。以前我收到错误 raise ValueError('pic should be 2/3 Dimension. Got {}Dimensions.'.format(pic.ndim)) ValueError:图片应为 2/3 维。有4个维度。第一个打印给出的形状:img_prime shape: torch.Size([3, 3, 320, 320]),所以我删除了第一个元素,它可能是批量大小,然后我将张量数组转换为 numpy 并转置,以便形状变为 (320,320,3),即 (H,W,C) 格式。

class PrimeAugment:
    def __init__(self, prime_module):
        self.prime_module = prime_module

    def __call__(self, img, mask):
        img = transforms.ToTensor()(img).unsqueeze(0)  # Convert PIL image to tensor and add batch dimension
        img_prime = self.prime_module(img)  # Apply PRIME augmentations
        print("img_prime shape:", img_prime.shape)  # Print the shape of img_prime
        img_prime = img_prime[0, :, :, :]
        img_prime = img_prime.detach().cpu().numpy().transpose(1, 2, 0)
        img_prime = (img_prime * 255).astype(np.uint8)  # Convert data type to uint8
        print("shape after remove:", img_prime.shape)
        img_prime = Image.fromarray(img_prime)  # Convert back to PIL image
        return img_prime, mask

但现在我收到错误:

    params.update({"cols": kwargs["image"].shape[1], "rows": kwargs["image"].shape[0]})
AttributeError: 'Image' object has no attribute 'shape'

错误的全部踪迹:

Original Traceback (most recent call last):
  File "/home/anaconda3/envs/myenv/lib/python3.9/site-packages/torch/utils/data/_utils/worker.py", line 308, in _worker_loop
    data = fetcher.fetch(index)
  File "/home/anaconda3/envs/myenv/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py", line 51, in fetch
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/home/anaconda3/envs/myenv/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py", line 51, in <listcomp>
    data = [self.dataset[idx] for idx in possibly_batched_index]
  File "/home/Crack-PRIME-final3/tool/dataset.py", line 225, in __getitem__
    image_store, mask_store = image_mask_transformation(image, mask, self.img_trans, self.aug_trans)
  File "/home/Crack-PRIME-final3/tool/dataset.py", line 180, in image_mask_transformation
    transformed = img_norm(image=image)
  File "/home/anaconda3/envs/myenv/lib/python3.9/site-packages/albumentations/core/transforms_interface.py", line 118, in __call__
    return self.apply_with_params(params, **kwargs)
  File "/home/anaconda3/envs/myenv/lib/python3.9/site-packages/albumentations/core/transforms_interface.py", line 125, in apply_with_params
    params = self.update_params(params, **kwargs)
  File "/home/anaconda3/envs/myenv/lib/python3.9/site-packages/albumentations/core/transforms_interface.py", line 175, in update_params
    params.update({"cols": kwargs["image"].shape[1], "rows": kwargs["image"].shape[0]})
AttributeError: 'Image' object has no attribute 'shape'

来自 dataset.py:

179     img_norm = A.Normalize(config.MEAN, config.STD,  p=1.0)
180     transformed = img_norm(image=image)
181     image = transformed["image"]
182
python deep-learning pytorch data-augmentation image-augmentation
1个回答
0
投票

错误消息表明您正在交互的对象没有

shape
属性,并且是
PIL.Image
的实例。您可以做的是避免使用
Image.from_array
转换为图像并直接转换为
Tensor
(不过请检查数组的类型是否正确),或者您可以使用
ToTensor
tf.to_tensor

img_prime = tf.to_tensor(img_prime)
© www.soinside.com 2019 - 2024. All rights reserved.