我有一个名为input
的张量,尺寸为64x21x21。它是64个图像的小批量,每个21x21像素。我想将每个图像裁剪为11x11像素。所以我想要的输出张量的尺寸为64x11x11。
我想围绕不同的“中心像素”裁剪每个图像。中心像素由名为center
的二维长张量给出,尺寸为64x2。对于图像i,center[i][0]
给出行索引,center[i][1]
给出应该在输出中心的像素的列索引。我们可以假设中心像素始终距离边界至少5个像素。
有没有一种有效的方法在pytorch中执行此操作(在gpu上)?
更新:让我澄清一下center
张量是由深度神经网络形成的。它充当了“强硬注意机制”,使用强化学习术语。在我“裁剪”图像之后,该子图像成为另一个神经网络的输入。这就是我想在Pytorch中进行裁剪的原因:因为裁剪前后的操作都在Pytorch中。我想避免将任何东西从GPU传输回CPU。
答案 0 :(得分:2)
我在pytorch论坛上提出了问题,并从那里得到了一个答案。 grid_sample
函数应该完全解决问题。
https://discuss.pytorch.org/t/cropping-a-minibatch-of-images-each-image-a-bit-differently/12247
答案 1 :(得分:0)
torchvision包含包含RandomCrop
的转换,但如果您希望以特定方式裁剪图像,它似乎不适合您的用例。我认为PyTorch是一个深度学习框架,不适合裁剪图像。
相反,请查看使用this tutorial的pillow。您应该能够使用此实现您的用例。另请查看pillow-simd,它可以更快地完成某些操作。