image-processing - PyTorch ToTensor 将 C x H x W (5 x 600 x 900) 更改为 H x C x W (900 x 5 x 600)
问题描述
这是我的数据加载器。当我使用 ToTensor 时,它会将图像的尺寸更改为 H x C x W。置换可以解决这个问题还是可能会改变一些方向?
class DPWHDataset(Dataset):
def __init__(self, mean=None, std=None, phase=None, dataset=None):
self.data = dataset
self.mean = mean
self.std = std
self.phase = phase
self.transforms = get_transforms(phase, mean, std)
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
image_name = self.data[idx]
image_path = image_prefix + image_name + ".jpg"
mask_path = binary_mask_prefix + image_name + "_mask.png"
mask = cv2.imread(mask_path, 0)
print(image_path)
# image = np.array(Image.open(image_path))
# mask = np.array(Image.open(mask_path))
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
mask = create_channel_mask(mask)
# augmented = self.transforms(image=image, mask=mask)
# image = augmented['image']
# mask = augmented['mask']
image = torchvision.transforms.ToTensor()(image)
image = torchvision.transforms.Normalize(mean=self.mean, std=self.std)(image)
mask = torchvision.transforms.ToTensor()(mask)
return image, mask
解决方案
根据文档,torchvision.transforms.ToTensor将 PIL Image 或 numpy.ndarray 转换(H x W x C)
为形状的 torch.FloatTensor (C x H x W)
。因此,在以下行中:
image = torchvision.transforms.ToTensor()(image)
结果image
张量是 shape (C x H x W)
,输入张量是 shape (H x W x C)
。您可以通过打印张量形状来验证这一点。
是的,您可以使用torch.permute调整形状,这不会造成任何问题。
推荐阅读
- ios - 原因:'尝试从第 0 节中删除第 12 行,更新前仅包含 10 行'
- javascript - 如何使项目符号逐渐出现在 RMarkdown 的 flexdashboard 故事板中?
- java - 如何在 Android 的 Share-Intent 功能中包含 App Link
- omnet++ - 为什么 DemoBaseApplLayer::myId 在 Veins 版本 4.7.1 和 5.0 中不同?
- regex - 如何替换以模式开头的文本?
- php - 从嵌套数组中获取 2 个值
- excel - 使用 VBA 宏清理数据
- javascript - HIGHCHARTS - 给定一系列带有 UNIX 标记和值对的数据,如何仅显示 xAxis 上第一个点和最后一个点的日期?
- swift - 如何检测 cgRect 中的 cgPath
- angular - FormsModule:如何强制更改值?