最近我遇到了一些代码,它从形状为 N x B x H x W 的 RGB 图像(或它们的集合)中提取(滑动窗口样式)许多方形补丁。他们这样做如下:
patch_width = 3
patches = image.permute(0,2,3,1).unfold(dim = 1, size = patch_width, stride = patch_width) \
.unfold(dim = 2, size = patch_width, stride = patch_width)
通过阅读文档,我了解到该方法“从维度中的自张量unfold()
返回所有大小的切片”,但是尽我所能,我只是无法很好地理解为什么堆叠两个调用会产生方形补丁。我知道当你在张量上使用一次时会发生什么。我不明白当你在两个不同的维度上连续调用它两次时会发生什么。size
dim
.unfold()
unfold()
我已经多次看到这种方法被使用过,但总是没有很好地解释它为什么起作用(1、2),这让我发疯了。为什么空间维度H
和W
置换为暗淡 1 和 2,而通道暗淡设置为 3?为什么在昏暗 1 上以相同的方式展开,然后在昏暗 2 上会产生正方形patch_width
的patch_width
补丁?
任何见解都将不胜感激,即使它只是我错过的文章的链接。我已经在谷歌上搜索了一个多小时,但收效甚微。谢谢!
[1] PyTorch 论坛帖子