pytorch
type_error
ai_generated
true
类型错误:pic应为PIL图像或ndarray。得到<class 'torch.Tensor'>
TypeError: pic should be PIL Image or ndarray. Got <class 'torch.Tensor'>
ID: pytorch/torchvision-transforms-pil-error
90%修复率
88%置信度
1证据数
2023-01-20首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| torch>=1.8 | active | — | — | — |
| torchvision>=0.9 | active | — | — | — |
根因分析
期望PIL图像或numpy数组的torchvision变换接收到了原始torch.Tensor,通常是由于缺少ToTensor()调用或变换顺序错误。
English
A torchvision transform expecting PIL Image or numpy array received a raw torch.Tensor, often due to missing ToTensor() call or wrong transform order.
官方文档
https://pytorch.org/vision/stable/transforms.html解决方案
-
确保ToTensor()是最后一个变换:transforms.Compose([transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor()])。这会在所有基于PIL的变换之后将PIL转换为张量。
-
如果使用自定义数据集,返回PIL图像:from PIL import Image; img = Image.open(path).convert('RGB')
无效尝试
常见但无效的做法:
-
transforms.Compose([transforms.Resize(256), transforms.ToTensor(), transforms.CenterCrop(224)])
90% 失败
Adding ToTensor() after the transform that expects PIL will still pass a tensor, causing same error.
-
from torchvision.transforms import ToPILImage; img = ToPILImage()(tensor)
50% 失败
Converting tensor to PIL manually with ToPILImage() but forgetting to import often leads to NameError.