如何在pytorch中从图像中提取面片?

2024-05-16 04:17:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从面片大小为128且跨距为32的图像中提取图像面片,因此我有以下代码,但它给了我一个错误:

from PIL import Image 
img = Image.open("cat.jpg")
x = transforms.ToTensor()(img)

x = x.unsqueeze(0)

size = 128 # patch size
stride = 32 # patch stride
patches = x.unfold(1, size, stride).unfold(2, size, stride).unfold(3, size, stride)
print(patches.shape)

我得到的错误是:

RuntimeError: maximum size for tensor at dimension 1 is 3 but size is 128

这是我到目前为止找到的唯一方法。但它给了我这个错误


Tags: 代码from图像imageimgsizepilis
1条回答
网友
1楼 · 发布于 2024-05-16 04:17:15

你的x的大小是[1, 3, height, width]。调用x.unfold(1, size, stride)尝试从尺寸为3的维度1创建大小为128的切片,因此该维度太小,无法创建任何切片

您不希望创建跨维度1的切片,因为这些是图像的通道(在本例中为RGB),并且需要保持所有面片的状态。面片仅在图像的高度和宽度上创建

patches = x.unfold(2, size, stride).unfold(3, size, stride)

结果张量的大小为[1, 3, num_vertical_slices, num_horizontal_slices, 128, 128]。您可以对其进行重塑以合并切片,以获得面片列表,即大小为[1, 3, num_patches, 128, 128]

patches = patches.reshape(1, 3, -1, size, size)

相关问题 更多 >