我想从面片大小为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
这是我到目前为止找到的唯一方法。但它给了我这个错误
你的
x
的大小是[1, 3, height, width]
。调用x.unfold(1, size, stride)
尝试从尺寸为3的维度1创建大小为128的切片,因此该维度太小,无法创建任何切片您不希望创建跨维度1的切片,因为这些是图像的通道(在本例中为RGB),并且需要保持所有面片的状态。面片仅在图像的高度和宽度上创建
结果张量的大小为
[1, 3, num_vertical_slices, num_horizontal_slices, 128, 128]
。您可以对其进行重塑以合并切片,以获得面片列表,即大小为[1, 3, num_patches, 128, 128]
:相关问题 更多 >
编程相关推荐