首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里我可以找到一个直观的解释,PyTorch的Tensor.unfold()被用来获取图像补丁?

在哪里我可以找到一个直观的解释,PyTorch的Tensor.unfold()被用来获取图像补丁?
EN

Stack Overflow用户
提问于 2021-04-15 07:43:25
回答 2查看 263关注 0票数 1

最近,我发现一些代码从N形状的RGB图像(或其中一组)中提取(滑动窗口样式)许多正方形补丁,它们这样做如下:

代码语言:javascript
复制
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()方法“从维度dim中的自张量返回所有大小的size”,尽管我可能会尝试,但是我不能很好地直观地知道为什么堆叠两个.unfold()调用会产生正方形补丁。我知道当你在张量上使用unfold()一次时会发生什么。当你在两个不同的维度上连续两次调用它时,我不明白会发生什么。

我见过这种方法多次使用,总是没有一个很好的解释,为什么它工作(1,2),它使我疯狂。为什么空间维HW被设置为dims 1和2,而信道dim设置为3?为什么在dim 1上以同样的方式展开,然后在dim 2上通过patch_width补丁产生方形的patch_width

任何洞察力都会受到极大的赞赏,即使这只是我错过的一篇文章的链接。我已经在谷歌上搜索了一个多小时,但几乎没有什么成功。谢谢!

1

2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-15 15:46:15

我想,在您的问题中有两个不同的部分,第一部分是为什么需要permute,其次是两个unfold是如何组合生成方形图像切片的。

第一时刻是相当技术性的-- unfold位置在张量的新维中产生了切片,“插入在形状的末尾”。这里需要permute将其放置在通道或深度维度附近,以便稍后使用view将它们合并为自然的方式。

现在是第二部分。假设一副假想的卡片,每一张卡片都是一个图片通道。拿一张卡片,把它切在垂直的切片上,然后把它们放在另一张上面。拿第二张牌,做同样的事,把结果放在第一张牌上,用所有的牌来做。现在,重复这个过程,切切片角质层。在最后,你有更薄但更高的牌,在那里以前的牌会变成补丁的子甲板。

票数 1
EN

Stack Overflow用户

发布于 2021-04-15 18:53:07

让我们看一个简单的2d示例,看看为什么组合操作会产生“补丁”。

代码:

代码语言:javascript
复制
x = torch.tensor([[1, 2, 3, 4, 5],
                  [6, 7, 8, 9, 10],
                  [11,12,13,14,15]])
代码语言:javascript
复制
>>> x.unfold(1,2,1)
tensor([[[ 1,  2], [ 2,  3], [ 3,  4], [ 4,  5]],
        [[ 6,  7], [ 7,  8], [ 8,  9], [ 9, 10]],
        [[11, 12], [12, 13], [13, 14], [14, 15]]])
代码语言:javascript
复制
>>> x.unfold(1,2,1).unfold(0,2,1)
tensor([[[[ 1,  6],
          [ 2,  7]],

         [[ 2,  7],
          [ 3,  8]],

         [[ 3,  8],
          [ 4,  9]],

         [[ 4,  9],
          [ 5, 10]]],


        [[[ 6, 11],
          [ 7, 12]],

         [[ 7, 12],
          [ 8, 13]],

         [[ 8, 13],
          [ 9, 14]],

         [[ 9, 14],
          [10, 15]]]])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67104280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档